我们看到在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(以及所有最新的管道插件)。
答案 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构建的方式以及频率:
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中应用配置。