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

jco*_*col 18 bash continuous-integration jenkins

我想做一些事情:

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

构建步骤#1 - 执行shell

$START=timestamp
Run Code Online (Sandbox Code Playgroud)

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

构建步骤#3 - 执行Shell

$END=timestamp
TIME_LAPSED=$END-$START
(post lapsed time somewhere)
Run Code Online (Sandbox Code Playgroud)

Des*_*ica 27

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

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

构建步骤#1 - 执行shell

START=timestamp
...
echo $START > env_start.txt
Run Code Online (Sandbox Code Playgroud)

...

构建步骤#3 - 执行Shell

START=`cat env_start.txt`
END=timestamp
TIME_LAPSED=$END-$START
Run Code Online (Sandbox Code Playgroud)


Dom*_*nik 9

如果您正在使用声明性管道语法在该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}"
                }
            }
[...]
Run Code Online (Sandbox Code Playgroud)


小智 6

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

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


小智 5

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

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

Step2:添加“Inject environment variables”组件并将“Properties File Path”设置为$WORKSPACE/env.properties

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

例子:

例子


Gur*_*ran 2

Jenkins 允许您将环境变量注入构建过程。也许您所要做的就是将开始时间和结束时间作为环境变量注入并在构建步骤中访问它们。 在此输入图像描述

  • 这是内置功能吗?或者需要插件吗?编辑:需要这个插件:https://wiki.jenkins-ci.org/display/JENKINS/EnvInject+Plugin (2认同)