Jenkins安装和简单远程发布

Jenkins安装和简单远程发布
Photo by Jeremy Thomas / Unsplash

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

default-password.png

登录后会显示一个安装插件的界面,如果没有明确要安装的插件可以直接关掉,以后再装也可以。

修改管理员密码

点击右上角的Admin -> Setting,可以修改密码,完成修改后会重新登录

到此为止,Jenkins的安装和基础配置就完成了。

Jenkins结合GitHub仓库实现远程发布

以一个Python Flask网页作为例子实现发布

新建一个自由风格的软件项目命名为flask

jenkins1.png

配置项目,在源码管理中选择Git,并输入Git仓库地址。

jenkins2.png

增加构建步骤

选择执行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

保存配置并构建

点击立即构建
jenkins3.png

查看构建的控制台输出

点击构建的历史记录
jenkins4.png

然后应该可以看到类似的输出文档

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文件中的文本信息:

jenkins5.png

接下来,我们什么都不用做,不需要进行仓库的重新拉取,不需要执行ssh之类的繁琐命令,只需要在Jenkins中重新点一下立即构建,一切的操作就被自动执行了,操作量大大减少,省时省力。