跳到主要内容

Jenkins 学习使用

Jenkins 是什么?​

Jenkins是一款流行的开源持续集成(Continuous Integration)工具,广泛用于项目开发,具有自动化构建、测试和部署等功能。

它的官网地址:https://www.jenkins.io/zh/doc/pipeline/tour/getting-started/

Jenkins 具有以下特点:

  • 开源的 Java 语言开发持续集成工具,支持持续集成,持续部署。
  • 易于安装部署配置:可通过 yum 安装,或下载 war 包以及通过 docker 容器等快速实现安装部署,可方便 web 界面配置管理。
  • 消息通知及测试报告:集成 RSS/E-mail 通过 RSS 发布构建结果或当构建完成时通过 e-mail 通知,生成 jUnit/TestNG 测试报告。
  • 分布式构建:支持 Jenkins 能够让多台计算机一起构建/测试。
  • 文件识别:Jenkins 能够跟踪哪次构建生成哪些 jar,哪次构建使用哪个版本的 jar 等。
  • 丰富的插件支持:支持扩展插件,你可以开发适合自己团队使用的工具,如 git, svn, maven, docker 等。

Jenkins 安装与配置​

1、首先,开发人员每天进行代码提交,提交到 Git 仓库

2、然后,Jenkins 作为持续集成工具,使用 Git 工具到 Git 仓库拉取代码到集成服务器,再配合 JDK,Maven 等软件完成代码编译,代码测试与审查,测试,打包等工作,在这个过程中每一步出错,都重新再执行一次整个流程。

3、最后,Jenkins 把生成的 jar 或 war 包分发到测试服务器或者生产服务器,测试人员或用户就可以访问应用。

安装 GitLab​

可以使用三种不同版本的 GitLab:社区版(CE),企业版(EE)和GitLab托管的版本。 企业版要钱,所以一般使用的是 CE

CE 版地址

在我们自己安装 GitLab 之前,安装一些在安装过程中持续使用的软件非常重要。

sudo apt update
# 一般都内置
sudo apt install ca-certificates curl openssh-server postfix

至于安装邮件服务,代码审查之类的工具后面再说

首先使用以下 curl 命令将 GitLab 存储库添加到系统源列表中:

curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash

启用存储库后,通过运行以下命令来安装 GitLab 软件包。

# 因为资源服务器在海外,所以得挂代理下载
sudo proxychains apt install gitlab-ce

也可以使用自己下载包手动安装的方式:

# 在线下载安装包:
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el6/gitlab-ce-12.4.2-ce.0.el6.x86_64.rpm
# 安装:
rpm -i gitlab-ce-12.4.2-ce.0.el6.x86_64.rpm

注:不过,这个 GitLab 不是强需求,所以这里只做了解,一般企业中才需要使用 GitLab,下面使用 GitHub 来做代码托管

在 IDEA 添加版本控制​

提交代码到本地仓库

提交到本地库

添加到远程库

Jenkins 安装​

Jenkins 需要依赖 JDK,所以先安装 JDK1.8 再安装一个 Tomcat

# 添加到最后一行
export JAVA_HOME=/home/alsritter/javaTools/jdk1.8.0_121
export CLASSPATH=$JAVA_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$PATH
export JRE_HOME=${JAVA_HOME}
export TOMCAT_HOME=/home/alsritter/javaTools/apache-tomcat-7.0.75/

获取 Jenkins 安装包,下载页面:

https://www.jenkins.io/zh/download/
  1. 下载 Jenkins.
  2. 打开终端进入到下载目录.
  3. 运行命令 java -jar jenkins.war --httpPort=8080.
  4. 打开浏览器进入链接 http://localhost:8080
  5. 然后安装界面指引一步步的配置

因为 Jenkins 插件需要连接默认官网下载,速度非常慢,而且经过会失败,所以我们暂时先跳过插件安装

选择插件来安装,跳过插件安装

