在我的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
答案 0 :(得分:1)
您可以做的是在您的ARG
中添加一个Dockerfile
,称为BRANCH_NAME
,并将其与--build-arg
一起传递。
以下将创建一个构建arg,如果没有将构建arg传递给docker构建,则默认为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中的变量。
答案 1 :(得分:1)
CI_EXTERNAL_PULL_REQUEST_SOURCE_BRANCH_NAME
,CI_COMMIT_REF_NAME
,CI_MERGE_REQUEST_SOURCE_BRANCH_NAME
等几个环境变量可以帮助您实现这一目标
最初,我会说CI_COMMIT_REF_NAME
是为您工作的人。
但是,应使用哪一种取决于触发条件的条件,甚至触发YAML文件的设置。请查看以下链接,以检查哪个最适合您的工作以及需要考虑的事项。https://docs.gitlab.com/ee/ci/variables/predefined_variables.html
答案 2 :(得分:1)
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
我不了解gitlab的CI。但我看到您刚刚将前端复制到/ frontend。我假设您在前端中有.git文件夹,对吗?
如果是这种情况,为什么不使用它呢?在复制前端之后:
RUN cd /frontend/ && BRANCH_NAME=$(git branch | grep \* | cut -d ' ' -f2) && export BRANCH_NAME
所以现在您将BRANCH_NAME作为环境变量。
RUN sed -i "s|VERSION|`$BRANCH_NAME`-frontend@$(cat "VERSION")|g" src/environments/environment.prod.ts