Я настраиваю сборку в 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 и продолжить выполнение остальных задач.
Спасибо за помощь, спасибо.
Роб