将作业(由管道触发)返回到同一管道的参数/结果

Sid*_*d.R 17 jenkins jenkins-pipeline

Jenkins管道:我有一个管道p1,可以触发工作j1,然后找工作j2.我想要一些由管道设置j1并传递给它的参数.如何使用Jenkins管道插件实现此功能?提前致谢j2p1

tob*_*i42 17

它可以使用"env"完成.如果您设法j1将其信息添加到构建中env.

如果j1是管道你可以env.MYKEY=MYVALUE.对于自由式作业,它应该使用EnvInject插件(没试过).在p1那么你会得到与你的信息进行构建结果的地图.

所以,如果你做了p1一些事情:

// somewhere in your pipeline, i.e. p1:
def j1BuildResult = build job: 'J1'
def j1EnvVariables = j1BuildResult.getBuildVariables();
Run Code Online (Sandbox Code Playgroud)

然后j1EnvVariables将是包含您设置的变量的地图j1.

PS:如何将该信息传递给参数p2,例如这里涉及.

  • “如果你设法让 j1 将其信息添加到构建的环境中”。使用声明式管道,我在“环境{}”部分中遇到了困难,但它不起作用。有效的方法是在“steps”中包含“script {env.MYKEY=MYVALUE}” (2认同)

mac*_*3zr 9

我有类似的问题.我必须通过让作业J1,J2创建属性文件然后使用主管道P1中的"复制工件"获取这些文件来完成它.然后将属性转换为Java属性(可能需要在Jenkins中进行一些脚本批准).如果Jenkins管道可以直接在代码中返回参数(也许还有其他方法可以做到这一点,但我不知道),这将是很好的.从构建步骤返回的是RunWrapper,它似乎没有办法返回我可以看到的自定义结果(除非我们使用了一些现有属性,如构建描述).

所以我有这样的事情:

// Pipeline code in P1

// Build J1 and get result. 
def j1BuildResult = build job: 'J1', parameters: [string(name: 'J1_PROP', value: 'FOO')], propagate: true, wait: true

// Get results of J1
step([$class              : 'CopyArtifact', filter: 'j1-result.properties',
      fingerprintArtifacts: true,
      flatten             : true,
      projectName         : 'J1',
      selector            : [$class     : 'SpecificBuildSelector', buildNumber: buildResult.getNumber().toString()]])

// Load J1 properties (you may need to turn off sandbox or approve this in Jenkins)
Properties j1Props = new Properties()
j1Props.load(new StringReader(readFile('j1-result.properties')))

// Build J2
def j2BuildResult = build job: 'J2', parameters: [string(name: 'J2_PROP', value: j1Props.someProperty)], propagate: true, wait: true

// Get results of J2
step([$class              : 'CopyArtifact', filter: 'j2-result.properties',
      fingerprintArtifacts: true,
      flatten             : true,
      projectName         : 'J2',
      selector            : [$class     : 'SpecificBuildSelector', buildNumber: buildResult.getNumber().toString()]])

// Load J2 properties (you may need to turn off sandbox or approve this in Jenkins)
Properties j2Props = new Properties()
j1Props.load(new StringReader(readFile('j2-result.properties')))
Run Code Online (Sandbox Code Playgroud)


Kha*_*uda 6

您可以通过以下方式获取构建管道的结果

def myjob=build job: 'testy', propagate: true, wait: true, parameters: [string(name: 'ENV', value: 'jamshaid'), string(name: 'Repo', value: 'khalid')]
echo "${myjob.getResult()}"
Run Code Online (Sandbox Code Playgroud)


Ale*_*rov 5

你可以构建参数与环境变量一起使用

def buildProperties = runWrapper.rawBuild.getEnvironment()
Run Code Online (Sandbox Code Playgroud)

这是一张非常棒的地图。可以通过以下方式接收目标参数

String someProperty = buildProperties.someProperty
Run Code Online (Sandbox Code Playgroud)

限制:需要method hudson.model.Run getEnvironment在“进程内脚本批准”中允许并在node闭包内调用此代码(因为rawBuild)。

我也尝试过,runWrapper.rawBuild.getAction(ParametersAction.class)但它需要对 Jenkinsfile 进行多次导入。

注意:runWrapper.getBuildVariables()对我来说什么都不返回。