如何在 Jenkins 管道中使用自定义 Dockerfile 名称?

Sid*_*Sid 2 jenkins dockerfile docker-compose jenkins-pipeline

我正在使用 Jenkins 构建和发布 docker 镜像。但是,我需要在一个应用程序中使用两个 docker 文件来满足我的用例。

要求是我可以从一个来源的两个不同的 Docker 文件构建和发布两个不同的 docker 映像,或者我需要使用自定义文件名(如*-f*docker 命令中的参数),以便我可以在 Jenkins 中构建两个管道?

默认情况下,Jenkins 选择文件*Dockerfile*

ex: docker build -t dockerfile -f Dockerfile-custom-name .

Inf*_*ies 5

def projectImage = docker.build("imageName:tag", "-f Dockerfile-custom-name .")
Run Code Online (Sandbox Code Playgroud)

这样您甚至可以--build-arg在 之前添加 或任何其他参数-f。在第二个参数的末尾添加-fand非常重要。.

以下是它的文档: 从 ./dockerfiles/test/Dockerfile 中找到的 Dockerfile 构建测试映像。


编辑(回复评论):

是的,我的第一个解决方案提案在 Jenkins 管道中运行。

这也应该有效: sh '''docker build -t docker1-tag:latest us.gcr.io/project-name/docker1-tag:latest -f "Dockerfile1" .'''

这个唯一的缺点是你没有变量中的图像,所以你不能使用runwithRunpush其他方法。

在您的具体情况下,我将构建名称/标签为 的图像us.gcr.io/project-name/docker1-tag:latest,这样我就可以调用该push方法,并且图像将被推送到注册表。要拥有第二个标签,单独sh '''docker tag us.gcr.io/project-name/docker1-tag:latest docker1-tag:latest'''调用就足够了。