我有一个 Jenkins 流水线,
流水线的一个阶段是从 Java 应用程序代码构建工件。
工件始终使用 BUILD_ID jenkins 环境变量获取名称 hello-world-${BUILD_ID}.war,每次构建时工件的名称都会更改。
然后,我还有另一个阶段,我必须为这个工件构建一个 docker 镜像。Docker
文件中的其中一行是:
COPY hello-world-war-1.0.${BUILD_ID}.war /usr/local/tomcat/webapps/java-app.war
在这一行中,我必须将工件复制到 docker 镜像中。
由于某种原因,提到的插值不起作用,当我运行管道时出现相同的错误:
COPY failed: stat hello-world-war-1.0..war: no such file or directory
当然,当我在 Dockerfile 中对构建 ID 的数量进行硬编码时,一切都运行良好。
附件是整个Dockerfile 的截图。
在此先感谢您的帮助!
答案1
你必须BUILD_ID
通过建立论点。
在你的Dockerfile
:
ARG BUILD_ID
在您的docker build
命令中:
docker build ... --build-arg BUILD_ID="${BUILD_ID}" ...
环境变量${BUILD_ID}
不会传递给 Dockerfile 命令。这是自愿的,因为docker build
应该尽可能地可重现,而不依赖于构建上下文。如果您想要在构建过程中使用变量,则必须明确设置它。