GitLab 自动触发 Jenkins 构建
GitLab 是當(dāng)前應(yīng)用非常廣泛的 Git Hosting 工具,Jenkins 是非常牛逼的持續(xù)集成工具。盡管 GitLab 有內(nèi)建的 GitLab CI,但它遠(yuǎn)沒有 Jenkins 那么強(qiáng)大好用。Jenkins 和 GitLab 在兩者的結(jié)合上,都提供了非常方便的工具。在我們向 GitLab push 代碼,或執(zhí)行其它一些操作時(shí),GitLab 可以將這些時(shí)間通知給 Jenkins,trigger Jenkins 工程的構(gòu)建自動(dòng)執(zhí)行。
要實(shí)現(xiàn)在向 GitLab push 代碼時(shí),自動(dòng) trigger Jenkins 工程執(zhí)行構(gòu)建動(dòng)作,需要在 GitLab 和 Jenkins 的多個(gè)地方做配置:(1)、在 Jenkins 中安裝插件;(2)、配置 GitLab 用戶;(3)、配置 Jenkins 服務(wù)器;(4)、配置 Jenkins 工程;(5)、配置 GitLab 工程。
在 Jenkins 中安裝插件
選擇 系統(tǒng)管理 -> 管理插件 打開插件管理也頁(yè)面,如下圖:
在 可選插件 中選擇 Gitlab Hook Plugin 和 GitLab Plugin 等插件,然后點(diǎn)擊下方的 直接安裝 按鈕安裝插件:
創(chuàng)建測(cè)試工程
為了便于測(cè)試,這里分別先在 Jenkins 和 GitLab 上創(chuàng)建測(cè)試工程。在 Jenkins Dashboard 主頁(yè)點(diǎn)擊 新建任務(wù),進(jìn)入新建任務(wù)頁(yè)面:
在輸入框中輸入工程名,選擇 構(gòu)建一個(gè)自由風(fēng)格的軟件項(xiàng)目,然后點(diǎn)擊左下角的 確定按鈕,進(jìn)入工程配置頁(yè)面。
在工程配置頁(yè)面的 源碼管理部分,輸入 GitLab repo 的 URL,如下圖:
如果是 https 形式的 URL,記得配置登錄 GitLab 的用戶名和密碼,通過點(diǎn)擊 Credentials 行最后面的 Add -> Jenkins 按鈕,在彈出的如下對(duì)話框中輸入用戶名和密碼:
Add 之后,在 Credentials 的下拉框中選擇這組用戶名和密碼。沒有添加 GitLab 的用戶密碼的話,Jenkins 報(bào)錯(cuò) —— 無法訪問 repo,如下圖:
隨后點(diǎn)擊左下角的 保存 按鈕,完成 Jenkins 工程的創(chuàng)建,并將它與 GitLab 的工程關(guān)聯(lián)起來。
配置 GitLab 用戶
創(chuàng)建一個(gè)用戶或選擇一個(gè)已有用戶,用來讓 Jenkins 和 GitLab API 交互。這個(gè)用戶將需要是全局的管理員或添加進(jìn)每個(gè)組/工程,并作為成員。需要開發(fā)者權(quán)限來報(bào)告構(gòu)建狀態(tài)。這是由于,當(dāng)使用了 ‘Merge when pipeline succeeds’ 功能時(shí),成功的構(gòu)建狀態(tài)可以觸發(fā)合并。GitLab Plugin 的一些功能可能需要其它的一些權(quán)限。比如,有一個(gè)選項(xiàng)用于在構(gòu)建成功時(shí),接受 merge request。使用這一功能需要 developer,master 或 owner 級(jí)的權(quán)限。
選擇 Settings -> Account:
拷貝其中的 Private token,稍后在配置 Jenkins 服務(wù)器時(shí)會(huì)用到。
配置 Jenkins 服務(wù)器
需要配置 Jenkins 服務(wù)器來與 GitLab 服務(wù)器通信。
在 Jenkins 中,選擇 系統(tǒng)管理 -> 系統(tǒng)設(shè)置,在系統(tǒng)設(shè)置中找到 GitLab 的部分:
在 Connection name 后的輸入框中輸入連接名稱,在 Gitlab host URL 后的輸入框中輸入 GitLab 服務(wù)器的 URL 地址。點(diǎn)擊 Credentials 行最后面的 Add -> Jenkins 按鈕,彈出如下對(duì)話框,在 * Kind* 后的下拉列表中選擇 GitLab API token,并把上一步拷貝的 Private token 粘貼到 API token 后面的輸入框中。隨后在 Credentials 的下拉框中選擇 GitLab API token。
配置 Jenkins 工程
打開 Jenkins 工程的配置頁(yè)面,找到 構(gòu)建觸發(fā)器 的部分,勾選 Build when a change is pushed to GitLab 那一行:
需要記下 Build when a change is pushed to GitLab 那一行中,GitLab CI Service URL: 后面的 URL,后面在配置 GitLab 工程時(shí)需要用到。
還要點(diǎn)開右下角的 高級(jí):
隨后點(diǎn)擊右下角的 Generate 按鈕,生成 Secret token,保存這里生成的 Secret token,它同樣將用于后面 GitLab 的配置。隨后點(diǎn)擊左下角的 保存 按鈕,保存前面所做的配置。
配置 GitLab 工程
創(chuàng)建一個(gè)新的或選擇一個(gè)已有的 GitLab 工程。然后選擇 Settings -> * Integrations*,在 URL 一欄中輸入前面保存的 GitLab CI Service URL,在 Secret Token 一欄中輸入前面保存的 Secret token,然后選擇需要 trigger Jenkins 工程執(zhí)行構(gòu)建的事件:
點(diǎn)擊綠色的 Add webhook 按鈕,完成 webhook 的創(chuàng)建。
創(chuàng)建好了 webhook 之后,點(diǎn)擊 Test 下拉框中的 Push events,如下圖:
可以手動(dòng)產(chǎn)生事件,觸發(fā) Jenkins 工程。點(diǎn)擊 Edit,在 webhook 的編輯頁(yè)面,拉到頁(yè)面底部,還可以看到,該 webhook 最近的調(diào)用情況,如下圖:
點(diǎn)開特定調(diào)用的 View details,還可以看到這次調(diào)用的詳細(xì)情況,如下圖:
由此不難理解,GitLab trigger Jenkins 工程,主要是通過向 Jenkins 服務(wù)器發(fā)送一個(gè) POST 請(qǐng)求實(shí)現(xiàn)的。
驗(yàn)證測(cè)試
修改我們的 GitLab 測(cè)試工程中的文件,并 push 到 GitLab 服務(wù)器上:
? test_for_gerrit git:(master) echo "Hello, world" >> read2.md? test_for_gerrit git:(master) ? git status On branch master Your branch is up-to-date with 'origin/master'. Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git checkout -- <file>..." to discard changes in working directory)modified: read2.mdno changes added to commit (use "git add" and/or "git commit -a") ? test_for_gerrit git:(master) ? git add . ? test_for_gerrit git:(master) ? git commit -m "Add test data." ? test_for_gerrit git:(master) git push warning: push.default is unset; its implicit value has changed in Git 2.0 from 'matching' to 'simple'. To squelch this message and maintain the traditional behavior, use:git config --global push.default matchingTo squelch this message and adopt the new behavior now, use:git config --global push.default simpleWhen push.default is set to 'matching', git will push local branches to the remote branches that already exist with the same name.Since Git 2.0, Git defaults to the more conservative 'simple' behavior, which only pushes the current branch to the corresponding remote branch that 'git pull' uses to update the current branch.See 'git help config' and search for 'push.default' for further information. (the 'simple' mode was introduced in Git 1.7.11. Use the similar mode 'current' instead of 'simple' if you sometimes use older versions of Git)Counting objects: 3, done. Delta compression using up to 4 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 312 bytes | 0 bytes/s, done. Total 3 (delta 1), reused 0 (delta 0) To ssh://git@g.hz.netease.com:22222/cloudgame/test_for_gerrit.git23660c1..e86152a master -> master ? test_for_gerrit git:(master)隨后迅速地就能在 Jenkins 中,測(cè)試工程主頁(yè)面的左下方,看到由 GitLab push 所 trigger 起來的構(gòu)建任務(wù):
在由 GitLab push 所 trigger 起來的構(gòu)建任務(wù)的下方,會(huì)顯示構(gòu)建任務(wù)是由誰 push 的代碼所 trigger 起來的。打開特定構(gòu)建任務(wù)的 控制臺(tái)輸出 可以看到構(gòu)建的詳細(xì)過程:
參考文檔:
Jenkins CI service
Gitlab自動(dòng)觸發(fā)Jenkins構(gòu)建打包
Done.
總結(jié)
以上是生活随笔為你收集整理的GitLab 自动触发 Jenkins 构建的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android 根证书管理与证书验证
- 下一篇: Jenkins 在 Tomcat 中的部