On this page
Jenkins简介
Jenkins是一款由Java开发的持续集成工具,它是敏捷开发框架中实现多次、快速发布的核心工具。在传统的软件开发流程下,当开发团队完成了一个版本的开发工作后,运维人员需要克隆远程代码仓库中的源代码,并编译部署到测试服务器进行测试,这个流程还是比较繁琐的;通过Jenkins,运维人员可以设定好通用的编译和部署模式/脚本,并实现自动化构建,以此达到敏捷开发框架中所要求的“多次发布”和“快速迭代”。
安装Jenkins
安装Java环境
Jenkins是通过Java开发的工具,因此必须安装JDK。
这里用得是华为云镜像站
wget https://repo.huaweicloud.com/java/jdk/8u181-b13/jdk-8u181-linux-x64.rpm
yum localinstall jdk-8u181-linux-x64.rpm -y
安装和配置Jenkins
这里用的是清华源
wegt https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/jenkins-2.190.1-1.1.noarch.rpm --no-check-certificate
yum localinstall jenkins-2.190.1-1.1.noarch.rpm -y
修改Jenkins配置文件
配置文件路径:/etc/sysconfig/jenkins
修改Jenkins端口:JENKINS_PORT="8080"
启动Jenkins并访问Jenkins客户端
systemctl start jenkins
我将Jenkins部署在了IP为10.0.0.105的虚拟机上,因此可以通过访问10.0.0.105:8080来进入客户端。
默认情况下Jenkins会在/var/lib/jenkins/secrets/initialAdminPassword文件中生成一个初始密码,得到这串密码后可以登录。默认管理员用户名为admin
。
登录后会显示一个安装插件的界面,如果没有明确要安装的插件可以直接关掉,以后再装也可以。
修改管理员密码
点击右上角的Admin -> Setting,可以修改密码,完成修改后会重新登录
到此为止,Jenkins的安装和基础配置就完成了。
Jenkins结合GitHub仓库实现远程发布
以一个Python Flask网页作为例子实现发布
新建一个自由风格的软件项目命名为flask
配置项目,在源码管理中选择Git,并输入Git仓库地址。
增加构建步骤
选择执行shell
填入shell命令
首先,我们要将python文件移动到web服务器上,这步可以使用scp命令完成
scp -o StrictHostKeyChecking=no flask-test.py [email protected]:/opt
如果是多次发布的话,考虑到需要通过杀死python3进程的方式来重启,所以需要增加一条pkill命令
ssh [email protected] "pkill python3 || true"
最后,将任务运行在后台
ssh [email protected] "nohup /usr/bin/python3 /opt/flask-test.py >/dev/null 2>&1 &"
配置免密登录
由于需要通过ssh命令远程部署,因此需要将Jenkins服务器和web服务器之间实现免密登录。
在Jenkins服务器上执行:
ssh-keygen
# 将私钥复制到Jenkins的.ssh文件夹中,Jenkins会读取该文件夹中的私钥用于登录认证
cp ~/.ssh/id_rsa /var/lib/jenkins/.ssh
# 修改权限
chwon -R jenkins.jenkins /var/lib/jenkins/.ssh
保存配置并构建
点击立即构建
查看构建的控制台输出
点击构建的历史记录
然后应该可以看到类似的输出文档
Started by user admin
Running as SYSTEM
Building in workspace /var/lib/jenkins/workspace/flask
No credentials specified
> git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
> git config remote.origin.url https://github.com/shitsuku-0v0/flask-test # timeout=10
Fetching upstream changes from https://github.com/shitsuku-0v0/flask-test
> git --version # timeout=10
> git fetch --tags --progress https://github.com/shitsuku-0v0/flask-test +refs/heads/*:refs/remotes/origin/*
> git rev-parse refs/remotes/origin/master^{commit} # timeout=10
> git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=10
Checking out Revision 82caa344d2a6f20311c78b18b965dbf4b55a9638 (refs/remotes/origin/master)
> git config core.sparsecheckout # timeout=10
> git checkout -f 82caa344d2a6f20311c78b18b965dbf4b55a9638
Commit message: "Update flask-test.py"
> git rev-list --no-walk 82caa344d2a6f20311c78b18b965dbf4b55a9638 # timeout=10
[flask] $ /bin/sh -xe /tmp/jenkins5900543284849225216.sh
+ scp -o StrictHostKeyChecking=no flask-test.py [email protected]:/opt
+ ssh [email protected] 'pkill python3 || true'
+ ssh [email protected] 'nohup /usr/bin/python3 /opt/flask-test.py >/dev/null 2>&1 &'
Finished: SUCCESS
- 可以看到,Jenkins会为每一个软件项目,在/var/lib/jenkins/workspace创建对应的文件夹;
- 然后,由于使用的GitHub代码仓库,Jenkins自动拉取了对应仓库的代码;
- 最后,Jenkins执行了我们预设的Shell脚本;
最后的状态显示了我们此次构建是成功的。
模拟开发人员对代码的更改
在GitHub仓库中,修改一下flask文件中的文本信息:
接下来,我们什么都不用做,不需要进行仓库的重新拉取,不需要执行ssh之类的繁琐命令,只需要在Jenkins中重新点一下立即构建
,一切的操作就被自动执行了,操作量大大减少,省时省力。