作者:优秀的颜
链接:https://zhuanlan.zhihu.com/p/1947789995810223544
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Jenkins

是一个开源软件项目,是基于Java开发的一种持续集成工具。

前提准备:3台服务(操作系统:CentOS Stream 8 64位),分别部署GitLab、Jenkins(JDK、Maven、Git)、测试服务器(jar包项目、JDK)

官网:jenkins.io/

机器1:GitLab安装使用

安装前提:内存至少需要4G

官方网站:about.gitlab.com/

安装文档:docs.gitlab.cn/jh/insta

安装包:packages.gitlab.cn/#

安装指南:gitlab.cn/install/

安装极狐GitLab指导文档:gitlab.cn/docs/jh/insta

基于ssh下安装

1 安装依赖

sudo yum install -y curl policycoreutils-python openssh-server perl
sudo systemctl enable sshd
sudo systemctl start sshd
# 会在系统防火墙中打开 HTTP、HTTPS 和 SSH 访问
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo systemctl reload firewalld

2 配置镜像

# 需要一些时间
curl -fsSL https://packages.gitlab.cn/repository/raw/scripts/setup.sh | /bin/bash

3 开始安装

# gitlab的访问地址,自己的站点ip地址,如果是公式,配置对应的域名,也需要时间
sudo EXTERNAL_URL="http://127.0.0.1" yum install -y gitlab-jh

在安装过程中指定自定义密码,否则会随机生成密码,存储在 /etc/gitlab/initial_root_password 中(该文件在24 小时后会自动删除,建议安装成功,立即修改初始密码)使用此密码和用户名 root 登录。

# 查看初始密码
cat /etc/gitlab/initial_root_password

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

4 安装完成

安装完成,访问设置的IP地址,如果出现502的情况,需要再等待一会,在进入,输入用户名(root)和密码,进行登录。

在菜单 – 管理员 – 用户 – 找到自己的用户,进行修改密码。

5 设置中文

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

下面有确认按钮,点击确认后,进行刷新页面,界面就变成中文了。

6 修改个人密码

在这里插入图片描述

7 创建项目

创建空白项目

在这里插入图片描述

8 提交项目

使用开发工具,进行创建新项目,进行提交代码,然后刷新GitLab页面

在这里插入图片描述

基于docker下安装

安装文档:docs.gitlab.cn/jh/insta

前提安装好docker(可在云原生专栏查看对应安装文档)

1 使用容器安装gitlab

# 创建/srv/gitlab的目录
sudo mkdir -p /srv/gitlab

# 配置一个新的环境变量 $GITLAB_HOME,设置为您创建的目录的路径
export GITLAB_HOME=/srv/gitlab

# 进行安装
docker run --detach \
  --hostname 127.0.0.1 (IP地址或者域名) \
  --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 启动容器

docker start gitlab

3 查看已存在的容器

docker ps -a

4 进入容器

# 进入容器内部
docker exec -it  gitlab /bin/bash
# 查看默认的初始的密码
cat /etc/gitlab/initial_root_password
# 退出容器
exit

5 安装完成

安装完成,访问设置的IP地址,如果出现502的情况,需要再等待一会,在进入,输入用户名(root)和密码,进行登录。

在菜单 – 管理员 – 用户 – 找到自己的用户,进行修改密码。

机器2:Jenkins安装

安装前提:内存至少512MB、Java 17 以上、Maven环境、Git环境

官方文档:jenkins.io

中文版:jenkins.io/zh/

中文下载地址:jenkins.io/zh/download/

建议下载最新版本的,可以避免很多插件安装不兼容的问题。

在这里插入图片描述

1 安装JDK

oracle官网 oracle.com

下载包地址:oracle.com/java/technol

# 安装jdk11,安装哪个版本与jdk有关
sudo dnf install -y java-17-openjdk-devel
# 安装完,查看版本
java -version

2 安装Maven

官网:maven.apache.org/downlo

