快捷搜索:  汽车  科技

jenkins自动化部署代码更新(该进化了Jenkins持续集成工具)

jenkins自动化部署代码更新(该进化了Jenkins持续集成工具)1.3.我的Jenkins实践 2、安卓,IOS自动打包:虽然打包和运维关系不大,但是运维实现自动打包,使得产品同学,运营和测试同学可以每日验证产品开发进度以及及时反馈开发功能的方向是否正确,对公司贡献还是不小的。 Jenkins其实很早之前就有了,最近火起来的原因是,大家都在关注devops,关注如何来做持续集成,持续交付,如何来做CI/CD。Jenkins作为持续集成的工具,他其实只是一个平台或者是一个大的框架,它的工作完全就是依靠插件,也就是说你想使用什么功能,你就找到什么样的插件。 1.2.Jenkins好处 1、我在工作中部署Jenkins的最大好处就是每次在开发、测试环境代码,都无须运维部署,而是相关的开发人员,测试人员登录Jenkins传入需要部署的tag即可,整个部署过程无须运维参与,解放运维劳动力。

前言

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,把/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命令。

jenkins自动化部署代码更新(该进化了Jenkins持续集成工具)(1)

创建admin用户:按照提示填写即可

jenkins自动化部署代码更新(该进化了Jenkins持续集成工具)(2)

密码创建完成之后就可以登录jenkins了。

插件安装

如果在安装jenkins的时候没有安装相关插件,可以按照如下方式安装(已经安装,则不需要)

1、安装gitlab插件,直接在系统管理>插件管理中搜索gitlab相关插件安装即可。

jenkins自动化部署代码更新(该进化了Jenkins持续集成工具)(3)

2、shell插件:还是刚才的位置搜索ssh 选择ssh plugin插件安装即可。

jenkins自动化部署代码更新(该进化了Jenkins持续集成工具)(4)

3.1.手动下载jenkins插件

插件下载地址:http://updates.jenkins-ci.org/download/plugins/

如果有插件一直安装失败的情况,可以从jenkins官网下载插件,然后导入到jenkins。

示例:我从官方下载gitlab-plugin插件到本地,然后导入到jenkins中。

在jenkins插件管理->高级选择上传插件进行安装。

jenkins自动化部署代码更新(该进化了Jenkins持续集成工具)(5)

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 s5WvDbtL5Jk6mQch22aIIw4JaJh4L8dl1oyviwoBgOnscXVC/kDWgFM4BrHC4QNyzt6PdtuzX3RkMa4w7bqDvUWMqIyRBScW1fbfJeAwAK1tCQ7ZjfAoTcWpmoBlurH1P6SuWR3rYIPyhGDqjPQnlohqSX/vCrLWoHoYazETHfW2azzzBSGqMeCw3hlbSV/12kRQv0kGfnbhmnHZ1CBgX23N3ktqtzL jenkins@node1.fblinux.com

把这个密钥添加到gitlab还有jenkins服务器的root用户

为什么把jenkins公钥添加到root用户?

因为jenkins执行部署操作,会出现很多权限问题,一个一个解决比较麻烦(而且不同项目权限问题都不同),就算sudo授权也是需要授予最少10几条命令的权限,而且不能保证以后不会出现新的命令,所以我直接让jenkins用户通过root方式执行部署操作,简单粗暴。

(1)添加公钥到gitlab服务器,用来clone代码

jenkins自动化部署代码更新(该进化了Jenkins持续集成工具)(6)

添加完成之后从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: 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)创建一个触发构建的项目,选择自由软件风格即可

jenkins自动化部署代码更新(该进化了Jenkins持续集成工具)(7)

(3)源码管理选择git,然后只需要在repository url中输入git仓库地址即可。

jenkins自动化部署代码更新(该进化了Jenkins持续集成工具)(8)

(4)构建,选择execute shell,执行部署脚本即可

jenkins自动化部署代码更新(该进化了Jenkins持续集成工具)(9)

