У меня есть 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 ссылаются из системы контроля версий во время сборки, поэтому у них нет возможности быть не синхронизированными .