Jenkins pipeline job 根據參數動態獲取觸發事件的分支


此文需要有Jenkins pipeline job 的簡單使用經驗

場景

我們日常的測試函數, 一般是不能僅僅在本地跑的,還需要一個公共的跑測試的環境,作為合並新的PR的依據。
如果用Jenkins 作為自動跑新分支test任務的環境的話,就會面臨一個問題:如何切換到PR請求對應的分支去跑test

Jenkins 不能直接獲取觸發事件的git分支

自己在網上查了一下,發現網上現有的 Jenkins自動切換分支的帖子 ,要么創建了多個Jenkins job,用過濾規則去實現不同的分支觸發不同的Jenkins;要么就是搞了個參數化構建,
自己手動的去選擇不同的分支觸發。

這兩種方式,前者有可能建了一堆job,一旦有變動維護起來十分的痛苦。后者還得手動執行,一點都不酷。所以皆非我們所求。

通過Jenkins 參數、shell、git實現單job自動切換不同的分支

1,Jenkins 參數

在job里 勾上 print post content ,我們可以看到job 的觸發方式的參數或者說內容有哪些:

GenericWebhookEnvironmentContributor
 Received:

{"object_kind":"push","before":"d367a9948012f82095a8ead45a910672b","after":"bf0bb41b9b89e7ee77d4eefd5d83ee17f33a6f54","ref":"refs/heads/develop","checkout_sha":"bf0bb41b9b89e7ee77d4eefd5d83ee17f33a6f54","message":null,"user_id":142,"user_name":"xuao","user_email":"xao@sinail.com","project_id":531,"repository":{"name":"bizsvc","url":"ssh://git@172.0.0.0:10022/is/zsvc.git","description":"業務邏輯和頁面服務。","homepage":"[http://172.16.99.4:10080/ibis/bizsvc](http://172.16.99.4:10080/ibvc)","git_http_url":"http://172.16.4:10080/ivc.git","git_ssh_url":"ssh://git@172.16.99.4:10022/ibsvc.git","visibility_level":10},"commits":[{"id":"de3e8d89cb73db90349505ed6de439f","message":"調試用臨時分支\n","timestamp":"2019-04-04T14:25:54+08:00","url":"http://172.16.99.4:10080/ibis/bizsvc/commit/de3e8d89cb73db40099034a59bd9505ed6de439f","author":{"name":"wanglan","email":"wanglan_9999@163.com"}},{"id":"bf0bb41b9b89e7ee77d4eefd5d83ee17f33a6f54","message":"Merge branch 'ttt' into 'develop'\r\n\r\n調試用臨時分支\r\n\r\n\r\n\r\nSee merge request !863","timestamp":"2019-04-04T06:31:51+00:00","url":"[http://172.16.99.4:10080/ibis/bizsvc/commit/bf0bb41b9b89e7ee77d4eefd5d83ee17f33a6f54](http://172.16.99.4:10080/ibis/bizsvc/commit/bf0bb41b9b89e7ee77d4eefd5d83ee17f33a6f54)","author":{"name":"xumenghao","email":"xumenghao@sinorail.com"}}],"total_commits_count":2}

Contributing variables:

    ref = refs/heads/develop</pre>

這里邊的ref 就是我們要的關鍵參數

下邊看看怎么取出來

Jenkins 的pipeline job 里的觸發方式選擇 Generic Webhook Trigger,勾上 展開后,在 Post content parameters 里可以填寫參數。前兩個框分別填上 ref 和 $.ref, 如下圖:

TIM圖片20190404171135.png

這樣,就可以在pipeline腳本里使用這個 ref變量了。

2, 處理參數和切換分支

此時,pipeline腳本內即可直接引用ref變量了。我們給我們要用的容器 安裝個git,然后commit 一下當做跑test 的容器,就可以再腳本里用git 自動切換分支了。 具體看注釋。

# 獲取refs/heads/develop 最后一個‘/’之后的內容。即develop
branch=${ref##*/}  
  echo $branch  
# 附送 跳過一般不用驗證的分支
  if [ $branch = "develop" ] || [ $branch = "staging" ] || [ $branch = "master" ]; then
 echo " It's develop , staging or master branch, exit " && exit 0
   fi
  git checkout $branch

這個腳本之后寫我們的test 的正常的邏輯,就ok了,可以按照分支自動切換執行了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM