簡體   English   中英

如何在 jenkins 多分支腳本管道中獲取最新的 git 提交作者姓名或消息並在分支條件下使用

[英]How to get latest git commit author name or message in jenkins multibranch scripted pipeline and use under branch condition

我們使用 jenkins 中的 github 組織掃描作業,根據某些名稱過濾器和自動觸發指定分支正則表達式的構建,自動掃描組織中的所有相關存儲庫。 該管道運行良好,節省了大量時間,不得不為每個 repo 手動配置作業。 所有這些存儲庫都使用 maven 構建來構建快照和發布工件。 由於我們正在嘗試自動化包括發布過程在內的所有內容,因此我們現在所做的是擁有一個外部化的 jenkinsfile(腳本),這些 repos 使用並且該文件具有不同分支(如 dev、uat、release 和 master)的所有條件。 方法是代碼開發從開發人員開始,使用快照版本,並繼續部署,直到發布日臨近,並且該時間點將開發人員合並到通過 PR 等發布,並為發布分支啟動自動發布構建jenkins 中的那個回購工作。 Release branch build basically uses maven release plugin to first edit the pom in the remote repository by removing -SNAPSHOT for the artifact version, then doing a deployment to artifactory and then again committing back to the github repository with the increment version in pom.xml in相同的發布分支。 我在 jenkinsfile 中添加了一個額外的步驟,用於提取最新版本,合並到 dev,然后推送回遠程 dev,以便 dev 在 pom.xml 中具有正確的增量 SNAPSHOT 版本。 所有這些都可以正常工作並且可以完成工作。 問題是,當發布構建開始並將兩個提交提交回遠程 repo 發布分支(首先截斷 -SNAPSHOT,然后在 pom.xml 中添加遞增的 SNAPSHOT 版本)時,這反過來會觸發另一個構建,您必須手動停止否則循環將無休止地 go 。 我們的單個 jenkinsfile 具有所有分支檢查,例如:-

 if (env.BRANCH_NAME == 'release')

現在有一種方法可以在 if 語句中添加一個和條件,它執行以下操作:- 如果最新簽出的提交沒有作者“xyz”或其消息,~“[maven-release-plugin]*”這意味着如果這些自動提交是由 maven 發布插件進行的,然后在觸發下一個構建的那一刻。 它不會做任何事情,因為分支的 if 條件和上述額外條件會使它無效。 問題是如何實現上述解決方案,或者這里有什么類似的替代方案。

我能夠使用以下方法實現這一點: -

 def author = sh(returnStdout: true, script: "git log -1 --pretty=format:'%an'").trim() echo "$author" if (env.BRANCH_NAME == 'release' && author != 'xyz')

暫無
暫無

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

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