今天自己看著插件文檔摸索了一下良价,實現(xiàn)了git push后Webhook自動觸發(fā)Jenkins進行代碼構建棋枕,可通用gitlab曹抬、github等平臺,中文關于這方面自動部署的文檔比較少讼积,所以把我的學習過程記錄下來,讓其他人少走點彎路脚仔。
? 模擬場景:開發(fā)人員在dev分支提交代碼后勤众,Jenkins自動構建和部署,非dev分支提交代碼不會觸發(fā)鲤脏。
? 實戰(zhàn)環(huán)境:碼云(git.oschina.net)们颜、Jenkins(可在公網訪問)、插件Generic Webhook Trigger
? 步驟1:
? 碼云新增一個項目猎醇,新增兩個分支(uat窥突、dev),放一些文件
? 步驟2:
Jenkins安裝Generic Webhook Trigger插件硫嘶,插件的文檔在這里(https://plugins.jenkins.io/generic-webhook-trigger)
? 步驟3:
? 新建一個自由任務阻问,Geneal留空不影響本次實驗;源碼管理填入碼云的項目地址沦疾,添加碼云的登陸用戶和密碼称近;本次實驗是構建dev分支,所以我填了 */dev
? 步驟4:
構建觸發(fā)器這一步比較關鍵哮塞,卡了好久刨秆,首先我們先去看看碼云關于Webhook文檔(http://git.mydoc.io/?t=154711),我們要抓取研發(fā)push這個Webhook POST過來的數據忆畅,然后根據里面內容關鍵字ref判斷是否為開發(fā)分支衡未,如果是開發(fā)分支,則讓Jenkins拉開發(fā)分支最新的代碼下來構建家凯。所以圖四缓醋,勾選插件觸發(fā)器,給抓出來的數據起個變量名ref绊诲,抓取內容為$.ref(看碼云的文檔)改衩。
好,稍微下來一點驯镊,我們只需要獲取POST數據葫督,header和request不用理。接下來也很關鍵板惑,定義過濾出來什么字串才觸發(fā)這個任務橄镜。所以使用正則匹配,text為匹配出什么結果就觸發(fā)這個任務冯乘,于是我們填入剛才抓取臨時存放的變量$ref洽胶,注意這里不是原始數據的$.ref。
? 步驟5:剩下就是告訴拉完代碼下來之后做什么操作了,后面的文章會講到姊氓,這里我就隨便輸出點東西了丐怯。
? 步驟6:點擊保存之后,回到碼云的項目管理頁面翔横,填入URL
URL格式為 http://有讀權限的用戶名:該用戶名密碼@jenkis地址/generic-webhook-trigger/invoke?
密碼可不填(看了文檔還沒明白是包含在哪里读跷,還得研究)
???? 點擊測試,返回ok就說明接口能用了禾唁,如果返回如下效览,則用戶名密碼可能沒填或者沒對。
{"status":"ok","data":{"triggerResults":{"ANY":"Did not find any jobs to trigger!
The user invoking /generic-webhook-trigger/invoke must have read permission to any
jobs that should be triggered. You may try adding http://user:passw@url... or configuring
and passing an authentication token like ...trigger/invoke?token=TOKENHERE"}}}
??? 最后荡短,在dev分支提交代碼丐枉,就會觸發(fā)任務了,至此需求完成掘托。
ps:碼云點測試按鈕默認是觸發(fā)master push瘦锹,實驗過程有問題,可以只勾選一項闪盔,不作判斷弯院,就可以測試觸發(fā)了,如下圖锭沟。