由生成的shell创建的Jenkins管道访问变量

时间:2017-11-21 04:19:25

标签: git jenkins branch

我希望能够从另一个非多分支管道项目(称为项目B)触发Jenkins multibranch管道(称为项目A)。

我希望项目B中的任何分支在A中的相应分支中触发构建。我认为最好的方法是在B的Jenkins文件中,确定当前分支。遗憾的是,BRANCH_NAME变量不适用于标准(非多分支)Jenkins管道。我知道我可以通过生成一个shell并调用" git branch"来确定分支。像这样:

sh '''
  MYBRANCH=`git branch`
'''

但是,如何让shell变量可用于其父管道?

最后,从项目B开始,我(希望)最终会打电话:

 build job: "project-A/${MYBRANCH}", wait: false

** 更新 **

我最后通过不同的路线来解决我的问题。

我将两个存储库(A& B)放入一个多分支管道Job中。通过这样做,B的当前分支可用作变量(我可以根据需要对其进行修改),然后触发repo A的构建。它似乎正在工作。

谢谢!

2 个答案:

答案 0 :(得分:0)

如果您正在调用某个职位的职位,然后as illustrated here,您可以在参数中传递变量:

 build job:'/Folder/JobB',parameters: [string(name: 'BRANCH', value: "${params.BRANCH}")], propagate: false
}

但如果没有,请参阅this answer:尝试使用CopyArtifact plugin写入文件并将其复制到作业/工作区。

答案 1 :(得分:0)

您需要告诉Jenkins捕获命令的标准输出并分配给变量:

def MYBRANCH = sh( script: 'git branch', returnStdout: true)

在声明中,您需要将其包装在script{}步骤中。根据您使用MYBRANCH变量的位置和方式,您可能必须在其他地方声明变量,以确保它在适当位置的范围内。