1
2
3
4
5
作者:李晓辉

微信:Lxh_Chat

邮箱:xiaohui_li@foxmail.com

今天来和大家唠唠Jenkins这玩意儿。你是不是也像我一样,每次看到团队里那些复杂的代码集成和部署流程就头大?别怕,Jenkins就是那个能帮咱们轻松搞定这些事儿的“超级英雄”!

想象一下,每次你提交代码后,都能自动触发一系列的测试,要是有问题,第一时间就能发现,再也不用等到最后上线时手忙脚乱。而且,部署新版本也变得轻而易举,一键搞定,简直是开发者的福音!

我最近刚鼓捣完Jenkins的安装,过程里踩了不少坑,但也收获满满。所以,我想把这事儿和大家分享一下,希望能帮到那些和我一样刚开始接触Jenkins的小伙伴。不管你是新手小白,还是想在自己的机器上试试Jenkins的老司机,这篇博客都能给你点启发。咱们一起把开发流程搞得更顺溜,让代码飞起来!

版本介绍

LTS(长期支持版)

这个版本,简直就是稳如老狗。Jenkins团队每隔12周才会挑一个出来,说“嘿,这个版本够稳,拿去用吧”。它就像是经过千锤百炼的战士,啥大风大浪没见过,所以特别适合那些对稳定性要求超高的大公司。你想想,大公司里项目多、流程复杂,要是用个不稳定的工具,那不得天天出bug,烦都烦死了。LTS版本就不会,它能稳稳地帮你把事儿干完,而且还会给你打补丁,修复那些关键的漏洞。就像你有个老朋友,虽然不咋爱说话,但关键时刻绝对靠得住!

Weekly(每周版)

Weekly版本呢,就完全不一样了。这货是个急性子,每周都更新一次,就像个追风少年,啥新鲜玩意儿都想试试。它里面全是最新最炫的功能,要是你是个爱折腾的开发者,每周版绝对能让你眼前一亮。不过呢,因为更新太快,偶尔也会有点小毛病。但这不是问题,因为社区里的人也爱折腾,遇到问题大家一起解决,很快就能搞定。Weekly版本特别适合那些小团队或者个人开发者,你们不是天天想搞点新花样嘛,这个版本就能满足你。

总之,LTS和Weekly,一个稳一个快,看你啥时候用啥。要是你图个安稳,就选LTS;要是你想尝鲜,Weekly绝对是个不错的选择。

支持的平台

Jenkins 是一个跨平台的自动化服务器,支持多种操作系统和平台。以下是Jenkins支持的主要平台:

  1. Linux

    • Debian/Ubuntu:通过apt包管理器安装。

    • Fedora:通过dnf包管理器安装。

    • Red Hat Enterprise Linux及其衍生版本(如AlmaLinux、Rocky Linux、Oracle Linux、CentOS):通过yumdnf包管理器安装。

  2. Windows

    • 可以通过安装程序安装,也可以使用WAR文件手动安装。
  3. macOS

    • 可以通过Homebrew安装,也可以使用WAR文件手动安装。
  4. Docker

    • Jenkins可以作为Docker容器运行,支持在macOS、Linux和Windows上使用Docker。

我们本次采用的是Rocky Linux 9.4,用rpm的方法安装Jenkins LTS版本

添加Jenkins仓库

现在向系统添加Jenkins官方的仓库

1
2
3
4
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-2023.key
sudo yum upgrade -y
sudo systemctl daemon-reload

安装Jenkins

从仓库中,安装Jenkins依赖,然后再安装Jenkins

1
2
3
sudo yum install fontconfig java-21-openjdk -y
sudo yum install jenkins -y
sudo systemctl daemon-reload

如果上面的jenkins软件包下载速度过慢,可以考虑在这里下载国内加速的包

https://mirrors.nju.edu.cn/jenkins/redhat-stable

启动Jenkins服务

1
2
[root@localhost ~]# sudo systemctl enable jenkins --now
Created symlink /etc/systemd/system/multi-user.target.wants/jenkins.service → /usr/lib/systemd/system/jenkins.service.

看看起来了没

我们发现他说初始密码放在/var/lib/jenkins/secrets/initialAdminPassword了,而且看到它监听了8080端口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@localhost ~]# sudo systemctl status jenkins
● jenkins.service - Jenkins Continuous Integration Server
Loaded: loaded (/usr/lib/systemd/system/jenkins.service; enabled; preset: disabled)
Active: active (running) since Tue 2025-05-27 14:36:10 CST; 3s ago
Main PID: 43697 (java)
Tasks: 48 (limit: 24584)
Memory: 676.3M
CPU: 12.644s
CGroup: /system.slice/jenkins.service
└─43697 /usr/bin/java -Djava.awt.headless=true -jar /usr/share/java/jenkins.war --webroot=/var/cache/jenkins/war --httpPort=8080

May 27 14:36:03 localhost.localdomain jenkins[43697]: Jenkins initial setup is required. An admin user has been created and a password generated.
May 27 14:36:03 localhost.localdomain jenkins[43697]: Please use the following password to proceed to installation:
May 27 14:36:03 localhost.localdomain jenkins[43697]: 24577d81c43446e388746634a31bd30c
May 27 14:36:03 localhost.localdomain jenkins[43697]: This may also be found at: /var/lib/jenkins/secrets/initialAdminPassword

