2016-11-16 184 views
4

我們看到在Jenkins多分支管道項目上觸發重複構建。通常使用來自使用此插件的Bitbucket的推送通知來觸發構建:https://marketplace.atlassian.com/plugins/com.nerdwin15.stash-stash-webhook-jenkins/server/overview在Jenkins多分支管道上觸發的重複構建

但是,我們現在看到'double'構建出於某種原因。如果您查看觸發的兩個構建版本,則由「提交通知」觸發,另一個由「分支索引」觸發。

什麼導致分支索引,爲什麼它觸發構建?我們不添加或刪除分支,這只是一個正常的提交/推送。

爲了使它更復雜,它不會一直髮生。有一次,我認爲這隻發生在合併後,但事實並非如此。此外,阻止它的一種方法似乎是刪除作業的構建歷史記錄(這顯然不是理想的)。

我們正在從管道腳本任務設置屬性,但只廢舊構建:

properties([buildDiscarder(logRotator(artifactDaysToKeepStr: '', artifactNumToKeepStr: '', daysToKeepStr: '', numToKeepStr: '20'))]) 

混亂的另一個來源似乎是,如果一個人應該有順序啓用輪詢(無間隔)推送通知爲Git插件工作。 Git插件的文檔表明這是必需的,確實看起來是用於'普通'管道構建,但似乎並不需要多分支管道構建。 這是正確的嗎?從詹金斯的Git插件維基:

這將掃描的所有作業:

有建立觸發器>民意測驗SCM啓用。沒有輪詢時間表是 必需的。被配置爲在指定的URL上構建存儲庫 被配置爲構建可選的指定分支或提交ID 對於滿足這些條件的作業,輪詢將立即觸發 。如果輪詢發現值得構建的變化,則構建將會觸發 。

我們使用的是Bitbucket 4.8.4和Jenkins 2.30(以及所有最新的管道插件)。

+0

這只是一個猜測:如果存儲庫服務器上的時鐘與Jenkins服務器上的時鐘相比,我已經看到類似的問題。您可能會嘗試添加安靜期(https://jenkins.io/blog/2010/08/11/quiet-period-feature/)。 – jherb

+0

@jherb感謝您的信息 - 但我找不到如何在Jenkinsfile的管道中創建安靜期(我們需要在腳本上設置它,因爲我們正在設置其他構建屬性 - 這將覆蓋其他任何設置集通過圖形用戶界面) –

+0

我想你可以像在這個例子中使用'sleep 60'這樣的東西:https://jenkins.io/doc/pipeline/examples/#timestamper-wrapper(在你調用scm或git命令之前) – jherb

回答

0

我也在使用多分支管道,我可能會爲您提供一些信息。

當您在詹金斯一「GitHub的組織」的工作,並添加相應的Git的信息,你還需要選擇詹金斯如何構建被觸發的時間和頻率:

enter image description here

詹金斯將掃描您所配置的GitHub組織下的存儲庫就像您設置的時間一樣多。然後,只要Jenkins-Git webhook被配置,Jenkins就會自動觸發一個構建,一旦它發現一個新的提交已經被提交(只要Jenkins-Git的webhook已經配置)。

當分支索引發生時,它也會觸發構建。

在其他Jenkins作業樣式中,您可以配置「不允許併發構建」,但我找不到多分支作業樣式的此設置。

我希望對此有所瞭解。

+0

該設置(定期,否則運行)似乎是失敗的推送通知的備份。例如,如果構建版在1天后沒有收到任何通知,則運行索引。這不是我們所需要的。另外,'不允許併發構建'也不是我們所需要的 - 我們想要併發構建。我們遇到的問題是,推送通知似乎觸發了2個構建 - 一個構建更改(正確),另一個不列出任何更改(它只是說'Branch Indexing')... –

4

由於其他答案已經建議「不允許併發構建」選項是你想要的。 你可以得到通過Jenkinsfile

properties ([ 
     buildDiscarder(logRotator(artifactNumToKeepStr: '5', daysToKeepStr: '15')), 
     disableConcurrentBuilds() 
    ]) 

編輯:

這不是這裏的實際問題的解決方案。但對某些人來說似乎仍然有幫助,所以只要我們沒有更好的答案,我就會離開它。

+0

是但我們想要併發構建。禁用它們只會排隊他們不是嗎?我不想要的是構建被觸發,不應該。 –

+0

你對排隊是正確的。我會編輯我的答案,至少清楚它不能回答你的具體問題。 – Reinhold

0

您表示您在使用https://marketplace.atlassian.com/plugins/com.nerdwin15.stash-stash-webhook-jenkins/server/overview。如果你仍然在使用這個插件,我想你會對現在看起來是jenkins/stash(又名bitbucket服務器)集成的支持插件感到高興:https://marketplace.atlassian.com/plugins/nl.topicus.bitbucket.bitbucket-webhooks/server/overview。請注意它是如何表示您需要「至少Bitbucket服務器的bitbucket-webhooks-plugin的這一提交」in the bitbucket branch source plugin docs。我們正在使用它,並且我從來沒有見過兩個構建是由相同的推送通知觸發的。當你手動觸發構建時,是的,但不是通過相同的推送通知。 :)

相關問題