别当工具人了,手摸手教会你 Jenkins !
![](https://filescdn.proginn.com/9fce13df85bf768d2568cc312d1977b1/d3c52e67086ffe58b1fe8c0d10524e52.webp)
本文主要介绍
Jenkins
如有需要,可以参考
如有帮助,不忘 点赞 ❥
“唉,每天提交完代码都得自己打包再部署到测试环境和开发环境,好麻烦啊!都快变成运维了”
“啊?哦!确实,每天打包部署确实都成为工具人了”
一段简白的对话快速地隐灭在办公室中,却引发了我的思考,“这么麻烦的过程肯定已经有了很好的解决方案,毕竟程序员是面向懒惰编程
,自己对 Jenkins 这个工具有所耳闻已经很久了,看来今天得对它下手
了”
说干就干,今天咱们就来求索一下 JenKins,看完你不妨也给你们项目整一个,给自己多增加点划水
的时间!
![](https://filescdn.proginn.com/6e53341b879f65f53273c52799ef6f55/904a6e2aed10ee543e19ccaa5f98cf31.webp)
读前须知: 本文较长,从安装到使用,一步步带你超神!
一、Jenkins 是什么
Jenkins是一个
开源软件
项目,是基于java
开发的一种持续集成
工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。
简单来说,它就是一个 持续集成 的工具
1. 持续集成
持续集成(Continuous Integration),简称 CI。频繁地将代码集成到主干之前,必须通过自动化测试,只要有一个测试用例失败,就不能集成。通过持续集成,团队可以快速从一个功能到另外一个功能。
![](https://filescdn.proginn.com/d3d8872dcea7af4aa2f374e892af8291/6a1920c9c82f67bca63fbc2461c32879.webp)
好处:
降低风险,由于持续集成不断去构建,编译和测试,可以很早发现问题 减少重复性的工作 持续部署,提供可部署单元包 持续交付可供使用的版本
2. Jenkins 持续集成
![](https://filescdn.proginn.com/4560a2366fef2b610ccb41e051f618e5/2372cedda4e161e390f35dd614598fc0.webp)
我们先通过这张图来看到 Jenkins 在其中起到的作用:
首先,开发人员将代码提交到 Git 仓库 然后 Jenkins 使用 Git 插件来拉取 Git 仓库的代码,然后配合 JDK、Maven 等软件完成代码编译,测试、审查、、测试和打包等工作 最后 Jenkins 将生成的 jar/war 推送到 测试/生产 服务器 ,供用户访问
整套步骤下来,作为开发人员我们只需要提交下代码,剩下的工作都交给了 Jenkins ,真是美滋滋,怎么没有早点上这个工具的车!
二、Jenkins 安装
磨刀不误砍柴工,没刀的情况下说再多都是虚的。我们就先来看下 Jenkins 是如何安装的吧!
1. 安装JDK
因为 Jenkins 是 java 写的,所以要运行起来必须要配置 java 运行环境。这里就不赘诉 JDK 的安装过程了
2. 下载安装 Jenkins
下载
我们可以进入下载页面选择我们要安装的版本:下载地址, 我们这里使用的版本是 :jenkins-2.190.3-1.1.noarch.rpm
安装
然后把下载好的 rpm 包上传到我们的服务器,通过 rpm -ivh jenkins-2.190.3-1.1.noarch.rpm
进行安装,然后编辑 etc
目录下的 jenkins 配置文件:vim /etc/sysconfig/jenkins
,需要改的地方如下(也可以选择不改):
JENKINS_USER="root"
JENKINS_PORT="8888"
启动
systemctl start jenkins
访问
通过浏览器访问 http://服务器IP:8888/
,看到以下页面说明启动成功了
![](https://filescdn.proginn.com/eeea09ec97b5387ee8c735b9cf1bfba0/76f84f4243b7884fb2ba0200a133dd0b.webp)
然后我们在服务器上从指定文件中获取密码,进行下一步。
这一步我们可以先跳过插件安装,因为Jenkins插件需要连接默认官网下载,速度非常慢:
![](https://filescdn.proginn.com/e158b797d3c64484d9c7139963f081d2/7512bba21f9003d7e6742b85c29cd8f1.webp)
然后我们添加一个管理员账号来管理:
![](https://filescdn.proginn.com/e3b45b7aa207c297e31378f57bba6644/e999685a7ee409b0bf75edff8e1712a2.webp)
看到以下页面就说明设置成功了:
![](https://filescdn.proginn.com/9017b17c2bf6467c00235313b4b54e4e/7f1e85d0dab9f0ce832fa45c4604f72c.webp)
三、Jenkins 使用
1. 插件加速
工欲善其事,必先利其器
贴心的小菜是不会让你遭受等待的痛苦的,首先我们进入 Jenkins -> Manage Jenkins -> Manage Plugins
,点击 install
![](https://filescdn.proginn.com/ad8c5507701f53062550193eced998e6/c3354c6a52f151b29378881a57de893d.webp)
然后我们在安装 Jenkins 的服务器上进入 /var/lib/jenkins/updates
目录,可以看到有个 default.json
文件,**第一步:**我们需要替换里面的部分字段,输入命令如下:
sudo sed -i 's#updates.jenkins.io/download/plugins#mirrors.tuna.tsinghua.edu.cn/jenkins/plugins#g' default.json && sudo sed -i 's#www.google.com#www.baidu.com#g' default.json
**第二步:**我们进入到 /var/lib/jenkins
目录,编辑 hudson.model.UpdateCenter.xm
,将里面的 https://updates.jenkins.io/update-center.json
修改为 http://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
最后一步: 输入以下命令进行重启 Jenkins :
systemctl restart jenkins
通过以上步骤,我们就可以愉快的安装插件了!
2. 用户管理
在 Jenkins 中我们也可以进行用户权限管理,这个时候我们需要借助插件 Role-based Authorization Strategy
首先安装 Role-based Authorization Strategy
插件
![](https://filescdn.proginn.com/ab40d72fcac57ead6dfc02440d91489d/a467693c022943419c4b8916edd97e95.webp)
开启全局安全配置
![](https://filescdn.proginn.com/8224c2799314f638dc7cb2021874f670/fccbb9bcade37bbb8a106825cfb23319.webp)
将授权策略切换为 "Role-Based Strategy"
![](https://filescdn.proginn.com/af08eaad0c08551cf3c8ca96fce4957b/78607c0bae9389b991fd29d2171b0051.webp)
创建用户
更改完授权策略,我们就可以来创建用户了,进入系统管理页面中的Manage Users
![](https://filescdn.proginn.com/2dd94c611b83a7ed9d5485ccb49826d7/80309a15c57c425af92ee1c8a27f7801.webp)
这里我们创建了两个用户,分别是 cbuc1
和 cbuc2
![](https://filescdn.proginn.com/ed8a251cd60564cb43f83892abc19829/1c623e78dffdbf15409c4ab6e4c8ed5a.webp)
创建角色
创建好用户,我们就可以来创建角色了,在系统管理页面进入 Manage and Assign Roles
![](https://filescdn.proginn.com/f612ee8cbd6bc0dd468d5708dd671407/61adb620be09b796c86fa50352d8a2ec.webp)
角色主要分为 Global roles(全局角色) 和 Item roles(项目角色)
Global roles(全局角色): 管理员等高级用户可以创建基于全局的角色
Item roles(项目角色): 针对某个或者某些项目的角色
![](https://filescdn.proginn.com/f612ee8cbd6bc0dd468d5708dd671407/61adb620be09b796c86fa50352d8a2ec.webp)
我们系统现在已经存在了两个用户,然后我们就可以给这两个用户绑定对应的角色
![](https://filescdn.proginn.com/98ae79dee1a064238124fd3f6a7e02cd/fe8b7874b33f1f2394530a447d8d1d3e.webp)
3. 凭证管理
什么是凭证呢?凭证 可以用来存储需要密文保护的数据库密码,GitLab 密码信息,Docker 私有仓库的登录密码。保存了这些信息后,Jenkins 就可以和这些第三方的应用进行交互。当然,这还是得借助 Jenkins 的插件!
1)安装
首先安装 Credentials Binding
插件
![](https://filescdn.proginn.com/00d80d8f08f74cae10f22974f9295cf4/3e7e221449144ff6232441d610cb22a2.webp)
安装好插件后,在系统首要的菜单栏中就会多了个 凭证 菜单
![](https://filescdn.proginn.com/335e99cdcbf0fa85805c1b49aec480bb/2293a42719e3f9175ab1f74ec5fd5adc.webp)
点击进去,我们可以看到可以添加的凭证有 5 种:
![](https://filescdn.proginn.com/3442c622b5e5ddae176059bd79d8f643/9e275afa6d8b091e96eea183e1e557d5.webp)
Username with password :用户名和密码 SSH Username with private key: 使用 SSH 用户和密钥 Secret file: 需要保密的文本文件,使用时 Jenkins 会将文件复制到一个临时目录中,再将文件路径设置到一个变量中,等构建结束后,所复制的 Secret file 就会被删除 Secret text: 需要保存的一个加密的文本串,如钉钉机器人或 GitHub 的 api token Certificate: 通过上传证书文件的方式
我们平时比较常用的类型为:Username with password
和 SSH Username with private key
2)Git 凭证管理
我们如果要使用 Jenkins 从 GitLab 拉取项目代码,我们就得使用凭证来验证。
安装 Git 插件
我们需要在 Jenkins 中安装 Git插件 来拉取项目代码
![](https://filescdn.proginn.com/929ae3c6953ba77604df89bd47e6facc/63cd75b0f11959683f03344a02ff9276.webp)
然后我们在服务器上也需要安装 Git 工具:
# 安装命令
yum install git -y
# 验证命令
git --version
1. 方式1:用户密码类型
我们可以使用 用户密码 登录后拉取项目代码,这个时候我们需要用到 凭证的 Username with password 类型:
![](https://filescdn.proginn.com/1d34d8e2b0bcb32a85dd04f758f77501/c41fbc759dce033eae6660c82effb284.webp)
![](https://filescdn.proginn.com/ef35a3d4080a04a58c90ce02afd02ca5/c74ca9335395f93c7323ff7d68886452.webp)
创建成功我们就可以测试是否可用,我们先创建一个 FreeStyle 项目
![](https://filescdn.proginn.com/1777de0071cef5ad31440075195bad28/a6fcba952c1144be71a3350784726f56.webp)
然后在 GitLab 中复制我们项目的 URL
![](https://filescdn.proginn.com/0e328f90af3e8089de71da40cf293806/032b8d8f4231ff5ed01cd1ddca36ab5d.webp)
在 Credentials 中选择我们刚刚创建的凭证,保存配置后,我们点击 Build Now 来构建项目:
![](https://filescdn.proginn.com/2d2873c503c967b40efc1e625355ee13/f88ca34692ab89d9059b9e3ee4fba9d7.webp)
这个时候在控制台可以看到输出
![](https://filescdn.proginn.com/83a9907fa865b56a5f8ae265f5ac1ecd/f0be042d8991c11499198fb78244870d.webp)
然后在进入服务器的 /var/lib/jenkins/workspace
目录中看到我们拉取的项目:
![](https://filescdn.proginn.com/45f41e6cf9e0645d965c9327433b8a90/56c5325e1e1f897ddb91669085356f4e.webp)
说明我们已经成功使用 用户密码 凭证模式拉取到 Git项目了
2. 方式2:SSH密钥类型
除了用账号密码方式来验证 Git ,我们还可以用 SSH密钥 来验证,步骤流程如下:
![](https://filescdn.proginn.com/ba919de2cfe41078423e15c2c9acb100/a329e2bf342d790a243dd0a71473e87a.webp)
从图上我们可以得知,第一步需要生成 公私钥,我们在 Jenkins服务器 上输入以下指令生成:
ssh-keygen -t rsa
输入指令后,一路回车,便可在 /root/.ssh/
目录下生成公私钥:
![](https://filescdn.proginn.com/5b098613fe4f6b6d4eef72ccc9b53a5d/3e060dc4ce6e61e81f596f2e9ea6f5b4.webp)
id_rsa:私钥文件 id_rsa.pub:公钥文件
然后我们把生成的公钥放在 GitLab 中,root账户登录->点击头像->Settings->SSH Keys
,复制 id_rsa.pub 中的内容,点击 "Add key"
![](https://filescdn.proginn.com/b53f07aed07f380505811f31954efdef/bf5cc8b3b3446c44e626a02e15089a78.webp)
然后我们再回到 Jenkins 系统页面中添加凭证,选择 SSH Username with private key
,把刚刚生成的私有文件内容复制过来
![](https://filescdn.proginn.com/683e8a1d20b936fc0660431e0c9be137/96da7db3e1ce88f44881841023f557bb.webp)
添加后就会生成一条凭证
![](https://filescdn.proginn.com/734af376d802e6fac493fabebe58fa2d/79b79c598a520731e4f3a4dfb2970df4.webp)
创建成功我们就可以测试是否可用,我们先创建一个 FreeStyle 项目
![](https://filescdn.proginn.com/018d0a7fb0571c4314412c17b51a5fad/9f667bc074c12777cc81df063df0a30c.webp)
然后在 GitLab 中复制我们项目的 URL
![](https://filescdn.proginn.com/bcdc89212a3fd0626730053c136d1bb2/33565e542abeacdcec07152c07118e03.webp)
在 Credentials 中选择我们刚刚创建的凭证,保存配置后,我们点击 Build Now 来构建项目:
![](https://filescdn.proginn.com/435040c11078338da607dba1199b6f40/c13b37a95aaca3c37583d4822331383c.webp)
这个时候在控制台可以看到输出
![](https://filescdn.proginn.com/ea6eec76af80519691682267033fa8ba/7e1d3ca05c7441f7d52120e563988379.webp)
然后在进入服务器的 /var/lib/jenkins/workspace
目录中看到我们拉取的项目:
![](https://filescdn.proginn.com/4394a593e4f8882d27751e6bf0df2fd6/d871c9399dfda40031db0493e78e84ac.webp)
说明我们已经成功使用 SSH Username with private key 凭证模式拉取到 Git项目了
4. 项目管理
1)Maven 安装
我们现在开发中的项目大部分都是 Maven 项目,使用 Maven 项目,我们就需要进行 依赖管理,因此我们应当在服务器上安装 Maven 来下载项目依赖。
安装 Maven
我们可以从 Maven 官网上下载压缩包,然后上传到服务器上进行解压
tar -xzf apache-maven-3.6.0-bin.tar.gz
配置环境变量
vim /etc/profile
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export MAVEN_HOME=/home/maven/apache-maven-3.6.2
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin
编辑后使配置文件生效:
source /etc/profile
验证:
mvn -v
然后设置 Maven 的 settings.xml
# 创建本地仓库目录
mkdir /data/localRepo
vim /home/maven/apache-maven-3.6.2/conf/settings.xml
将本地仓库改为:/root/repo/
添加阿里云私服地址:alimaven aliyun maven http://maven.aliyun.com/nexus/content/groups/public/ central
Jenkins配置
在 Jenkins 我们也需要配置 JDK 和 Maven 的关联.
进入 Jenkins -> Global Tool Configuration -> JDK
![](https://filescdn.proginn.com/256aba7b9c2cb079c9aa425b35a7f16b/1a8dad675b2d3baec1627ec9c6d56415.webp)
进入 Jenkins -> Global Tool Configuration -> Maven
![](https://filescdn.proginn.com/478386ce9e3c65fd222271827f798cd3/a4a098f06ddfdde6206b1bf353be5d66.webp)
添加全局变量
进入Manage Jenkins->Configure System->Global Properties
,添加三个全局变量
JAVA_HOME、M2_HOME、PATH+EXTRA
![](https://filescdn.proginn.com/1fd2bc284e9f469b774daa2a98f50147/94da4ddbb2d2c3cb4efbc357d8069420.webp)
然后我们进入项目中点击 configure
![](https://filescdn.proginn.com/cad64e058b1338ffdce0bb708c381972/267e6aabec7904b2b53f6c015aa5bb2f.webp)
然后添加 shell 执行脚本:
![](https://filescdn.proginn.com/8fe0db88971ebd321009e8665fae6606/d56ecd916dc375f91afd5c9c09e40eda.webp)
保存后重新构建,查看控制台,可以看到 mvn 构建成功:
![](https://filescdn.proginn.com/038ee6a10ef6756d02817fbcbdb0099d/94c7efd8cacc2ef3b6332aff7de68e45.webp)
2)war 包部署
如果我们的项目是打成 war 包的形式,那么我们需要借助 tomcat 容器来运行,那么我们首先便是要先安装一个 tomcat
Tomcat 安装
我们将事先下载好的 Tomcat 安装包上传到服务器上,通过 tar -xzf apache-tomcat-8.5.47.tar.gz
解压,然后运行 bin
目录下的 start.sh
启动 Tomcat ,看到以下结果则说明启动成功:
![](https://filescdn.proginn.com/a9eb89c609504b3b696b7892882a3678/37dfe95dcada51edd29ca4bb12be6c74.webp)
下一步我们需要配置Tomcat用户角色权限,默认情况下Tomcat是没有配置用户角色权限的
首先我们需要修改 tomcat/conf/tomcat-users.xml
文件:
![](https://filescdn.proginn.com/40faaf4449b29e1d270fa272bdf2c0d6/71dcaa3c30fccc147028e9c0e8c0daea.webp)
(复制)内容如下:
<role rolename="tomcat"/>
<role rolename="role1"/>
<role rolename="manager-script"/>
<role rolename="manager-gui"/>
<role rolename="manager-status"/>
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<user username="tomcat" password="tomcat" roles="manager-gui,manager-script,tomcat,admin-gui,admin-script"/>
然后修改 /tomcat/webapps/manager/META-INF/context.xml
文件,将以下内容注释:
![](https://filescdn.proginn.com/5d24f24f0dc196041bb66c80a642ae8d/674b691cb4bb5e1e2d082d195944ba68.webp)
然后进入tomcat 页面,点击进入:
![](https://filescdn.proginn.com/da35b0b18cb8239ad374e8241ff7902e/75e40fbf812a3460eb32d958f5910a5d.webp)
账号密码都是 tomcat
![](https://filescdn.proginn.com/61142090a900236e75d2fda87c769f1c/8be8749e9000290f3d4e2f548a569ade.webp)
成功页面如下:
![](https://filescdn.proginn.com/e790ff329bf6c827bcf6301082972eb6/5819c43e6fd13ed8de4e087320e94610.webp)
这样子我们就完成了 tomcat 的安装,然后接下来就可以进行部署了
Tomcat 部署
在 jenkins 中安装 Deploy to container
插件添加 Tomcat 凭证
![](https://filescdn.proginn.com/1d99e367ad4425e40fb1973f3666856b/a51f931d237c8fd697ac2fc288d8f1c6.webp)
构建配置
在项目的 configure 中配置
![](https://filescdn.proginn.com/db9a189138f2d99363389a1f49b9de13/01c7d92f62b504bcb6d25909a0e553a9.webp)
然后点击构建,查看控制台输出:
![](https://filescdn.proginn.com/62672ccf9d7c2608ca238eab86e7685b/6b93944f3e72bf7502df48ec85d364ae.webp)
显示已经部署成功,然后访问项目页面,可以看到 war 包项目部署成功:
![](https://filescdn.proginn.com/b102b4cd527ca2bbddff94e281e09e09/0d31d5cb7af61ee973a5947d3c8773ef.webp)
3)jar 包部署
上面说完了 war 包项目是如何部署的,但是我们现在项目用到比较多的还是 SpringBoot ,这个时候打出来的是 jar 类型,但是 SpringBoot 里面内置了 tomcat 容器,这样子我们就不需要借助外部 tomcat 容器的使用了。
![](https://filescdn.proginn.com/13599498a87801aa9f306cba2532e308/e03f48729828deab9fe70a42231293a5.webp)
首先我们在 Jenkins 中下载 Maven 插件,这个时候新建项目的时候会有个 Maven 项目的选项
![](https://filescdn.proginn.com/93cf63614fc500d4a7d5a95b42da610a/8ac839f07342d6b059afe5918e51c541.webp)
然后在项目的 configure 中作如下配置:
![](https://filescdn.proginn.com/5d59b9547f1be3267d703080f83d96df/3a9d083ee5481aaddee678f3781f1a1d.webp)
Repository URL:库地址Credentials:凭证Branch Specifier (blank for ‘any’):分支
![](https://filescdn.proginn.com/b4dba2aac6fcbf7ae8324606b79db12c/d1d9129e8b2e6b38289b3031c3d99ec5.webp)
Run only if build succeeds:在构建成功时执行后续步骤Add post-build step:添加构建后的步骤Send files or execute commands over SSH:通过ssh发送文件或执行命令
安装 Publish Over SSH
插件
因为我们要部署的服务器与 Jenkins 不在同一个服务器上,所以我们需要这个插件来远程部署
安装好插件后我们需要先配置远程服务器,在 Jenkins 服务器上输入 ssh-copy-id 远程服务器IP
将公钥拷贝到远程服务器上,然后在 Jenkins 系统配置中添加服务器信息,如下:
![](https://filescdn.proginn.com/7e75f5807632601ce7f323c0d32c4786/1b409ba08a1868d2eb51f4b8c2d50b31.webp)
完成以上步骤后,我们就可以回到项目的 configure 中添加我们刚刚配置的服务器信息:
![](https://filescdn.proginn.com/1f72a5fc59bac0cfcc1db45deb3f4dec/ce264205f28e1f36ef4af33dc9e94d2f.webp)
Name:SSH Servers中配置的服务器Source files:源文件Remove prefix:删除前缀Remote directory:上传到服务器的目录Exec command:执行的脚本
完成以上步骤,我们就可以愉快的点击 Build Now 了!
![](https://filescdn.proginn.com/60900193ed20030741f053df48b37156/e77d08328bcc5c3cdae6f22dd61bbc74.webp)
4)流水线项目
Jenkins 中自动构建项目的类型有很多,常用的有以下三种:
自由风格软件项目(FreeStyle Project)
Maven 项目(Maven Project)
流水线项目(Pipeline Project)
每种类型的构建其实都可以完成一样的构建过程与结果,只是在操作方式、灵活度等方面有所区别,其中流水线类型灵活度比较高,其他两种类型我们在上面的例子中都已经尝试过了,下面我们就来介绍如何构建流水线项目。
1. 概念
Pipeline 就是一套运行在 Jenkins 上的工作流框架,将原来独立运行与单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排和可视化工作
2. 优点
代码:Pipeline 以代码的形式实现,通常被检入源代码控制,使团队能够编辑,审查和迭代其传送流程。 持久性: 无论是计划内的还是计划外的服务器重启,Pipeline 都是可恢复的 可停止: Pipeline 可接收交互式输入,以确定是否继续执行 Pipeline 多功能: Pipeline 支持现实世界中复杂的持续交付要求,它支持 fork/join 、循环执行、并行执行任务的功能 可扩展: Pipeline 插件支持其 DSL 的自定义扩展,以及与其他插件集成的多个选项
3. 创建
创建 Pipeline 项目之前我们需要安装 Pipeline 插件:
![](https://filescdn.proginn.com/26999b65fabf45a232cb6c4cd813ee0e/ab2bca2faf1fe9c4ed6efaa23ec54f2e.webp)
然后在创建项目的时候便会多了 Pipeline 类型:
![](https://filescdn.proginn.com/e1b89a785bf3fa090f772293bd348353/93304a1eea7d2fa3eefbe9209d9c6673.webp)
选择好项目类型之后我们就可以在项目中的 configure 进行配置了:
首先老样子配置好 git 地址,跟上面一样,这里不多作赘诉 然后配置 Pipeline 脚本
Pipeline 项目是统一通过 Pipeline 脚本来管理,这样也更好的提高灵活性
Hello World
模板:
pipeline {
agent any
stages {
stage('Hello') {
steps {
echo 'Hello World'
}
}
}
}
stages: 代表整个流水线的所有执行阶段,通常 stages 只有1个,里面包含多个 stage
stage: 代表一个阶段内需要执行的逻辑,steps 里面是 shell 脚本,git 拉取代码,ssh 远程发布等任意内容
声明式 Pipeline
模板:
pipeline {
agent any
stages {
stage('拉取代码') {
steps {
echo '拉取代码'
}
}
stage('编译构建') {
steps {
echo '编译构建'
}
}
stage('项目部署') {
steps {
echo '项目部署'
}
}
}
}
你也完全不用担心不会书写 Pipeline 脚本,我们可以点击 [Pipeline Syntax]
跳转到 Pipeline 代码生成页面
![](https://filescdn.proginn.com/6f88c1790fb030fc77cebd7d92d19d52/d10fe6aa211e2fd64b1bf6081d432779.webp)
![](https://filescdn.proginn.com/aeeb6813af800d7966e19b19023563e6/9f81be1beb5f2c572c71568ae7e7c24f.webp)
书写好脚本后点击构建,可以看到整个构建过程:
![](https://filescdn.proginn.com/fda568b368c6b723b64f31015d9c5b02/4207dbc0970e126ea9abf7ac085b38df.webp)
如果我们需要部署到不同环境,比如生产环境和开发环境,我们还可以在项目的 configure 中进行配置:
首先需要安装 Extended Choice Parameter 插件 然后在配置中添加 Extended Choice Parameter 参数
![](https://filescdn.proginn.com/c67e52048635004d2e5299ae448896e4/1c9aba1deb6a9602046e9ec96dc2eb96.webp)
完成以上配置后,点击保存,这个时候我们就可以在构建的时候选择需要部署的服务器了
![](https://filescdn.proginn.com/84df5e2f150ab1fbec4616429dd1b34e/19720346271e300c5e21da7c438b46a5.webp)
然后我们就可以从 Pipeline 脚本中读取我们选择的参数,贴上该项目的构建脚本,如下:
![](https://filescdn.proginn.com/b97e7adf6a08a1ea09011bc3dd0ea281/499eb84cffa9ad74dc77bf2e564bb872.webp)
node {
//git凭证ID
def git_auth = "7fdb3fa3-74eb-4862-b36f-c03701f71250"
//git的url地址
def git_url = "git@192.168.100.131:cbuc_group/cbuc_web.git"
//获取当前选择的服务器名称
def selectedServers = "${publish_server}".split(",")
stage('开始拉取代码') {
checkout([$class: 'GitSCM', branches: [[name: '*/v3.0']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: git_auth, url: git_url]]])
}
stage('开始打包') {
sh "mvn -Dmaven.test.skip=true clean package"
}
stage('开始远程部署') {
//遍历所有服务器,分别部署
for(int j=0;j //获取当前遍历的服务器名称
def currentServerName = selectedServers[j]
//生产环境部署目录
def pro_address = "/home/pro/java"
//开发环境部署目录
def dev_address = "/home/dev/java"
//根据不同的profile来部署服务器
if(currentServerName=="pro"){
sshPublisher(publishers: [sshPublisherDesc(configName: 'pro_server', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: 'sh build.sh', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: pro_address, remoteDirectorySDF: false, removePrefix: 'target', sourceFiles: 'target/cbuc_web-0.0.1-SNAPSHOT.jar')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
}else if(currentServerName=="dev"){
sshPublisher(publishers: [sshPublisherDesc(configName: 'dev_server', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "sh build.sh", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: dev_address, remoteDirectorySDF: false, removePrefix: 'target', sourceFiles: 'target/cbuc_web-0.0.1-SNAPSHOT.jar')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
}
}
}
}
还有一种情况就是如果部署 Jenkins 的服务器宕机了,这个时候就会丢失 Pipeline 脚本文件,重新书写是一件很麻烦的事情,那么我们就可以将脚本文件放到我们的项目的根目录下,然后在 configure 中配置 Pipeline 脚本文件的位置:
![](https://filescdn.proginn.com/538cf0f7781d09227e2da1472f828a9d/7ad6ce965f4a2b2903a400148711d179.webp)
![](https://filescdn.proginn.com/757da4f8585b149aab928406894e9c15/c134efff5b0863a5c71b4859d128147f.webp)
然后我们点击构建,可以看到结果也是成功的:
![](https://filescdn.proginn.com/adb7e7935108dea306afebdfba6ffacf/9767c262cd6dd0c3ad622f9b2e54e88c.webp)
5)构建触发器
上面我们讲完了几种项目的构建方式,其中都是通过手动点击构建进行构建的,我们也可以通过触发器来构建
![](https://filescdn.proginn.com/676639024ce84f6bc049e650f5579f59/41ed7e34977f14d08f572a18ae63e215.webp)
常用的有:
1. Build After Other Projects Are Built
![](https://filescdn.proginn.com/aeb855ef1a3ab625d763dbe02ea26e3e/4be966c747af3b81ce2fed885c8edc91.webp)
其他工程构建后触发。在选项中填写我们关注的项目,其中也支持3个选择以供选择:
Trigger only if build is stable: 仅在项目稳定构建时执行
Trigger even if the build is unstable: 即使项目构建不稳定也执行
Trigger even if the build fails: 即使项目构建失败也执行
2. Build Periodically
![](https://filescdn.proginn.com/21823a12575bf45bc96f38f9cd79b609/0edff9d11628604092e7af39ec571cdc.webp)
定时构建。语法类型如 cron 表达式,定时字符串从左往右分别为:分 时 日 月 周
3. Poll SCM
轮询 SCM。指定时间扫描本地代码仓库的代码是否有变更,如果代码有变更就触发项目构建。
![](https://filescdn.proginn.com/85eb4de6f358a75834385ff1aafe3532/9c942c11d6a4b6bb3da32826167cfe49.webp)
4. Trigger builds remotely
![](https://filescdn.proginn.com/a2b82c654bca5ca5054b509f57f00ca9/e51076436785033999d1bd04d58ced93.webp)
远程触发构建。通过使用我们定义的密钥,然后访问构建地址:http://192.168.100.131:8888/job/test01/build?token=123123
5. 自动触发构建
刚才我们看到在Jenkins的内置构建触发器中,轮询SCM可以实现Gitlab代码更新,项目自动构建,但是该方案的性能不佳。那有没有更好的方案呢?有的。就是利用Gitlab的webhook实现代码push到仓库,立即触发项目自动构建。
![](https://filescdn.proginn.com/f01927314b8f8c186eb4cf7d05165c02/0bee07f38c11f867a0079883f676413a.webp)
完成自动触发构建我们需要在 Jenkins 安装插件:GitLab Hook
和 GitLab
![](https://filescdn.proginn.com/065a58016bfce91f61c64a0c733e3c67/d825ace7acc4afc8d45186ef87c3073c.webp)
然后我们在 Build Trigger 中就可以看到多了一个选项:
![](https://filescdn.proginn.com/d1e98671dea9d4aa70389a48e11016b6/d5b30cc5e386f9178d2ef20cfdacd087.webp)
复制这串 WebHook 地址,跟着到 GitLab 页面进行设置:
路径步骤:Admin Area -> Settings -> Network
![](https://filescdn.proginn.com/cdba7cf41df72578a494c304bb90e602/5fdfcee95371ede655d788833db0cdfb.webp)
然后我们在对应的项目中进行设置:
![](https://filescdn.proginn.com/fee35ee45f141b92a6816a21db6fc875/f3ae1c344335c16a19742528b5cbc212.webp)
最后再回到 Jenkins 页面中做以下配置:Manage Jenkins->Configure System
![](https://filescdn.proginn.com/0cf62b247510cef42e90e137a0ee7db6/b2b2082ccd99668ffb213b690665785e.webp)
做完以上配置,我们就可以愉快的代码进行自动触发构建了!
END
这篇文章较长,都是满满的干货,从安装到使用,一步步带你入 运维
的坑,学完这篇快给你的项目用上吧!
![](https://filescdn.proginn.com/3acf3806bbbb9b4c24126a5cfd0dd95f/0515df99f573c75c96cea1e97a775001.webp)
今天的你多努力一点,明天的你就能少说一句求人的话!