目录

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

# 安装依赖

sudo yum install -y curl policycoreutils-python openssh-server perl
sudo systemctl enable sshd
sudo systemctl start sshd
1
2
3

# 配置镜像

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

# 开始安装

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

除非您在安装过程中指定了自定义密码,否则将随机生成一个密码并存储在 /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                   # 查看日志;

1
2
3
4
5
6
7
8

# 在 Docker 下安装

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

安装所需最小配置

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

# 安装 Docker

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

# 使用容器安装 GitLab

  1. 添加容器
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
2
3
4
5
6
7
8
9
10
  1. 启动容器
docker start gitlab
1
  1. 查看已存在的容器
docker ps -a
1
  1. 进入容器
docker exec -it  gitlab /bin/bash
1

# 访问

http://192.168.44.101

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

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

image-20220822224900683

# 管理员账号登录

用户名:root

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

cat /etc/gitlab/initial_root_password
1

# JDK 安装

检索可用包

yum search java|grep jdk
1

安装

yum install java-1.8.0-openjdk
1

首次启动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
1
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
1

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

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
1

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

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

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 工具:

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

# 用户密码类型

创建凭证

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 用户生成公钥和私钥

ssh-keygen -t rsa
1

/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 压缩包到服务器

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

配置环境变量

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

# 全局工具配置关联 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

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

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

添加阿里云私服地址:

<mirror>
    <id>nexus</id>
    <mirrorOf>*</mirrorOf> 
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
1
2
3
4
5

# 测试 Maven 是否配置成功

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

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

image-20220822235957100

输入

mvn clean package
1

image-20220823000018310

再次构建,如果可以把项目打成 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
1
2
3
4

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

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

# 配置 Tomcat 用户角色权限

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

image-20220823000255809

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

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

内容如下:

<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>
1
2
3
4
5
6
7
8
9
10

用户和密码都是:tomcat。

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

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

把上面这行注释掉即可。

重启 Tomcat,访问测试

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

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

image-20220823000528343

更新时间: 2024/01/17, 05:48:13
最近更新
01
JVM调优
12-10
02
jenkins
12-10
03
Arthas
12-10
更多文章>