在Jenkins multibranch管道上触发重复构建

时间:2016-11-16 13:45:08

标签: git jenkins bitbucket jenkins-pipeline bitbucket-server

我们看到在Jenkins multibranch管道项目上触发了重复构建。构建通常使用来自Bitbucket的推送通知使用此插件触发:https://marketplace.atlassian.com/plugins/com.nerdwin15.stash-stash-webhook-jenkins/server/overview

然而,由于某种原因,我们现在看到'双'版本。如果你看一下被触发的2个构建,一个由'commit notification'触发,另一个由'Branch Indexing'触发。

导致分支索引的原因是什么,它为什么会触发构建?我们不是添加或删除分支,它只是一个正常的提交/推送。

为了使它更复杂,它不会一直发生。有一次,我认为这只是在合并之后才发生,但事实并非如此。另外,阻止它的一种方法似乎是删除作业的构建历史(这显然不是理想的)。

我们正在从管道脚本设置作业的属性,但只是为了丢弃旧版本:

m[:,i]

另一个混乱的来源似乎是,如果一个人应该启用轮询(没有间隔),以便推送通知适用于Git插件。 Git插件的文档表明这是必需的,实际上似乎是“普通”管道构建,但似乎不需要多分支管道构建。 这是正确的吗? 来自Jenkins Git插件维基:

  

这将扫描以下所有作业:

     

具有构建触发器>轮询SCM已启用。没有民意调查表   需要。配置为在指定的URL上构建存储库   配置为构建可选指定的分支或提交ID   对于符合这些条件的工作,将立即进行投票   触发。如果轮询发现值得构建的更改,则构建将会   反过来被触发。

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

5 个答案:

答案 0 :(得分:5)

正如另一个答案已经提出的那样,“不允许并发构建”选项就是你想要的。 你可以通过package model; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.net.MalformedURLException; import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.Image; import com.itextpdf.text.Paragraph; import com.itextpdf.text.pdf.PdfWriter; public class SECB extends BankBSP implements PSERequirement{ public String name = "Security Bank"; public void welcome() { System.out.println("Maligayang pagdating sa " + name); } public void depositAmountRequirement() { System.out.println("To open an account, " + "minimum deposit amount is P3,000.00"); } public void depositPromo() { System.out.println("Minimum opening amount of at least " + "Php500,000.00 will get you a dinner date with " + "2014 Ms. World Megan Young."); } public void maintainingBalance() { System.out.println("Maintaining balance of " + "at least Php1,000.00 is required"); } public void interestRate() { System.out.println("Minimum deposit amount of P3,000.00 " + "to earn an interest rate of 5% per annum."); } public void displayFinancialStatement() { System.out.println("PSE Requirement: " + MIN_LARGE_CAPITALIZATION); System.out.println(name + " 2015 " + "Financial Assets: Php141,740,664,644.70"); } public void displayTotalMarketShares() { System.out.println("PSE Required Shares: " + MIN_SHARES_SOLD); System.out.println(name + "total shares: " + "753,538,887"); } public void GeneratePDF() throws DocumentException, MalformedURLException, IOException{ Document document = new Document(); PdfWriter.getInstance(document,new FileOutputStream("/Users/PandaFunk/Desktop/images/sample.pdf")); document.open(); Paragraph paragraph = new Paragraph(); paragraph.add(welcome.toString()); paragraph.add("Hello World\n"); paragraph.add("PDF sample generation demo\n"); paragraph.add("programmed by Mon Zalameda\n"); paragraph.add("DLS-CSB is a wonderful school. " + "I will miss you and hope " + "to see you again.\n\n"); //adding Image Image csbImage = Image.getInstance("/Users/PandaFunk/Desktop/images/DLS-CSB_Seal.png"); document.add(paragraph); document.add(csbImage); document.close(); } }

获得
Private Sub Worksheet_Change(ByVal Target As Range)

If Target = Range("S17") Then

If Target.Value = "(All)" Then
CommandButton6.Visible = False

Else

CommandButton6.Visible = True

End If

End If

End Sub

编辑:

这不是解决实际问题的方法。但是对某些人来说似乎仍然有帮助,所以只要我们没有更好的答案,我就会离开它。

答案 1 :(得分:1)

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

当您创建一个" GitHub组织"在Jenkins工作并添加相关的Git信息,您还需要选择触发Jenkins构建的方式以及频率:

enter image description here

Jenkins会像您设置的那样经常扫描您配置的GitHub组织下的存储库。

然后,Jenkins会在发现提交新提交后立即自动触发构建(只要配置了Jenkins-Git webhook)。

进行分支索引时,它还会触发构建。

在其他Jenkins工作方式中,您可以配置"不允许并发构建"但我无法找到多分支工作方式的这个设置。

我希望这可以解释这个问题。

答案 2 :(得分:0)

您表示您正在使用https://marketplace.atlassian.com/plugins/com.nerdwin15.stash-stash-webhook-jenkins/server/overview。如果您仍在使用该插件,我怀疑您现在似乎更喜欢jenkins / stash(aka bitbucket server)集成支持的插件:https://marketplace.atlassian.com/plugins/nl.topicus.bitbucket.bitbucket-webhooks/server/overview。注意它是如何表示你需要"至少这个为bitbucket服务器提供bitbucket-webhooks-plugin" in the bitbucket branch source plugin docs。我们正在使用它并且我从未见过相同的推送通知会触发两个版本。手动触发构建时,是,但不是通过相同的推送通知。 :)

答案 3 :(得分:0)

在Jenkins多分支项目配置中,将“发现分支”从“所有分支”更改为“排除归档为PR的分支”。

答案 4 :(得分:0)

您可以将属性“ Supress Automatic SCM Trigger”添加到作业配置:

Supress Automatic SCM Trigger Property

这将阻止构建由于“分支索引”而执行。

缺点是,您可能需要至少手动触发一次分支特定的构建,才能从Jenkinsfile中应用配置。