Jenkins 如何从文件触发组织扫描?

Jenkins 如何从文件触发组织扫描?,jenkins,jenkins-pipeline,Jenkins,Jenkins Pipeline,有没有办法从Jenkins文件触发组织扫描? 我们将Jenkins 2.25与GitHub Branch源插件一起使用您可以像其他任何作业一样,使用构建步骤触发组织文件夹作业(然后扫描回购/分支)。我为一个多分支作业实现了这一点,但我假设它对组织文件夹作业同样有效 需要注意的一点是,目前(或者至少在3个月前我实现此功能时),您不能等待此任务完成。如果管道的其余部分需要这样做,则需要稍微解决一下。我的用例是,我们推送一个新分支,然后想要构建该分支,因此我们触发扫描,等待分支(=作业)出现,然后最终

有没有办法从Jenkins文件触发组织扫描?
我们将Jenkins 2.25与GitHub Branch源插件一起使用

您可以像其他任何作业一样,使用构建步骤触发组织文件夹作业(然后扫描回购/分支)。我为一个多分支作业实现了这一点,但我假设它对组织文件夹作业同样有效

需要注意的一点是,目前(或者至少在3个月前我实现此功能时),您不能等待此任务完成。如果管道的其余部分需要这样做,则需要稍微解决一下。我的用例是,我们推送一个新分支,然后想要构建该分支,因此我们触发扫描,等待分支(=作业)出现,然后最终触发它

//用于触发特定多分支项目的分支索引的助手函数。
//这所需要的权限非常糟糕。。但目前没有其他选择
//
//所需权限:
//-方法jenkins.model.jenkins getItemByFullName java.lang.String
//-staticMethod jenkins.model.jenkins getInstance
//
//见:
// https://github.com/jenkinsci/pipeline-build-step-plugin/blob/3ff14391fe27c8ee9ccea9ba1977131fe3b26dbe/src/main/java/org/jenkinsci/plugins/workflow/support/steps/build/BuildTriggerStepExecution.java#L66
// https://stackoverflow.com/questions/41579229/triggering-branch-indexing-on-multibranch-pipelines-jenkins-git
void ScanMultibranchWaitForJob(字符串多分支项目,字符串分支){
String job=“${multibranchProject}/${branch}”
//“生成”步骤不支持等待分支索引(ComputedFolder作业类型),
//因此,我们需要一些黑魔法来投票,并等待预期的工作出现
生成作业:多分支项目,等待:false
echo“正在等待作业“${job}”出现…”
//如果分支以前存在并已被删除,则可以禁用该分支。这种情况可能永远不会发生
//使用真正的发布分支,但更可能发生在您接触此文件时。
while(Jenkins.instance.getItemByFullName(作业)=null | | Jenkins.instance.getItemByFullName(作业).isDisabled()){
睡眠3
}
}
这就是它的使用方法:

stage('buildartifacts'){
台阶{
//“产品构建”作业的触发器分支索引
echo“运行分支索引”
ScanMultiBranchWaitForJob(构建项目,发布BranchName(版本))
//使用构建步骤触发“产品构建/发布-1.2.0”作业(等待它成功完成)
echo“为分支“${releaseBranchName(版本)}”触发生成”
剧本{
//我们接受不稳定的构建
buildResult=生成作业:“../${buildProject}/${releaseBranchName(版本)}”,传播:false
如果(!buildResult.result导致['SUCCESS','UNSTABLE']){
错误“生成失败”
}
}
}
}

希望这有帮助。如果您提供更多的细节,答案可能会更适合您的用例。

我也试图强制我以编程方式创建的分支“出现”在Jenkins中

这可以通过使用分支所属路径中提到的“扫描”按钮手动完成,但是,如何以编程方式完成呢

使用该工具,您可以执行以下操作:

build wait: false, job: {{ path where my branch is supposed to appear}} //Equivalent to clicking on "Scan" button
sleep 10 //Wait till above action is completed
build job: {{ my job full path }} //Build the job of the branch created programmatically
例如,在我的案例中:

build wait: false, job:"myProject/myRepo"
sleep 30
build job: "myProject/myRepo/branchCreatedProgrammatically"
注意:在路径上执行
build
时,需要使用
wait:false
参数,因为您无法等待非作业项。

可能相关: