Установка переменной среды на этапе конвейера Jenkins из параметра сборки - PullRequest
0 голосов
/ 29 мая 2020

Я хотел бы настроить переменную среды для моего конвейера 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.

Есть ли способ обмена переменными env между этапами? Поскольку я хотел бы использовать команду KUBECONFIG по умолчанию (и не указывать файл / контекст в моих командах kubectl ), было бы намного проще найти способ динамически установить переменную env.

Я видел упомянутый плагин EnvInject , но не смог заставить его работать для конвейера и испытывал трудности с документацией.

1 Ответ

0 голосов
/ 01 июня 2020

Я предполагаю, что с помощью 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}"
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...