如何在另一个詹金斯管道 B 中调用一个詹金斯管道 A
How to invoke a jenkins pipeline A in another jenkins pipeline B
我有两个 Jenkins 管道,假设是管道 A 和管道 B。我想在管道 B 中调用管道 A。我怎样才能做到这一点?
(pipeline-A 是 pipeline-B 的一个子集。Pipeline-A 负责做一些可以在 pipeline-B 中重复使用的常规工作)
我已经在我的机器上安装了 Jenkins 2.41。
有点不清楚你是想调用另一个管道脚本还是作业,所以我都回答了:
管道脚本
"load" 步骤将执行另一个管道脚本。如果你的两个脚本都在同一个目录下,你可以这样加载它:
def pipelineA = load "pipeline_A.groovy"
pipelineA.someMethod()
其他脚本(pipeline_a.groovy):
def someMethod() {
//do something
}
return this
管道作业
如果您正在谈论执行另一个管道作业,
"build job" 步骤可以完成此操作:
build job: '<Project name>', propagate: true, wait: true
传播:传播错误
wait:等待完成
如果你在工作中有参数,你可以这样添加:
build job: '<Project name>', parameters: [[$class: 'StringParameterValue', name: 'param1', value: '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'
}
}
}
}
在此处添加"Pipeline: Build Step"官方文档的link:
https://jenkins.io/doc/pipeline/steps/pipeline-build-step/
补充@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)
希望对您有所帮助
正如@Matias Snellingen 和@Céline Aussourd 所提到的,在启动多分支作业的情况下,您必须像这样指定要构建的分支:
stage ('Invoke_pipeline') {
steps {
build job: 'pipeline1/master', parameters: [
string(name: 'param1', value: "value1")
]
}
}
就我而言,它解决了问题。
我将post我的解决方案,它类似于@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 ->特征%2FGET-585).
我有两个 Jenkins 管道,假设是管道 A 和管道 B。我想在管道 B 中调用管道 A。我怎样才能做到这一点?
(pipeline-A 是 pipeline-B 的一个子集。Pipeline-A 负责做一些可以在 pipeline-B 中重复使用的常规工作)
我已经在我的机器上安装了 Jenkins 2.41。
有点不清楚你是想调用另一个管道脚本还是作业,所以我都回答了:
管道脚本 "load" 步骤将执行另一个管道脚本。如果你的两个脚本都在同一个目录下,你可以这样加载它:
def pipelineA = load "pipeline_A.groovy"
pipelineA.someMethod()
其他脚本(pipeline_a.groovy):
def someMethod() {
//do something
}
return this
管道作业
如果您正在谈论执行另一个管道作业, "build job" 步骤可以完成此操作:
build job: '<Project name>', propagate: true, wait: true
传播:传播错误
wait:等待完成
如果你在工作中有参数,你可以这样添加:
build job: '<Project name>', parameters: [[$class: 'StringParameterValue', name: 'param1', value: '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'
}
}
}
}
在此处添加"Pipeline: Build Step"官方文档的link: https://jenkins.io/doc/pipeline/steps/pipeline-build-step/
补充@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)
希望对您有所帮助
正如@Matias Snellingen 和@Céline Aussourd 所提到的,在启动多分支作业的情况下,您必须像这样指定要构建的分支:
stage ('Invoke_pipeline') {
steps {
build job: 'pipeline1/master', parameters: [
string(name: 'param1', value: "value1")
]
}
}
就我而言,它解决了问题。
我将post我的解决方案,它类似于@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 ->特征%2FGET-585).