Maven的安装,找到最新的版本,下载后复制到所在服务器解压缩就可以。

# 创建maven安装目录(maven目录)
mkdir /usr/local/maven
# 进入该目录
cd /usr/local/maven
# 将下载的本地包,上传到服务器上

# 压缩包进行解压
tar -zxvf apache-maven-3.6.1-bin.tar.gz
# 下一步,配置环境变量、修改Maven的setting.xml配置文件
# 验证是否安装成功
mvn -v

安装JDK和Maven详细步骤(可在云原生专栏查看对应安装文档)

3 安装Git

yum install git
# 查看是否成功
git

4 安装 Jenkins

# 创建jenkins(maven目录)
mkdir /usr/local/jenkins
# 进入该目录
cd /usr/local/jenkins
# 把下载好的jenkins.war(从官网下载),上传到服务器上
# 通过ls,查看是否上传成功
ls

# 查看java进程
ps -ef | grep java

# 然后进行运行该包(默认端口是8080,需要安全组开放此端口)
java -jar jenkins.war
nohup java -jar jenkins.war > /dev/null 2>&1 &

# 首次启动war包会在`/root/.jenkins/xxxx`生成配置文件,
# 初始化后的密码:(注意密码查看后会消失)
Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:
xxxxxx(初始密码)

# 查看密码,方式之一:
cat /root/.jenkins/secrets/initialAdminPassword
# 查看密码,方式之二:在启动页,下图可以看到密码
在这里插入图片描述

5 访问页面

# 1.得到初始密码后,进行访问:如:http://127.0.0.1:8080
# 2.在管理员密码,输入初始密码
# 3.在自定义Jenkins,选择安装推荐的插件【左侧】,(此时需要等待一下)
# 4.然后创建一个管理员用户

步骤1:页面访问

在这里插入图片描述

步骤2:安装插件

选择安装推荐的插件【左侧】,(此时需要等待一下),如果插件安装失败也没关系。

如果选择插件来安装【右侧】,再点击无,不安装任何插件,再点击安装,也可以。

步骤3:创建管理员用户

下面,在自定义Jenkins,选择安装推荐的插件【左侧】,安装完,点击继续,有一个图(输入初始化管理员密码)

在这里插入图片描述
在这里插入图片描述

步骤4:安装成功

在这里插入图片描述

步骤5:配置镜像地址

如果之前插件安装失败,我们需要将Jenkins插件管理切换国内源地址,按下图进行操作。

# 找到 config.xml 文件,可以通过该命令找到jenkins的存在的工作目录
find / -name config.xml
# 进行备份config.xml文件
cp /root/.jenkins/config.xml /root/.jenkins/config.xml.bak

# 进入jenkins的配置插件下载路径的目录
cd /root/.jenkins/

# 查看有哪些文件
ls

# 在.jenkins 中,找到 hudson.model.UpdateCenter.xml 文件打开
vim hudson.model.UpdateCenter.xml 
# 将 https://updates.jenkins.io/update-center.json 替换成国内镜像网址(需要管理员权限修改)
# 国内镜像网址:
#   https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
#   https://archives.jenkins.io/updates/update-center.json
#   https://repo.huaweicloud.com/jenkins/updates/update-center.json
# 国外镜像网址:https://mirror.xmission.com/jenkins/updates/update-center.json

# 再进入到 updates 目录下,
cd updates

# 查看有哪些文件
ls

# 编辑 default.json 文件,将该文件中国外的地址全部替换成国内的
vim default.json
# 将 https://www.google.com 替换成 https://www.baidu.com
#   https://updates.jenkins.io/download 替换成 https://mirrors.tuna.tsinghua.edu.cn/jenkins

替换国内插件更新地址

在这里插入图片描述

配置完,输入地址栏:IP地址:8080/restart,进行重启,重启后需要一些时间,耐心等待。

6 页面配置

配置文件的位置

在这里插入图片描述

插件安装

Maven插件

在这里插入图片描述

安装完,下滑可以查看进度情况。该Maven插件需要安装。

