Skip to content
0

Jenkins - 安装和配置

持续集成流程说明

image-20220822224205145

  • 首先,开发人员每天进行代码提交,提交到 Git 仓库
  • 然后,Jenkins 作为持续集成工具,使用 Git 工具到 Git 仓库拉取代码到集成服务器,再配合 JDK,Maven 等软件完成代码编译,代码测试与审查,测试,打包等工作,在这个过程中每一步出错,都重新再执行一次整个流程
  • 最后,Jenkins 把生成的 jar 或 war 包分发到测试服务器或者生产服务器,测试人员或用户就可以访问应用

Gitlab 代码托管服务器安装

Gitlab 简介

image-20220822224332254

官网: https://about.gitlab.com/。

GitLab 是一个用于仓库管理系统的开源项目,使用 Git 作为代码管理工具,并在此基础上搭建起来的 Web 服务。

GitLab 和 GitHub 一样属于第三方基于 Git 开发的作品,免费且开源(基于 MIT 协议),与 Github 类似, 可以注册用户,任意提交你的代码,添加 SSH Key 等等。不同的是,GitLab 是可以部署到自己的服务器上,数据库等一切信息都掌握在自己手上,适合团队内部协作开发,你总不可能把团队内部的智慧总放在别人的服务器上吧?简单来说可把 GitLab 看作个人版的 GitHub。

在 SSH 下安装

官方安装文档:https://gitlab.cn/install/?version=ce

安装依赖

sh
sudo yum install -y curl policycoreutils-python openssh-server perl
sudo systemctl enable sshd
sudo systemctl start sshd

配置镜像

sh
curl -fsSL https://packages.gitlab.cn/repository/raw/scripts/setup.sh | /bin/bash

开始安装

sh
sudo EXTERNAL_URL="http://192.168.44.103" yum install -y gitlab-jh

除非您在安装过程中指定了自定义密码,否则将随机生成一个密码并存储在 /etc/gitlab/initial_root_password 文件中(出于安全原因,24 小时后,此文件会被第一次 gitlab-ctl reconfigure 自动删除,因此若使用随机密码登录,建议安装成功初始登录成功之后,立即修改初始密码)。使用此密码和用户名 root 登录。

GitLab 常用命令

sh
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                   # 查看日志;

在 Docker 下安装

https://docs.gitlab.cn/jh/install/docker.html

安装所需最小配置

  • 内存至少 4G
  • 系统内核至少在 3.10 以上 uname -r 命令可查看系统内核版本

安装 Docker

  1. 更新 yum 源
sh
yum update
  1. 安装依赖
sh
yum install -y yum-utils device-mapper-persistent-data lvm2
  1. 添加镜像
sh
# 国外镜像
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
  1. 查看源中可使用版本
sh
 yum list docker-ce --showduplicates | sort -r
  1. 安装指定版本
sh
yum install docker
  1. 配置开机启动项
sh
systemctl start docker
systemctl enable docker
docker version

使用容器安装 GitLab

  1. 添加容器
shell
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
  1. 启动容器
shell
docker start gitlab
  1. 查看已存在的容器
shell
docker ps -a
  1. 进入容器
docker exec -it  gitlab /bin/bash

访问

http://192.168.44.101

当首次运行出现 502 错误的时候排查两个原因

  1. 虚拟机内存至少需要 4G
  2. 稍微再等等刷新一下可能就好了

image-20220822224900683

管理员账号登录

用户名:root

密码存在下面文件中,登录后需要改密码不然 24 小时之后会失效

sh
cat /etc/gitlab/initial_root_password

JDK 安装

检索可用包

yum search java|grep jdk

安装

yum install java-1.8.0-openjdk

首次启动 W ar 包会在 /root/.jenkins 生成配置文件

待完全启动成功后 访问服务器 8080 端口完成配置

初始化后的密码:

sh
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

密码文件使用后会自动删除。

jenkins 安装

官方文档介绍非常详细:https://www.jenkins.io

下载页面:https://jenkins.io/zh/download/

Jenkins 插件管理

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

修改 Jenkins 插件下载地址

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

Jenkins -> Manage Jenkins -> Manage Plugins,点击 Available,此时他会把 Jenkins 官方的插件列表下载到本地,等下载完后,我们就修改为国内地址。

先进入插件地址

