是否可以在groovy函数上设置环境变量

问题描述 投票:0回答:2

我知道我可以在一个阶段有一个关于詹金斯管道(声明性)的环境部分。 像这样:

stage('Name') {
    environment {
        NAME = value
    }   
    steps {
        script {
            Do something using these env vars
        }
    }
} 

我想编写一个常规函数,定义一些环境变量,运行一些东西,然后从几个管道中调用它。 比如:

def function () {
    environment {
        NAME = value
    }
    sh "do something using these env vars"
}

有可能吗?

(我知道我可以写

sh "ENV=value; some CMD"
,但我的变量很少,而且可读性较差)。

jenkins-pipeline jenkins-groovy
2个回答
15
投票

是的,你可以这样做。 Jenkins Pipeline 将其环境变量存储在名为

ENV
的映射中。因此,您可以向此映射添加其他键值对以获取其他环境变量。这可以通过 Groovy 语法完成:

// syntax option one
env.key = value
// syntax option two
env['key'] = value

对于您的示例,这看起来像:

def function () {
  env.NAME = value
  sh "do something using these env vars"
}

0
投票

要创建可以由多个管道共享的函数,您需要将其放置到共享库

参见 https://www.jenkins.io/doc/book/pipeline/shared-libraries/

将环境变量传递给 sh:

withEnv(['var_name=var_value', 'var_name_2=var_value_2']) {
    echo "process to be executed with var_name=$var_name var_name_2=$var_name_2"
    sh 'bin/start'
}

参见https://www.jenkins.io/doc/pipeline/steps/workflow-basic-steps/#withenv-set-environment-variables

withEnv
您应该能够在共享库的
var
文件夹中的文件中使用。

在课程中(在库的

src
文件夹中),您可能需要使用
ProcessBuilder
。请参阅https://docs.oracle.com/javase/8/docs/api/java/lang/ProcessBuilder.html

def pb = new ProcessBuilder('script_path','arg1','arg2')
pb.environment().put('var_name','var_value')
pb.environment().put('var_name2','var_value2')
Process p = pb.start()
p.waitFor()
© www.soinside.com 2019 - 2024. All rights reserved.