Jenkins集成GitLab的正確姿勢,實現(xiàn)Git代碼提交觸發(fā)CI/CD
?
jenkins和gitlab是目前DevOps工具鏈中最常見的,拋開gitlab-ci不談,gitlab代碼提交觸發(fā)jenkins流水線是最經(jīng)典的搭配。 這里就介紹下如何配置實現(xiàn)jenkins和gitlab之間的集成。
安裝GitLab Plguin
- Gitlab Plugin- 這個插件允許GitLab在提交代碼或打開/更新合并請求時觸發(fā)Jenkins中的構(gòu)建。它還可以將構(gòu)建狀態(tài)發(fā)送回GitLab。

image.png
配置Jenkins Server
首先創(chuàng)建GitLab憑證,將憑證填充到 Manage Jenkins->System->enable authentication for '/project' end-point。
?
通過該配置,相當(dāng)于創(chuàng)建了jenkins job 可以操作訪問gitlab的憑證,在后面的jenkinsfile中就會使用聲明并使用該憑證。


配置Jenkins Job
創(chuàng)建jenkins job, 源代碼管理選 Git,Repository URL 填寫你 gitlab 上源碼 repo 的地址,Credentials 是拉取代碼時需要用到的身份認(rèn)證

image.png
構(gòu)建觸發(fā)器選擇 “Build when a change is pushed to GitLab” (記住后面的GitLab webhook URL 后面要填在gitlab的webhooks中),按照下面勾選
同時點擊“高級”,“Allowd branches” 勾選 “Filter branches by regex”
點 “Generate” 生成 token,這個 token 用于填寫到 gitlab 的 webhook 里,gitlab 檢測到代碼提交,會通知 webhook 里填寫的 Jenkins 生成的回調(diào)URL,并帶上這個 token,防止其它人觸發(fā) jenkins 的持續(xù)集成
注: 復(fù)制出 URL 和 token,后面配置 gitlab 的 webhook 會用到

image.png
?
該步驟的目的主要是為了將要通過gitlab觸發(fā)的jenkins job的信息準(zhǔn)備好,用于后面的配置gitlab-webhook, 讓gitlab知道該觸發(fā)哪個jenkins job.
新版jenkins可能遇到的坑
在“Generate” 生成 token時候,如果使用的是高版本的 jenkins ,會出現(xiàn)403錯誤 HTTP ERROR 403 No valid crumb was included in the request
這是因為 jenkins 的防止跨站點請求偽造(Prevent Cross Site Request Forgery exploits)阻攔了請求,本來低版本的 jenkins 可以在界面把這個關(guān)掉,貌似高版本去掉了,可以通過如下方式:
hudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION = true
如果出現(xiàn)下圖所示的情況,就表示命令成功了

image.png
上面的方法對于在容器里運(yùn)行的jenkins而言,需要進(jìn)入容器修改配置,永久生效
修改/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 的持續(xù)集成配置好了,還需要配置 gitlab 的 webhook,用于代碼提交通知 jenkins。
配置Gitlab Webhook
打開 gitlab 的 repo 的 Settings-Integrations,URL 和 Secret Token 填寫 jenkins job中構(gòu)建觸發(fā)器部分生成的,點擊 “Add webhook”,搞定!
在鏈接那里輸入之前jenkins上提供的webhook url 以及“Secret token“,編輯完后保存
點擊測試,如果返回200,那就成功了,去jenkins看看有沒有自動構(gòu)建的記錄


配置Jenkins返回執(zhí)行狀態(tài)
上面步驟僅僅實現(xiàn)了gitlab代碼提交觸發(fā)jenkins job, 那么job執(zhí)行完成后的狀態(tài),怎么在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'
}
}
}
參數(shù)說明:
-
gitLabConnection 是和GitLab鏈接的名稱。GitLab名稱的設(shè)定是在jenkins管理>系統(tǒng)設(shè)定>Gitlab當(dāng)中設(shè)置詳細(xì)的gitlab url和token
-
updateGitlabCommitStatus
-
name: build 名稱
-
state: pending, running, canceled, success, failed

浙公網(wǎng)安備 33010602011771號