在我的 Dockerfile 中,我复制并构建了我的前端:
FROM node:8.11 as frontend
COPY frontend/package.json /frontend/package.json
COPY ./VERSION /frontend/VERSION
WORKDIR /frontend
RUN npm install
COPY frontend/ /frontend
RUN sed -i "s|VERSION|frontend@$(cat "VERSION")|g" src/environments/environment.prod.ts
RUN npm run build-prod
我想更改以下行:
RUN sed -i "s|VERSION|frontend@$(cat "VERSION")|g" src/environments/environment.prod.ts
在开头有一个分支名称,这样它看起来像:
RUN sed -i "s|VERSION|`**BRANCH_NAME**`-frontend@$(cat "VERSION")|g" src/environments/environment.prod.ts
所以我想以某种方式在我的 dockerfile 中获取分支名称。 但我不确定是否可以在 dockerfile 中使用分支/提交名称?
这是我的 gitlab-ci.yaml 文件:
build:
stage: build
before_script:
- docker login -u gitlab-ci-token -p "$CI_JOB_TOKEN" registry.xx.xx
script:
- export TARGET=frontend
- export IMAGE=$CI_REGISTRY_IMAGE/$TARGET
- docker pull $IMAGE:$CI_COMMIT_REF_NAME || echo "no branch 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 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
最佳答案
你可以做的是在你的 Dockerfile
中添加一个名为 BRANCH_NAME
的 ARG
并使用 --build-arg 传递它
。
下面将创建一个构建参数,如果没有将构建参数传递给 docker build,则默认为 master:
FROM node:8.11 as frontend
ARG BRANCH_NAME=master
...
...
您的管道将包括如下所示的 docker 构建步骤:
docker build -t $IMAGE:$CI_COMMIT_REF_NAME --build=arg BRANCH_NAME=$CI_COMMIT_REF_NAME .
从那里,您可以将参数用作 Dockerfile 中的变量。
关于git - 获取 Dockerfile 中的分支名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58939845/