14、Jenkins部署

2021-02-02  本文已影响0人  一个反派人物

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持续集成配置


目标,完成开发到代码上线的自动集成:

  1. gitlab作为dev的代码仓库进行项目代码管理,每次dev将代码push到master分支,或由其他分支merge到master分支。
  2. 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中配置。


选择高级部分
  1. 配置允许的branche,只允许master分支的通知
  2. 生成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
上一篇下一篇

猜你喜欢

热点阅读