Запускать команды внутри контейнера Docker без монтирования каталога проекта - PullRequest
0 голосов
/ 18 марта 2019

Мой конвейер Jenkins использует плагин docker-workflow. Он создает изображение Docker и помечает его app. Шаг сборки извлекает некоторые зависимости и вставляет их в изображение вместе с моим приложением.

Я хочу запустить две команды внутри контейнера на основе этого изображения. Команда должна быть выполнена во встроенной среде с доступом к зависимостям. Я попытался использовать Image.inside, но, похоже, он не работает, потому что inside монтирует каталог проекта поверх рабочего каталога (?) И поэтому зависимости недоступны.

docker.image("app").inside {
    sh './run prepare-tests'
    sh './run tests'
}

Я тоже пытался использовать docker.script.withDockerContainer, но команды, похоже, не запускаются внутри контейнера. То же самое можно сказать и о Image.withRun. По крайней мере, с этим я мог бы указать команду, но мне кажется, что мне нужно было запустить обе команды в одном выражении. Также кажется, что withRun не завершится сборкой, если команда не завершится корректно .

docker
  .image("app")
  .withRun('', 'bash -c "./app prepare-tests && ./app tests"') { container ->
    sh "exit \$(docker wait ${container.id})"
  }

Есть ли способ использовать Image.inside без монтирования каталога проекта? Или есть более элегантный способ сделать это?

1 Ответ

1 голос
/ 18 марта 2019

docker DSL, например docker.image().inside() {} и т. Д., Подключит каталог рабочей области задания jenkins к контейнеру и сделает его WORKDIR, который перезапишет WORKDIR в Dockerfile.

Это можно проверить извывод на консоль jenkins.

1) CD workdir fristly

docker.image("app").inside {
    sh '''
        cd <WORKDIR of image specifyed in Dockerfile>
        ./run prepare-tests
        ./run tests
    '''
}

2) Запускать контейнер в sh, а не через docker DSL

sh '''
    docker run -i app bash -c "./run prepare-tests && ./run tests"
'''
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...