Можно ли ссылаться на контейнер «агент» из декларативного Jenkinsfile позже в разделе скриптов? - PullRequest
0 голосов
/ 13 марта 2019

У меня есть Jenkinsfile, который использует декларативный синтаксис и использует agent { dockerfile } для построения среды выполнения. У меня также есть набор тестов, для которых требуется база данных, с которой нужно работать, поэтому мне нужно использовать контейнеры-коляски, которые недоступны в декларативном синтаксисе, поэтому я использую шаг script для настройки этой части.

Я бы хотел, чтобы тесты выполнялись в той же среде, но я не нашел способа сослаться на контейнер, созданный agent { dockerfile }. Что-то, что я могу использовать, чтобы добраться до этого контейнера? В качестве упрощенного примера:

pipeline {
    agent
    {
        dockerfile {
            filename 'Dockerfile.ci'
        }
    }

    stages {
        stage('Test') {
            steps {
                script {
                    docker.image('postgres:10-alpine').withRun() { pg ->
                        docker.image("$reference_agent_container_here").inside("--link ${pg.id}:database") {
                            echo 'Run some tests that need a database'
                        }
                    }
                }
            }
        }
    }
}

Я знаю, что могу вставить контейнер в реестр и ссылаться на него в обоих местах, но мне нравится, что Dockerfile и Jenkinsfile ссылаются из системы контроля версий во время сборки, поэтому у них нет возможности быть не синхронизированными .

1 Ответ

0 голосов
/ 18 марта 2019

Похоже, что это невозможно, по крайней мере, с текущим состоянием декларативных конвейеров.В итоге я переписал задание в виде сценария с конвейером, чтобы я мог использовать docker.build() в начале задания и использовать возвращенный идентификатор контейнера для ссылки на него позже в конвейере.

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