开通防火墙

1
2
3
4
5
6
7
8
9
10
11
YOURPORT=8080
PERM="--permanent"
SERV="$PERM --service=jenkins"

firewall-cmd $PERM --new-service=jenkins
firewall-cmd $SERV --set-short="Jenkins ports"
firewall-cmd $SERV --set-description="Jenkins port exceptions"
firewall-cmd $SERV --add-port=$YOURPORT/tcp
firewall-cmd $PERM --add-service=jenkins
firewall-cmd --zone=public --add-service=http --permanent
firewall-cmd --reload

验证Jenkins安装

Jenkins是基于Java的,我们看看java是否安装,Jenkins是否能打开

1
2
3
4
[root@localhost ~]# java --version
openjdk 21.0.7 2025-04-15 LTS
OpenJDK Runtime Environment (Red_Hat-21.0.7.0.6-1) (build 21.0.7+6-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-21.0.7.0.6-1) (build 21.0.7+6-LTS, mixed mode, sharing)

你可以直接打开浏览器,输入http://你的IP:8080

jenkins-install-unlock

看到让我们输入密码,从上面的日志中,我们可以看到密码所在

1
2
[root@localhost ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
67ac550e4ea4450abdca0eb2660bcde4

把密码填上去,点击继续

然后看到一个插件安装提示,一般来说,我们就选左边的推荐插件安装就行

jenkins-install-custom

点击推荐的插件后

jenkins-install-plugin-install

这个插件的安装可能得老大一会儿,你多等等

我们看看这个咋加速,用国内加速站安装快

我们先看看Jenkins的家目录在哪儿

1
2
3
4
5
6
[root@localhost ~]# grep jenkins /etc/passwd
jenkins:x:992:989:Jenkins Automation Server:/var/lib/jenkins:/bin/false
[root@localhost ~]# cd /var/lib/jenkins/
[root@localhost jenkins]# ls
config.xml jenkins.install.InstallUtil.installingPlugins jobs plugins secret.key.not-so-secret updates users
hudson.model.UpdateCenter.xml jenkins.telemetry.Correlator.xml nodeMonitors.xml secret.key secrets userContent

进去看看更新都有啥

啥?用Google测试能不能链接?还链接updates这个国内很慢的网址?nonono

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[root@localhost jenkins]# cd updates/
[root@localhost updates]# ls
default.json hudson.tasks.Maven.MavenInstaller
[root@localhost updates]# cat default.json | jq . | head -n 20
{
"connectionCheckUrl": "https://www.google.com/",
"core": {
"buildDate": "Apr 30, 2025",
"name": "core",
"sha1": "z5gfjSyu2r7YuwqDPe5cM7eL8Yo=",
"sha256": "gQJtsYsMSq1rYs9AjkxC5Xl2YbQcUXs332BiOOibnfE=",
"size": 94294478,
"url": "https://updates.jenkins.io/download/war/2.504.1/jenkins.war",
"version": "2.504.1"
},
"deprecations": {
"BlameSubversion": {
"url": "https://github.com/jenkinsci/jenkins/pull/5320"
},
"CFLint": {
"url": "https://github.com/jenkins-infra/helpdesk/issues/2089"
},
"DotCi": {
"url": "https://www.jenkins.io/security/plugins/#suspensions"

给我换成国内的,嘻嘻

不过服务重启后就没有了哦,聊胜于无,你可以后面在页面上配置的

1
2
sed -i 's|https://updates.jenkins.io/download|https://mirrors.nju.edu.cn/jenkins|g' default.json
sed -i 's|https://www.google.com|https://www.baidu.com|g' default.json

不管你换了没有,我们都可以安装成功,无非时间长短问题罢了

我们来创建第一个管理员

jenkins-install-create-user

再确认一下服务器URL

jenkins-install-instance-url

ok,现在我们已经成功登录了主页面

jenkins-indexpage

说到Jenkins,我得给你讲讲我之前遇到的一个超有趣场景。那会儿我们团队正忙着开发一个新项目,代码库里的代码像滚雪球一样越堆越多,每次合并代码都跟打仗似的。每次有小伙伴提交代码,大家就得手动跑一遍测试,要是测试没通过,就得一个个排查问题,那效率,简直就跟蜗牛赛跑似的。

就在这时候,我发现了Jenkins这个“神器”。我花了点时间把它装好、配置好,然后就像施了魔法一样,每次有人提交代码,Jenkins就自动跳出来,悄咪咪地把代码拉过来,开始跑测试。要是测试通过了,它就默默记下来,要是没通过,它就立刻发个警报,把有问题的地方指得清清楚楚。

有一次,我半夜在家,突然收到Jenkins发来的消息,说新提交的代码有个测试没通过。我赶紧打开电脑,一看,原来是一个小bug,我迅速修复了它,重新提交。没多久,Jenkins就告诉我测试通过了。那一刻,我简直对Jenkins爱得不行,它就像我的私人小助手,24小时不打烊,帮我们把关,让我们的开发流程顺畅得不行。

从那以后,团队里的小伙伴们再也不用为手动测试和代码合并烦恼了,大家都能把精力集中在写代码上。而且,每次有新版本要上线,Jenkins还能帮我们一键部署,简直是太省心了。这玩意儿,真的是开发团队的“救星”啊!