我有两个Jenkins流水线,假设是pipeline-A和pipeline-B。我想在pipeline-B中调用pipeline-A。我该如何做?
(pipeline-A是pipeline-B的子集。pipeline-A负责执行一些例行工作,可以在pipeline-B中重复使用)
我已经在我的机器上安装了Jenkins 2.41。
我有两个Jenkins流水线,假设是pipeline-A和pipeline-B。我想在pipeline-B中调用pipeline-A。我该如何做?
(pipeline-A是pipeline-B的子集。pipeline-A负责执行一些例行工作,可以在pipeline-B中重复使用)
我已经在我的机器上安装了Jenkins 2.41。
以下的解决方案对我有效:
pipeline {
agent
{
node {
label 'master'
customWorkspace "${env.JobPath}"
}
}
stages
{
stage('Start') {
steps {
sh 'ls'
}
}
stage ('Invoke_pipeline') {
steps {
build job: 'pipeline1', parameters: [
string(name: 'param1', value: "value1")
]
}
}
stage('End') {
steps {
sh 'ls'
}
}
}
}
在这里添加“Pipeline: Build Step”官方文档链接:https://jenkins.io/doc/pipeline/steps/pipeline-build-step/
ERROR: Waiting for non-job items is not supported
,可能需要指定分支:build job: 'pipeline1/master', parameters: [
- Céline Aussourddef pipelineA = load "pipeline_A.groovy"
pipelineA.someMethod()
pipeline_a.groovy
):def someMethod() {
//do something
}
return this
管道作业
如果您想要执行另一个管道作业,
您的Jenkinsfile
中的build job
步骤可以完成此操作:
build job: '<Project name>', propagate: true, wait: true
propagate
: 传播错误
wait
: 等待完成
如果您有作业的参数,可以像这样添加:
build job: '<Project name>', parameters: [[$class: 'StringParameterValue', name: 'param1', value: 'test_param']]
${env.BRANCH_NAME}
。因此,我的最终调用类似于:
build job:"Downstream_Job/${env.BRANCH_NAME}",parameters:[string(name:'some_param',value:'true')]
- msteppe91如@Matias Snellingen和@Céline Aussourd所述,在启动多分支作业时,您必须像这样指定要构建的分支:
stage ('Invoke_pipeline') {
steps {
build job: 'pipeline1/master', parameters: [
string(name: 'param1', value: "value1")
]
}
}
在我的情况下,它解决了这个问题。
我将发布我的解决方案,它与@Michael COLL、@Matias Snellingen和@Céline Aussourd类似。
对于多分支流水线,我在Jenkinsfile中使用以下代码来触发我的多分支B与多分支A(在示例中有两种情况:管道和多分支管道):
post {
always {
echo 'We are in post part and Jenkins build with QA tests is going to be triggered.'
// For triggering Pipeline
//build job: 'WGF-QA WITH ALLURE', parameters: [string(name: 'QA-Automation', value: 'value from Build pipeline')]
// For triggering Multibranch Pipeline
build job: 'Testing QA/QA Selenium Tests/feature%2FGET-585', parameters: [string(name: 'QA-Automation', value: 'value from Build pipeline')]
}
}
请确保将分支的完整路径定义为与情况中定义的路径相同,并在分支名称中使用 %2F 而不是 /(feature/GET-585 -> feature%2FGET-585)。
补充一下 @matias-snellingen 的话。如果您有多个函数,则 return this
应该在主管道脚本中将要调用的函数下面。例如:
def someMethod() {
helperMethod1()
helperMethod2()
}
return this
def helperMethod1(){
//do stuff
}
def helperMethod2(){
//do stuff
}
someMethod()
是主管道脚本中将被调用的方法。
package name.of.package
import groovy.json.*
def myFunc(var1) {
return result
}
然后消耗它
@Library('name_of_repo')
import name.of.package.*
utils = new name_of_pipeline()
// here you can invoke
utils.myFunc(var)
希望能有所帮助