Jenkins是一款开源自动化服务器,旨在自动化连续集成和交付(CICD)软件所涉及的重复技术任务。本文主要讲解 Ubuntu20.04 下的Jenkins安装指南及支持CICD的详细配置。同时文章还详细介绍了插件下载慢以及插件安装失败的解决方案。
- 持续集成(CI)是一种 DevOps 实践,团队成员定期将代码更改提交到版本控制存储库,然后运行自动生成和测试。
- 持续交付(CD)是一系列实践,其中代码更改会自动生成、测试并部署到生产环境中。
Jenkins自动化部署实现原理
1、基本环境:
- jdk环境,Jenkins是java语言开发的,因需要jdk环境。
- git/svn客户端,因一般代码是放在git/svn服务器上的,我们需要拉取代码。
- maven客户端,因一般java程序是由maven工程,需要maven打包,当然也有其他打包方式,如:gradle
以上是自动化部署java程序jenkins需要的基本环境,请自己提前安装好,下面着重讲解Jenkins的安装部署配置。
1.1 安装 JDK
Jenkins是Java应用程序,需要安装Java 8或更高版本。JDK 的安装可以参考 Linux下JAVA WEB服务器的搭建一(JDK\MYSQL\TOMCAT)。下面我们只列出简单的步骤,用 apt-get
的方式。
1) 查看系统是否安装过JDK
java -version
若返回如下信息,表明已经安装。
root@xnzysq20210118001:~# java -version
java version "1.8.0_291"
Java(TM) SE Runtime Environment (build 1.8.0_291-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.291-b10, mixed mode)
root@xnzysq20210118001:~#
2) 安装JDK
//更新软件源
sudo apt-get update
# 安装java8
sudo apt-get install openjdk-8-jdk
#sudo apt-get install openjdk-7-jdk 早些系统可以安装
#安装器会提示你同意 oracle 的服务条款,选择 ok,然后选择yes 即可
1.2 安装 Git
1) git的安装
首先,确认你的系统是否已安装git,可以通过 git --version
查看git版本号,如果没有,在命令行模式下输入sudo apt-get install git
命令进行安装。通过 which git
命令可以查看git的安装路径。
root@xnzysq20210118001:/usr/local# git --version
git version 2.25.1
root@xnzysq20210118001:/usr/local# which git
/usr/bin/git
2) git的配置(该步骤可省略)
安装后您可能想要做的第一件事是在Git中配置自己的名称和电子邮件地址,以便您提交的更改包含正确的信息。 您可以通过使用以下命令来完成此操作:
git config --global user.name "kongzi"
git config --global user.email "kongzi@126.com"
接下来,我们可以通过 git config --list
来验证配置更改:
root@xnzysq20210118001:/usr/local# git config --list
user.name=kongzi
user.email=kongzi@126.com
1.3 安装 Maven
jenkins所在服务器安装maven,官方下载地址:https://maven.apache.org/download.cgi。
1) 下载并解压安装包
下载并解压安装包,配置maven的环境变量,配置完毕后记得执行一下: source /etc/profile
命令使配置生效,然后再使用 mvn -v
检查是否配置成功.
# 在下载页面复制需要下载的maven安装包的下载地址,如下
https://dlcdn.apache.org/maven/maven-3/3.8.5/binaries/apache-maven-3.8.5-bin.tar.gz
# 下载maven的linux版安装包,
cd /usr/local/maven
wget https://dlcdn.apache.org/maven/maven-3/3.8.5/binaries/apache-maven-3.8.5-bin.tar.gz
# 解压安装包
tar -zxvf apache-maven-3.8.5-bin.tar.gz
# 配置环境变量,将 maven 的相关路径配置到/etc/profile文件中
export M2_HOME=/usr/local/maven/apache-maven-3.8.5
export PATH=$PATH:$JAVA_HOME/bin:$M2_HOME/bin
# 重新加载一下,使环境变量配置生效
source /etc/profile
# 查看maven版本,验证配置是否生效
mvn -v
2) 配置maven仓库
配置maven仓库,设置阿里镜像仓库,一定要配置一下,国内的下载jar快些。
# 首先进入apache-maven-3.8.5目录,创建仓库存储目录 repository
cd apache-maven-3.8.5 #进入apache-maven-3.6.3目录
mkdir repository #创建repository目录
# 进入cd conf目录,编辑 settings.xml文件,找到·localRepository下面复制一行加上<localRepository>/usr/local/maven/apache-maven-3.8.5/repository</localRepository>,再找到 mirror 加上阿里的仓库配置,配置完成后退出:
cd conf
vim settings.xml
附阿里云仓库配置:
<!--配置阿里云maven私有仓库(即配阿里私服)-->
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<url>https://maven.aliyun.com/repository/central</url>
</mirror>
<!-- 又一个镜像 -->
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://central.maven.org/maven2</url>
<mirrorOf>central</mirrorOf>
</mirror>
<!-- 阿里云镜像 -->
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
<mirrorOf>central</mirrorOf>
</mirror>
1.4 安装tomcat服务器
如果你已经有了tomcat环境,或者你不想通过tomcat服务器部署Jenkins,跳过这一步。
tomcat 的安装可以参考 Linux下JAVA WEB服务器的搭建一(JDK\MYSQL\TOMCAT)。
# 下载tomcat
wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.53/bin/apache-tomcat-9.0.53.tar.gz
# 解压部署
tar xf apache-tomcat-9.0.53.tar.gz -C /usr/local/
# 创建软连接
ln -s apache-tomcat-9.0.53/ tomcat
# 启动tomcat
/usr/local/tomcat/bin/catalina.sh start
2、安装 Jenkins
Jenkins 可以作为独立应用程序安装,作为Java Servlet容器(如Apache Tomcat)中的服务,也可以作为 Docker 容器运行,建议通过自建脚本部署Jenkins,要是你想这样做,可以直接从 2.3 自建脚本部署Jenkins 看起。
2.1 安装Ubuntu软件包中的Jenkins
使用Jenkins的官方提供的软件仓库,要使用官方的软件仓库之前必须将软件仓库的秘钥添加到本地
# 添加官方软件仓库的秘钥到本地的apt秘钥中
$ wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
# wget -q -O - https://pkg.jenkins.io/debian/jenkins-ci.org.key | sudo apt-key add -
# 添加密钥后,系统将返回OK。接下来,将官方提供的软件仓库地址加入到本地的apt软件源中,本地用于存放软件源的文件在/etc/apt/sources.list
$ deb https://pkg.jenkins.io/debian-stable binary/
# echo deb http://pkg.jenkins.io/debian-stable binary/ | sudo tee /etc/apt/sources.list.d/jenkins.list
# 更新本地的软件源缓存,以便apt-get使用新的存储库(一次不成功,就多执行几次)
$ sudo apt-get -y update
# 安装jenkins
sudo apt-get install jenkins
# 启动jenkis
sudo /etc/init.d/jenkins [start|restart|stop]
# 也可以使用systemctl启动Jenkins:
# sudo systemctl start jenkins
# 由于systemctl不显示输出,可以使用status命令来验证它是否成功启动:
# sudo systemctl status jenkins
由于包含在默认 Ubuntu 软件包中的 Jenkins 版本往往落后于项目本身的最新版本。为了利用最新的修复和功能,我们最好从官网维护的软件包中挑选适合自己的版本来安装Jenkins。
2.2 下载Jenkins war包安装
2.2.1 下载Jenkins
创建部署目录
cd /opt
mkdir jenkins
下载Jenkins war包
网页下载地址:https://jenkins.io/download/ ,如下图:
也可以在网页上找到需要的版本,右键复制下载地址,通过 wget
下载。
cd jenkins
# 镜像下载地址 - 最新版本
wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war/latest/jenkins.war
# 官网下载地址 - 最新稳定版本
wget https://get.jenkins.io/war-stable/latest/jenkins.war
# 官网下载地址 - 2.332.2稳定版本
wget https://get.jenkins.io/war-stable/2.332.2/jenkins.war
2.2.2 jenkins部署到tomcat服务器
将tomcat的配置web配置文件删除,下载好的jenkins.war放进tomcat/webapps目录下,启动tomcat即可。
[root@localhost ~]# cd /usr/local/tomcat/webapps/
[root@localhost webapps]# ls
docs examples host-manager manager ROOT
[root@localhost webapps]# rm -rf docs/ examples/ host-manager/ manager/
[root@localhost webapps]# ls
ROOT
[root@localhost webapps]# rm -rf ROOT/*
[root@localhost webapps]#
启动tomcat服务
[root@localhost webapps]# mv /opt/jenkins/jenkins.war .
[root@localhost webapps]# ls
jenkins jenkins.war ROOT
[root@localhost webapps]# /usr/local/tomcat/bin/catalina.sh start
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
[root@localhost webapps]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 100 *:8080 *:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 1 [::ffff:127.0.0.1]:8005 *:*
2.2.3 自建脚本部署Jenkins
1)创建启动脚本
cd /opt
# 日志存放目录
mkdir logs
# 创建启动脚本
vim run_jenkins.sh
启动脚本内容如下:
#!/bin/bash
export JENKINS_HOME=/opt/jenkins
cd $JENKINS_HOME
nohup java -Dhudson.model.DownloadService.noSignatureCheck=true -Xmx2g -jar jenkins.war --httpPort=8081 > logs/jenkins.log 2>&1 &
tail -f logs/jenkins.log
2)创建配置文件
创建配置文件 hudson.model.UpdateCenter.xml
,该文件为jenkins下载插件的源地址,该地址jenkins默认为: https://updates.jenkins.io/update-center.json
。
- 有时候因为https的问题无法连接,可以将其改为http即可,即
http://updates.jenkins.io/update-center.json
, 之后重启jenkins服务即可。
vim hudson.model.UpdateCenter.xml
内容如下:
<?xml version='1.1' encoding='UTF-8'?>
<sites>
<site>
<id>default</id>
<url>http://updates.jenkins-ci.org/update-center.json</url>
</site>
如果启动时卡住不动了或启动后出现如下错误:
hudson.model.UpdateCenter#updateDefaultSite: Upgrading Jenkins. Failed to update the default Update Site 'default'. Plugin upgrades may fail.
java.net.SocketTimeoutException: connect timed out
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:476)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:218)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:200)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:394)
将上述配置文件中的url内容 https://updates.jenkins-zh.cn/update-center.json
改为以下地址中的任意一个。
# 其他国内备用地址:
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
http://mirror.xmission.com/jenkins/updates/update-center.json
http://mirror.esuni.jp/jenkins/updates/update-center.json
- 若插件下载很慢,可以参考 5、插件下载慢的解决办法来解决
3)运行jenkins
通过 sh run_jenkins.sh
命令运行jenkins。
sudo chmod 777 run_jenkins.sh
sh run_jenkins.sh
2.2.4 docker部署jenkins
下载:docker pull jenkins/jenkins:lts-centos7
创建docker的文件映射卷: docker volume create jenkins
创建实例: docker run -d --name jenkins -p 8080:8080 -p 50000:50000 -v jenkins:/var/jenkins_home jenkins/jenkins:lts-centos7
获得初始管理密码: docker exec -it jenkins cat /var/jenkins_home/secrets/initialAdminPassword
修改时区
删除已有实例:docker rm -f jenkins
重新创建实例并设置时区:docker run -d --name jenkins -p 8080:8080 -p 50000:50000 -v jenkins:/var/jenkins_home -e JAVA_OPTS=-Duser.timezone=Asia/Shanghai jenkins/jenkins:lts-centos7
2.3 Jenkins 的解锁密码
系统正常启动后,会给出解锁 Jenkins 的密码,这里为cb3bf9a59ded4053b636fd005b1fb200
,该密码在首次访问Jenkins时需要输入,如下图所示。
或者在Jenkins安装目录下的secrets目录下有个 initialAdminPassword
文件(/opt/jenkins/secrets/initialAdminPassword
),里面存放的就是这个解锁密码。
3、Jenkins初始配置
3.1 解锁Jenkins
打开浏览器输入jenkins的服务器地址,如:http://172.19.82.206:8081/ ,首次访问 Jenkins 页面如下:
- 默认情况下,Jenkins在端口8080上运行,这里我们用的是8081端口,因此我们将使用ufw打开该端口:
sudo ufw allow 8081
- 检查UFW的状态可以看到新的规则:
sudo ufw status
- 查看端口情况:
sudo netstat -plntu
可以看到页面提示需要输入解锁 Jenkins 的管理员密码,在上一步中我们获取到的密码直接输入即可,如果没有获取到,根据页面上的提示,cat /opt/jenkins/secrets/initialAdminPassword
就可以看到这个密码。
输入密码点击 继续
按钮解锁,等待一段时间后,页面跳转到插件安装页面,如下图:
- 如果
3.2 安装推荐的插件
选择安装推荐的插件,需要等待一段时间:
如果提示 部分插件安装失败,请重试或继续
,可以多点击几次重试看能否安装成功(可能是因为下载慢的问题导致失败,多重试几次的话一般都会安装好的)。如果还是有部分插件安装失败了,我们也可以点击 继续
按钮开始下一步(后续再单独安装失败的插件)。
- 若插件下载很慢,可以参考 5、插件下载慢的解决办法来解决
推荐需要安装的插件
- Multiple SCMs:多版本管理
- Rebuilder:重新构建
- Safe Restart:安全重启
- Pipeline:流水线
- Text Finder:文件信息查找
- Blue Ocean:美化jenkins界面
- Allure
插件安装错误信息
部分插件由于缺少依赖无法加载。要恢复这些插件提供的功能,需要修复这些问题并重启 Jenkins。
Dependency errors:
Credentials Plugin (1126.ve05618c41e62)
Jenkins (2.340) or higher required
由于一个或者多个上面的错误导致这些插件无法加载。修复后插件将会再次加载。
Indirectly dependent plugins:
Credentials Binding Plugin (523.vd859a_4b_122e6)
Failed to load: Credentials Plugin (credentials 1126.ve05618c41e62)
Pipeline: Declarative Extension Points API (2.2077.vc78ec45162f1)
Failed to load: Credentials Binding Plugin (credentials-binding 523.vd859a_4b_122e6)
上述错误表示 Credentials Plugin
插件需要 Jenkins 的版本为 2.340及以上,在Jenkins的home目录下,执行 cat config.xml
查看Jenkins的版本号为2.332.2,所以需要升级 Jenkins。
从 官网或清华大学开源软件镜像站 下载高版本的war包,重新部署。
3.3 创建管理员账户
插件安装完成后,系统将提示您设置第一个管理用户。填写所有必需的信息,然后单击 保存并完成
。
3.4 实例设置
该配置页将要求您为 Jenkins 实例设置 URL。该字段将填充自动生成的 URL。
什么都不要改,单击 保存并完成
。进入下一个页面,提示Jenkins已就绪!
,单击 开始使用Jenkins
按钮开启Jenkins之旅。
至此,Jenkins的安装设置过程全部完成。
如果在安装插件时有很多安装失败的,建议此时重启一下Jenkins。
4、Jenkins系统管理配置
在Jenkins首页,点击左侧 Manage Jenkiins
,进入Jenkins基本系统设置,如下图:
4.1 插件配置
首先我们会看到Jenkins初始化配置时,部分插件安装失败的原因,可以根据提示进行纠正,点 纠正
按钮可以进入插件管理页面。你可以在可用插件列表中安装你所需要的插件,在已安装列表中看到你已经安装的所有插件。
检查如下这两个插件是否已安装
- 插件1:Publish over SSH
- 插件2:Deploy to container Plugin
往下拉动网页,我们可以看到很多配置功能,如系统配置、全局工具配置、插件管理等。插件管理进入的页面如上图。
4.2 系统配置
进入系统配置界面。增加系统管理员邮件地址:
添加编码全局属性:
找到全局属性,选中环境变量前的复选框,新增1个键值对,键为 LANG
,值为 zh_CN.UTF-8
。
其他的属性可用默认配置,点击页面下方的 保存
按钮退出。
4.3 添加全局工具配置
4.3.1 配置JDK,不采用自动安装
因为jdk是安装Jenkins的必要提交,服务器已安装了,所以直接使用这个配置就可以。jdk的home路径:/usr/java/jdk1.8.0_291
。jdk路径可以在
Manage Jenkiins
- System Information
中看到。
- 可以通过
echo $JAVA_HOME
得到jdk的home路径
配置jdk,不要勾选自动安装前面的复选框。
4.3.2 配置git,不采用自动安装
如过Global Tool Configuration全局工具配置下没有git配置,这时候需要取插件配置页下载插件 Git plugin
, 安装后就会显示出git了。
配置git,不要勾选自动安装前面的复选框。git的home路径 /usr/bin/git
。
4.3.3 配置maven,不采用自动安装
配置maven,不要勾选自动安装前面的复选框。maven的home路径 /usr/local/maven/apache-maven-3.8.5
。
4.4 全局安全配置
4.4.1 配置用户相关的权限
- Jenkins 初始化过程中会先注册一个管理员用户
- 管理员用户再创建后续的一般用户
- 管理员用户登录进行后续配置
- 启用用户安全配置,Manage Jenkins -> Configure Global Security
注册用户的操作的权限控制
- 必须由管理员来完成
- 用户可以自由注册,启用之后在Jenkins首页可以看到Sign-up入口
- 注册权限配置位置在“Configure Global Security”,团队规模不大(10人左右)建议不要启用用户自由注册选项,减少用户管理时间成本。
配置好权限之后,管理员可以从后台直接添加用户,从Jenkins管理控制台页面 -> Manage Jenkins -> Manage Users -> 新建用户。同时可以设置用户权限。
4.4.2 配置钩子程序访问权限
配置钩子程序(当用代码更新时通知)访问权限,避免报403错误。默认是勾选上了的,这里去掉勾选。
以上即为需要设置的系统配置,配置完成后点 保存
按钮完成配置。
5、插件下载慢的解决办法
看到好多加速Jenkins安装插件速度的文章,大多数教程中都是在插件配置里使用从 https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
替换原来的官方的json,我们来看看清华源拉下来的是什么,这里使用官方的下载插件的url全局搜索:
这里我们发现,每个插件下载路径依旧没有改变,变的只是这个json是从清华源下来的,其内写死的插件下载地址是没有变的,还是从官网下载!所以无论是更换还是没更换镜像json,下载插件的速度其实是没有变的!下面我们使用正确的方式来加速插件下载。
实际加速配置的json在Jenkins的工作目录中,
$ cd {你的Jenkins工作目录}/updates #进入更新配置位置
5.1 第一种方式:使用vim
$ vim default.json #这个Json文件与上边的配置文件是相同的
使用vim的命令,如下,替换所有插件下载的url
:1,$s/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g
替换连接测试url
:1,$s/http:\/\/www.google.com/https:\/\/www.baidu.com/g
进入vim先输入
:
然后再粘贴上边的:
后边的命令,注意不要写两个冒号!
修改完成保存退出:wq!
5.2 第二种方式:使用sed
$ sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json
这是直接修改的配置文件,如果前边Jenkins用sudo启动的话,那么这里的两个sed前均需要加上sudo
重启Jenkins,安装插件试试,简直超速!!
5.3 自己下载插件安装
如果按照上述步骤操作都有问题的话,那么你就只能自己下载插件自己导入安装了!!而且安装完以后还是会报错,说什么缺少依赖了!比如报如下所示的错误或者警告:
部分插件由于缺少依赖无法加载。要恢复这些插件提供的功能,需要修复这些问题并重启 Jenkins。
报错解决过程
GitHub API Plugin v1.86
jackson2-api v2.7.3 is missing. To fix, install v2.7.3 or later.
Pipeline: REST API Plugin v2.9
jackson2-api v2.7.3 is missing. To fix, install v2.7.3 or later.
GitHub plugin v1.28.0
GitHub API Plugin v1.86 failed to load. Fix this plugin first.
Pipeline v2.5
Pipeline: Stage View Plugin v2.9 failed to load. Fix this plugin first.
Pipeline: Stage View Plugin v2.9
Pipeline: REST API Plugin v2.9 failed to load. Fix this plugin first.
GitHub Branch Source Plugin v2.2.3
GitHub plugin v1.28.0 failed to load. Fix this plugin first.
根据上面的提示我们需要安装以下两个依赖:
- jackson-api v2.7.3
- GitHub API Plugin v1.86
-
ctrl+f
弹出搜索框中输入jackson
,可以看到如下界面,点击进去,选择2.73版本下载下来到本地。(github api plugin类似)
- 进入Jenkins的插件管理界面–>高级–>选择文件–>上传,分别上传两个插件。
- 点击上传后,就会跳转到安装进度页面,安装完成后,提示需要重启。(可以把所有插件安装好后再重启)
- 重启
可以直接在后台使用命令 ps -ef|grep jenkins
或 ps -ef|grep java
查看进程号,然后使用 kill 端口
结束进程。之后重新启动即可。再次进入系统管理界面,已经不提示错误了。
也可以通过 http://ip:port/restart
方式重启。
插件安装示例
例如我要使用gitlab的钩子功能,安装过程如下:
系统管理–>管理插件–>可选插件–>输入插件名–>勾选相应插件–>点击直接安装。
安装完成后最好勾选重启,确保不会出问题
评论区