+-

我想为我的Jenkins流水线配置一个环境变量,但是是基于动态的输入参数来构建的。我试图配置我的流水线,将KUBECONFIG环境变量设置为 kubectl 命令。
我的流水线如下(略有改动)。
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
投票
投票
我猜想,用 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}"
}
}
}
}