簡體   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