Jenkins загрузка переменных из файла с подстановками

Предположим вам необходимо использовать .env файлы в Jenkins.

rabbitmq.env

RABBITMQ_DEFAULT_USER=guest

celery.env

AMQP_USERNAME=${RABBITMQ_DEFAULT_USER}

Дженкинс умеет загружать groovy-файлы но предположим вы используете эти .env файлы где-то еще и не можете конвертировать их в groovy скрипты.

Значит вам необходима функция, которая загрузит .env файл в переменные Jenkins environment (env.*).

Далее приведена Jenkins(groovy) функция, которая загружает.env файл (на каждой строке key=value) в Jenkins env-переменные. После ее работы вы сможете использовать env.AMQP_USERNAME в вашем Jenkinsfile.

Однако эта функция не подставляет значение переменных. То есть env.AMQP_USERNAME будет буквально строкой ${RABBITMQ_DEFAULT_USER}.

Если вам необходимо подставить все ${..} то в этом вам поможет следующая комбинация groovy и Питона:

Как их использовать в декларативном пайплайн Jenkinsfile:

pipeline {
    // ...
    stages {
        // ...
        stage('Prepare environment') {
            steps {
                script {
                // ...
                vars_text = sh(
                    script: """python expand_vars.py \
                            rabbitmq.env \
                            celery.env
                            """,
                    returnStdout: true
                )
                loadVarsFromText(vars_text)
                // ...
                }
            }
        }
        // ...
    }
    // ...
}
// ...
private void loadVarsFromText(String text) {
    // ...
}

Эта техника поможет вам загрузить в переменные Jenkins .env файл с подстановкой значений переменных, так что env.AMQP_USERNAME == guest