如何从Jenkins Build Flow Plugin导出环境变量?

时间:2014-11-20 00:21:10

标签: jenkins

在调用的构建流程工作中,我尝试了两种方法:

build.environment['AOEU'] = 'aoeu' // callee would `println called.environment['AOEU']`

upstream.environment['AOEU'] = 'aoeu' // callee would `println build.environment['AOEU']`

没有运气。

4 个答案:

答案 0 :(得分:3)

我也经常与之斗争,并没有找到干净的方法。我终于以一种丑陋的方式使用<?php //if the name field is filled in if(isset($_POST['fname'])) { $name=$_POST['fname']; $sex=$_POST['sex']; printf("hello %s, you are a %s",$name,$sex); } ?> 来做到这一点。

EnvInjectPlugin

...... EnvInject插件做了神奇的

我首先尝试实施EnvironmentContributingAction  并将其添加为def buildEnv = build.getEnvVars(); varsToAdd = [:] // add here your custom properties buildEnv.putAll(varsToAdd) import org.jenkinsci.plugins.envinject.EnvInjectPluginAction def envInjectAction = build.getAction(EnvInjectPluginAction.class); envInjectAction.overrideAll(buildEnv) ,但由于未知原因不适合我。

务必设置&#39; Flow run需要一个工作区&#39;在被叫工作中。

答案 1 :(得分:1)

<@> @NoelYap:我无法评论Hristo的答案,但这是正确的答案。缺少的细节是导入EnvInject仅在您的作业具有“流程运行需要工作空间”的情况下才有效。选择了选项。

答案 2 :(得分:1)

基于迈克尔解决方案的简单版本

import hudson.model.*

def setEnvVariable(final String key, final String value) {
    Thread.currentThread().getCurrentExecutable()
        .addAction(new ParametersAction(new StringParameterValue(key, value))
    );
}

setEnvVariable("THIS_ENV_VAR", "Hello World")

然后在构建后的操作中可以使用该变量。

答案 3 :(得分:0)

我知道一个老问题,但这就是我如何解决它。美丽的部分是这个代码适用于Jenkins,在系统评估groovy和Build FLow Job DSL中。

从System Groovy作业/控制台运行它时,只需删除import语句,因为它们已经可用。

作为奖励,无论Groovy上下文如何,此类还有助于获取环境变量。仍然在构建流程中你应该支持build.environment.get它更自然。

注意:应该检查'流程运行需要工作空间'。

//Import the required bindings for a Build Flow DSL
import hudson.model.AbstractBuild
import hudson.model.EnvironmentContributingAction
import hudson.EnvVars
//Drop the above if running with a System Groovy Console/Job

class Job {
  static def getVariable(String key) {
    def config = new HashMap()
    def thr = Thread.currentThread()
    def build = thr?.getCurrentExecutable()
    def envVarsMap = build.parent.builds[0].properties.get("envVars")
    config.putAll(envVarsMap)
    return config.get(key)
  }
  static def setVariable(String key, String value) {
    def build = Thread.currentThread().getCurrentExecutable()
    def action = new VariableInjectionAction(key, value)
    build.addAction(action)
    build.getEnvironment()
  }
  static def setVariable(String key, Integer value) {
    setVariable(key, value.toString())
  }
}
class VariableInjectionAction implements EnvironmentContributingAction {
  private String key
  private String value
  public VariableInjectionAction(String key, String value) {
    this.key = key
    this.value = value
  }
  public void buildEnvVars(AbstractBuild build, EnvVars envVars) {
    if (envVars != null && key != null && value != null) {
      envVars.put(key, value);
    }
  }
  public String getDisplayName()  { return "VariableInjectionAction"; }
  public String getIconFileName() { return null; }
  public String getUrlName()      { return null; }
}

Job.setVariable("THIS_ENV_VAR", "Hello World")

将环境变量THIS_ENV_VAR设置为“Hello World”