繁体   English   中英

Docker 在 gitlab CI 中构建当前的 git 分支

[英]Docker build current git branch in gitlab CI

我注意到当.gitlab-ci.yml docker run.gitlab-ci.yml执行时, .gitlab-ci.yml镜像是使用来自存储库 master 分支的文件构建的,这与提交是从 master 还是从另一个分支推送无关。

在我当前的脚本中,我正在构建一个图像并运行一些类似的测试,如下所示:

image: docker:stable

variables:
    DOCKER_HOST: tcp://docker:2375/
    DOCKER_DRIVER: overlay2
    DOCKERHUB_IMAGE: "${CI_PROJECT_NAMESPACE}/myproject"

services:
    - docker:dind

before_script:
    - docker info
    - docker login -u $CI_PROJECT_NAMESPACE -p $PASSWORD $CI_REGISTRY

stages:
    - build
    - test

build_myproject:
    stage: build
    script:
    - docker build -t $CI_REGISTRY_IMAGE .
    - docker push $CI_REGISTRY_IMAGE

test_myproject:
    stage: test
    script:
    - docker pull $CI_REGISTRY_IMAGE
    - docker tag $CI_REGISTRY_IMAGE myproject
    - docker run --rm -v $PWD:/tmp myproject options input ...
    ...

如何在那里指定用于构建图像的当前分支?

到目前为止,我已经尝试安装git并在构建之前使用git checkout

before_script:
    - apt-get update && apt-get -y install git
....

script:
    - git checkout $CI_COMMIT_REF_NAME
    - docker build -t $CI_REGISTRY_IMAGE .

但这不适用于docker:stable图像,我猜:

/bin/sh: eval: line 93: apt-get: not found

按照docker build文档(这里),我还尝试从 URL 构建图像。 但我不确定如何使用它。 当我使用以下代码运行docker build时:

- docker build -t $CI_REGISTRY_IMAGE https://gitlab.com/user/myproject.git#$CI_COMMIT_REF_NAME

我再次收到与 git 相关的错误。

无法准备上下文:无法找到“git”:exec:“git”:在 $PATH 中找不到可执行文件

这让我想知道我是否应该询问如何在docker:stable映像中安装git ,但我不想将其转换为 XY 问题。 也许有一种更简单的方法来执行此任务。

编辑

这个错误是我的错误,但我会在这里留下这个问题,以防它对某人有帮助。

问题是在 Dockerfile 中,我使用git clone来获取存储库的副本,而不是直接使用 Docker COPY命令。 当然,用于 docker build 的分支就是主分支。

从推送到自定义分支触发的管道包含来自主分支的文件似乎极不可能。 从已执行的管道中检查检出行的日志,例如Checking out <commit sha> as <branch name>...

为确保您构建新映像,我会尝试使用–no-cache选项构建。

我在您的管道定义CI_REGISTRY_IMAGE不到CI_REGISTRY_IMAGE声明。 docker 名称会改变还是不变? 如果它没有改变并且您不介意存储库中存储的其他图像,那么您可以使用分支特定名称标记每个构建。 甚至提交特定的。 然后,您将确保测试正确的图像。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM