jenkins和gitlab是现在DevOps工具链中最常见的,抛开gitlab-ci不谈,gitlab代码提交触发jenkins流水线是最经典的搭配。 这儿就介绍下如何装备完成jenkins和gitlab之间的集成。

装置GitLab Plguin

  • Gitlab Plugin– 这个插件允许GitLab在提交代码或打开/更新合并恳求时触发Jenkins中的构建。它还能够将构建状况发送回GitLab。

Jenkins集成GitLab的正确姿态,完成Git代码提交触发CI/CD

装备Jenkins Server

首先创立GitLab凭据,将凭据填充到 Manage Jenkins->System->enable authentication for '/project' end-point

经过该装备,相当于创立了jenkins job 能够操作访问gitlab的凭据,在后边的jenkinsfile中就会运用声明并运用该凭据。

Jenkins集成GitLab的正确姿态,完成Git代码提交触发CI/CD
Jenkins集成GitLab的正确姿态,完成Git代码提交触发CI/CD

装备Jenkins Job

创立jenkins job, 源代码办理选 Git,Repository URL 填写你 gitlab 上源码 repo 的地址,Credentials 是拉取代码时需求用到的身份认证

Jenkins集成GitLab的正确姿态,完成Git代码提交触发CI/CD

构建触发器挑选 “Build when a change is pushed to GitLab” (记住后边的GitLab webhook URL 后边要填在gitlab的webhooks中),依照下面勾选

Jenkins集成GitLab的正确姿态,完成Git代码提交触发CI/CD

一起点击“高档”,“Allowd branches” 勾选 “Filter branches by regex”

点 “Generate” 生成 token,这个 token 用于填写到 gitlab 的 webhook 里,gitlab 检测到代码提交,会告诉 webhook 里填写的 Jenkins 生成的回调URL,并带上这个 token,防止其它人触发 jenkins 的继续集成

注: 复制出 URL 和 token,后边装备 gitlab 的 webhook 会用到

Jenkins集成GitLab的正确姿态,完成Git代码提交触发CI/CD

该过程的意图主要是为了将要经过gitlab触发的jenkins job的信息准备好,用于后边的装备gitlab-webhook, 让gitlab知道该触发哪个jenkins job.

新版jenkins可能遇到的坑

在“Generate” 生成 token时候,假如运用的是高版别的 jenkins ,会出现403错误 HTTP ERROR 403 No valid crumb was included in the request

这是由于 jenkins 的防止跨站点恳求伪造(Prevent Cross Site Request Forgery exploits)阻挠了恳求,本来低版别的 jenkins 能够在界面把这个关掉,形似高版别去掉了,能够经过如下方式:

hudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION = true

Jenkins集成GitLab的正确姿态,完成Git代码提交触发CI/CD
假如出现下图所示的情况,就表示命令成功了

Jenkins集成GitLab的正确姿态,完成Git代码提交触发CI/CD

上面的办法关于在容器里运行的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,URL 和 Secret Token 填写 jenkins job中构建触发器部分生成的,点击 “Add webhook”,搞定!

Jenkins集成GitLab的正确姿态,完成Git代码提交触发CI/CD
在链接那里输入之前jenkins上供给的webhook url 以及“Secret token“,修改完后保存

点击测试,假如回来200,那就成功了,去jenkins看看有没有主动构建的记载

Jenkins集成GitLab的正确姿态,完成Git代码提交触发CI/CD
Jenkins集成GitLab的正确姿态,完成Git代码提交触发CI/CD

装备Jenkins回来履行状况

上面过程仅仅完成了gitlab代码提交触发jenkins job, 那么job履行完成后的状况,怎样在gitlab上看到呢?

pipeline {
    agent any
    options {
        gitLabConnection('gitlab-connection') 
      //Manage Jenkins->System->enable authentication for '/project' end-pointYour装备的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

参考: