Использование образа докера в сборке jenkins и запуск фонового сервиса - PullRequest
0 голосов
/ 24 мая 2018

Я настраиваю сборку в Jenkins и использую образ докера для задания.

Когда для работы выполняется контейнер, мне нужно запустить службу (postgresql) в контейнере вфон, а затем продолжить работу задания.

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

В моем файле dockerfileВ настоящее время у меня есть

FROM php:5.6
RUN apt-get update && apt-get install -y \
      unzip \
      git \
      libpq-dev \
      libzip-dev \
      sudo \
      postgresql && \
  docker-php-ext-install \
      pdo_pgsql \
      zip

USER postgres
RUN /etc/init.d/postgresql start && \
      psql -c "CREATE USER blah WITH SUPERUSER PASSWORD 'blahblah';" && \
      createdb -O blah blahblahblah

USER root

COPY docker-entrypoint.sh .

ENTRYPOINT ["/docker-entrypoint.sh"]

docker-entrypoint.sh:

#!/bin/bash
set -e
service postgresql start
exec "$@"

И мой Jenkinsfile -

pipeline {
  agent {
    docker { image 'myimage' }
  }
  stages {
    stage('run unit tests') {
      steps {
        dir('tests') {
          sh 'php composer.phar install --prefer-dist --no-progress'
          sh 'php codecept run unit'
        }
      }
    }
  }
}

Когда я запускаю докер из командной строки вВ интерактивном режиме все работает отлично.sudo docker run -it myimage bash приводит к тому, что контейнер работает, postgresql запущен и ожидает ввода в bash.

Но когда Jenkins запускает докер, я получаю следующую ошибку

docker run -t -d -u 997:995 -w /path/to/workspace -v /path/to/workspace:rw,z -v /path/to/workspace@tmp:/path/to/workspace@tmp:rw,z myimage cat
docker top containerid -eo pid,comm


Failed to run top 'containerid '. Error: Error response from daemon: Container containerid is not running

Я пытался удалитьточка входа из файла dockerfile и помещение вызова запуска службы в файл jenkinsfile, но, поскольку Jenkins запускает docker с пользователем jenkins, которого нет в контейнере docker, он не может запустить службу (разрешение запрещено).Даже с sudo он возвращает ошибку sudo: unknown uid 997: who are you?

Как мне заставить jenkins запустить докер-контейнер при запуске задания, каким-то образом запустить postgresql и продолжить выполнение остальных задач.

Спасибо за помощь, спасибо.

Роб

1 Ответ

0 голосов
/ 25 мая 2018

Я прекратил попытки запустить postgresql в том же контейнере, и у меня есть отдельный контейнер, который запускает postgresql сам по себе, а затем связал его с новым контейнером для php.Этот подход работает нормально.Это позор, потому что у меня не может быть одновременно запущено несколько контейнеров php, так как они будут конфликтовать с базой данных, вместо того, чтобы иметь собственную выделенную базу данных, работающую внутри, но по крайней мере это работает.

...