更多博客:我的个人博客
大家好,我是一根甜苦瓜。
今天来分享如何从0到1玩转Jenkins。
主要目标:
- 在服务器上安装
Jenkins
- 配置
Jenkins
,包括源的配置,插件的安装等 - 用
jenkins
部署一个Go
项目。
jenkins
Jenkins
是一个开源的自动化服务器,用于自动化各种任务,包括构建、测试和部署软件。Jenkins
可以通过插件扩展其功能,例如构建、部署和自动化软件项目。
官网: https://www.jenkins.io/doc/book/installing/linux/#debianubuntu
安装Jenkins
下面演示基于ubuntu 20.04
安装 Jenkins
的过程
1. 安装Java
Jenkins
是基于 Java
开发的,我们需要先在系统上安装 Java
环境。
$ sudo apt update
# 安装openjdk-11-jre
$ sudo apt install openjdk-11-jre
# 验证Java是否安装成功
$ java -version
openjdk version "11.0.18" 2023-01-17
OpenJDK Runtime Environment (build 11.0.18+10-post-Ubuntu-0ubuntu122.04)
OpenJDK 64-Bit Server VM (build 11.0.18+10-post-Ubuntu-0ubuntu122.04, mixed mode, sharing)
2. 安装Jenkins
复制下面的命令即可安装jenkin
## 1. 导入jenkins的key
curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key | sudo tee \
/usr/share/keyrings/jenkins-keyring.asc > /dev/null
## 2. 添加源
echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] \
https://pkg.jenkins.io/debian-stable binary/ | sudo tee \
/etc/apt/sources.list.d/jenkins.list > /dev/null
# 3. 安装jenkins
sudo apt-get install jenkins
查看Jenkins
的启动状态,命令为 systemctl status jenkins
3. 首次启动
首次启动Jenkins
,需要查看初始密码,命令为 sudo cat /var/lib/jenkins/secrets/initialAdminPassword
$ sudo cat /var/lib/jenkins/secrets/initialAdminPassword
b10156ae772d47a4b19a946e96364fe5
然后就跳转到了【安装插件】的页面
这里我们先不安装任何插件。原因是此时下载插件的源是国外的,国内访问速度慢,等我们后面更换了国内的源之后,再安装对应的插件会快很多。
点击 【选择插件来安装】
点击【无】,不安装任何插件,然后next
,进入创建用户界面
创建一个管理员账户,然后保存并完成
接下来指定端口,这里可以修改为自己喜欢的端口,这里我选择默认使用 8080
,直接点击 【保存并完成】
接下来就是安装完成,点击【开始使用Jenkins】,就可以进入到Jenkins
的首页了。
配置Jenkins
上面的 jenkins
没有安装任何的插件,这一节主要来讲怎么修改 jenkins
的插件下载源,以及安装一些常用的插件
1. 修改插件下载源
首先停止jenkins
的运行,命令为 sudo systemctl stop jenkins
。 然后寻找源的配置文件
$ sudo find / -name *.UpdateCenter.xml
find: ‘/run/user/1000/doc’: 权限不够
find: ‘/run/user/1000/gvfs’: 权限不够
/var/lib/jenkins/hudson.model.UpdateCenter.xml
修改找到的配置文件 /var/lib/jenkins/hudson.model.UpdateCenter.xml
# 修改前
<?xml version='1.1' encoding='UTF-8'?>
<sites>
<site>
<id>default</id>
<url>https://updates.jenkins.io/update-center.json</url>
</site>
</sites>
# 修改后 替换为清华的源
<?xml version='1.1' encoding='UTF-8'?>
<sites>
<site>
<id>default</id>
<url>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url>
</site>
</sites>
sudo systemctl start jenkins
重启jenkins
,完工!我们验证一下源是否修改完成
下拉页面到底部,查看
如下图,页面底部的源地址就是我们刚才配置的清华源地址,没问题。
2. 安装插件
安装插件的思路都是一样的,我们这里主要演示安装中文插件,后续其他插件安装流程都类似。
点击左侧的"系统管理",然后点击"插件管理"
2. 安装插件
安装插件的思路都是一样的,我们这里主要演示安装中文插件,后续其他插件安装流程都类似。
点击左侧的"系统管理",然后点击"插件管理"
这次我们选择 Available plugins
,然后搜索中文插件,找到【“Chinese (Simplified) - 简体中文”】,点击安装即可。
安装完记得重启
默默等待吧
当然我们也可以自己重启系统的 jenkins
服务,或者在页面中使用 127.0.0.1:8080/restart
重启服务
点击确认,之后 jenkins
就会执行重启
再次登录 jenkins
发现已经汉化,虽然汉化得不是很完美。。。。。
基于用同样的方式大家自行安装常用的插件,比如: git,ssh,docker,pipeline 等.
3. 配置gitee/gitlab 凭证
如下图,点击Credentials
(如果服务器上没有安装git
环境,是看不到这个按钮的)
然后鼠标悬停在图示按钮上,即可点击add credentials
按照要求填写gitee/gitlab
的账号密码,以及描述最后点击create
即可。
用Jenkins部署项目
我们这里以一个 Go
项目为例,演示如何用 Jenkins
部署项目。(部署采用的是shell
命令部署GO
项目的二进制可执行文件)
1. 部署逻辑
从上图中,不难看出,整体的部署逻辑还是十分清晰的,Jenkins
主要负责的就是自动化构建:
- 拉取最新的代码
- 下载依赖,并编译打包项目
- 将打包好的项目上传到服务器
- 运行这个项目
而且这些流程基本上都是通过 Shell
命令来实现的。下面就在github
上创建一个项目,并演示如何用jenkins
自动化部署这个项目。地址为:https://github.com/M-500/deploy-go-demo
1. 创建一个自由风格的项目
回到 Jenkins
首页,点击【新建项目(New Item)】
选择创建自由风格的项目,并创建一个项目名称,这里我取名为 deploy-go-demo
,然后点击 OK
接下来就自动跳转到了配置页面,这里我们主要配置源码管理
和构建触发器
,以及构建
的shell
命令。先将项目的git
地址填入,同时配置好git
的凭证信息和分支名称。
接下来就是配置构建的shell
命令了,这里我们不需要拉取代码,因为每次运行的时候Jenkins都会自动pull拉取。主要逻辑就是下载依赖,编译打包,上传到服务器,停止旧的进程,启动新的进程。
写入Shell
命令
之后保存就行了,跳转到如下页面
启动运行一下试试,点击Build
,就会自动执行所有的shell命令执行自动化部署。
这里把Shell
命令粘出来了
cd binary-deploy
go mod tidy
# 编译成Linux可执行文件(文件名为my-app)
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o my-app .
# 将可执行文件发送到远端(这里要配置scp免密传输,不然会上传失败)
scp ./my-app user@A.B.C.D:/Workspace/demo
scp ./build.sh user@A.B.C.D:/Workspace/demo
# 执行远程shell,将服务器的旧进程杀死
ssh user@A.B.C.D "
pid=\$(ps aux | grep 'my-app-server' | grep -v grep | awk '{print \$2}');
if [ -n \"\$pid\" ]; then
echo '关闭远端进程id为 : '\$pid;
kill -9 \$pid;
else
echo '远端进程尚未启动';
fi;
# 启动新进程 (由于启动采用的nohup 守护进程的方式,不知道为啥Jenkins执行nohup会阻塞,所以把启动命令扔进了shell脚本中)
ssh user@A.B.C.D "cd /Workspace/demo && ./build.sh"
总结
Jenkins
是一个非常强大的自动化工具,可以用来自动化构建、测试和部署软件。后续还有很多功能可以继续挖掘,比如pipeline
,webhook
等等。总而言之,作为一个多功能牛马,Jenkins
是打工的必备技能,大家有空还是多玩玩。