Jenkins - 安装和配置
# 持续集成流程说明
- 首先,开发人员每天进行代码提交,提交到 Git 仓库
- 然后,Jenkins 作为持续集成工具,使用 Git 工具到 Git 仓库拉取代码到集成服务器,再配合 JDK,Maven 等软件完成代码编译,代码测试与审查,测试,打包等工作,在这个过程中每一步出错,都重新再执行一次整个流程
- 最后,Jenkins把生成的jar或war包分发到测试服务器或者生产服务器,测试人员或用户就可以访问应用
# Gitlab 代码托管服务器安装
# Gitlab 简介
官网: https://about.gitlab.com/。
GitLab 是一个用于仓库管理系统的开源项目,使用 Git 作为代码管理工具,并在此基础上搭建起来的 Web 服务。
GitLab 和 GitHub 一样属于第三方基于 Git 开发的作品,免费且开源(基于 MIT 协议),与 Github 类似, 可以注册用户,任意提交你的代码,添加 SSH Key 等等。不同的是,GitLab 是可以部署到自己的服务器上,数据库等一切信息都掌握在自己手上,适合团队内部协作开发,你总不可能把团队内部的智慧总放在别人的服务器上吧?简单来说可把 GitLab 看作个人版的 GitHub。
# 在 SSH 下安装
官方安装文档:https://gitlab.cn/install/?version=ce
# 安装依赖
sudo yum install -y curl policycoreutils-python openssh-server perl
sudo systemctl enable sshd
sudo systemctl start sshd
2
3
# 配置镜像
curl -fsSL https://packages.gitlab.cn/repository/raw/scripts/setup.sh | /bin/bash
# 开始安装
sudo EXTERNAL_URL="http://192.168.44.103" yum install -y gitlab-jh
除非您在安装过程中指定了自定义密码,否则将随机生成一个密码并存储在 /etc/gitlab/initial_root_password
文件中(出于安全原因,24 小时后,此文件会被第一次 gitlab-ctl reconfigure
自动删除,因此若使用随机密码登录,建议安装成功初始登录成功之后,立即修改初始密码)。使用此密码和用户名 root
登录。
# GitLab 常用命令
gitlab-ctl start # 启动所有 gitlab 组件;
gitlab-ctl stop # 停止所有 gitlab 组件;
gitlab-ctl restart # 重启所有 gitlab 组件;
gitlab-ctl status # 查看服务状态;
gitlab-ctl reconfigure # 启动服务;
vi /etc/gitlab/gitlab.rb # 修改默认的配置文件;
gitlab-ctl tail # 查看日志;
2
3
4
5
6
7
8
# 在 Docker 下安装
https://docs.gitlab.cn/jh/install/docker.html
安装所需最小配置
- 内存至少 4G
- 系统内核至少在 3.10 以上
uname -r
命令可查看系统内核版本
# 安装 Docker
- 更新 yum 源
yum update
- 安装依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
- 添加镜像
# 国外镜像
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 阿里镜像
https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2
3
4
5
- 查看源中可使用版本
yum list docker-ce --showduplicates | sort -r
- 安装指定版本
yum install docker
- 配置开机启动项
systemctl start docker
systemctl enable docker
docker version
2
3
# 使用容器安装 GitLab
- 添加容器
docker run --detach \
--hostname 192.168.44.103 \
--publish 443:443 --publish 80:80 \
--name gitlab \
--restart always \
--volume $GITLAB_HOME/config:/etc/gitlab:Z \
--volume $GITLAB_HOME/logs:/var/log/gitlab:Z \
--volume $GITLAB_HOME/data:/var/opt/gitlab:Z \
--shm-size 256m \
registry.gitlab.cn/omnibus/gitlab-jh:latest
2
3
4
5
6
7
8
9
10
- 启动容器
docker start gitlab
- 查看已存在的容器
docker ps -a
- 进入容器
docker exec -it gitlab /bin/bash
# 访问
http://192.168.44.101
当首次运行出现 502 错误的时候排查两个原因
- 虚拟机内存至少需要 4G
- 稍微再等等刷新一下可能就好了
# 管理员账号登录
用户名:root
密码存在下面文件中,登录后需要改密码不然 24 小时之后会失效
cat /etc/gitlab/initial_root_password
# JDK 安装
检索可用包
yum search java|grep jdk
安装
yum install java-1.8.0-openjdk
首次启动W ar 包会在 /root/.jenkins
生成配置文件
待完全启动成功后 访问服务器 8080 端口完成配置
初始化后的密码:
Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:
4e67bbe261da476abdc63c5b51311646
This may also be found at: /root/.jenkins/secrets/initialAdminPassword
2
3
4
5
6
密码文件使用后会自动删除。
# jenkins 安装
官方文档介绍非常详细:https://www.jenkins.io
下载页面:https://jenkins.io/zh/download/
# Jenkins 插件管理
Jenkins 本身不提供很多功能,我们可以通过使用插件来满足我们的使用。例如从 Gitlab 拉取代码,使用 Maven 构建项目等功能需要依靠插件完成。接下来演示如何下载插件。
# 修改 Jenkins 插件下载地址
Jenkins 国外官方插件地址下载速度非常慢,所以可以修改为国内插件地址:
Jenkins -> Manage Jenkins -> Manage Plugins,点击 Available,此时他会把 Jenkins 官方的插件列表下载到本地,等下载完后,我们就修改为国内地址。
先进入插件地址
cd /var/lib/jenkins/updates
复制下面命令,切换国内地址:
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
最后在 Manage Plugins 点击 Advanced,把 Update Site 改为国内插件下载地址:
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
Sumbit 后,在浏览器输入: http://112.74.169.231:8087/restart,重启 Jenkins。
# 下载中文汉化插件
Jenkins -> Manage Jenkins -> Manage Plugins,点击 Available,搜索 Chinese
,然后点击 Install without restart
进行安装。
最后重启 Jenkins 后,就看到 Jenkins 汉化了。(PS:但可能部分菜单汉化会失败)
# Jenkins 用户权限管理
我们可以利用 Role-based Authorization Strategy 插件来管理 Jenkins 用户权限。
先去安装 Role-based Authorization Strategy 插件
开启权限全局安全配置
授权策略切换为「Role-Based Strategy」,保存
# 创建角色
在系统管理页面进入 Manage and Assign Roles
点击 Manage Roles
- Global roles(全局角色):管理员等高级用户可以创建基于全局的角色
- Project roles(项目角色):针对某个或者某些项目的角色 Slave roles(奴隶角色):节点相关的权限
我们添加以下三个角色:
- baseRole:该角色为全局角色。这个角色需要绑定 Overall 下面的 Read 权限,是为了给所有用户绑定最基本的 Jenkins 访问权限。注意:如果不给后续用户绑定这个角色,会报错误:
用户名 is missing the Overall/Read permission
- role1:该角色为项目角色。使用正则表达式绑定
kbt.*
,意思是只能操作 kbt 开头的项目 - role2:该角色也为项目角色。绑定
youngkbt.*
,意思是只能操作 youngkbt 开头的项目
# 创建用户
在系统管理页面进入 Manage Users,接着点击新建用户,分别创建两个用户:jack 和 eric。
# 给用户分配角色
系统管理页面进入 Manage and Assign Roles,点击 Assign Roles。
绑定规则如下:
- eric 用户分别绑定 baseRole 和 role1 角色
- jack 用户分别绑定 baseRole 和 role2 角色
# 创建项目测试权限
以 youngkbt 管理员账户创建两个项目,分别为 kbt01 和 youngkbt01
结果为:
- eric 用户登录,只能看到 kbt01 项目
- jack 用户登录,只能看到 youngkbt01 项目
# 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 工具到 Gitlab 拉取项目源码为例,演示 Jenkins 的如何管理 Gitlab 的凭证。
# 安装 Git 插件和 Git 工具
为了让 Jenkins 支持从 Gitlab 拉取源码,需要安装 Git 插件以及在 CentOS 7 上安装 Git 工具。
Git 插件安装:
CentOS7 上安装 Git 工具:
yum install git -y # 安装
git --version # 安装后查看版本
2
# 用户密码类型
创建凭证
Jenkins -> 凭证 -> 系统 -> 全局凭证 -> 添加凭证
选择 Username with password
,输入 Gitlab 的用户名和密码,点击确定。
测试凭证是否可用
创建一个 FreeStyle 项目:新建 Item -> FreeStyle Project -> 确定。
找到 源码管理 -> Git,在 Repository URL 复制 Gitlab 中的项目 URL
因为项目的分支是 master 分支,所以下面的地址改为 */master
保存配置后,点击构建 Build Now 开始构建项目
查看 /var/lib/jenkins/workspace/
目录,发现已经从 Gitlab 成功拉取了代码到 Jenkins 中。
# SSH 密钥类型
SSH 免密登录示意图
使用 root 用户生成公钥和私钥
ssh-keygen -t rsa
在 /root/.ssh/
目录保存了公钥和使用
- id_rsa:私钥文件
- id_rsa.pub:公钥文件
把生成的公钥放在 Gitlab 中
以 root 账户登录 -> 点击头像 -> Settings -> SSH Keys
复制刚才 id_rsa.pub 文件的内容到这里,点击 Add Key
在 Jenkins 中添加凭证,配置私钥
在 Jenkins 添加一个新的凭证,类型为 SSH Username with private key
,把刚才生成私有文件内容复制过来
测试凭证是否可用
新建 test02 项目 -> 源码管理 -> Git,这次要使用 Gitlab 的 SSH 连接,并且选择 SSH 凭证。
同样尝试构建项目,如果代码可以正常拉取,代表凭证配置成功。
# Maven 安装和配置
在 Jenkins 集成服务器上,我们需要安装 Maven 来编译和打包项目。
# 安装 Maven
先上传 Maven 压缩包到服务器
tar -xzf apache-maven-3.6.2-bin.tar.gz # 解压
mkdir -p /opt/maven # 创建目录
mv apache-maven-3.6.2/* /opt/maven # 移动文件
2
3
配置环境变量
vi /etc/profile
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export MAVEN_HOME=/opt/maven
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin
2
3
source /etc/profile # 配置生效
mvn -v # 查看 Maven 版本
2
# 全局工具配置关联 JDK 和 Maven
Jenkins -> Global Tool Configuration -> JDK -> 新增 JDK,配置如下:
Jenkins -> Global Tool Configuration -> Maven -> 新增 Maven,配置如下:
# 添加 Jenkins 全局变量
Manage Jenkins -> Configure System -> Global Properties,添加三个全局变量 JAVA_HOME、M2_HOME、PATH+EXTRA
修改 Maven 的 settings.xml
mkdir /root/repo # 创建本地仓库目录
vi /opt/maven/conf/settings.xml
2
本地仓库改为:/root/repo/
添加阿里云私服地址:
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
2
3
4
5
# 测试 Maven 是否配置成功
使用之前的 Gitlab 密码测试项目,修改配置:
构建 -> 增加构建步骤 -> Execute Shell
输入
mvn clean package
再次构建,如果可以把项目打成 War 包,代表 Maven 环境配置成功啦。
# Tomcat 安装和配置
安装 Tomcat8.5。
把 Tomcat 压缩包上传到服务器
tar -xzf apache-tomcat-8.5.47.tar.gz # 解压
mkdir -p /opt/tomcat # 创建目录
mv /root/apache-tomcat-8.5.47/* /opt/tomcat # 移动文件
/opt/tomcat/bin/startup.sh # 启动tomcat
2
3
4
注意:服务器已经关闭了防火墙,所以可以直接访问 Tomcat 啦。
地址为:http://IP 地址:8080
# 配置 Tomcat 用户角色权限
默认情况下 Tomcat 是没有配置用户角色权限的。
但是,后续 Jenkins 部署项目到 Tomcat 服务器,需要用到 Tomcat 的用户,所以修改 Tomcat 以下配置,添加用户及权限
vi /opt/tomcat/conf/tomcat-users.xml
内容如下:
<tomcat-users>
<role rolename="tomcat"/>
<role rolename="role1"/>
<role rolename="manager-script"/>
<role rolename="manager-gui"/>
<role rolename="manager-status"/>
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<user username="tomcat" password="tomcat" roles="manager-gui,managerscript,tomcat,admin-gui,admin-script"/>
</tomcat-users>
2
3
4
5
6
7
8
9
10
用户和密码都是:tomcat。
注意:为了能够刚才配置的用户登录到 Tomcat,还需要修改以下配置:
vi /opt/tomcat/webapps/manager/META-INF/context.xml
<!--
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
-->
2
3
4
把上面这行注释掉即可。
重启 Tomcat,访问测试
/opt/tomcat/bin/shutdown.sh # 停止
/opt/tomcat/bin/startup.sh # 启动
2
访问:http://IP地址:8080/manager/html
,看到以下页面代表成功啦。