![](/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.