从另一个触发多分支作业
Trigger Multibranch Job from another
我在 Jenkins 有一份工作,我需要在它结束时触发另一个工作(如果正确结束)。
第二个job是multibranch,所以我想知道有没有办法在触发这个job的时候,通过我想要的branch。例如,如果我在分支 develop 中开始第一个作业,我需要它来触发 develop 分支的第二个作业。
有什么办法可以实现吗?
是的,您可以通过添加 post 构建步骤来调用下游作业: Trigger/Call 在其他项目上构建(您可能需要安装 "Parameterized Trigger Plugin"):
- 在“参数”部分中,您可以为与当前作业中的变量关联的下游作业定义变量。
此外,multibranch_PARAM1 和 *PARAM2 必须在下游作业中配置:
只需将多分支作业想象成一个文件夹,其中包含以可用分支命名的真实作业:
使用管道作业
在使用管道构建步骤时,您必须使用如下内容:
build(job: 'JOB_NAME/BRANCH_NAME')
。当然你也可以用变量来指定分支名称。
使用自由式作业
当从自由式作业触发时,您很可能必须
- 使用参数化触发器插件,因为普通的旧下游构建插件在触发管道作业时仍然存在问题(至少我们正在使用的版本)
- 作业名称使用与上述相同的模式:
JOB_NAME/BRANCH_NAME
应该可以在这里使用作业参数指定分支名称。不过我没试过。
有时您想调用一个或多个从属多分支作业并让它们构建所有分支,而不仅仅是一个。脚本可以检索分支名称并构建它们。
因为脚本在调用构建步骤之前调用了 Jenkins API, it should be in a shared library to avoid sandbox restrictions. The script should clear non-serializable 引用。
共享库脚本jenkins-lib/vars/mbhelper.groovy
:
def callMultibranchJob(String name) {
def item = jenkins.model.Jenkins.get().getItemByFullName(name)
def jobNames = item.allJobs.collect {it.fullName}
item = null // CPS -- remove reference to non-serializable object
for (jobName in jobNames) {
build job: jobName
}
}
管道:
pipeline {
agent any
stages {
stage('Build') {
steps {
script {
library 'jenkins-lib'
mbhelper.callMultibranchJob 'multibranch-job-one'
mbhelper.callMultibranchJob 'multibranch-job-two'
}
}
}
}
}
我在 Jenkins 有一份工作,我需要在它结束时触发另一个工作(如果正确结束)。
第二个job是multibranch,所以我想知道有没有办法在触发这个job的时候,通过我想要的branch。例如,如果我在分支 develop 中开始第一个作业,我需要它来触发 develop 分支的第二个作业。
有什么办法可以实现吗?
是的,您可以通过添加 post 构建步骤来调用下游作业: Trigger/Call 在其他项目上构建(您可能需要安装 "Parameterized Trigger Plugin"):
- 在“参数”部分中,您可以为与当前作业中的变量关联的下游作业定义变量。
此外,multibranch_PARAM1 和 *PARAM2 必须在下游作业中配置:
只需将多分支作业想象成一个文件夹,其中包含以可用分支命名的真实作业:
使用管道作业
在使用管道构建步骤时,您必须使用如下内容:
build(job: 'JOB_NAME/BRANCH_NAME')
。当然你也可以用变量来指定分支名称。
使用自由式作业
当从自由式作业触发时,您很可能必须
- 使用参数化触发器插件,因为普通的旧下游构建插件在触发管道作业时仍然存在问题(至少我们正在使用的版本)
- 作业名称使用与上述相同的模式:
JOB_NAME/BRANCH_NAME
应该可以在这里使用作业参数指定分支名称。不过我没试过。
有时您想调用一个或多个从属多分支作业并让它们构建所有分支,而不仅仅是一个。脚本可以检索分支名称并构建它们。
因为脚本在调用构建步骤之前调用了 Jenkins API, it should be in a shared library to avoid sandbox restrictions. The script should clear non-serializable 引用。
共享库脚本jenkins-lib/vars/mbhelper.groovy
:
def callMultibranchJob(String name) {
def item = jenkins.model.Jenkins.get().getItemByFullName(name)
def jobNames = item.allJobs.collect {it.fullName}
item = null // CPS -- remove reference to non-serializable object
for (jobName in jobNames) {
build job: jobName
}
}
管道:
pipeline {
agent any
stages {
stage('Build') {
steps {
script {
library 'jenkins-lib'
mbhelper.callMultibranchJob 'multibranch-job-one'
mbhelper.callMultibranchJob 'multibranch-job-two'
}
}
}
}
}