【Linux】Jenkins + Gogs 自动打包 Docker 镜像
编辑一、Jenkins 安装
docker-compose
安装
version: "3.5"
services:
jenkins:
image: jenkins/jenkins:lts
restart: always
container_name: jenkins
networks:
- nginx
volumes:
- /home/jenkins:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
- /usr/bin/docker:/usr/bin/docker
environment:
- TZ=Asia/Shanghai
user: root
networks:
nginx:
external: true
二. 常用插件安装
默认插件安装
其他常用插件
docker-build-step: docker 打包、发布、运行相关插件
Git Parameter Plug-In:在「参数化构建过程」增加 Git 相关参数
Gogs plugin: GOGS Webhook相关插件(功能不全,更推荐 Generic Webhook Trigger Plugin)
Generic Webhook Trigger Plugin: 通用 Webhook 触发器插件
Qy Wechat Notification Plugin: 企业微信通知插件
Publish over SSH:SSH 发布插件
Maven Integration:Maven构建插件
插件安装方法
在线插件安装:系统管理 - 插件管理 - 可选插件
本地插件安装:系统管理 - 插件管理 - Deploy Plugin
三、配置
设置使用 Jenkins 宿主机 Docker (如果 jenkins 运行在 docker 中,需要先将宿主机 docker 映射到 jenkins 所在容器)「系统管理 - 系统配置」
unix:///var/run/docker.sock
2. 不使用宿主机 Docker,则需要在 「系统管理 - 全局工具配置」中安装 Docker 环境,Git 环境一样
四、凭证
Git 凭证
进入 jenkins 容器内生成密钥
docker exec -it jenkins bash ssh-keygen -t rsa -C "xxx@xx.com"
将公钥(id_rsa.pub)上传到 GOGS
将私钥(id_rsa)添加到 Jenkins (系统管理 - 凭据 - Jekins - 全局凭据 - 添加凭据)
选择 SSH Username 类型
帐号密码凭证
同上类型选择「Username with password 」
五、其他
重启 Jenkins
访问:
http://<your host name>.com/restart
六、示例
当 GOGS 仓库 发布新的标签时,重新构建 Docker 镜像
需要插件:Generic Webhook Trigger Plugin、docker-build-step
选择「新建任务 - 构建一个自由风格的软件项目」
通用配置
如:是否需要保留成功构建,以及需要保留的数量
源码管理
触发器
git push origin --tag
时,gogs 的 webhook post 的 data 示例{ "ref": "v1.9.5", "ref_type": "tag", "sha": "123b861b2d3e76ce3dbd0744eb75f92769b52b21", "default_branch": "master", "repository": { "id": 4, "owner": { "id": 1, "username": "Cane", "login": "Cane", "full_name": "", "email": "caneman@163.com", "avatar_url": "https://git.hicane.com/avatars/1" }, "name": "test", "full_name": "Cane/test", "description": "", "private": false, "fork": false, "parent": null, "empty": false, "mirror": false, "size": 139264, "html_url": "https://git.hicane.com/Cane/test", "ssh_url": "git@git.hicane.com:Cane/test.git", "clone_url": "https://git.hicane.com/Cane/test.git", "website": "", "stars_count": 0, "forks_count": 0, "watchers_count": 1, "open_issues_count": 0, "default_branch": "master", "created_at": "2022-11-04T18:16:29+08:00", "updated_at": "2022-11-23T16:14:20+08:00" }, "sender": { "id": 1, "username": "Cane", "login": "Cane", "full_name": "", "email": "caneman@163.com", "avatar_url": "https://git.hicane.com/avatars/1" } }
gogs 可以在各种事件中触发 webhook(可以在 gogs 仓库的配置页面指定,不同类型的事件,data 的内容不同)。
我想在上传 tag 的时候才进行指定的构建,普通的 commit push 事件不做任何操作,这个时候,我就需要根据 ref_type 的值来判断是否为 tag 来区分。
图4-1 把 data 的 ref_type 的值赋给 「var_name」
图4-3 判断 「var_name」是否等于 「tag」来决定是否触发构建
图4-2 token 用来标识不同的任务
GOGS webhook 配置
构建步骤
删除已存在的容器和镜像
构建新的镜像
根据构建的镜像运行新的容器
根据标签号构建、回滚 Docker 容器
需要插件:Git Parameter Plug-In、docker-build-step
在 「General」里选择「参数化构建过程 - Git参数」
在构建的时候就可以根据参数(标签)进行构建、回滚
Maven 项目 示例
- 0
- 0
-
赞助
微信 -
分享