【Jenkins】03 - 自动构建和docker构建

发布于:2025-08-19 ⋅ 阅读:(16) ⋅ 点赞:(0)

【Jenkins】03 - 自动构建和docker构建

一:gitlab钩子(了解)

自动构建其实在实际的生产部署上并不常用,这里是简单了解下

在这里插入图片描述

1️⃣ 下载插件 -> Build Authorization Token Root

在这里插入图片描述

2️⃣ 在构建触发器部分创建token, 这样输入对应的网址就能够自动进行构建操作

在这里插入图片描述

例如上面的令牌输入的是123123

这样一来在已经登录的浏览器中输入http://192.168.44.101:8080/job/first/build?token=123123就能自动完成构建

对于没有登录的浏览器会使用到上面安装的插件,http://192.168.44.101:8080/buildByToken/build?job=first&token=123123,这样就能够免登录自动构建。

在这里插入图片描述

3️⃣ 将这个地址放到gitlab上,完成自动通知回调

先菜单切换到管理员模式

在这里插入图片描述

设置 > 网络中允许webhook, 设置完成后保存更改

在这里插入图片描述

在项目管理界面中,添加webhook

在这里插入图片描述

填好地址之后,要勾选推送事件,合并请求事件,表示这两个事件会触发上面的网址进行自动构建

在这里插入图片描述

最后启用SSH,添加webhook后在下面展示

在这里插入图片描述

二:常用的构建触发器(了解)

  • 快照依赖构建/Build whenever a SNAPSHOT dependency is built
    • 当依赖的快照被构建时执行本job
  • 触发远程构建 (例如,使用脚本)
    • 远程调用本job的restapi时执行本job
  • job依赖构建/Build after other projects are built
    • 当依赖的job被构建时执行本job
  • 定时构建/Build periodically
    • 使用cron表达式定时构建本job
  • 向GitHub提交代码时触发Jenkins自动构建/GitHub hook trigger for GITScm polling
    • Github-WebHook出发时构建本job
  • 定期检查代码变更/Poll SCM
    • 使用cron表达式定时检查代码变更,变更后构建本job

1:定时任务构建

Jenkins cron不是标准的cron表达式!!

Jenkins cron一共五颗星,分别表示:

  • 第一颗 * 表示每个小时的第几分钟,取值0~59
  • 第二颗 * 表示小时,取值0~23
  • 第三颗 * 表示一个月的第几天,取值1~31
  • 第四颗 * 表示第几月,取值1~12
  • 第五颗 * 表示一周中的第几天,取值0~7,其中0和7代表的都是周日
H * * * *        # 每一个小时都执行一次
* 15 * * *        # 表示每天下午3点
* 1 * * *         # 表示每天凌晨1点
* 1 5 * *         # 表示每月5日凌晨1点
* 15 5 1 *        # 表示每年1月5号下午3点执行
* * * * 0         # 表示每周日执行
*/10 * * * *      # 表示每过10分钟执行一次
H/10 * * * *      # 每10分钟,可能是7,17,27,起始时间hash,步长不变
45 3 * * 1-6      # 每个周一至周六,凌晨3点45 执行1次
45 3-5 * * 1-6    # 每个周一至周六,凌晨3点45 ,凌晨4点45,凌晨5点45 各执行1次
H(40-48) 3-5 * * 1-6     # 在40~48之间取值 其他同上
45 3-5/2 * * 1-6         # 每个周一至周六,凌晨3点45 ,凌晨5点45 各执行1次
45 0-6/2 * * 1-6 * * 1-6 # 0点开始,每间隔2小时执行一次 0:45、2:45、4:45

H存在的意义

hash散列值,以job名取值,获取到以job名为入参的唯一值,相同名称值也相同,这个偏移量会和实际时间相加,获得一个真实的运行时间

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

H的值也可以设置范围

在这里插入图片描述

2:Poll SCM

Jenkins主动发起,定时检查代码变更并触发构建,表达式同上

三:配置邮箱接收构建(管理员要干的)

使用163免费邮箱发送邮件时注意密码填认证码,也就是发送手机短信后给的那个,不要用登录邮箱的密码

在这里插入图片描述

在这里插入图片描述

会通知你的手机发送一个验证码,发送完成之后会给你一个授权码,例如:

在这里插入图片描述

拿到授权码之后,后面就是在Jenkins中配置了

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

注意点击高级之后,选择用户名密码方式,密码不是你邮箱的密码,而是获得的授权码

在这里插入图片描述

在这里插入图片描述

配置好这些之后,再进行相应的构建操作之后,将会给配置的邮箱发送邮件,说明构建情况

四:容器化构建(重点)

1:容器化构建的三种方式

在这里插入图片描述

Jenkins服务器(192.168.44.102)和测试服务器(192.168.44.103)都要安装docker

2:Harbor镜像仓库(重中之重)

官网:https://goharbor.io/

  • 操作系统: CentOS 7 或更高版本
  • Docker Engine: 20.10.0 或更高版本
  • Docker Compose: 1.18.0 或更高版本
  • 硬件配置:
    • CPU: 最少2核
    • 内存: 最少4GB
    • 硬盘: 最少40GB

Harbor镜像仓库是一个开源的企业级容器镜像仓库管理平台,专为云原生环境设计, 使用Harbor有如下的好处:

  • 提高镜像下载速度
  • 节省网络带宽
  • 确保镜像安全性
  • 便于管理公司内部的容器镜像

