如何在Jenkins管道B中调用Jenkins管道A

hjqgdpho  于 2023-01-08  发布在  Jenkins
关注(0)|答案(6)|浏览(217)

我有两个Jenkins管道,比如管道A和管道B。我想在管道B中调用管道A。我该怎么做呢?
(流水线A是流水线B的子集。流水线A负责执行一些可在流水线B中重用的例程)
我已在计算机上安装了Jenkins 2.41。

rdlzhqv9

rdlzhqv91#

以下解决方案对我有效:

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:此处为“构建步骤”:https://jenkins.io/doc/pipeline/steps/pipeline-build-step/

ldfqzlk8

ldfqzlk82#

如果您想调用另一个管道脚本或作业,我还有点不清楚,所以我对这两个问题都作了回答:

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

def pipelineA = load "pipeline_A.groovy"
pipelineA.someMethod()

其他脚本(pipeline_a.groovy):

def someMethod() {
    //do something
}

return this

管道作业

如果您正在讨论执行另一个管道作业,则“生成作业”步骤可以完成此操作:

build job: '<Project name>', propagate: true, wait: true

传播:传播错误
wait:等待完成
如果作业中有参数,可以按如下方式添加:

build job: '<Project name>', parameters: [[$class: 'StringParameterValue', name: 'param1', value: 'test_param']]
brvekthn

brvekthn3#

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

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

在我的情况下,它解决了问题。

j5fpnvbx

j5fpnvbx4#

我将发布我的解决方案,它类似于@Michael科尔、@Matias Snellingen和@Céline Aussoud。对于多分支管道,我将使用Jenkinsfile中的以下代码,通过多分支A触发我的多分支B(在本例中,管道和多分支管道有两种情况):

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')]
      } 
    }

只需确保定义分支的完整路径,如case中所定义,并使用%2F(功能/GET-585 -〉功能%2FGET-585)代替分支名称中的/。

7cwmlq89

7cwmlq895#

为了补充@matias-snellingen所说的内容,如果您有多个函数,则return this应位于主管道脚本中将要调用的函数之下。例如:

def someMethod() {
   helperMethod1() 
   helperMethod2()
} 
return this 

def helperMethod1(){ 
   //do stuff
} 

def helperMethod2(){
  //do stuff
}

someMethod()将在主管道脚本中调用

k3bvogb1

k3bvogb16#

另一种选择是创建包、加载包并从包中执行包。

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)

希望能有所帮助

相关问题