jenkins介绍部署及三种构建⽅式配置
1.前⾔
1.1.jenkins介绍
jenkins是基于java开发的⼀种持续集成⼯具,⽤于监控持续重复的⼯作,功能包括。
1、持续的软件版本发布/测试
2、监控外部调⽤执⾏项⽬
Jenkins其实很早之前就有了,最近⽕起来的原因是,⼤家都在关注devops,关注如何来做持续集成,持续交付,如何来做CI/CD。Jenkins作为持续集成的⼯具,他其实只是⼀个平台或者是⼀个⼤的框架,它的⼯作完全就是依靠插件,也就是说你想使⽤什么功能,你就到什么样的插件。
1.2.jenkins好处
1、我在⼯作中部署jenkins的最⼤好处就是每次在开发、测试环境代码,都⽆须运维部署,⽽是相关的开发⼈员,测试⼈员登录jenkins传⼊需要部署的tag即可,整个部署过
程⽆须运维参与,解放运维劳动⼒。
2、安卓,IOS⾃动打包:虽然打包和运维关系不⼤,但是运维实现⾃动打包,使得产品同学,运营和测试同学可以每⽇验证产品开发进度以及及时反馈开发功能的⽅向是否正
确,对公司贡献还是不⼩的。
1.3.我的jenkins实践
由于我们在使⽤jenkins之前,有⾃动化部署的shell脚本和上线流程,使⽤jenkins也就是让开发,测试⼈员可以通过⼀个web界⾯来执⾏脚本,实现部署。
我们公司⼀个产品线有四个环境,开发环境,测试环境,预上线环境,⽣产环境。除了⽣产环境之外都是通过jenkins来部署代码。
我们在⽣产实践中,jenkins使⽤到了下⾯三种部署⽅式:
jenkins触发式构建:⽤于开发环境部署,开发⼈员push代码或者合并代码到gitlab项⽬的master分⽀,jenkins就部署代码到对应服务器。
jenkins参数化构建:⽤于测试环境预上线环境部署,开发push代码或者合并代码到gitlab项⽬的master分⽀之后,并不会部署代码,⽽是需要登录到jenkins的web界⾯,点击构建按钮,传⼊对应的参数(⽐如参数需要构建的tag,需要部署的分⽀)然后才会部署。
jenkins定时构建:⽤于APP⾃动打包,定时构建是在参数化构建的基础上添加的,开发⼈员可以登录jenkins⼿动传⼊tag进⾏打包,如果不⼿动打包,那么jenkins就每天凌晨从gitlab拉取最新的APP代码打包。
补充⼀下:jenkins不光可以⽤来部署代码,还可以这么玩(虽然我没有这么⼲过,但是你有兴趣可以试试):
1、各种服务的备份也可以放到jenkins上⾯,每天使⽤jenkins定时备份,还可以在jenkins看每天备份的输出信息。
2、各种开发需要你的⼯作,⽐如同步⽣产数据库到开发环境,这个也可以放到jenkins上⾯,开发每次需要同步,就登录jenkins到数据库同步的job,点击构建,
就⾃动同步了。
1.4.jenkins使⽤前提
(1)得到领导的⽀持,我在公司推动jenkins部署APP⾃动打包,可以说是前段,后端,移动端,测试,产品等⼈员都需要沟通,这种情况下得到领导的⽀持在推动好处还是⼤⼤的。
(2)你们公司的代码需要⼀个分⽀管理规范,代码没有⼀个好的分⽀管理规范,⾃动部署是玩不了的。可以参考看看那种⽅式适合你们公司。
(3)使⽤jenkins之前,你需要有通过shell实现⾃动化部署代码的成功经验。
(4)持续集成最好有⾃动化测试,没有也⾏,但是最好让开发⼈员提供⼀些api的监控脚本,每次构建之后验证部署是否正常。
2.jenkins部署
2.1.下⾯内容介绍
(1)jenkins的安装配置
(2)jenkins插件⾃动/⼿动安装
(3)jenkins触发式构建配置
(4)jenkins参数化构建配置
(5)jenkins定时构建配置
(6)jenkins⽤户权限配置
2.2.环境介绍
操作系统:Centos 7.2
jenkins版本:2.33
gitlab版本:8.13.6
两台服务器:
192.168.100.10:jenkins Server
192.168.100.11 :gitlab Server
2.3.jenkins安装
(1)jenkins是java编写的,所以需要先安装jdk,这⾥使⽤yum安装。
yum -y install java-1.8.0 java-devel-1.8.0
jenkins还需要从gitlab拉取代码,所以我们需要安装git命令⾏客户端
[root@node1 ~]# yum -y install git
(2)安装jenkins
cd /pos.d/
wget pkg.jenkins.io/po
rpm --import pkg.jenkins.io/redhat/jenkins.io.key
yum install -y jenkins
systemctl start jenkins
ssh工具安卓下载(3)访问jenkins
在浏览器打开输⼊IP:8080/访问jenkins。
为了安全考虑,需要解锁jenkins,把/var/lib/jenkins/secrets/initialAdminPassword⽂件内容复制到administrator password下⽅即可。
[root@Jenkins ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
2862d2ffc9aa40e1b80039e8ad9810ea
(4)选择安装的插件:只需要安装gitlab plugin,git plugin,还有ssh plugin插件即可,其他插件⽆须安装。
gitlab 和 git插件:我们的代码都放在gitlab上⾯,这两个插件⽤来做源码管理。
ssh插件:需要使⽤jenkins来执⾏shell命令。
创建admin⽤户:按照提⽰填写即可
密码创建完成之后就可以登录jenkins了。
3.插件安装
如果在安装jenkins的时候没有安装相关插件,可以按照如下⽅式安装(已经安装,则不需要)
1、安装gitlab插件,直接在系统管理>插件管理中搜索gitlab相关插件安装即可。
2、shell插件:还是刚才的位置搜索ssh 选择ssh plugin插件安装即可。
3.1.⼿动下载jenkins插件
插件下载地址:/download/plugins/
如果有插件⼀直安装失败的情况,可以从jenkins官⽹下载插件,然后导⼊到jenkins。
⽰例:我从官⽅下载gitlab-plugin插件到本地,然后导⼊到jenkins中。
在jenkins插件管理->⾼级选择上传插件进⾏安装。
4.Jenkins密钥配置
(1)jenkins⽣成密钥对
设置jenkins的shell终端为/bin/bash
[root@node1 ~]# grep jenkins /etc/passwd
jenkins:x:993:990:Jenkins Continuous Integration Server:/var/lib/jenkins:/bin/bash
登录到jenkins⽤户⽣成密钥
[root@node1 ~]# su - jenkins
bash-4.2$ ssh-keygen -t rsa
bash-4.2$ cat .ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCwIdUk3+V8aL2/oMfvwCxp5AiyctL4bnYFnsKOcQz8w/MuAehy9/EEeT0HNQCSs0NQ3veFurWlKUB4tntNA7bMcZS/UWBSXh2uAJQCMcXbIWfdngaQwVVP+s5WvDbtL5Jk6mQch22aIIw4JaJh 把这个密钥添加到gitlab还有jenkins服务器的root⽤户
为什么把jenkins公钥添加到root⽤户?
因为jenkins执⾏部署操作,会出现很多权限问题,⼀个⼀个解决⽐较⿇烦(⽽且不同项⽬权限问题都不同),就算sudo授权也是需要授予最少10⼏条命令的权限,⽽
且不能保证以后不会出现新的命令,所以我直接让jenkins⽤户通过root⽅式执⾏部署操作,简单粗暴。
(1)添加公钥到gitlab服务器,⽤来clone代码
添加完成之后从gitlab服务器clone下⾃⼰的⼯程,会在.ssh/known_hosts添加gitlab服务器记录
-bash-4.2$ git clone git@192.168.100.11:root/jenkins_test.git
(2)添加公钥到jenkins服务器root⽤户,⽤来执⾏部署脚本
-bash-4.2$ ssh-copy-id -i .ssh/id_rsa.pub root@192.168.100.10
root@192.168.100.10's password:
5.jenkins触发式构建
(1)准备⼀个测试脚本,看开发如何提交代码就执⾏这个构建操作。
[root@node1 ~]# cat /shell/deploy/test/jenkins_trigger.sh
#!/bin/bash
echo "部署脚本被执⾏"
[root@node1 ~]# chmod +x /shell/deploy/test/jenkins_trigger.sh
注意:如果是⽣产配置,直接把这个脚本换成对应项⽬的上线脚本即可,jenkins配置⽆须修改。
(2)创建⼀个触发构建的项⽬,选择⾃由软件风格即可
(3)源码管理选择git,然后只需要在repository url中输⼊git仓库地址即可。
(4)构建,选择execute shell,执⾏部署脚本即可
(5)触发器配置:即gitlab有提交操作,则⾃动部署,这⾥只需要设置⼀个认证的token即可,gitlab调⽤触发器,需要使⽤ JENKINS_URL/job/new_cms/build?
token=TOKEN_NAME即可
(6)在系统管理–>⽤户管理–>查看⽤户id和token,需要把⽤户id和API Token加⼊触发器中,做⽤户验证
根据触发器验证令牌和⽤户id+token会⽣成⼀个下⾯的url,只需要访问这个URL地址jenkins就会⾃动部
署对应项⽬的代码。
admin:984c9edf027e750f0587808fab0c3f9b@192.168.100.10:8080/job/jenkins_trigger/build?token=hehe
(7)gitlab配置webhooks,每次提交代码就访问这个url,执⾏构建
URL这⾥输⼊上⾯上⾯⽤户ID+API token+job token⽣成的URL地址即可。触发⼯作选择,push event,merge request event即可。
(8)在jenkins全局在jenkins全局安全设置中取消勾选“防⽌跨站点请求伪造,不然jenkins会认为gitlab的请求不合法。
(9)添加完成测试:点击test模拟提交操作,看看是否会执⾏⾃动构建
如果执⾏成功会返回如下显⽰,说明执⾏钩⼦成功
Jenkins查看,可以看到构建也是成功的。
6.jenkins参数化构建
(1)准备⼀个测试的脚本
#!/bin/bash
git_pro(){
echo "拉取$1代码"
}
git_pro $1
(2)创建⼀个参数化构建的项⽬
(3)选择构建的参数:这⾥设置⼀个tag参数,就是每次执⾏job之前都需要传⼊这个tag
(4)设置执⾏部署的脚本
(5)选择创建的job执⾏构建
Tag处传⼊需要部署的tag即可
构建完成查看构建的结果
7.jenkins定时构建
定时构建⼀般⽤在安卓,ios打包,每天凌晨会拉取安卓,ios进⾏编译打包,并⾃动推送到共享。
⽰例:在上⾯的参数化构建⽰例上添加如下触发器,就是每天凌晨1:30分⾃动执⾏安卓或ios打包脚本,上⾯的参数化构建默认值是master就是每天从代码仓库的master分⽀拉取最新的代码打包。
8.Jenkins⽤户权限设置
现在各种job已经设置好了,但是如果开发测试⼈员需要部署⼀个tag到服务器进⾏测试,那么就需要登录jenkins,这个时候就需要给开发和测试⼈员创建⼀个可以执⾏job的⽤户,⽅法如下。
8.1.新创建⼀个⽤户
系统管理–>⽤户管理–>新建⽤户,按照提⽰填⼊信息即可
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论