如何在另一个jenkins管道B中调用jenkins管道a

如何在另一个jenkins管道B中调用jenkins管道a,jenkins,jenkins-pipeline,jenkins-2,Jenkins,Jenkins Pipeline,Jenkins 2,我有两个Jenkins管道,比方说管道A和管道B。我想在管道B中调用管道A。我怎么做 (pipeline-A是pipeline-B的子集。pipeline-A负责做一些常规工作,这些工作可以在pipeline-B中重复使用) 我已经在我的机器上安装了Jenkins 2.41。如果您想调用另一个管道脚本或作业,则有点不清楚,因此我回答这两个问题: 管道脚本 “加载”步骤将执行另一个管道脚本。如果两个脚本位于同一目录中,则可以按如下方式加载: def pipelineA = load "pipeli

我有两个Jenkins管道,比方说管道A和管道B。我想在管道B中调用管道A。我怎么做

(pipeline-A是pipeline-B的子集。pipeline-A负责做一些常规工作,这些工作可以在pipeline-B中重复使用)


我已经在我的机器上安装了Jenkins 2.41。

如果您想调用另一个管道脚本或作业,则有点不清楚,因此我回答这两个问题:

管道脚本 “加载”步骤将执行另一个管道脚本。如果两个脚本位于同一目录中,则可以按如下方式加载:

def pipelineA = load "pipeline_A.groovy"
pipelineA.someMethod()
build job: '<Project name>', parameters: [[$class: 'StringParameterValue', name: 'param1', value: 'test_param']]
其他脚本(pipeline_a.groovy):

管道作业

如果您正在谈论执行另一个管道作业, “构建作业”步骤可以完成以下任务:

build job: '<Project name>', propagate: true, wait: true
生成作业:“”,传播:true,等待:true
传播:传播错误

等待:等待完成

如果作业中有参数,可以按如下方式添加:

def pipelineA = load "pipeline_A.groovy"
pipelineA.someMethod()
build job: '<Project name>', parameters: [[$class: 'StringParameterValue', name: 'param1', value: 'test_param']]
生成作业:“”,参数:[$class:'StringParameterValue',名称:'param1',值:'test_param']]

以下解决方案适合我:

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'
            }
        }
    }
}
在此处添加“管道:构建步骤”官方文档的链接:
补充@matias snellingen所说的内容。如果您有多个函数,则返回此函数的
应位于将在主管道脚本中调用的函数下。例如:

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)

希望它有帮助

正如@Matias Snellingen和@Céline Aussourd所提到的,在启动多分支作业的情况下,您必须指定要构建的分支,如下所示:

stage ('Invoke_pipeline') {
    steps {
        build job: 'pipeline1/master', parameters: [
        string(name: 'param1', value: "value1")
        ]
    }
}

在我的例子中,它解决了问题。

您是否尝试将其作为正常作业触发:节点{def job=build job:'some pipeline'}只想知道如何获取父管道中子管道的状态。我想根据子管道的结果继续父管道。是否有方法将“当前构建参数”从一个作业传递到另一个作业?正如在《老詹金斯》中,我怀疑你试图开始一份不存在的工作,或者你使用了错误的名字。例如,如果您想调用一个多分支作业,请使用:
构建作业:“我的作业/我的分支名称”,propagate:true,wait:true
@colti下游分支已经存在。我需要做的是将BRANCH\u NAME指定为
${env.BRANCH\u NAME}
。所以我最后一次调用的结果是:
buildjob:“down_job/${env.BRANCH_NAME}”,parameters:[字符串(NAME:'some_param',value:'true')]
如何在BlueOcean UI中显示子管道中的阶段?这对您来说是如何工作的?“pipeline1”实际上是“管道{}”吗?我收到以下错误:“不支持等待非作业项”。我认为这仅适用于未满管道的作业。实际上,pipeline1是您需要在此处调用的另一个管道名称。@red888如果出现错误
错误:不支持等待非作业项
,您可能需要指定分支:
生成作业:“pipeline1/master”,参数:[
在子管道运行时,是否有办法知道父管道的名称?您可以将JOB_name环境变量作为参数传递给子作业。您好,我如何在其他管道中访问此参数?@awiechert-Yep您可以。