![](/img/trans.png)
[英]Use docker image in .gitlab-ci.yml with build essentials and 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.