Publish Over SSH插件

在这里插入图片描述

blue ocean

blue ocean – 可视化流水线界面

配置Maven

/usr/local/maven/apache-maven-3.6.1
在这里插入图片描述

查看构建控制台输出

# 可点击【左侧】Builds下所构建的任务
# 构件后存在的项目目录:
cd /root/.jenkins/workspace
在这里插入图片描述

机器3:测试服务安装

需要一台测试服务,存放Jenkins打好的jar包文件,前提需要:进行安装JDK(安装步骤与上面一致)

编写Shell脚本

# 编写脚本,在root目录下
vim cmm.sh

# 内容是:
#!/bin/bash
# 删除历史数据,cmm是存jar包的目录
rm -rf cmm

# 参数:可以通过参数,把对应的jar包文件进行运行
jar_name=$1
# 获取传入的参数
echo "arg:$1"

# 获取正在运行的jar包pid
pid=`ps -ef | grep $1 | grep 'java -jar' | awk '{printf $2}'`
echo $pid

# 如果pid为空,提示一下,否则,执行kill命令
if [ -z $pid ];
# 使用-z 做空值判断
        then
             echo "$jar_name not start"
        else
             kill -9 $pid
             echo "$jar_name stoping ..."

check=`ps -ef | grep -w $pid | grep java`
if [ -z $check ];
        then
             echo "$jar_name pid:$pid is stop"
        else
             echo "$jar_name stop failed"
fi
fi

自动化部署配置

创建一个任务

按下图进行创建一个基于Maven的项目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

配置Git

在这里插入图片描述

配置Maven

如果之前配置了maven,该页面不会出现重新配置,如果没有配置,上面具体的配置步骤。

在这里插入图片描述

Post Steps(后续步骤)

在这里插入图片描述

配置测试服务器

在全局系统配置,添加测试目标服务器,前提需要安装Publish Over SSH插件。

在这里插入图片描述
在这里插入图片描述

添加好,回到Post Steps页面,进行配置。

在这里插入图片描述

注意:Exec command填写、在高级,打开勾选Exec in pty、测试服务的端口需要开放。

# jar包存放目录
**/demo/target/demo*.jar
# 忽略的目录
demo/target
# 到目标服务器的目录
/cmm
# 运行jar包
nohup /usr/local/java/jdk1.8.0_202/bin/java -jar /root/cmm/demo*.jar >/root/log/demo.log 2>&1 & sleep 1

如果:Jar包很大的话传输会超时,需要在Exec timeout (ms),增加时长。

Pre Steps(前期步骤)

在这里插入图片描述

注意:Exec command填写、在高级,打开勾选Exec in pty、测试服务的端口需要开放。

构建触发器

需要勾选该选项,如果有相同的POM文件,不再重复构建,提升效率。

在这里插入图片描述

钩子自动构件项目

只要某个分支,代码有提交,进行回调Jenkins地址,进行构建该任务。

前提需要安装插件:(Build Authorization Token Root)

在这里插入图片描述

在该项目任务,进行勾选触发远程构建,填写token。

# 如果该服务执行以下地址,会自动执行构建任务。注意:前提需要提前登录。
http://IP地址:8080/job/first/build?token=123123
# 如果不想登录,安装上面的插件,执行下面的地址
http://IP地址:8080/buildByToken/build?job=first&token=123123
# first是该构建的任务名,token是下面配置的值
在这里插入图片描述

在代码仓库,找到WebHook,进行配置Jenkins回调地址,下图以Gitee为例。

在这里插入图片描述

定时构建

通过表达式进行配置。

Crontab 表达式地址:crontab.guru

  • 第一个 * 表示每个小时的第几分钟,取值:0~59

H * * * * H:每小时执行一次

  • 第二颗 * 表示小时,取值:0~23

* 15 * * * 表示每天下午3点 * 1 * * * 表示每天凌晨1点

  • 第三颗 * 表示一个月的第几天,取值:1~31

