@Hasbro322
"Зелёный" DevOps

Как в Jenkins создавать докер контейнеры?

Добрый день! Я еще зеленый в этом деле, буду рад любой помощи. Задача :
Нужно создать контейнер с image (там все нужные SDK и т.п), внутри этого контейнера нужно выполнить несколько sh-команд которые зачекаутят внутрь докера репозиторий, и там выплнить make для каждего устройства (всего 8). И после все полученые файлы выгрузить на удаленный хост по ftp. Все это в Jenkins(ver-2.374).
Так вот, проблема в создании контейнера, сначала я пробовал просто использовать вызов sh:
stages {
        stage('Create Docker Container') {
            steps {
                sh "docker run -d  --name '${CONTAINER_NAME}' '${DOCKER_IMAGE}' "
                sh "docker exec -it '${CONTAINER_NAME}' /bin/bash "
}
Вывод такой:
: [Pipeline] sh
docker run -it –name build_docker {image_name}
 the input device is not a TTY [Pipeline] }
При этом если пробовать это делать внутри ноды, все равботает нормально. По гуглил, говорят нужно убрать  -it, но тогда как взаимодействовать с контейнером ?
После, я попробовал уставновить плагин Docker PiePline, сначала вроде как все норм, но почему то при вот такой конструкции,  где видно что я ни одного аргумента не передаю (пробовал и добавлять, результат такой же): 
    stages {
        stage('install build_container') {
            agent {
                docker {
                    image 'IMAGE'
                    args ''
                    disableResume true
                    runOptions '--name my-container'
                    reuseNode true
                    
                }
            }

Вывод:
$ docker run -t -d -u 1000:1000 -w /home/user/jenkins/workspace/STABLE_RELEASE_DMR -v /home/user/jenkins/workspace/STABLE_RELEASE_DMR:/home/user/jenkins/workspace/STABLE_RELEASE_DMR:rw,z -v /home/user/jenkins/workspace/STABLE_RELEASE_DMR@tmp:/home/user/jenkins/workspace/STABLE_RELEASE_DMR@tmp:rw,z -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** git.local.pulsar:4567/kochetkov.m/buildroot:2.3 cat
$ docker top 0fc2c532ef4258b9df3325a963f6475bab39f6f956c23474bb3807e5b420338a -eo pid,comm

Ни одного из перечисленных атрибутов и ключей я не передавал, хотелось бы это убрать, прошу помощи. Может наталкнете на какие то другие конструкции.
  • Вопрос задан
  • 133 просмотра
Решения вопроса 1
@vitaly_il1
DevOps Consulting
По гуглил, говорят нужно убрать -it, но тогда как взаимодействовать с контейнером ?

Например

docker exec    $CONTAINER_ID bash -c "echo 'hello world'"


Почитайте про "-it" и про терминал - это то, что есть при интерактивной сессии, и чего нет в скрипте.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы