【Jenkins】03 - 自动构建和docker构建
【Jenkins】03 - 自动构建和docker构建
文章目录
- 【Jenkins】03 - 自动构建和docker构建
- 一:gitlab钩子(了解)
- 二:常用的构建触发器(了解)
- 1:定时任务构建
- 2:Poll SCM
- 三:配置邮箱接收构建(管理员要干的)
- 四:容器化构建(重点)
- 1:容器化构建的三种方式
- 2:Harbor镜像仓库(重中之重)
- 2.1:安装Harbor
- 2.2:手动上传镜像到Harbor
- 2.3:自动构建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: 443certificate: /data/cert/lzz.harbor.com.crtprivate_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了,然后公司其他人就能直接用了