git - 获取 Dockerfile 中的分支名称

标签 git docker dockerfile gitlab-ci

在我的 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_NAMEARG 并使用 --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/

相关文章:

docker - 有没有一种方法可以使用conda在Docker镜像中安装库?

docker - docker-machine create-创建机器时出错:运行配置错误:ssh命令错误

docker - Dockerfile 中的 `touch` 是做什么的?

git svn clone 在 cygwin 下死于信号 11

Git 镜像问题

git - 执行 'git fetch' 时如何查找 diff 对象的大小?

git - git SourceTree中停止跟踪和丢弃文件有什么区别

postgresql - 移动默认的 docker postgres 数据卷

PostgreSQL 服务器不可用。等待 5 秒

php - Dockerfile 安装 amqp 失败