![](/img/trans.png)
[英]How to get list of changed files since last build in Jenkins/Hudson with git/gerrit
[英]Jenkins: How to check if files in a folder of the PullRequest changed since the last build?
這似乎是一個非常受歡迎的問題,但都有不同的差異,我無法深入了解它。
我的 git 存儲庫有 2 個項目,每個項目位於一個單獨的文件夾中。 我想通過拉取請求觸發 Jenkins CI,並且僅當該文件夾的子文件夾中的文件自上次提交以來發生更改時才為特定項目運行構建。
我已經學會了如何通過拉取請求觸發 Jenkins CI(使用 MultiBranchPipeline Jenkins 項目類型)。
我可以在 CI 中執行腳本(我的倉庫中的 JenkinsFile)。
另外,我知道如何檢測上次提交中特定子文件夾中是否有任何文件更改(git diff HEAD^ HEAD Frontend/)。
但是我不知道如何識別拉取請求中的提交,因此我可以檢查子文件夾中這兩個提交的更改。
問題:我如何知道拉取請求中的提交是什么?
或者最后的問題:
問題:如何檢查 PullRequest 文件夾中的文件自上次構建后是否更改?
PS 我知道 Jenkins 知道這一點,因為在日志中我看到了修訂:
Checking out Revision 88f657f0d3c63c43ba3b07686c93a640ca681e00 (PR-4)
如何在腳本級別訪問它?
謝謝!
在谷歌搜索並沒有帶來任何成果之后,我想出了一個解決方法:我沒有嘗試從 Jenkins 中提取信息,而是決定從 Git 中提取信息,幸運的是它有一個很好的命令,可以顯示分支或提交:
git merge-base HEAD origin/master
唯一的問題是,由於某種原因,Jenkins 作為 PR 的一部分從 Github 中提取的 repo 沒有看到“origin/master”:它只看到了“origin/PR-xyz”。 即使我確實“獲取原始大師”也無濟於事。
所以我不得不手動添加一個遙控器。 由於在 PR 打開時 Jenkins 保留了 repo,因此我添加了“if”以確保順序 PR 運行不會因為遠程已經存在而失敗:
String remotes = powershell script:'git remote', returnStdout:true
echo 'Remotes: '+remotes
if( !remotes.contains('github') )
{
echo 'Adding github remote'
powershell script:'git remote add github https://github.com/SeredaOM/JenkinsLearning.git'
powershell script:'git fetch github master'
}
PS如果有人有更好的解決方案,請告訴我,這將是一個很好的學習材料。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.