前言
前面介绍完 GitLab,现在使用另一款主流的自动化工具 Jenkins。
Jenkins 常用于自动化各种任务,包括构建、测试和部署软件的流程化管理软件是一款插件式的管理软件,方便功能扩展,目前有几百个插件可以使用,覆盖了版本管控、构建工具、代码质量、构建通知、集成外部系统、UI 定制等。
仅从初浅的直观体验来讲,GitLab VS Jenkins 各自优势如下
- GitLab:一体化解决方案,配置集成简单,UI 交互体验好
- Jenkins:插件多,定制灵活
流程涉及到的环境和工具:
- 环境:本地 localhost
- Docker: 版本 24.0.5
- GitLab CE: 版本 16.4.1
- Jenkins: 版本 2.414.2
思路
- Docker 本地启动 GitLab,Jenkins 两个容器
- 在 GitLab 创建一个前端项目
- 在 Jenkins 新建一个任务,与 GitLab 建立关联
- 当有代码推送到 GitLab,Jenkins 将收到通知开始执行 pipeline 任务
GitLab
具体请移步 GitLab 配置,可以直接复用上节
Jenkins
安装 Jenkins 需要的插件
- GitLab Plugin:与 GitLab 集成相关
- NodeJS:支持 NodeJS,shell 包含 npm 命令
- Publish Over SSH:负责将构建后的文件发送到远程服务器
具体步骤 manage jenkins => plugin => available plugin,输入插件名称
步骤
Jenkins 启动
- 本地使用 Docker 启动 Jenkins 容器
docker run \
-u root \
--privileged \
--name cicd_jenkins \
-d \
-p 8080:8080 \
-p 50000:50000 \
-v ~/jenkins_home:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-v $(which docker):/usr/bin/docker \
jenkins/jenkins:lts
-
访问 localhost:8080,初始密码进入容器内部使用
cat /var/jenkins_home/secrets/initialAdminPassword获取,点击下一步 -
选择默认安装的插件,待完成后,跳到如下页面,按信息填写即可。一定要记得 username + password 后面要与 GitLab 集成,我因为记岔卡了好一会(哭)
Jenkins 与 GitLab 集成
建议按 GitLab 官方文档 步骤集成,避免版本更新导致操作对不上
- 在 GitLab 上创建一个 Jenkins access token,有 personal、project、group 三种 scope,我选择仅适用于当前项目的 project 类型,文档参考
- 在 Jenkins 配置 GitLab token,点击 manage jenkins => system 页面下滑到 GitLab 版块
按下面信息填写完后,点击底部 Test Connection 测试连接是否成功
- 创建一个 Jenkins 项目,输入名称,选择 freestyle project,然后点击 ok。
Builder Triggers 选择如下
Post-build Actions 选择如下
- 回到 GitLab,创建一个连接 Jenkins server url
Settings => Integrations => Jenkins,按需求填写即可。最终点击下 Test Settings 是否连接成功。
官方还支持另外一种 webhooks 更通用的方式建立与 Jenkins 项目的关联,文档
shell 脚本
- 配置 Jenkins 项目支持 NodeJS 环境
如果 nodejs installation 为空无法选择,去 manage jenkins > tools > nodejs 设置如下
- 开始写 shell 脚本,docker 打包运行项目: build steps => execute shell
docker build -t jenkins-gitlab-image .
docker run -d -p 8888:80 --name jenkins-gitlab-container jenkins-gitlab-image
项目里要有 Dockfile 和 nginx.conf 配置文件,同上文一样
完成
- 点击 build now,最终在 localhost:8888 访问前端页面
上面只是一个简单演示,可以根据自己需求将容器推到指定服务器地址,或是将构建后的静态文件发送到远程服务器,改下脚本内容即可
要注意的问题
- 地址不要使用 localhost,建议使用 ip 地址,因容器与宿主机有各自的 localhost
- docker permission
- Jenkins 与 GitLab 集成容易碰到一些常见问题,可以对照如下一个个定位