sh
cd /var/lib/jenkins/updates

复制下面命令,切换国内地址:

sh
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 改为国内插件下载地址:

http
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 插件

image-20220822233130427

开启权限全局安全配置

image-20220822233145016

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

创建角色

在系统管理页面进入 Manage and Assign Roles

image-20220822233324434

点击 Manage Roles

image-20220822233424956

  • 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 插件。

image-20220822233957016

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

image-20220822234019202

可以添加的凭证有 5 种:

image-20220822234033594

  • 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 插件安装:

image-20220822234303850

CentOS7 上安装 Git 工具:

sh
yum install git -y # 安装
git --version # 安装后查看版本

用户密码类型

创建凭证

Jenkins -> 凭证 -> 系统 -> 全局凭证 -> 添加凭证

image-20220822234437657

image-20220822234517365

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

测试凭证是否可用

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

找到 源码管理 -> Git,在 Repository URL 复制 Gitlab 中的项目 URL

image-20220822234635824

image-20220822234747295

因为项目的分支是 master 分支,所以下面的地址改为 */master

image-20220822234808218

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

image-20220822234927473

image-20220822234944973

查看 /var/lib/jenkins/workspace/ 目录,发现已经从 Gitlab 成功拉取了代码到 Jenkins 中。

SSH 密钥类型

SSH 免密登录示意图

image-20220822235020472

使用 root 用户生成公钥和私钥

sh
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,把刚才生成私有文件内容复制过来

image-20220822235314726

测试凭证是否可用

新建 test02 项目 -> 源码管理 -> Git,这次要使用 Gitlab 的 SSH 连接,并且选择 SSH 凭证。

同样尝试构建项目,如果代码可以正常拉取,代表凭证配置成功。

Maven 安装和配置

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

安装 Maven

先上传 Maven 压缩包到服务器

sh
tar -xzf apache-maven-3.6.2-bin.tar.gz # 解压
mkdir -p /opt/maven # 创建目录
mv apache-maven-3.6.2/* /opt/maven # 移动文件

配置环境变量

sh
vi /etc/profile
sh
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
sh
source /etc/profile # 配置生效
mvn -v # 查看 Maven 版本

全局工具配置关联 JDK 和 Maven

Jenkins -> Global Tool Configuration -> JDK -> 新增 JDK,配置如下:

image-20220822235558796

Jenkins -> Global Tool Configuration -> Maven -> 新增 Maven,配置如下:

image-20220822235628384

添加 Jenkins 全局变量

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

image-20220822235824139

修改 Maven 的 settings.xml

sh
mkdir /root/repo # 创建本地仓库目录
vi /opt/maven/conf/settings.xml

本地仓库改为:/root/repo/

添加阿里云私服地址:

xml
<mirror>
    <id>nexus</id>
    <mirrorOf>*</mirrorOf>
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>

测试 Maven 是否配置成功

使用之前的 Gitlab 密码测试项目,修改配置:

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

image-20220822235957100

输入

sh
mvn clean package

image-20220823000018310

再次构建,如果可以把项目打成 War 包,代表 Maven 环境配置成功啦。

Tomcat 安装和配置

安装 Tomcat8.5。

把 Tomcat 压缩包上传到服务器

sh
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

注意:服务器已经关闭了防火墙,所以可以直接访问 Tomcat 啦。

地址为:http://IP 地址:8080

配置 Tomcat 用户角色权限

默认情况下 Tomcat 是没有配置用户角色权限的。

image-20220823000255809

但是,后续 Jenkins 部署项目到 Tomcat 服务器,需要用到 Tomcat 的用户,所以修改 Tomcat 以下配置,添加用户及权限

sh
vi /opt/tomcat/conf/tomcat-users.xml

内容如下:

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>

用户和密码都是:tomcat。

注意:为了能够刚才配置的用户登录到 Tomcat,还需要修改以下配置:

sh
vi /opt/tomcat/webapps/manager/META-INF/context.xml
xml
<!--
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
	allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
-->

把上面这行注释掉即可。

重启 Tomcat,访问测试

sh
/opt/tomcat/bin/shutdown.sh # 停止
/opt/tomcat/bin/startup.sh # 启动

访问:http://IP地址:8080/manager/html,看到以下页面代表成功啦。

image-20220823000528343

最近更新