* 1 5 * * 表示每月5日凌晨1点

  • 第四颗 * 表示第几月,取值1~12

* 15 5 1 * 表示每年几月执行

  • 第五颗 * 表示一周中的第几天,取值0~7,其中0和7代表的都是周日
  • 其他符号

“`java / : 表示每隔多长时间, 比如 /10 * * * 表示 每隔10分钟


H : hash散列值 意义在于:不同的项目在不同的时间运行,即使配置的值是一样的,比如 都是15 * * * * ,表示每个小时的第15分钟开始执行任务,那么会造成同一时间内在Jenkins中启动很多job,换成H/15 * * * *,那么在首次启动任务时,会有随机值参与进来,有的会在17分钟启动 有的会在19分钟启动,随后的启动时间也是这个值。这样就能错开相同cron值的任务执行了。 “`

常见的时间配置:

H * * * *     表示一小时内的任意时间

*/10 * * * *  每10分钟

H/10 * * * *  每10分钟,可能是7,17,27,起始时间hash,步长不变

20 1 * * 1-5  每个周一至周五,凌晨1点20 执行1次

20 3-5 * * 1-6   每个周一至周六,凌晨3点20 ,凌晨4点20,凌晨5点20 各执行1次

H(40-48) 3-5 * * 1-6  在40~48之间取值 其他同上
在这里插入图片描述

源码变更构建

这个构建是由Jenkins主动发起的,会主动定期检查代码托管服务器上是否有变化,一旦发生变化执行任务构建。

在这里插入图片描述

配置报告邮件通知

在系统配置:

在这里插入图片描述
在这里插入图片描述

在这里的添加,进行添加邮寄的服务器,用户名和授权密码。添加完,可在Credentials,显示该配置的人。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

下面进行任务栏,配置收件人邮箱,构件失败会发送邮寄通知。

在这里插入图片描述

自动化部署到Docker容器中

需要一台测试服务器,需要提前安装Docker环境,

Docker相关文档:blog.csdn.net/yanshengr

镜像地址:mirrors.tuna.tsinghua.edu.cn

Docker相关常用命令

# 查看所有本地主机上的镜像
docker images 
# 停止该容器
docker stop 容器id 
# 删除容器
docker rm 容器id 
# 删除镜像
docker rmi 镜像id

方式1:Docker外挂目录

在root目录下,创建jarfile目录,存放jar包文件。

# 创建jarfile目录,存放jar包文件
mkdir jarfile
# 我们将打服务的jar包文件,暂存该目录

拉取JDK镜像

docker pull openjdk:8

通过该镜像启动容器

# 启动容器
docker run -d -p 8090:8090 --name demo1 -v /root/jarfile/demo-1.0-SNAPSHOT.jar:/app.jar openjdk:8 java -jar app.jar
# 启动成功,访问该测试地址,是否可以访问成功。
http://xxxx:8090/home

下面,Jenkins配置docker外挂目录运行Jar包

Pre Steps(前期步骤)

在这里插入图片描述

Post Steps(后续步骤)

在这里插入图片描述

配置,进行重新构建任务,访问测试服务器地址,查看是否构建成功。

方式2:通过Dockerfile打成镜像

在代码中提交代码,创建docker目录,下有一个dockerfile文件,编写dockerfile文件

# 内容
FROM openjdk:8
EXPOSE 8090
WORKDIR /root
ADD jarfile/demo*.jar /root/app.jar
ENTRYPOINT ["java","-jar","/root/app.jar"]

打包dockerfile为镜像,镜像名为demo

# 该命令在Jenkins配置
docker build -t demo .

通过该镜像启动容器

# 该命令在Jenkins配置
docker run -d -p 8090:8090 --name demo1  demo

下面,Jenkins配置docker外挂目录运行Jar包

Pre Steps(前期步骤)

在这里插入图片描述

Post Steps(后续步骤)

填写新的(Add Transfer Set)进行配置。

在这里插入图片描述