在这里插入图片描述

2.1:安装Harbor

https://www.bilibili.com/video/BV1ve4y1n7p6?spm_id_from=333.788.videopod.sections&vd_source=3b6f4bdee490858d85d02d32ee8d05e9

1️⃣ 安装docker

# 安装并启动docker
# 安装必要工具
yum install -y yum-utils device-mapper-persistent-data lvm2

# 添加 Docker 阿里云源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 安装 Docker
yum install -y docker-ce docker-ce-cli containerd.io

# 配置 Docker 镜像加速
mkdir -p /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": [
    "https://registry.cn-hangzhou.aliyuncs.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://hub-mirror.c.163.com"
  ],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF

# 启动 Docker
systemctl daemon-reload
systemctl enable docker
systemctl start docker

2️⃣ 安装docker componse

# 安装并启动docker-compose
# 下载 Docker Compose 二进制文件
# 使用国内镜像下载 Docker Compose
wget https://mirror.ghproxy.com/https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-linux-x86_64 -O /usr/local/bin/docker-compose

# 添加可执行权限
chmod +x /usr/local/bin/docker-compose

# 验证安装
docker-compose --version

# 如果上述方法都不工作,可以尝试使用 yum 安装
# yum install -y docker-compose-plugin
# 然后使用
# docker compose version

3️⃣ 下载并安装 Harbor

# 下载 Harbor 安装包(如果下载较慢,建议使用国内镜像)
wget https://github.com/goharbor/harbor/releases/download/v2.8.3/harbor-offline-installer-v2.8.3.tgz
# 或使用以下链接:
# wget https://mirrors.aliyun.com/harbor/harbor-offline-installer-v2.8.3.tgz

# 解压安装包
tar xvf harbor-offline-installer-v2.8.3.tgz
cd harbor

# 复制配置文件模板
cp harbor.yml.tmpl harbor.yml

4️⃣ 修改harbor配置文件(harbor.yaml)

# 修改 hostname
hostname: 192.168.31.232  # 改为你的域名或IP地址

# 修改 https 相关配置(使用 https)
https:
  port: 443
  certificate: /data/cert/lzz.harbor.com.crt
  private_key: /data/cert/lzz.harbor.com.key

# 修改管理员密码(建议修改)
harbor_admin_password: Harbor12345

# 修改数据存储路径(可选)
data_volume: /data/harbor

# 修改数据库密码(建议修改)
database:
  password: root123

5️⃣ 启用 HTTPS,需要生成 SSL 证书

# 创建证书目录
mkdir -p /data/cert
cd /data/cert

# 生成私钥
openssl genrsa -out ca.key 4096

# 生成证书
openssl req -x509 -new -nodes -sha512 -days 3650 \
  -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=lzz.harbor.com" \
  -key ca.key \
  -out ca.crt

# 生成服务器证书
openssl genrsa -out lzz.harbor.com.key 4096
openssl req -sha512 -new \
  -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=lzz.harbor.com" \
  -key lzz.harbor.com.key \
  -out lzz.harbor.com.csr

# 生成 x509 v3 扩展文件
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1=lzz.harbor.com
DNS.2=harbor
DNS.3=hostname
EOF

# 使用 v3.ext 文件为域名生成证书
openssl x509 -req -sha512 -days 3650 \
  -extfile v3.ext \
  -CA ca.crt -CAkey ca.key -CAcreateserial \
  -in lzz.harbor.com.csr \
  -out lzz.harbor.com.crt

6️⃣ 安装harbor

# 执行安装脚本
./install.sh --with-notary --with-trivy

# 验证安装
docker ps

7️⃣ 使用 admin/Harbor12345 登录

在这里插入图片描述

2.2:手动上传镜像到Harbor

1️⃣ 在Harbor中新建项目,创建一个公开项目

在这里插入图片描述

2️⃣ 修改docker的deamon.json, 注意改的是客户端的,不是Harbor服务器的

在这里插入图片描述

systemctl deamon-reload
systemctl restart docker

3️⃣ 给指定的容器构建镜像

docker tag [容器名称] [要构建的镜像名称]

4️⃣ 登录到harbor

# docker login -u 登录名 -p 登录密码 仓库地址
docker login -u admin -p Harbor12345 192.168.31.232:80

5️⃣ 推送构建的镜像到harbor

docker push [构建的镜像名称]

6️⃣ 新的docker机器拉取

先要配置新的docker机器的deamon.json, 添加仓库的地址,同2️⃣

然后docker pull

docker pull [要拉取的镜像名称]
2.3:自动构建docker镜像

1️⃣ 项目中创建dockerfile

在这里插入图片描述

# 依赖的基础镜像
FROM openjdk:8-slim

# 切换工作环境为/usr/local
WORKDIR /usr/local

# 将/usr/local的myproject.jar复制给当前目录,就是没操作
COPY myproject.jar .

# cmd指定要执行的命令
CMD java -jar myproject.jar

2️⃣ 修改jenkins

在这里插入图片描述

在这里插入图片描述

构建镜像 -> 移除原来的容器 -> 构建并启动新的容器

3️⃣ 然后就可以将自己的镜像推送到Harbor了,然后公司其他人就能直接用了


网站公告

今日签到

点亮在社区的每一天
去签到