Autobuild 和 Autotest 的高階選項
注意
自動構建需要 Docker Pro、Team 或 Business 訂閱。
以下選項允許您自定義自動構建和自動測試過程。
用於構建和測試的環境變數
構建過程會設定多個實用程式環境變數,這些變數在自動構建、自動測試以及執行鉤子時可用。
注意
這些環境變數僅適用於構建和測試過程,不會影響您的服務的執行環境。
SOURCE_BRANCH
:當前正在測試的分支或標籤的名稱。SOURCE_COMMIT
:正在測試的提交的 SHA1 雜湊值。COMMIT_MSG
:正在測試和構建的提交的訊息。DOCKER_REPO
:正在構建的 Docker 倉庫的名稱。DOCKERFILE_PATH
:當前正在構建的 Dockerfile。DOCKER_TAG
:正在構建的 Docker 倉庫標籤。IMAGE_NAME
:正在構建的 Docker 倉庫的名稱和標籤。(此變數是DOCKER_REPO
:DOCKER_TAG
的組合。)
如果您在 docker-compose.test.yml
檔案中使用這些構建環境變數進行自動測試,請在您的 sut
服務的環境中宣告它們,如下所示。
services:
sut:
build: .
command: run_tests.sh
environment:
- SOURCE_BRANCH
覆蓋構建、測試或推送命令
Docker Hub 允許您使用鉤子在自動構建和測試過程中覆蓋和自定義 build
、test
和 push
命令。例如,您可能使用構建鉤子來設定僅在構建過程中使用的構建引數。您還可以設定 自定義構建階段鉤子 來在這些命令之間執行操作。
重要
謹慎使用這些鉤子。這些鉤子檔案的內容會替換基本的
docker
命令,因此您必須在鉤子中包含類似的構建、測試或推送命令,否則您的自動過程將無法完成。
要覆蓋這些階段,請在您的原始碼倉庫中建立名為 hooks
的資料夾,該資料夾與您的 Dockerfile 位於同一目錄級別。建立名為 hooks/build
、hooks/test
或 hooks/push
的檔案,並在其中包含構建器過程可以執行的命令,例如 docker
和 bash
命令(以 #!/bin/bash
作為字首)。
這些鉤子在 Ubuntu 的例項上執行,其中包括 Perl 或 Python 等直譯器,以及 git
或 curl
等實用程式。有關可用直譯器和實用程式的完整列表,請參閱 Ubuntu 文件。
自定義構建階段鉤子
您可以透過建立鉤子在構建過程的階段之間執行自定義命令。鉤子允許您為自動構建和自動測試過程提供額外的指令。
在您的原始碼倉庫中建立名為 hooks
的資料夾,該資料夾與您的 Dockerfile 位於同一目錄級別。將定義鉤子的檔案放在該資料夾中。鉤子檔案可以包含 docker
命令和 bash
命令,只要它們以 #!/bin/bash
作為字首即可。構建器會在每個步驟之前和之後執行這些檔案中的命令。
以下鉤子可用
hooks/post_checkout
hooks/pre_build
hooks/post_build
hooks/pre_test
hooks/post_test
hooks/pre_push
(僅在執行構建規則或 自動構建 時使用)hooks/post_push
(僅在執行構建規則或 自動構建 時使用)
構建鉤子示例
覆蓋“構建”階段以設定變數
Docker Hub 允許您在鉤子檔案中或從自動構建介面中定義構建環境變數,然後您可以在鉤子中引用這些變數。
以下示例定義了一個構建鉤子,該鉤子使用 docker build
引數根據使用 Docker Hub 構建設定定義的變數的值來設定變數 CUSTOM
。$DOCKERFILE_PATH
是您提供的變數,用於指定要構建的 Dockerfile 的名稱,$IMAGE_NAME
是正在構建的映象的名稱。
$ docker build --build-arg CUSTOM=$VAR -f $DOCKERFILE_PATH -t $IMAGE_NAME .
重要
hooks/build
檔案會覆蓋構建器使用的基本docker build
命令,因此您必須在鉤子中包含類似的構建命令,否則自動構建將失敗。
有關 Docker 構建時變數的更多資訊,請參閱 docker build 文件。
推送到多個倉庫
預設情況下,構建過程只會將映象推送到配置了構建設定的倉庫。如果您需要將同一映象推送到多個倉庫,可以設定 post_push
鉤子來新增其他標籤並推送到更多倉庫。
$ docker tag $IMAGE_NAME $DOCKER_REPO:$SOURCE_COMMIT
$ docker push $DOCKER_REPO:$SOURCE_COMMIT
原始碼庫或分支克隆
當 Docker Hub 從原始碼倉庫中拉取分支時,它會執行淺克隆,它只克隆指定分支的頂端。這樣做的優點是,可以最大限度地減少從倉庫中傳輸的資料量,並加快構建速度,因為它只拉取必要的最小程式碼。
因此,如果您需要執行依賴於不同分支的自定義操作(例如 post_push
鉤子),您無法簽出該分支,除非您執行以下操作之一
您可以透過執行以下操作來獲取目標分支的淺克隆
$ git fetch origin branch:mytargetbranch --depth 1
您還可以“取消淺克隆”,這將獲取完整的 Git 歷史記錄(可能需要很長時間/移動大量資料),方法是在獲取時使用
--unshallow
標誌$ git fetch --unshallow origin