本次实施主要实现:
代码提交 GitLab, 自动触发 Jenkins 构建
GitLab 发起 Merge Request, 需要 Jenkins 检查通过才可以 merge, 实现代码 review 和质量管控
GitLab 开发分支 merge 后自动发布到 test 环境
GitLab master 分支 merge 后自动发布到 prod 环境
Jenkins Config
安装插件 GitLab, 使用教程:
安装插件 Pipeline Utility Steps, 用来读取文件
安装插件 Warnings Next Generation , 使用教程:
配置 GitLab connection
系统设置 - GitLab
配置 API token, 需要登陆 GitLab, 给一个 developer 角色的账号, 在系统设置中找到 access token, 获取 token. 然后在 Jenkins 中配置 GitLab API Toekn 的凭证.
Jenkins 多分支 Job
新建多分支流水线任务.
配置分支源, 输入 GitLab 地址, 创建一个 username password token, 填入 GitLab 的账号和密码. 其他默认读取根目录下的 jenkinsfile 文件.
接下来重点就是 Jenkinsfile 里的配置.
主要有:
获取 GitLab connection, 填写我们之前配置 GitLab connection
properties([gitLabConnection('gitlab-bigdata')])
拉取代码
checkout scm
告诉 GitLab job 状态
updateGitlabCommitStatus name: 'build', state: 'pending'
不同分支走不同的构建方式
- if (env.BRANCH_NAME == 'master' || env.BRANCH_NAME == 'dev' ) {
- stage("Build Docker Image"){
- echo "build docker image"
- echo "Only dev/master branch can build docker image"
- }
- if(env.BRANCH_NAME == 'dev'){
- stage("Deploy to test"){
- echo "branch dev to deploy to environment test"
- }
- stage("Integration test"){
- echo "test 环境集成测试"
- }
- }
- if(env.BRANCH_NAME == 'master'){
- stage("Deploy to prod"){
- echo "branch master to deploy to environment prod"
- }
- stage("Health check"){
- echo "prod 检查"
- }
- }
- }
点击立即构建即可.
触发方式可以选择手动触发, 定时触发 (比如每分钟), GitLab trigger.
GitLab Merge Request
GitLab 在项目设置中, 找到 Merge Request
- Only allow merge requests to be merged if the pipeline succeeds
- Pipelines need to be configured to enable this feature.
- Only allow merge requests to be merged if all discussions are resolved
当我们发起一个 M-R
当 pipeline 构建成功之后:
我们 Jenkinsfile 里设置不同分支的构建策略, 这样就实现了不同环境的发布和质量校验. 需要注意的是, 当代码合并到 master 的时候, 我们的功能就会执行发布策略了. 而实际上, 我们应该发布到 canary 金丝雀环境, 即预生产环境, 等确保没有任何问题之后再手动发布到 prod. 这里简化处理发布流程, 直接发布.
参考
来源: https://www.cnblogs.com/woshimrf/p/gitlab-with-jenkins.html