我正在Jenkins中建立一个构建版本,并且我正在使用docker镜像来完成这项工作。
当容器为作业运行时,我需要在后台的容器中启动服务(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'
}
}
}
}
}
当我在交互模式下从命令行启动docker时它工作正常。
sudo docker run -it myimage bash
导致容器运行,postgresql启动,等待bash的输入。
但是当Jenkins启动docker时,我收到以下错误
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中删除入口点,并将服务启动调用放在jenkins文件中,但是当Jenkins使用jenkins用户运行docker时,它在docker容器中不存在,它无法启动服务(权限被拒绝)。即使使用sudo,它也会返回错误sudo: unknown uid 997: who are you?
如何在触发作业时让jenkins运行docker容器,以某种方式启动postgresql,然后继续执行其余任务。
感谢任何帮助,谢谢。
罗布
答案 0 :(得分:1)
我放弃了尝试让postgresql在同一容器中运行,并且有一个独立的容器,它自己运行postgresql,然后将它链接到php容器的新容器。这种方法工作正常。很遗憾,因为我现在无法同时运行多个php容器,因为它们会在数据库上发生冲突,而不是让自己的专用数据库在内部运行,但至少它可以工作。 / p>