Параметризованное изображение докера в декларативном конвейере Дженкинса - PullRequest
0 голосов
/ 28 ноября 2018

Я хочу запустить свою сборку в контейнере с изображением, определенным файлом, находящимся под контролем исходного кода, что-то вроде

environment {
   my_image = ...
}
agent {
    docker { 
        image my_image
    }
}

Но Дженкинс жалуется, что

groovy.lang.MissingPropertyException: No such property: my_image for class: groovy.lang.Binding

Есть лиспособ заставить Дженкинса использовать переменную для спецификации образа докера?

Полный конвейер для справки:

pipeline {
    agent any
    environment {
        REPO = 'unknown'
    }
    stages {
        stage('toolchain') {
            steps {
                git 'https://github.com/avikivity/jenkins-docker-test'
                script {
                    REPO = readFile 'repo'
                }
                echo "repo = ${REPO}"
            }
        }
        stage('build') {
            agent {
                docker {
                    image REPO
                    //image 'docker.io/scylladb/scylla-build-dependencies-docker:fedora-29'
                    label 'packager'
                }
            }
            steps {
                git 'https://github.com/avikivity/jenkins-docker-test'
                sh './build'
            }
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Проблема оказалась в том, что image env.whatever был оценен до того, как что-либо успело запуститься.

Я решил эту проблему, используя скриптовую версию подключаемого модуля Docker:

            script {
                docker.image(env.IMAGE).inside {
                    sh './build'
                }
            }

Теперь env.IMAGE оценивается после его вычисления, и плагин не запутывается неинициализированным аргументом.

0 голосов
/ 28 ноября 2018

Вам просто нужно:

environment {
   my_image = ...
}
agent {
    docker { 
        image env.my_image
    }
}

Вы можете использовать my_image самостоятельно на шаге оболочки

sh 'echo ${my_image}'

, но на шаге конвейера вам нужно разыменовать его из env

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...