添加一个管理员账户,并进入 Jenkins 后台

更新 Jenkins​

注意!!! Jenkins 要安装最新版本(2.282或者更高),不然很多插件安装不了,例如下面的 SSH Credentials,而又一堆插件依赖于这个插件,所以会导致很多插件都安装不了

要更新只需要把下载的jenkins.war 替换原来的jenkins.war 就可以了 那么问题来了? 原来的 jenkins.war 到到底在哪 呀?

systemctl start jenkins
# 或者
java -jar jenkins.war --httpPort=8080

可以发现版本更新了

Jenkins 插件管理​

Jenkins 本身不提供很多功能,我们可以通过使用插件来满足我们的使用。例如从 GitHub 拉取代码,使用 Maven 构建项目等功能需要依靠插件完成。接下来演示如何下载插件。

修改 Jenkins 插件下载地址,因为 Jenkins 国外官方插件地址下载速度非常慢,所以可以修改为国内插件地址:

Jenkins => Manage Jenkins => Manage Plugins,点击 Available

这样做是为了把 Jenkins 官方的插件列表下载到本地,接着修改地址文件,替换为国内插件地址

cd /home/alsritter/.jenkins/updates/
# 找到 default.json 文件
# 替换 updates.jenkins.io/download 为 mirrors.tuna.tsinghua.edu.cn/jenkins
# 替换 www.google.com 为 www.baidu.com

最后,Manage Plugins 点击 Advanced,把 Update Site 改为国内插件下载地址

https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

Sumbit后,在浏览器输入: http://192.168.211.129:8080/restart ,重启Jenkins。

下载中文汉化插件

Jenkins => Manage Jenkins => Manage Plugins,点击 Available,搜索 "Chinese"

安装完插件最好点下面的重启,让插件生效

Jenkins 用户权限管理​

可以利用 Role-based Authorization Strategy 插件来管理 Jenkins 用户权限

安装后开启权限全局安全配置

授权策略切换为 "Role-Based Strategy",保存

创建角色​

点击 "Manage Roles"

Global roles(全局角色):管理员等高级用户可以创建基于全局的角色 Item roles(项目角色): 针对某个或者某些项目的角色 Node roles(节点角色):节点相关的权限

我们添加以下三个角色:

  • baseRole:该角色为全局角色。这个角色需要绑定 Overall 下面的 Read 权限,是为了给所有用户绑定最基本的 Jenkins 访问权限。注意:如果不给后续用户绑定这个角色,会报错误:用户名 is missing the Overall/Read permission
  • role1:该角色为项目角色。使用正则表达式绑定 "test.*",意思是只能操作 test 开头的项目。
  • role2:该角色也为项目角色。绑定 "study.*",意思是只能操作 study 开头的项目。

保存。

创建用户​

在系统管理页面进入 Manage Users

分别创建两个用户:jack 和 eric

给用户分配角色​

系统管理页面进入 Manage and Assign Roles,点击 Assign Roles 绑定规则如下:

  • eric 用户分别绑定 baseRole 和 role1 角色
  • jack 用户分别绑定 baseRole 和 role2 角色

记得保存

Jenkins 凭证管理​

凭据可以用来存储需要密文保护的数据库密码、Gitlab 密码信息、Docker 私有仓库密码等,以便 Jenkins 可以和这些第三方的应用进行交互。

安装 Credentials Binding 插件​

要在 Jenkins 使用凭证管理功能,需要安装 Credentials Binding 插件

安装插件后,左边多了"凭证"菜单,在这里管理所有凭证

可以添加的凭证有5种:

  • Username with password:用户名和密码
  • SSH Username with private key: 使用SSH用户和密钥
  • Secret file:需要保密的文本文件,使用时 Jenkins 会将文件复制到一个临时目录中,再将文件路径设置到一个变量中,等构建结束后,所复制的 Secret file 就会被删除。
  • Secret text:需要保存的一个加密的文本串,如钉钉机器人或Github的api token
  • Certificate:通过上传证书文件的方式

