Jenkins相關介紹
Jenkins是一個開源軟件項目,是基於Java開發的一種持續集成工具,用於監控持續重復的工作,旨在提供一個開放易用的軟件平台,使軟件的持續集成變成可能.
目的
配置Gitlab與Jenkins,達到當Gltlab中Push代碼時,Jenkins能夠自動從Gitlab代碼庫同步代碼的最新版本,並且自動構建。
前提
安裝Gitlab Plugin、Gitlab Hook Plugin等Gitlab相關Plugins。
方法步驟
1.Jenkins中,選擇想要配置持續集成的項目,進入項目配置,勾選“觸發遠程構建”、“Build when a change is pushed to GitLab. GitLab CI Service URL”兩個選項,並配置“身份驗證令牌”
1 |
openssl rand -hex 12 |
兩個選項分別提供了兩種觸發方式來持續集成。前者適用范圍更廣,后者僅適用於Gitlab。
本文將分別講解兩者的使用方法與坑。
觸發遠程構建(更通用,多坑)
2.1 打開對應Gitlab項目倉庫配置,Settings-Integrations配置持續集成相關選項。
URL則填寫Jenkins配置中“觸發遠程構建(例如,使用腳本)”選項中所提示的URL結構組合填寫,Secret Token不填寫
1 |
JENKINS_URL/job/hostconf/build?token=TOKEN_NAME |
勾選相應的Trigger,然后Save 保存配置即可。
還可以Test一下,如果返回200、201,則為配置成功。
Build When a change is Pushed to gitlab(僅限Gitlab,少坑)
3.1在Jenkins中勾選Build when a change is pushed to GitLab. GitLab CI Service之后,將URL填寫到Gitlab項目的settings-Integrations中的URL,保存后進行test,如果返回20x,則測試通過。
采坑記錄
第一種方法
返回403 Crumb XXX
去掉“防止跨站點請求偽造”前的勾,就可以解決
返回403 Auth相關信息,提示用戶Anonymous Users 沒有Build等相關權限
這樣的情況是Jenkins設置了權限限制,匿名用戶權限不足,此時需要登錄,在Gitlab的設置中URL填寫為以下格式,帶上用戶名和密碼即可
1 |
https://foo:password@jenkins.example.com/github-webhook/build?token= |
帶上明文密碼太危險了?Jenkins為每個用戶提供了Api Token。前往Jenkins-系統管理-管理用戶,選取你的用戶,會看到
點擊“show Api Token” 即可看到用戶的用戶名和對應的apiToken
因此在Gitlab中的持續集成URL可以如此配置
1 |
https://username:apitoken@jenkins.example.com/github-webhook/build?token= |
即可免去明文密碼帶來的危險性。
第二種方法(Gitlab專用)
填寫好Gitlab專用鏈接之后依然403 提示Anonymous Users沒有build權限等
在Jenkins-系統管理-系統設置中:
去掉Enable authentication for ‘/project’ end-point的勾子,即不對Gitlab專用Webhook鏈接的/project進行權限驗證,即可進行正常持續集成。
總結
Jenkins提供了兩種方法來實現Gitlab的持續集成,前者生成了通用url,任何程序、腳本都可以調用。但如果Jenkins需要認證,則必須在url 中提供認證信息。
第二種Gitlab專用鏈接,配置較為簡單,注意一下相關設置即可正常使用。
相關鏈接
http://www.360doc.com/content/18/0503/16/10072361_750826096.shtml
https://stackoverflow.com/questions/7427557/jenkins-and-github-webhook-http-403
