簡體   English   中英

當在同一個提交上推送新標簽時,jenkins 不會觸發構建

[英]jenkins does not trigger build when a new tag is pushed on the same commit

如果將新標簽推送到遠程存儲庫,我想觸發 jenkins 構建。 我看過很多帖子,但似乎沒有一個對我有用。 當我推送一個包含新提交的標簽時,我的構建被成功觸發,但是如果我在舊提交上推送一個新標簽,它不會觸發構建。

我已經在 J​​enkins 中使用 git 插件對其進行了配置,並將 Refscpec 值添加為+refs/tags/*:refs/remotes/origin/tags/*並將分支說明符添加為*/tags/*

現在如果運行:

git push origin master
git tag release-v1
git push origin release-v1

為標記 release-v1 成功觸發了構建但是現在如果我這樣做:

git push origin release-v2

不觸發構建。

這意味着 jenkins 總是在尋找提交 id,如果有一個新的提交 id 與標簽鏈接,它將構建作業。 但是我希望 jenkins 作業能夠運行,以防我想使用新的標記名稱為另一個功能發布已經提交的代碼。

我遇到了同樣的問題並為此創建了一個解決方法。 我決定使用后綴 _uat、_prod 等進行標記,這有助於我實現目標。 為此,您還需要兩個 Jenkins 工作。 如果條件匹配,一個將觸發另一個。

步驟 1 git tag -a release-v1_uat -m "提交消息"
git push origin release-v1_uat

創建兩個 Jenkins 作業

工作 1
定義存儲庫
在提前部分的“Refspec”字段中輸入:
+refs/tags/ _uat:refs/remotes/origin/tags/ _uat

在“要構建的分支”部分:
**/標簽/*_uat

構建觸發器
CHECK-> 用於 GITScm 輪詢的 GitHub 鈎子觸發器

構建步驟
執行外殼
TAG=$(git describe --tags --abbrev=0)
回聲$TAG
echo $TAG > /tmp/tagname
結果= echo $TAG | sed 's/.*\\(....\\)/\\1/' echo $TAG | sed 's/.*\\(....\\)/\\1/'
如果 [[ $result == _uat ]]; 然后回聲是; 否則(出口1);

單擊執行 shell 下方的 Advance
退出代碼以設置構建不穩定(這將防止作業從任何其他標簽觸發)
將 1 放入盒子中

構建后操作
檢查:構建后刪除工作區

工作 2 (你的主要工作)
轉到“在其他項目構建后構建”
在框中提及您的工作 1 名稱並選擇“僅在構建穩定時觸發”

不要忘記通過執行在作業 1 中生成的 cat /tmp/tagname 從文件中獲取標簽值

總有改進的余地,如果您有更好的解決方法/解決方案,請分享。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM