从构建参数在 Jenkins 管道阶段设置环境变量



我想为我的 Jenkins 管道配置一个环境变量,但动态地基于构建的输入参数。我正在尝试配置我的管道以为kubectl命令设置 KUBECONFIG 环境变量。

我的管道如下(略有变化(:

pipeline {
parameters {
choice(name: 'CLUSTER_NAME', choices: 'cluster1/cluster2')
}
stages {
// Parallel stages since only one environment variable should be set, based on input
stage ('Set environment variable') {
parallel {
stage ('Set cluster1') {
when {
expression {
params.CLUSTER_NAME == "cluster1"
}
}
environment {
KUBECONFIG = "~/kubeconf/cluster1.conf"
}
steps {
echo "Using KUBECONFIG: ${env.KUBECONFIG}"
}
}
stage ('Set cluster2') {
when {
expression {
params.CLUSTER_NAME == "cluster2"
}
}
environment {
KUBECONFIG = "~/kubeconf/cluster2.conf"
}
steps {
echo "Using KUBECONFIG: ${env.KUBECONFIG}"
}
}
}
}
stage ('Test env') {
steps {
sh "cat ${env.KUBECONFIG}"
}
}
}
}

但是,虽然我设置环境变量的阶段可以打印它,但一旦我移动到另一个阶段,我只会得到 null。

有没有办法在阶段之间共享环境变量?由于我想使用默认的 KUBECONFIG 命令(而不是在我的kubectl命令中指定文件/上下文(,因此找到一种动态设置 env 变量的方法会容易得多。

我已经看到了提到的EnvInject插件,但无法让它为管道工作,并且正在努力处理文档。

我猜environment{}您仅为它运行的阶段设置环境变量 - 它不会影响管道本身的环境上下文。设置如下所示的环境变量以影响主上下文。为我工作。

pipeline {
agent any
parameters {
choice(name: 'CLUSTER_NAME', choices: 'cluster1ncluster2')
}
stages {
// Parallel stages since only one environment variable should be set, based on input
stage ('Set environment variable') {
parallel {
stage ('Set cluster1') {
when {
expression {
params.CLUSTER_NAME == "cluster1"
}
}
steps {
script{
env.KUBECONFIG = "~/kubeconf/cluster1.conf"
echo "Using KUBECONFIG: ${env.KUBECONFIG}"    
}
}
}
stage ('Set cluster2') {
when {
expression {
params.CLUSTER_NAME == "cluster2"
}
}
steps {
script{
env.KUBECONFIG = "~/kubeconf/cluster2.conf"
echo "Using KUBECONFIG: ${env.KUBECONFIG}"
}
}
}
}
}
stage ('Test env') {
steps {
sh "cat ${env.KUBECONFIG}"
}
}
}
}

最新更新