如何使用 GitHub Org 插件从 jenkins 管道 (jenkinsfile) 触发另一个作业?
How can I trigger another job from a jenkins pipeline (jenkinsfile) with GitHub Org Plugin?
如何从 Jenkinsfile
中触发另一个作业的构建?
我假设这个作业是同一个 github organization 下的另一个存储库,它已经有自己的 Jenkins 文件。
我也想仅在分支名称为 master 时执行此操作,因为触发任何本地分支的下游构建没有意义。
更新:
stage 'test-downstream'
node {
def job = build job: 'some-downtream-job-name'
}
仍然,执行时出现错误
No parameterized job named some-downtream-job-name found
我确定这个作业存在于jenkins 中并且与当前作业在同一个组织文件夹下。这是另一个有自己的工作 Jenkinsfile
.
请注意,此问题特定于 GitHub Organization Plugin,它会为您的 GitHub 组织的每个存储库和分支自动创建和维护作业。
pipeline 中的命令 build
用于触发 jenkins 中的其他作业。
作业必须存在于 Jenkins 中并且可以参数化。
至于分支,我猜你可以read it from git
首先,将build
步骤包裹在node
中是浪费一个executor slot。您的上游执行者将无缘无故闲置。
其次,在多分支项目中,您可以使用环境变量 BRANCH_NAME
使逻辑以当前分支为条件。
第三,job
参数采用绝对或相对作业名称。如果您提供的名称没有任何路径限定,那将引用同一文件夹中的另一个作业,在多分支项目的情况下,这意味着同一存储库的另一个分支。
所以你想写的大概是
if (env.BRANCH_NAME == 'master') {
build '../other-repo/master'
}
除了上面提到的答案:我想用一个传递给第二个管道的简单参数开始一个工作,并在 http://web.archive.org/web/20160209062101/https://dzone.com/refcardz/continuous-delivery-with-jenkins-workflow
上找到了答案
所以我用了:
stage ('Starting ART job') {
build job: 'RunArtInTest', parameters: [[$class: 'StringParameterValue', name: 'systemname', value: systemname]]
}
对该任务使用 build job plugin 以触发 jenkins 文件中的其他作业。
您可以将各种逻辑添加到您的执行中,例如并行、节点和代理选项以及触发外部作业的步骤。为此,我给出了一些 easy-to-read 食谱示例。
1.example 用于通过条件示例从 jenkins 文件触发外部作业:
if (env.BRANCH_NAME == 'master') {
build job:'exactJobName' , parameters:[
string(name: 'keyNameOfParam1',value: 'valueOfParam1')
booleanParam(name: 'keyNameOfParam2',value:'valueOfParam2')
]
}
2.example 使用条件示例从 jenkins 文件触发多个作业:
def jobs =[
'job1Title'{
if (env.BRANCH_NAME == 'master') {
build job:'exactJobName' , parameters:[
string(name: 'keyNameOfParam1',value: 'valueNameOfParam1')
booleanParam(name: 'keyNameOfParam2',value:'valueNameOfParam2')
]
}
},
'job2Title'{
if (env.GIT_COMMIT == 'someCommitHashToPerformAdditionalTest') {
build job:'exactJobName' , parameters:[
string(name: 'keyNameOfParam3',value: 'valueOfParam3')
booleanParam(name: 'keyNameOfParam4',value:'valueNameOfParam4')
booleanParam(name: 'keyNameOfParam5',value:'valueNameOfParam5')
]
}
}
您可以使用 Jenkins Pipeline 中的 build job
步骤(最低 Jenkins 要求:2.130)。
这是 build
步骤的完整 API:https://jenkins.io/doc/pipeline/steps/pipeline-build-step/
如何使用build
:
job
:要构建的下游作业的名称。可能是另一项管道工作,但更常见的是自由式或其他项目。
- 如果作业与此上游流水线作业位于同一文件夹中,则使用简单名称;
- 您可以改用 相对路径 ,例如
../sister-folder/downstream
- 或者你可以使用绝对路径,比如
/top-level-folder/nested-folder/downstream
使用分支作为参数触发另一个作业
在我公司,我们的许多分支机构都包含“/”。您必须将“/”的任何实例替换为“%2F”(因为它出现在作业的 URL 中)。
在这个例子中我们使用相对路径
stage('Trigger Branch Build') {
steps {
script {
echo "Triggering job for branch ${env.BRANCH_NAME}"
BRANCH_TO_TAG=env.BRANCH_NAME.replace("/","%2F")
build job: "../my-relative-job/${BRANCH_TO_TAG}", wait: false
}
}
}
使用内部版本号作为参数触发另一个作业
build job: 'your-job-name',
parameters: [
string(name: 'passed_build_number_param', value: String.valueOf(BUILD_NUMBER)),
string(name: 'complex_param', value: 'prefix-' + String.valueOf(BUILD_NUMBER))
]
并行触发多个作业
来源:https://jenkins.io/blog/2017/01/19/converting-conditional-to-pipeline/
有关并行的更多信息,请点击此处:https://jenkins.io/doc/book/pipeline/syntax/#parallel
stage ('Trigger Builds In Parallel') {
steps {
// Freestyle build trigger calls a list of jobs
// Pipeline build() step only calls one job
// To run all three jobs in parallel, we use "parallel" step
// https://jenkins.io/doc/pipeline/examples/#jobs-in-parallel
parallel (
linux: {
build job: 'full-build-linux', parameters: [string(name: 'GIT_BRANCH_NAME', value: env.BRANCH_NAME)]
},
mac: {
build job: 'full-build-mac', parameters: [string(name: 'GIT_BRANCH_NAME', value: env.BRANCH_NAME)]
},
windows: {
build job: 'full-build-windows', parameters: [string(name: 'GIT_BRANCH_NAME', value: env.BRANCH_NAME)]
},
failFast: false)
}
}
或者:
stage('Build A and B') {
failFast true
parallel {
stage('Build A') {
steps {
build job: "/project/A/${env.BRANCH}", wait: true
}
}
stage('Build B') {
steps {
build job: "/project/B/${env.BRANCH}", wait: true
}
}
}
}
如何从 Jenkinsfile
中触发另一个作业的构建?
我假设这个作业是同一个 github organization 下的另一个存储库,它已经有自己的 Jenkins 文件。
我也想仅在分支名称为 master 时执行此操作,因为触发任何本地分支的下游构建没有意义。
更新:
stage 'test-downstream'
node {
def job = build job: 'some-downtream-job-name'
}
仍然,执行时出现错误
No parameterized job named some-downtream-job-name found
我确定这个作业存在于jenkins 中并且与当前作业在同一个组织文件夹下。这是另一个有自己的工作 Jenkinsfile
.
请注意,此问题特定于 GitHub Organization Plugin,它会为您的 GitHub 组织的每个存储库和分支自动创建和维护作业。
pipeline 中的命令 build
用于触发 jenkins 中的其他作业。
作业必须存在于 Jenkins 中并且可以参数化。 至于分支,我猜你可以read it from git
首先,将build
步骤包裹在node
中是浪费一个executor slot。您的上游执行者将无缘无故闲置。
其次,在多分支项目中,您可以使用环境变量 BRANCH_NAME
使逻辑以当前分支为条件。
第三,job
参数采用绝对或相对作业名称。如果您提供的名称没有任何路径限定,那将引用同一文件夹中的另一个作业,在多分支项目的情况下,这意味着同一存储库的另一个分支。
所以你想写的大概是
if (env.BRANCH_NAME == 'master') {
build '../other-repo/master'
}
除了上面提到的答案:我想用一个传递给第二个管道的简单参数开始一个工作,并在 http://web.archive.org/web/20160209062101/https://dzone.com/refcardz/continuous-delivery-with-jenkins-workflow
上找到了答案所以我用了:
stage ('Starting ART job') {
build job: 'RunArtInTest', parameters: [[$class: 'StringParameterValue', name: 'systemname', value: systemname]]
}
对该任务使用 build job plugin 以触发 jenkins 文件中的其他作业。 您可以将各种逻辑添加到您的执行中,例如并行、节点和代理选项以及触发外部作业的步骤。为此,我给出了一些 easy-to-read 食谱示例。
1.example 用于通过条件示例从 jenkins 文件触发外部作业:
if (env.BRANCH_NAME == 'master') {
build job:'exactJobName' , parameters:[
string(name: 'keyNameOfParam1',value: 'valueOfParam1')
booleanParam(name: 'keyNameOfParam2',value:'valueOfParam2')
]
}
2.example 使用条件示例从 jenkins 文件触发多个作业:
def jobs =[
'job1Title'{
if (env.BRANCH_NAME == 'master') {
build job:'exactJobName' , parameters:[
string(name: 'keyNameOfParam1',value: 'valueNameOfParam1')
booleanParam(name: 'keyNameOfParam2',value:'valueNameOfParam2')
]
}
},
'job2Title'{
if (env.GIT_COMMIT == 'someCommitHashToPerformAdditionalTest') {
build job:'exactJobName' , parameters:[
string(name: 'keyNameOfParam3',value: 'valueOfParam3')
booleanParam(name: 'keyNameOfParam4',value:'valueNameOfParam4')
booleanParam(name: 'keyNameOfParam5',value:'valueNameOfParam5')
]
}
}
您可以使用 Jenkins Pipeline 中的 build job
步骤(最低 Jenkins 要求:2.130)。
这是 build
步骤的完整 API:https://jenkins.io/doc/pipeline/steps/pipeline-build-step/
如何使用build
:
job
:要构建的下游作业的名称。可能是另一项管道工作,但更常见的是自由式或其他项目。- 如果作业与此上游流水线作业位于同一文件夹中,则使用简单名称;
- 您可以改用 相对路径 ,例如
../sister-folder/downstream
- 或者你可以使用绝对路径,比如
/top-level-folder/nested-folder/downstream
使用分支作为参数触发另一个作业
在我公司,我们的许多分支机构都包含“/”。您必须将“/”的任何实例替换为“%2F”(因为它出现在作业的 URL 中)。
在这个例子中我们使用相对路径
stage('Trigger Branch Build') {
steps {
script {
echo "Triggering job for branch ${env.BRANCH_NAME}"
BRANCH_TO_TAG=env.BRANCH_NAME.replace("/","%2F")
build job: "../my-relative-job/${BRANCH_TO_TAG}", wait: false
}
}
}
使用内部版本号作为参数触发另一个作业
build job: 'your-job-name',
parameters: [
string(name: 'passed_build_number_param', value: String.valueOf(BUILD_NUMBER)),
string(name: 'complex_param', value: 'prefix-' + String.valueOf(BUILD_NUMBER))
]
并行触发多个作业
来源:https://jenkins.io/blog/2017/01/19/converting-conditional-to-pipeline/
有关并行的更多信息,请点击此处:https://jenkins.io/doc/book/pipeline/syntax/#parallel
stage ('Trigger Builds In Parallel') {
steps {
// Freestyle build trigger calls a list of jobs
// Pipeline build() step only calls one job
// To run all three jobs in parallel, we use "parallel" step
// https://jenkins.io/doc/pipeline/examples/#jobs-in-parallel
parallel (
linux: {
build job: 'full-build-linux', parameters: [string(name: 'GIT_BRANCH_NAME', value: env.BRANCH_NAME)]
},
mac: {
build job: 'full-build-mac', parameters: [string(name: 'GIT_BRANCH_NAME', value: env.BRANCH_NAME)]
},
windows: {
build job: 'full-build-windows', parameters: [string(name: 'GIT_BRANCH_NAME', value: env.BRANCH_NAME)]
},
failFast: false)
}
}
或者:
stage('Build A and B') {
failFast true
parallel {
stage('Build A') {
steps {
build job: "/project/A/${env.BRANCH}", wait: true
}
}
stage('Build B') {
steps {
build job: "/project/B/${env.BRANCH}", wait: true
}
}
}
}