我想为我的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插件,但是无法使其在管道中正常工作,并且在文档中苦苦挣扎。
答案 0 :(得分:0)
我猜想,在environment{}
中,您仅在运行阶段设置了环境变量-它不会影响管道本身的环境。如下设置环境变量以影响主上下文。为我工作。
pipeline {
agent any
parameters {
choice(name: 'CLUSTER_NAME', choices: 'cluster1\ncluster2')
}
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}"
}
}
}
}