1 简介
Jenkins是开源CI&CD软件领导者, 提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要。
持续集成:Continuous Integration,简称CI,意思是,在一个项目中,任何人对代码库的任何改动,都会触发CI服务器自动对项目进行构建,自动运行测试,甚至自动部署到测试环境。这样做的好处就是,随时发现问题,随时修复。因为修复问题的成本随着时间的推移而增长,越早发现,修复成本越低。
1.1 Jenkins 持续集成流程图
2 Jenkins安装
2.1 Jenkins主程序安装
sudo wget -O /etc/yum.repos.d/jenkins.repo \
https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
sudo yum upgrade
sudo yum install jenkins java-1.8.0-openjdk-devel
sudo systemctl daemon-reload
启动Jenkins
systemctl start jenkins
3 Jenkins重要目录
/etc/sysconfig/jenkins
:jenkins配置文件,"端口"、"JENKINS_HOME"等都可以在这里配置
/usr/lib/jenkins
:jenkins安装目录,WAR包会放在这里
/var/lib/jenkins
:默认的JENKINS_HOME
/var/lib/jenkins/plugins
:Jenkins插件目录
/var/log/jenkins/jenkins.log
:Jenkins的日志文件
4 Jenkins持续集成配置
目标,完成开发到代码上线的自动集成:
- gitlab作为dev的代码仓库进行项目代码管理,每次dev将代码push到master分支,或由其他分支merge到master分支。
- gitlab与jenkins联动,每次gitlab的master发生push或merge操作,gitlab向jenkins发送请求消息。jenkins从gitlab拉取项目文件,并将项目文件推送到前端web站点,成功后向gitlab返回成功消息。
4.1 首次登录
访问URLhttp://IPaddr:8080/
,首次登录提示到/var/lib/jenkins/secrets/initialAdminPassword
文件取得密码,输入密码后来到初始化页面。
在初始化页面,如果没有安装插件,可以安装推荐的插件。
安装完插件后,来到欢迎页面,可使用admin账户继续。
来到jenkins页面后,首先给admin用户更改密码
4.2 安装插件
4.2.1 在Jenkins页面安装
可进行搜索并安装
4.2.2 手动安装
在官网下载插件包,解压缩到/var/lib/jenkins/plugins
目录下。
之后重启jenkins
systemctl restart jenkins
4.3 配置freestyle项目
每次创建一个项目都会生成/var/lib/jenkins/workspace/项目名称
的目录
4.3.1 项目创建
4.3.2 配置丢弃旧的构建
4.3.3 jenkins从git拉取项目,并向web站点推送
4.3.3.1 配置Git源码管理
在项目中配置git仓库地址,本例使用SSH链接。
建议使用自定义的用户秘钥,因为默认jenkins使用jenkins用户进行连接。
先用相应的用户生成公私钥,将公钥填写到Git服务器。然后在Jenkins处填写私钥,下图是以root用户为例进行填写。
4.3.3.2 配置shell推送脚本
项目从gitlab拉取的文件在/var/lib/jenkins/workspace/freestyle-job
目录下,使用脚本将文件打包上传到web服务器。
脚本文件/server/scripts/depoly.sh
#bin/bash
#项目目录
SDIR="/var/lib/jenkins/workspace/freestyle-job"
#web服务器地址
IP="10.0.0.7"
#时间信息
TIME=`date +%F-%H-%M-%S`
#web服务器目录
DDIR="/html"
#将项目文件打包
cd $SDIR && tar -zcf "/tmp/dzp_$TIME.tar.gz" * &> /dev/null
#将打包文件推送到web服务器
scp "/tmp/dzp_$TIME.tar.gz" root@$IP:$DDIR
#ssh到web服务器站点目录,将压缩包解压
ssh root@$IP "cd $DDIR && mkdir dzp_$TIME && tar xf dzp_$TIME.tar.gz -C dzp_$TIME"
#web服务器删除www目录
ssh root@$IP "cd $DDIR && rm -rf www"
#web服务器做站点目录www的软链接
ssh root@$IP "cd $DDIR && ln -s dzp_$TIME www"
#web服务器删除压缩包
ssh root@$IP "cd $DDIR && rm -f dzp_$TIME.tar.gz"
#jenkins服务器删除生成的临时文件
rm -f /tmp/dzp_$TIME.tar.gz
项目配置构建时执行shell命令
之后手工点立即构建,完成从Gitlab的项目文件拉取,并用shell脚本推送到目标服务器
4.3.4 gitlab与jenkins联动,实现jenkins自动拉取构建
4.3.4.1 jenkins部分
在jenkins的项目中配置构建触发器,打开Gitlab扩展,记住URL部分用于后续在Gitlab中配置。
选择高级部分
- 配置允许的branche,只允许master分支的通知
-
生成Secret token,用于后续在Gitlab中配置
4.3.4.2 gitlab部分
如果gitlab和jenkins在同一局域网下,需要先配置允许向局域网推送请求
在gitlab项目中配置webhook
添加后,进行test测试
返回HTTP200证明配置成功
4.3.5 Jenkins向Gitlab返回结果
4.3.5.1 Gitlab生成Access Token
记住生成的Access Token给后续的jenkins连接作为凭据
4.3.5.2 Jenkins配置Gitlab连接
连接凭据配置,token里填入之前gitlab上生成的Access Token
配置后进行连接测试,Success表示成功
配置项目中的构建后操作,进入特定项目的配置页
4.3.5.3 返回结果测试
手动点击立即构建
在gitlab上查看测试结果,有jenkins返回结果的项目会出现对号。
5 Jenkins的ssh连接问题
Jenkins程序默认使用jenkins用户去进行ssh连接,所以当需要做ssh免密的时候,需要用jenkins用户生成公私钥,并进行拷贝。
jenkins用户的home目录是/var/lib/jenkins
,默认shell是/bin/false
jenkins:x:998:996:Jenkins Automation Server:/var/lib/jenkins:/bin/false
使用jenkins用户生成公私钥,并拷贝
#使用bash shell登录jenkins
su -s /bin/bash jenkins
#目前是jenkins用户,生成并拷贝公钥给目标服务器
ssh-keygen -t rsa
ssh-copy-id -i .ssh/id_rsa.pub 10.0.0.7
网友评论