问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Jenkins集成GitLab的正确姿势,实现Git代码提交触发CI/CD

创作时间:
作者:
@小白创作中心

Jenkins集成GitLab的正确姿势,实现Git代码提交触发CI/CD

引用
1
来源
1.
https://www.cnblogs.com/FLY_DREAM/p/18148735

Jenkins和GitLab是目前DevOps工具链中最常见的组合,通过将GitLab代码提交与Jenkins CI/CD流水线集成,可以实现代码提交后的自动化构建和部署。本文将详细介绍如何配置Jenkins与GitLab的集成,包括插件安装、服务器配置、Job配置以及Webhook设置等关键步骤。

安装GitLab Plugin

GitLab Plugin是实现Jenkins与GitLab集成的关键插件,它允许GitLab在提交代码或打开/更新合并请求时触发Jenkins中的构建。同时,该插件还可以将构建状态发送回GitLab。

配置Jenkins Server

首先需要创建GitLab凭证,这一步骤非常重要,因为后续的Jenkins Job将使用这些凭证来访问GitLab仓库。具体操作如下:

  1. 进入Jenkins管理界面,选择"Manage Jenkins" -> "System" -> "enable authentication for '/project' end-point"
  2. 填写GitLab的访问凭证

通过该配置,相当于创建了Jenkins Job可以操作访问GitLab的凭证,在后面的Jenkinsfile中就会使用声明并使用该凭证。

配置Jenkins Job

创建一个新的Jenkins Job,具体步骤如下:

  1. 选择源代码管理为Git,并填写GitLab上源码仓库的URL
  2. 配置Credentials,用于拉取代码时的身份认证
  3. 在构建触发器中选择“Build when a change is pushed to GitLab”
  4. 点击“高级”选项,勾选“Filter branches by regex”
  5. 点击“Generate”生成token,这个token用于填写到GitLab的webhook里

注:复制出URL和token,后面配置GitLab的webhook会用到。

新版Jenkins可能遇到的坑

在“Generate”生成token时,如果使用的是高版本的Jenkins,可能会遇到403错误:

HTTP ERROR 403 No valid crumb was included in the request

这是因为Jenkins的防止跨站点请求伪造(Prevent Cross Site Request Forgery exploits)功能阻拦了请求。可以通过以下方式解决:

hudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION = true

如果出现下图所示的情况,就表示命令成功了。

对于在容器里运行的Jenkins,需要进入容器修改配置,永久生效。修改/usr/local/bin/jenkins.sh,找到exec java那行,添加-Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true

exec java -Duser.home="$JENKINS_HOME" -Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true "${java_opts_array[@]}" -jar ${JENKINS_WAR} "${jenkins_opts_array[@]}" "$@"

至此,Jenkins的持续集成配置已经完成,接下来需要配置GitLab的Webhook,用于代码提交通知Jenkins。

配置GitLab Webhook

打开GitLab的repo的Settings-Integrations,填写Jenkins Job中构建触发器部分生成的URL和Secret Token,点击“Add webhook”。

在链接那里输入之前Jenkins上提供的webhook url以及“Secret token”,编辑完后保存。点击测试,如果返回200,那就成功了,去Jenkins看看有没有自动构建的记录。

配置Jenkins返回执行状态

上面的步骤仅仅实现了GitLab代码提交触发Jenkins Job,那么Job执行完成后的状态,怎么在GitLab上看到呢?可以通过以下Jenkins Pipeline配置实现:

pipeline {
    agent any
    options {
        gitLabConnection('gitlab-connection') 
        // Manage Jenkins->System->enable authentication for '/project' end-point
        // Your配置的GitLab Connection
    }
    stages {
        stage('build') {
            steps {
                updateGitlabCommitStatus name: 'build', state: 'running'
                hogehoge
            }
        }
    }
    post {
        success {
            updateGitlabCommitStatus name: 'build', state: 'success'
        }
        failure {
            updateGitlabCommitStatus name: 'build', state: 'failed'
        }
    }
}

参数说明:

  • gitLabConnection 是和GitLab链接的名称。GitLab名称的设定是在jenkins管理>系统设定>Gitlab当中设置详细的gitlab url和token
  • updateGitlabCommitStatus
  • name: build 名称
  • state: pending, running, canceled, success, failed

参考资料

注:本文原文发布于2024年4月,部分内容可能已过时,请酌情参考。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号