Конвейерная док-станция Jenkins - контейнер не запущен - PullRequest
0 голосов
/ 28 сентября 2018

Дженкинс работает на инстансе EC2.У меня подключен плагин EC2, настроенный в Peered VPC, и когда задание помечается как 'support_ubuntu_docker', оно запускает подчиненное устройство Jenkins с предустановленным Docker.

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

Работает: https://pastebin.com/UANvjhnA

pipeline {
    agent {
        docker { 
            image 'node:7-alpine' 
            label 'support_ubuntu_docker'
             }
    }
    stages {
        stage('Test') {
            steps {
                sh 'node --version'
            }
        }
    }
}

Не работает https://pastebin.com/MsSZaPha

pipeline {
    agent {
        docker { 
            image 'hashicorp/terraform:light' 
            label 'support_ubuntu_docker'
             }
    }
    stages {
        stage('Test') {
            steps {
                sh 'terraform --version'
            }
        }
    }
}

Я пробовал использовать изображение ansible / ansible: default, а также изображение, которое я создал сам.

FROM alpine:3.7
RUN apk add --no-cache terraform
RUN apk add --no-cache ansible
ENTRYPOINT ["/bin/ash"]

Это изображение ведет себя локально.

[jenkins_test] docker exec -it 3843653932c8 ash                                                                                                                                                                                                                                                   10:56:42  ☁  master ☂ ⚡ ✭
/ # terraform --version
Terraform v0.11.0

/ # ansible --version
ansible 2.4.6.0
  config file = None
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.15 (default, Aug 22 2018, 13:24:18) [GCC 6.4.0]
/ # 

Я действительнопросто хочу иметь возможность клонировать мое репозиторий terraform git и использовать terraform в контейнере для запуска моего init / plan / apply.

Ошибка, которую я получаю для всех этих типов:

java.io.IOException: Failed to run top 'c9dfeda21b718b9df1035500adf2ef80c5c3807cf63e724317d620d4bcaa14b3'. Error: Error response from daemon: Container c9dfeda21b718b9df1035500adf2ef80c5c3807cf63e724317d620d4bcaa14b3 is not running

1 Ответ

0 голосов
/ 30 сентября 2018

Вопрос действительно должен был быть вопросом Докера;В чем разница между node:7-alpine и hashicorp/terraform:light?

hashicorp/terraform:light имеет запись ENTRYPOINT, указывающую на /bin/terraform.
По сути, это означает, что вы выполняете ее следующим образом:
docker run hashicorp/terraform:light --version
И он сразу же выйдет, т. Е. Не является интерактивным.
Так что если вы хотите, чтобы в этом контейнере Docker была интерактивная оболочка, вам придется переопределить ENTRYPOINT, чтобы указать наshell, скажем, /bin/bash, а также сказать Docker, чтобы он работал в интерактивном режиме:

pipeline {
    agent {
        docker { 
            image 'hashicorp/terraform:light' 
            args '-it --entrypoint=/bin/bash'
            label 'support_ubuntu_docker'
        }
    }
    stages {
        stage('Test') {
            steps {
                sh 'terraform --version'
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...