热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

前后端如何使用Jenkins完成自动化部署?

作者:陈酒尽余欢链接:https:www.zhihu.comquestion419920057answer1459267023来源:知乎著作权归作者所有。商业转载请联系作者获得授权
作者:陈酒尽余欢
链接:https://www.zhihu.com/question/419920057/answer/1459267023
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Jenkins是一个非常方便强大的CI工具, 它利用插件提供了很多动态化的扩展, 是开发者能够***的使用各种方案部署项目到服务器上。但因为它是一个全英文文档的工具,对于国内的开发者而言,仍然存在一定的学习成本,但是只要了解其原理及各个流程需要使用哪些插件,成功的部署自己的项目到服务器上并不难。

下面通过六步完整的说明了从安装到使用的全流程。

养成习惯,点赞再看!

一 持续集成与部署工具Jenkins介绍

why? 为什么要用?

手动部署项目的过程是痛苦且乏味的, 而一个持续集成和部署的工具能够帮助你解放双手, 投入更多的精力到其它的事情上。

此外jenkins是开源的,是CI(Continuous integration)工具中公认的老大。到目前2020年, 地位仍是不可撼动,广泛应用于多种类型项目部署,自动化构建,测试和部署等功能。Jenkins虽然是用java编写的, 但却通过插件几乎集成了所有流行的编程语言编写的项目来进行集成和部署。

 

how? 怎么用?

首先,需要了解项目整个部署的流程,然后结合各个流程jenkins提供的插件仓库进行jenkins方面的实现。以一个使用git进行版本管理、Java语言编写的maven项目举例:

git仓库拉取代码 → maven编译、打包 → 通过ftp协议上传该包的服务器上 → 执行启动脚本运行项目

这个过程就会用到Jenkins提供的一些插件来进行功能实现, 上述流程就会用到插件Git Parameter(参数化检索代码)、Maven Integration(使用maven构建代码)以及Publish Over SSH(sftp传输文件并执行shell命令)来完成上述部署过程的实现。

 

what? 是什么?

那么Jenkins到底是什么?看看它的自我介绍吧!

 

前后端如何使用Jenkins完成自动化部署?

 

哈哈哈, 它的宣言是: 构建伟大,无所不能

它的介绍是:Jenkins是开源CI&CD软件领导者, 提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要。

 

既然这么6,那接下来就来全方位的系统了解一下Jenkins的使用,本篇博文会介绍jenkins从安装到前后端项目的部署以及权限分配和使用过程中的常见问题,从原理上基本上满足企业日常的需求,过程中也可以通过其他的一些插件进行优化和拓展,话不多说,整体开始。

本文前后端示例说明:

后端示例:

编程语言:Java

构建工具:Maven

代码管理:Git

前端示例:

项目类型:Vue项目

构建工具:Node

代码管理:Git

二 搭建Jenkins及工具配置

1. 安装Jenkins

● Docker安装Jenkins

docker run -itd \
-p 8080:8080 -p 50000:50000 \
--name jenkins --privileged=true \
-v /data/jenkins:/var/jenkins_home \
docker.io/jenkins/jenkins:lts

● war包方式安装Jenkins

  1. 下载war包:
    stable/latest/jenkins.war
  2. 启动:
    java -jar jenkins.war --httpPort=9090

● rpm安装Jenkins

1.下载jenkins的rpm包

table/

  1. 安装
    sudo rpm -ih jenkins-2.235.1-1.1.noarch.rpm
  2. 启动
    systemctl start jenkins

 

推荐使用Docker和RPM的方式安装!

安装完成后浏览器访问 http://localhost:8080 即可开始访问了,如下图那熟悉的老头儿:

 

前后端如何使用Jenkins完成自动化部署?

 

这个过程需要等待几分钟时间,这时候Jenkins会自动的做一些初始化工作,细心的小伙伴会发现在服务器jenkins_home文件夹下已经生成很多文件了。(请关注这个细节, 作者不会做一些无用功, 在插件加速步骤会用到)

 

前后端如何使用Jenkins完成自动化部署?

 

config.xml hudson.model.UpdateCenter.xml jenkins.install.UpgradeWizard.state jobs nodeMonitors.xml plugins secret.key secrets userContent war copy_reference_file.log identity.key.enc jenkins.telemetry.Correlator.xml logs nodes queue.xml.bak secret.key.not-so-secret updates users

完成后浏览器页面会让输入jenkins初始化的密码, 如下:

 

前后端如何使用Jenkins完成自动化部署?

 

进入服务器: cat /var/jenkins_home/secrets/initialAdminPassword ,复制粘贴继续即可 !

2. 配置插件加速

进入到该页面后, 这时候下载插件因为使用的是外网地址, 访问大概率会超时从而导致下载失败。

 

前后端如何使用Jenkins完成自动化部署?

 

如何解决?

1.进入到jenkins_home目录下, 查看是否有updates文件夹, 如果没有, 地址栏访问:

nager/advanced

2.查看Update Site 下check now 按钮下方是否飘红, 没飘红恭喜直接下一步即可, 飘红报错也没有关系,

将url地址切换为:

/jenkins/updates/update-center.json

之后 Submit, Check now即可!

(注: 切换为该地址后本质上并不能解决插件下载问题, 具体原因可参考: /article/details/105645080)

 

前后端如何使用Jenkins完成自动化部署?

 

3.进入服务器jenkins_home/updates目录下, 将default.json中的插件地址替换;

# 进入jenkins_home下的updates目录
​
cd ${jenkins_home}/updates
​
# 替换default.json中的插件地址
​
sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json

之后重启jenkins即可 !

docker方式: docker restart jenkins | rpm方式: systemctl restart jenkins

再下载插件, 速度百倍提升有木有! 访问: localhost:8080/, 如图:

 

前后端如何使用Jenkins完成自动化部署?

 

下载完之后进入配置admin用户和jenkins地址, 分别跳过和默认即可!

三 Jenkins部署后端项目

1. 后端部署原理及插件应用

原理:

  1. 首先, Jenkins从Gitlab或Github或Gitee等git仓库拉取项目代码;
  2. 对于Java项目根据类型需要使用Maven或Gradle对源码进行编译和打包;
  3. Jenkins将打包好的项目上传到要发布的服务器执行脚本进行启动。

Jenkins提供了插件仓库以便于对各种技术的集成与支持,包括对容器化技术Docker的支持,在Jenkins执行的每个环节都有多种方案进行替代和优化。本次结合后端常用的项目架构,目前在使用Jenkins的过程主要用到的是:

JDK8Maven3.6.3, Git, Shell等。

使用到的插件有:

  • Maven Integration
  • Publish Over SSH
  • Git Parameter

 

 

前后端如何使用Jenkins完成自动化部署?

 

在插件仓库下载完上述三个插件后, 就来开始正儿八经的部署后台项目吧!

1.配置SSH Server

 

前后端如何使用Jenkins完成自动化部署?

 

 

前后端如何使用Jenkins完成自动化部署?

 

2. 配置全局工具(jdk、maven、git等)

进入系统管理 → 全局工具配置

 

前后端如何使用Jenkins完成自动化部署?

 

 

前后端如何使用Jenkins完成自动化部署?

 

2.项目搭建详解

1.创建项目

 

前后端如何使用Jenkins完成自动化部署?

 

 

前后端如何使用Jenkins完成自动化部署?

 

点击ok,进入正题

 

前后端如何使用Jenkins完成自动化部署?

 

项目启动脚本restart.sh如下:

#!/bin/sh
file="test.jar"
pid=`ps -ef| grep $file | grep -v grep | awk '{print $2}'`
log="log.log"
time=$(date +%Y%m%d%H%M%S)
​
#cp $file $file".bak."$time
​
if [ -n $pid ]
then
        echo "kill "$file" success"
        kill -9 $pid
else
        echo "kill "$file" fail"
fi
​
​
nohup java -jar $file  > $log 2>&1 &

2.构建项目进行启动

 

前后端如何使用Jenkins完成自动化部署?

 

 

四 Jenkins部署前端项目

1. 前端部署原理及插件应用

原理:

1.首先, Jenkins从Gitlab或Github或Gitee等git仓库拉取项目代码;

2.对于前端项目使用node进行相关modules下载;

3.使用webpack对项目进行打包;

4.将生成的dist文件夹打包传输到要部署的远程服务器;

5.使用shell脚本或命令传输到nginx代理的文件夹中。

Jenkins在前端的项目部署中,主要承担的角色就是使用node进行install和build,之后把构建好的文件传输到远程服务器中,之后的工作就是由nginx进行代理和访问。本次演示目前前端在jenkins中主要用到的是:

Node.JS v12.16.2,Git,Shell等。

用到的插件和工具有:

  • Publish Over SSH : 以支持Jenkins可以远程发布文件到其他服务器的插件
  • Git Parameter : 以支持Jenkins可以拉取Git仓库不同分支上的代码的插件
  • Node.js : 以支持Node.js项目的持续集成, 默认在全局工具中配置路径

2. 前端项目搭建详解

 

前后端如何使用Jenkins完成自动化部署?

 

 

前后端如何使用Jenkins完成自动化部署?

 

 

前后端如何使用Jenkins完成自动化部署?

 

五 用户管理及权限分配

1.下载权限扩展插件并进行相关配置

❶ 进入Manage Jenkins → Manage Plugins 下载下述插件:

插件名称:Role-based Authorization Strategy

插件版本:3.0

❷ 进入Manage Jenkins → Configure Global Security中操作如下:

 

前后端如何使用Jenkins完成自动化部署?

 

❸进入Manage Jenkins → Manage and Assign Roles, 点击Manage Roles

 

前后端如何使用Jenkins完成自动化部署?

 

点击add添加角色;

admin: 具有所有权限

operator:具有查看、部署等权限

reader:具有查看权限

2.新建用户并分配权限

进入Manage Jenkins → Manage Users,然后创建用户

 

前后端如何使用Jenkins完成自动化部署?

 

进入Manage Jenkins → Manage and Assign Roles,然后点击Assign Roles分配之前创建的角色

 

前后端如何使用Jenkins完成自动化部署?

 

六 常见问题解析

1.使用docker安装的Jenkins版本老旧,插件升级失败或不兼容

 

前后端如何使用Jenkins完成自动化部署?

 

图中可以看到,截止现在2020年9月,原jenkins镜像已经两年没有更新了。安装jenkins建议大家使用jenkins:lts镜像。

 

2.安装成功后Jenkins无法下载插件,显示“实例已离线”

该问题可参考:/article/details/105645080

此外如果是docker搭建方式,可尝试下容器内能否ping通外网,看看是否是网络模式问题。

 

3.传输文件数为0, 文件传输失败

 

前后端如何使用Jenkins完成自动化部署?

 

首先检查Publish over ssh 编辑区中上传文件的目录操作是否正确, 其次对照workspace中要上传文件的目录是否正确, 该问题的产生基本上都是因为目录找不到对应文件造成的。

还有可能原因是由于环境与Publish over ssh 编辑区中label的名字不匹配造成的, 修改为与要启动的PROFILE一致即可。

 

4.执行shell脚本或命令提示Permission denied

该问题的产生有多种情况:

  • 情形1:当前用户不具有操作其它用户创建目录的权限, 解决方案:
    使用chown 和 chgrp 命令切换文件的用户和用户组。
  • 情形2:要操作的目录不具有读写或执行权限, 解决方案:
    chmod赋予文件夹或文件操作权限。
  • 情形3:无法杀掉其它用户启动的线程,解决方案:
    切换到root用户kill原来的进程,当前登录用户重新启动。

5.使用maven打包项目后找不到打包后的文件

首先检查项目中pom文件里面的标签名字是否与shell命令中的一致, 其次检查打包后文件的路径是否与shell命令中的一致。

-------------------------------------------------------
转载自:陈酒尽余欢
https://www.zhihu.com/question/419920057
-------------------------------------------------------

推荐阅读
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • Tomcat安装与配置教程及常见问题解决方法
    本文介绍了Tomcat的安装与配置教程,包括jdk版本的选择、域名解析、war文件的部署和访问、常见问题的解决方法等。其中涉及到的问题包括403问题、数据库连接问题、1130错误、2003错误、Java Runtime版本不兼容问题以及502错误等。最后还提到了项目的前后端连接代码的配置。通过本文的指导,读者可以顺利完成Tomcat的安装与配置,并解决常见的问题。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • JavaScript设计模式之策略模式(Strategy Pattern)的优势及应用
    本文介绍了JavaScript设计模式之策略模式(Strategy Pattern)的定义和优势,策略模式可以避免代码中的多重判断条件,体现了开放-封闭原则。同时,策略模式的应用可以使系统的算法重复利用,避免复制粘贴。然而,策略模式也会增加策略类的数量,违反最少知识原则,需要了解各种策略类才能更好地应用于业务中。本文还以员工年终奖的计算为例,说明了策略模式的应用场景和实现方式。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • 本文介绍了Linux Shell中括号和整数扩展的使用方法,包括命令组、命令替换、初始化数组以及算术表达式和逻辑判断的相关内容。括号中的命令将会在新开的子shell中顺序执行,括号中的变量不能被脚本余下的部分使用。命令替换可以用于将命令的标准输出作为另一个命令的输入。括号中的运算符和表达式符合C语言运算规则,可以用在整数扩展中进行算术计算和逻辑判断。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 网址:https:vue.docschina.orgv2guideforms.html表单input绑定基础用法可以通过使用v-model指令,在 ... [详细]
  • 如何实现JDK版本的切换功能,解决开发环境冲突问题
    本文介绍了在开发过程中遇到JDK版本冲突的情况,以及如何通过修改环境变量实现JDK版本的切换功能,解决开发环境冲突的问题。通过合理的切换环境,可以更好地进行项目开发。同时,提醒读者注意不仅限于1.7和1.8版本的转换,还要适应不同项目和个人开发习惯的需求。 ... [详细]
  • 2016 linux发行版排行_灵越7590 安装 linux (manjarognome)
    RT之前做了一次灵越7590黑苹果炒作业的文章,希望能够分享给更多不想折腾的人。kawauso:教你如何给灵越7590黑苹果抄作业​zhuanlan.z ... [详细]
  • Spring框架《一》简介
    Spring框架《一》1.Spring概述1.1简介1.2Spring模板二、IOC容器和Bean1.IOC和DI简介2.三种通过类型获取bean3.给bean的属性赋值3.1依赖 ... [详细]
author-avatar
Robin Lu
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有