当前位置: 首页 > 面试题库 >

在管道作业中设置每个节点的环境变量

龚招
2023-03-14
问题内容

我的Jenkins管道看起来像这样(请原谅一些小的语法错误):

def buildsToDo = "foo bar".tokenize()
def buildPlan = [:]

for (int i = 0; i < buildsToDo.size(); i ++) {
  def tag = buildsToDo[i]

  buildPlan[tag] = {
    node(tag) {
      env.ENVVAR = tag
      stage("build " + tag) {
        sh 'env'
      }
    }
  }
}

parallel(buildPlan)

我的意图是与拥有一个节点,ENVVAR=foo与拥有一个节点ENVVAR=bar

我实际上看到的是,env命令运行时ENVVAR=bar在两个节点上都设置了。

根据本教程,“ [特殊变量env]的属性是当前节点上的环境变量。” 因此,我希望这能奏效。


问题答案:

在本教程的后面,它说:

在这种情况下,请勿使用env:

env.PATH = "${mvnHome}/bin:${env.PATH}"

因为环境变量的覆盖仅限于对管道运行是全局的,而不是当前线程(以及代理)的局部。但是,您可以使用上述的withEnv步骤。

看起来像是DSL的丑陋限制。它withEnv一步一步地完成了整个阶段。



 类似资料:
  • 我计划使用Azkaban https://Azkaban.github.io/来运行批处理作业。根据CI的思想,我们有很少的环境,比如开发、测试、阶段、生产,当然作业应该为每个环境配置不同的配置。 根据Azkaban文档http://Azkaban.github.io/Azkaban/docs/latest/#job-configuration,Azkaban允许在找到${parameter}时替

  • 问题内容: 我试图访问Accumulo 1.6 从Apache的星火使用的作业(Java编写的)用。为了做到这一点,我必须通过调用该方法来告知在哪里定位ZooKeeper 。此方法采用一个对象,该对象指定各种相关属性。 我通过调用静态方法来创建对象。该方法应该在各个位置查找文件以从中加载其默认值。它应该看的地方之一是。 因此,我试图以这样的方式设置环境变量,使其在Spark运行作业时可见(作为参考

  • 我试着去看一本教程,上面写着: 有几种方法可以加载凭据。 null 根据一些谷歌搜索,我似乎需要设置中的变量?如何以及在何处设置这些凭据?请举例。

  • 我正在进行一项预定的工作,该工作将以一定的间隔运行(例如每天下午1点),通过Cron安排。我正在使用Java和Spring。 编写计划作业非常简单 - 它确实如此:从db中抓取人员列表将某些条件,为每个人做一些计算并触发消息。 我正在本地和测试中开发单节点环境,但是当我们投入生产时,它将是多节点环境(带有负载均衡器等)。我关心的是多节点环境会如何影响计划的作业? 我的猜测是,我可能(或很可能)最终

  • 问题内容: 我正在尝试遵循一个教程,它说: 有几种加载凭证的方法。 从环境变量加载, 从磁盘上的JSON文件加载, 密钥需要如下: …这意味着,如果您正确设置环境变量,则根本不需要管理应用程序中的凭据。 基于一些谷歌搜索,看来我需要将变量设置为?如何以及在哪里设置这些凭据?请举例。 问题答案: 使用环境变量(在这种情况下)将凭据传递给您的应用程序。并且都可以分别从和访问。您无需对其进行编辑,只需访

  • 问题内容: 是否有任何环境变量可用于获取Jenkins管道标题? 我知道我们可以使用它来获得自由职业的头衔,但是有什么可以用来获取管道名称的东西吗? 问题答案: 您可以使用相同的名称(例如或)从groovy访问相同的环境变量。 从文档中: 可以从Groovy代码中以env.VARNAME或仅以VARNAME的形式访问环境变量。您也可以写入这些属性(仅使用env。前缀): 这些定义也将在构建期间或构