(5)触发器配置:即gitlab有提交操作,则自动部署,这里只需要设置一个认证的token即可,gitlab调用触发器,需要使用 JENKINS_URL/job/new_cms/build?token=TOKEN_NAME即可

jenkins自动化部署代码更新(该进化了Jenkins持续集成工具)(10)

(6)在系统管理–>用户管理–>查看用户id和token,需要把用户id和API Token加入触发器中,做用户验证

jenkins自动化部署代码更新(该进化了Jenkins持续集成工具)(11)

根据触发器验证令牌和用户id token会生成一个下面的url,只需要访问这个URL地址jenkins就会自动部署对应项目的代码。

http://admin:984c9edf027e750f0587808fab0c3f9b@192.168.100.10:8080/job/jenkins_trigger/build?token=hehe

(7)gitlab配置webhooks,每次提交代码就访问这个url,执行构建

jenkins自动化部署代码更新(该进化了Jenkins持续集成工具)(12)

URL这里输入上面上面用户ID API token job token生成的URL地址即可。触发工作选择,push event,merge request event即可。

jenkins自动化部署代码更新(该进化了Jenkins持续集成工具)(13)

(8)在jenkins全局在jenkins全局安全设置中取消勾选“防止跨站点请求伪造,不然jenkins会认为gitlab的请求不合法。

jenkins自动化部署代码更新(该进化了Jenkins持续集成工具)(14)

(9)添加完成测试:点击test模拟提交操作,看看是否会执行自动构建

jenkins自动化部署代码更新(该进化了Jenkins持续集成工具)(15)

如果执行成功会返回如下显示,说明执行钩子成功

jenkins自动化部署代码更新(该进化了Jenkins持续集成工具)(16)

Jenkins查看,可以看到构建也是成功的。

jenkins自动化部署代码更新(该进化了Jenkins持续集成工具)(17)

Jenkins参数化构建

(1)准备一个测试的脚本

#!/bin/bash git_pro(){ echo "拉取$1代码" } git_pro $1

(2)创建一个参数化构建的项目

jenkins自动化部署代码更新(该进化了Jenkins持续集成工具)(18)

(3)选择构建的参数:这里设置一个tag参数,就是每次执行job之前都需要传入这个tag

jenkins自动化部署代码更新(该进化了Jenkins持续集成工具)(19)

(4)设置执行部署的脚本

jenkins自动化部署代码更新(该进化了Jenkins持续集成工具)(20)

(5)选择创建的job执行构建

jenkins自动化部署代码更新(该进化了Jenkins持续集成工具)(21)

Tag处传入需要部署的tag即可

jenkins自动化部署代码更新(该进化了Jenkins持续集成工具)(22)

构建完成查看构建的结果

jenkins自动化部署代码更新(该进化了Jenkins持续集成工具)(23)

Jenkins定时构建

定时构建一般用在安卓 ios打包,每天凌晨会拉取安卓 ios进行编译打包,并自动推送到共享。

示例:在上面的参数化构建示例上添加如下触发器,就是每天凌晨1:30分自动执行安卓或ios打包脚本,上面的参数化构建默认值是master就是每天从代码仓库的master分支拉取最新的代码打包。

jenkins自动化部署代码更新(该进化了Jenkins持续集成工具)(24)

Jenkins用户权限设置

现在各种job已经设置好了,但是如果开发测试人员需要部署一个tag到服务器进行测试,那么就需要登录jenkins,这个时候就需要给开发和测试人员创建一个可以执行job的用户,方法如下。

8.1.新创建一个用户

系统管理–>用户管理–>新建用户,按照提示填入信息即可

jenkins自动化部署代码更新(该进化了Jenkins持续集成工具)(25)

8.2.用户权限设置

系统管理–>Configure Global Security–> 给develop用户授权,主要给job build,cancel,read权限。用户登录jenkins就可以构建我们创建的job了。

猜您喜欢: