docker - 添加 arg 后 Docker 构建运行两次
问题描述
我有包含一些构建器的 Dockerfile,其中一个是我最近添加的前端,ARG BRANCH_NAME
因此我可以稍后使用分支名称作为变量(我的前端没有 .git 文件夹,这就是我使用这种方法的原因):
FROM node:8.11 as frontend-builder
COPY frontend/package.json /frontend/package.json
COPY frontend/package-lock.json /frontend/package-lock.json
COPY ./VERSION /frontend/VERSION
WORKDIR /frontend
RUN npm install
COPY frontend/ /frontend
ARG BRANCH_NAME
RUN sed -i "s|VERSION|${BRANCH_NAME}-frontend@$(cat "VERSION")|g" src/environments/environment.prod.ts
RUN npm run build-prod
在 gitlab-ci.yml 我这样传递它:
build:
stage: build
before_script:
- docker login -u gitlab-ci-token -p "$CI_JOB_TOKEN" registry.xx.it
script:
- export TARGET=backend-builder
- export IMAGE=$CI_REGISTRY_IMAGE/$TARGET
- docker pull $IMAGE:$CI_COMMIT_REF_NAME || echo "no image"
- docker pull $IMAGE:latest || echo "no latest image"
- docker build --target $TARGET -t $IMAGE:$CI_COMMIT_REF_NAME .
- docker push $IMAGE:$CI_COMMIT_REF_NAME
- export TARGET=frontend-builder
- export IMAGE=$CI_REGISTRY_IMAGE/$TARGET
- docker pull $IMAGE:$CI_COMMIT_REF_NAME || echo "no image"
- docker pull $IMAGE:latest || echo "no latest image"
- docker build --target $TARGET -t $IMAGE:$CI_COMMIT_REF_NAME --build-arg BRANCH_NAME=$CI_COMMIT_REF_NAME .
- docker push $IMAGE:$CI_COMMIT_REF_NAME
- export IMAGE=$CI_REGISTRY_IMAGE
- docker pull $IMAGE:$CI_COMMIT_REF_NAME || echo "no branch image"
- docker pull $IMAGE:latest || echo "no latest image"
- docker build -t $IMAGE:$CI_COMMIT_REF_NAME .
- docker push $IMAGE:$CI_COMMIT_REF_NAME
tags:
- local-docker
在- export TARGET=frontend-builder
我换行之后:
- docker build --target $TARGET -t $IMAGE:$CI_COMMIT_REF_NAME .
至:
- docker build --target $TARGET -t $IMAGE:$CI_COMMIT_REF_NAME --build-arg BRANCH_NAME=$CI_COMMIT_REF_NAME .
所以我所做的就是添加--build-arg BRANCH_NAME=$CI_COMMIT_REF_NAME
.
但现在它似乎全部执行了两次,一旦我得到$BRANCH_NAME
它应该是,其他时候我$BRANCH_NAME
是空的。有谁知道为什么会这样?
解决方案
推荐阅读
- laravel - 如何更改使用用于初始化模型的接口加载的模式存储库的使用?Laravel, Laracom
- ios - iOS 模拟器此时未安装应用程序
- javascript - vuemounted()中的setInterval函数不起作用
- git - git 从 dev 分支合并到 master 直到某个提交的所有提交
- ios - 为什么在 Xcode 中有一个与我的常规项目分开的“Pods”项目?
- javascript - 如何验证跟踪代码管理器上的输入
- mysql - mysql线程卡住了锁定行的“清理”
- javascript - 如何从表单中获取实时输入并打印出来?
- django - 模拟补丁导致错误——TypeError: object() 在 python 3 中没有参数
- visual-studio - 如何在 resharper 智能感知完成期间防止输入键换行