常用的凭证类型有:Username with password(用户密码)和 SSH Username with private key(SSH 密钥)

安装 Git 插件和 Git 工具​

Git插件安装:

再在虚拟机安装 Git

sudo apt install git

用户密码类型​

1、创建凭证 Jenkins => 凭证 => 系统 => 全局凭证 => 添加凭证

选择 "Username with password",输入 Gitee 的用户名和密码,点击"确定"。

测试凭证是否可用​

创建一个 FreeStyle 项目:新建 Item => FreeStyle Project => 确定

找到 "源码管理" => "Git",在 Repository URL 复制 Gitee 中的项目 URL

保存配置后,点击构建 “Build Now” 开始构建项目

查看 ~/.jenkins/workspace/studyjenkins 目录,发现已经从 Gitee 成功拉取了代码到 Jenkins 中。

Maven安装和配置​

在 Jenkins 集成服务器上,我们需要安装 Maven 来编译和打包项目。

sudo apt install maven
# 检查 mvn 是否安装好
mvn -v

添加 Jenkins 全局变量​

虽然 Maven 有默认配置,但是一些插件无法识别到,所以得手动加几个环境变量

Manage Jenkins => Configure System => Global Properties ,添加三个全局变量 JAVA_HOME、M2_HOME、PATH+EXTRA

注意:可以通过 mvn -v 知道 maven 安装在哪里

配置关联 JDK 和 Maven​

Jenkins => Global Tool Configuration => JDK => 新增 JDK

然后下面添加 Maven(去掉自动安装的钩)

测试 Maven 是否配置成功

使用之前的 Gitee 密码测试项目

修改配置

构建 => 增加构建步骤 => Execute Shell

命令里面加上:

mvn clean package

再次构建,如果可以把项目打包,代表 maven 环境配置成功啦!(第一次打包可能比较久)

Jenkins 构建 Maven 项目​

Jenkins 构建的项目类型介绍​

Jenkins中自动构建项目的类型有很多,常用的有以下三种:

  • 自由风格软件项目(FreeStyle Project)
  • Maven项目(Maven Project)
  • 流水线项目(Pipeline Project)

每种类型的构建其实都可以完成一样的构建过程与结果,只是在操作方式、灵活度等方面有所区别,在实际开发中可以根据自己的需求和习惯来选择。(PS:个人推荐使用流水线类型,因为灵活度非常高)

自由风格项目构建​

下面演示创建一个自由风格项目来完成项目的集成过程:

拉取代码 => 编译 => 打包 => 部署

1、创建项目

2、配置源码管理,从 Gitee 拉取代码

3、编译打包

构建 => 添加构建步骤 => Executor Shell

echo "开始编译和打包"
mvn clean package
echo "编译和打包结束"

Maven 项目构建​

这里采用 Maven 文件配置构建

1、安装 Maven Integration 插件

2、创建 Maven 项目

3、配置项目 拉取代码和远程部署的过程和自由风格项目一样,只是"构建"部分不同

这里的没有找到 pom.xml 文件可以不用管,它会自动下载上面填的 Git 远程项目里面的 pom 文件

构建错误的解决方法:

错误1: AWT is not properly configured on this server. Perhaps you need to run your container with "-Djava.awt.headless=true"? See also: https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+got+java.awt.headless+problem java.lang.UnsatisfiedLinkError: /mnt/jdk1.8/jre/lib/amd64/libawt_xawt.so: libXrender.so.1: cannot open shared object file: No such file or directory

解决:

apt-get install libxrender-dev

错误2: java.lang.UnsatisfiedLinkError: /mnt/jdk1.8/jre/lib/amd64/libawt_xawt.so: libXtst.so.6: cannot open shared object file: No such file or directory

解决:

apt-get install libxtst-dev