如何从jenkinsfile构建多个docker容器?

时间:2019-09-30 12:16:03

标签: docker jenkins-pipeline dockerfile devops

我有3个不同的Docker映像。我需要从Jenkins文件构建这些图像。我有带有单个Docker文件的Wildfly,Postgres,Virtuoso Docker映像。到目前为止,我正在使用以下命令来构建这些图像:

目录结构是Docker是根目录。

Docker->构建-> 1。 wildfly 2. postgres 3. virtuoso

在我的詹金斯文件中,我具有以下命令来构建图像:

stage('Building test images')
{
   sh 'docker build -t virtuoso -f $WORKSPACE/build/virtuoso/Dockerfile .'
}

但是我收到如下错误:

Step 7/16 : COPY ./install $VIRT_HOME/install
COPY failed: stat /var/lib/docker/tmp/docker-builder636357036/install: no such file or directory
[Pipeline] }

下面供我参考的dockerfile是

FROM virtuoso:latest

ENV var1 /opt/virtuoso-opensource
ENV VIRT_db /opt/virtuoso-opensource/var/lib/virtuoso/db
ENV RUN_CONFIG=/opt/virtuoso-opensource/install/config

RUN export PATH=$PATH:/opt/virtuoso-opensource/bin

RUN mkdir $var1/install

COPY ./install $var1/install

WORKDIR $VIRT_db
CMD ["/opt/virtuoso-opensource/bin/init.sh"]

工作空间为/ home / jenkins / Docker,我的猜测是我正在$ workspace目录中运行docker build命令,而该命令应从virtuoso目录中运行。

我的问题是如何从Jenkins文件构建映像?

谢谢。

2 个答案:

答案 0 :(得分:2)

解决此问题的最简单方法是在执行docker build命令之前在脚本中输入适当的文件夹。 例如:

stage('Building test images') {
  steps {
    sh '''
      cd $WORKSPACE/build/virtuoso
      docker build -t virtuoso .
    ''' 
  }
}

答案 1 :(得分:1)

下面是答案:

stage('Build images'){
    echo "workspace directory is ${workspace}"
    dir ("$workspace/build/virtuoso")
    {
        sh 'docker build -t virtuoso -f $WORKSPACE/build/virtuoso/Dockerfile .'
    }
    dir ("$workspace/build/wildfly")
    {
        sh 'docker build -t wildfly -f $WORKSPACE/build/wildfly/Dockerfile .'
    }
    dir ("$workspace/build/postgres")
    {
        sh 'docker build -t postgres -f $WORKSPACE/build/postgres/Dockerfile .'
    }
}

感谢您的帮助。