如何在jenkinsfile中为docker.build设置自定义上下文

Jul*_*ian 12 docker jenkins-pipeline jenkinsfile

我正在尝试为jenkins调整一个docker build.我正在关注我们的docker-compose文件,我正在创建一个创建每个容器并将它们链接在一起的Jenkins文件.我遇到的问题是docker-compose文件声明了一个不是Dockerfile所在的上下文.据我所知,jenkins会将上下文设置为Dockerfile所在的位置,这会根据jenkinsfile或docker-compose文件的构建方式将文件复制到不同的相对位置.

文件夹结构是:

workspace
    |-docker
        |-db
           |-Dockerfile
           |-entrypoint.sh
Run Code Online (Sandbox Code Playgroud)

这就是Dockerfile如何为相关文件声明COPY指令

COPY docker/db/entrypoint.sh /
Run Code Online (Sandbox Code Playgroud)

这是我的jenkinsfile构建文件的方式.据我所知,将上下文放在该目录中

docker.build("db", "${WORKSPACE}/docker/db")
Run Code Online (Sandbox Code Playgroud)

docker-compose文件声明如下:

db:
build:
  context: .
  dockerfile: docker/db/Dockerfile
Run Code Online (Sandbox Code Playgroud)

它将上下文置于项目的根源.

有没有办法告诉jenkinsfile使用与docker-compose文件相同的上下文,以便Dockerfile的COPY指令可以保持不变并对Jenkins和docker-compose都有效?如果那是不可能的,有没有人知道任何替代解决方案?

Jul*_*ian 24

事实证明,我正在拉动docker-pipeline-plugin的先前版本(1.6).有问题的函数已经更新(1.7),以允许第二个参数指定上下文之外的Dockerfile位置.

我的Jenkinsfile中更新的语句是:

return docker.build("db", "-f docker/db/Dockerfile .")
Run Code Online (Sandbox Code Playgroud)

这允许我的容器构建而无需修改开发人员的docker-compose或Dockerfiles的预期上下文.