在Jenkins中的构建步骤之间传递数据

时间:2014-03-13 00:34:40

标签: bash jenkins continuous-integration

我想按照以下方式做点什么:

这非常简单,只是展示了我想做的事情。基本上,我希望能够在多个构建步骤之间的单个作业范围内存储和访问变量。此外,我可以通过将数据存储到文件并稍后阅读来解决这个问题,但我想要更简单,更少的东西'

构建步骤#1 - 执行shell

$START=timestamp

构建步骤#2 - 运行另一项工作

构建步骤#3 - 执行Shell

$END=timestamp
TIME_LAPSED=$END-$START
(post lapsed time somewhere)

8 个答案:

答案 0 :(得分:26)

贝壳之间还有一件事:工作空间 简单而愚蠢的解决方案:使用文件!

巨大的额外优势:当您将作业分成多个作业并使用Clone Workspace插件时,它可以正常工作

构建步骤#1 - 执行shell

START=timestamp
...
echo $START > env_start.txt

<强> ...

构建步骤#3 - 执行Shell

START=`cat env_start.txt`
END=timestamp
TIME_LAPSED=$END-$START

答案 1 :(得分:7)

如果您使用声明性管道语法定义environment部分中的变量并使用script步骤设置其值可能会有用。

我正在使用声明性管道执行类似的操作,它适用于传递变量(在一个阶段内和阶段之间):

pipeline {
        agent any
        environment {
            variable = ''
        }
        stages {
            stage('Some stage') { 
                steps {
                    script {
                        if (some condition){
                            variable = 'some value'
                        } else { variable = 'else value' }
                    }                
                    sh '${somepath}/bin/script ' + 
                        "-parameter=${variable}"
                    }
                }
            }
            stage('Dummy print') {
                steps {
                    sh "echo ${variable}"
                }
            }
[...]

答案 2 :(得分:6)

我们广泛使用注入环境变量插件,效果很好。 解决方案是:

  1. 设置变量myenv = value1
  2. 在工作区中打印到文件:echo“myenv = $ myenv”&gt; tmp.myenv
  3. 每次更改后注入:使用envinject从文件tmp.myenv中读取环境 - &gt; myenv现在被称为工作环境的一部分。

答案 3 :(得分:3)

Jenkins允许您将环境变量注入构建过程。也许您所要做的就是将开始时间和结束时间作为环境变量注入,并在构建步骤中访问它们。 enter image description here

答案 4 :(得分:3)

使用Jenkins变量的一种方法是在构建步骤中使用jenkins-cli.jar,这需要一些工作,但这会在参数列表中添加FOO=1,因为它在一个参数列表中运行构建步骤它知道为哪个构建设置参数。

java -jar ${JENKINS_HOME}/war/WEB-INF/jenkins-cli.jar -s ${JENKINS_URL} set-build-parameter FOO 1

答案 5 :(得分:2)

没有:

  • 参数化构建
  • 字符串参数
  • 预构建将环境变量注入构建过程
  • 内置步骤注入环境变量

有效(自v1.656起)。当然,您可以阅读其中的每一个,但在后续构建步骤中无法使用分配给它们的新值。

因此,到目前为止,JediMasterCoder通过像Destroyica这样的文件的回答和处理是唯一的选择。

答案 6 :(得分:2)

@Gurubaran的解决方案对我有用,您需要在jenkins中安装“ Environment Injector”插件,然后

第一步: 使用shell / powershell / windows batch / etc。创建生成一个属性(键=值)文件。例如:文件路径为$ WORKSPACE / env.properties。

第2步: 添加一个“注入环境变量”组件,并将“属性文件路径”设置为$ WORKSPACE / env.properties

在步骤2之后: 您可以在以下步骤中使用这些环境变量。

See the example picture here

答案 7 :(得分:0)

除了@Gurubaran建议之外(如果没有其他选择,我就会这样做),我只是选择加入构建步骤,这将大大简化这一需求。
您将需要关心错误处理逻辑和退出条件,但您的环境将是稳固的!

我希望这会有所帮助。