Docker Container в Jenkins Pipeline через несколько секунд умирает - PullRequest
0 голосов
/ 07 ноября 2018

Hiho,

Я пытаюсь собрать и запустить Docker-контейнер в конвейере Jenkins, а затем провести некоторое тестирование в развернутом веб-приложении в контейнере. Проблема в том, что мой контейнер живет только несколько секунд, а затем умирает с кодом выхода 0. Уже пытался запустить его в интерактивном режиме и с плагином Docker Groovy и без него.

Мой код конвейера выглядит следующим образом:

stage("Docker Build&Run") {
    steps {
        script {
            def tag = "shop:${env.BUILD_ID}"
            docker.build(tag)
            //sh "docker run -d -p 8443:443/tcp ${tag}" Tried both
            docker.image(tag).run('-p 8443:443/tcp')
        }
    }
}
stage("Dummy Dynamic Analysis") {
    steps {
        echo "Dummy Dynamic Analysis" //to be integrated
        sleep 120 //application should be available here since it has to be theire for  testing as well
    }
}

События выглядят так. Уничтожено через несколько секунд:

2018-11-07T17:27:30.104407703+01:00 image tag sha256:21ae4ef9603d390d0244cee30651485f2fb517a47c9e9d2c38855d093349105c (name=shop:35)
2018-11-07T17:27:31.260144894+01:00 container create ade7069d9d391146611f4f658156554823cc8086bd6769bbc32c3949d5b1a694 (image=shop:35, name=suspicious_liskov)
2018-11-07T17:27:31.456730373+01:00 network connect 36c2d6617773a7c7075caece71bcd744c89009b3db1962328d0f9930d981238a (container=ade7069d9d391146611f4f658156554823cc8086bd6769bbc32c3949d5b1a694, name=bridge, type=bridge)
2018-11-07T17:27:31.966564913+01:00 container start ade7069d9d391146611f4f658156554823cc8086bd6769bbc32c3949d5b1a694 (image=shop:35, name=suspicious_liskov)
2018-11-07T17:27:35.761690515+01:00 container die ade7069d9d391146611f4f658156554823cc8086bd6769bbc32c3949d5b1a694 (exitCode=0, image=shop:35, name=suspicious_liskov)
2018-11-07T17:27:35.929597196+01:00 network disconnect 36c2d6617773a7c7075caece71bcd744c89009b3db1962328d0f9930d981238a (container=ade7069d9d391146611f4f658156554823cc8086bd6769bbc32c3949d5b1a694, name=bridge, type=bridge)

Как я могу развернуть контейнер и позволить ему работать неограниченное время, пока он не остановится или не будет работать в течение всего времени работы jenkins?

Спасибо всем заранее. Привет

1 Ответ

0 голосов
/ 08 ноября 2018

Итак, мой файл докера выглядел так:

FROM ubuntu:14.04

RUN echo "#!/bin/sh\nexit 0" > /usr/sbin/policy-rc.d

ADD ./provision.sh /tmp/provision.sh
RUN /bin/bash /tmp/provision.sh

ENTRYPOINT service apache2 start && service mysql start && /bin/bash

EXPOSE 443

Я только что понял, прочитав эту статью: Как сохранить контейнер Docker запущенным после запуска служб? чтобы контейнер Docker завершал работу, когда был выполнен мой вызов точки входа, и не оставался в живых, пока мои службы живы. Что я и думал, что произойдет. Теперь я перешел на предложенное решение, работающее Supervisord, и оно работает нормально. Спасибо всем.

Новый Dockerfile:

FROM ubuntu:14.04

RUN echo "#!/bin/sh\nexit 0" > /usr/sbin/policy-rc.d

RUN apt-get update && apt-get install supervisor -y

ADD ./provision.sh /tmp/provision.sh
ADD ./supervisord.conf /etc/supervisor/conf.d/supervisord.conf
RUN /bin/bash /tmp/provision.sh

ENTRYPOINT ["/usr/bin/supervisord", "-n"]

EXPOSE 443

Supervisor Conf:

[supervisord]
nodaemon=true

[program:mysql]
command=/usr/bin/pidproxy /var/run/mysqld/mysqld.pid /usr/sbin/mysqld
autorestart=true

[program:apache]
command=/usr/sbin/apache2ctl -DFOREGROUND
autorestart=true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...