設定自動建置
**注意**
自動建置需要 Docker Pro、Team 或 Business 訂閱。
此頁面包含以下資訊:
設定自動建置
您可以在 Docker Hub 中設定儲存庫,以便每次將新程式碼推送到您的程式碼供應商時自動建置映像檔。如果您設定了自動測試,則只有在測試成功時才會推送新的映像檔。
從**儲存庫**區段中,選擇一個儲存庫以檢視其詳細資訊。
選擇**建置**標籤。
選擇 GitHub 或 Bitbucket 以連線儲存映像檔原始碼的位置。
注意
您可能會被重新導向至設定頁面以連結程式碼儲存庫服務。否則,如果您正在編輯現有自動建置的建置設定,請點擊**設定自動建置**。
選擇要建置 Docker 映像檔的**來源儲存庫**。
注意
您可能需要從原始碼供應商那裡指定一個組織或使用者。選擇使用者後,原始碼儲存庫會顯示在**選擇儲存庫**下拉式清單中。
選用:啟用自動測試。
檢閱預設的**建置規則**。
建置規則控制 Docker Hub 從原始碼儲存庫的內容建置哪些內容到映像檔中,以及如何在 Docker 儲存庫中標記產生的映像檔。
系統會為您設定預設的建置規則,您可以編輯或刪除該規則。此預設規則會根據您原始碼儲存庫中稱為 `master` 或 `main` 的**分支**進行建置,並建立標記為 `latest` 的 Docker 映像檔。如需詳細資訊,請參閱設定建置規則
選用:選擇**加號**圖示以新增和設定更多建置規則。
針對每個分支或標籤,啟用或停用**自動建置**切換開關。
只有啟用自動建置的分支或標籤才會被建置、測試,並且將產生的映像檔推送到儲存庫。停用自動建置的分支會為了測試目的而建置(如果在儲存庫層級啟用),但建置的 Docker 映像檔不會推送到儲存庫。
針對每個分支或標籤,啟用或停用**建置快取**切換開關。
如果您經常建置大型映像檔或有許多相依性,建置快取可以節省時間。停用建置快取以確保在建置時解析所有相依性,或者如果您有一個大型層在本地建置速度更快。
選擇**儲存**以儲存設定,或選擇**儲存並建置**以儲存並執行初始測試。
注意
Webhook 會自動新增到您的原始碼儲存庫中,以便在每次推送時通知 Docker Hub。只有推送到列為一個或多個標籤來源的分支才會觸發建置。
設定建置規則
根據預設,當您設定自動建置時,系統會為您建立一個基本建置規則。此預設規則會監視原始碼儲存庫中 `master` 或 `main` 分支的變更,並將 `master` 或 `main` 分支建置到標記為 `latest` 的 Docker 映像檔中。
在**建置規則**區段中,輸入一個或多個要建置的來源。
針對每個來源
選擇**來源類型**以建置標籤或分支。這會告訴建置系統在原始碼儲存庫中尋找的內容。
輸入您要建置的**來源**分支或標籤的名稱。
第一次設定自動建置時,系統會為您設定預設的建置規則。此預設集會根據您原始碼中稱為 `master` 的**分支**進行建置,並建立標記為 `latest` 的 Docker 映像檔。
您也可以使用正則表達式來選擇要建置的來源分支或標籤。如需詳細瞭解,請參閱正則表達式。
輸入要套用至此來源建置的 Docker 映像檔的標籤。
如果您設定了正則表達式來選擇來源,則可以參考擷取群組並將其結果用作標籤的一部分。如需詳細瞭解,請參閱正則表達式。
將**Dockerfile 位置**指定為相對於原始碼儲存庫根目錄的路徑。如果 Dockerfile 位於儲存庫根目錄,請將此路徑設定為 `/`。
**注意**
當 Docker Hub 從原始碼儲存庫中提取分支時,它會執行淺層複製 - 僅複製指定分支的頂端。請參閱自動建置和自動測試的進階選項以取得詳細資訊。
建置的環境變數
您可以在設定自動建置時設定建置流程中使用的環境變數的值。透過選擇**建置環境變數**區段旁邊的**加號**圖示,然後輸入變數名稱和值來新增您的建置環境變數。
當您從 Docker Hub UI 設定變數值時,您可以在 `hooks` 檔案中設定的指令中使用它們。但是,它們的儲存方式是只有對 Docker Hub 儲存庫具有 `admin` 存取權限的使用者才能看到其值。這表示您可以使用它們來儲存存取權杖或其他應保密的資訊。
**注意**
在建置設定畫面中設定的變數僅在建置流程期間使用,不應與服務使用的環境值混淆,例如建立服務連結。
進階自動建置選項
您至少需要一個由來源分支或標籤以及目標 Docker 標籤組成的建置規則,才能設定自動建置。您也可以
- 變更建置尋找 Dockerfile 的位置
- 設定建置應使用的檔案路徑(建置上下文)
- 設定多個靜態標籤或分支以進行建置
- 使用正規表達式 (regexes) 動態選擇要建置的原始碼並建立動態標籤
所有這些選項都可在每個儲存庫的建置設定畫面中找到。從左側導覽中選擇儲存庫,然後選擇您要編輯的儲存庫名稱。選擇建置索引標籤,然後選擇設定自動建置。
標籤和分支建置
您可以設定自動建置,以便推送至特定分支或標籤時觸發建置。
在建置規則區段中,選擇加號圖示以新增更多要建置的來源。
選擇來源類型以建置標籤或分支。
注意
這會告訴建置系統要在程式碼儲存庫中尋找哪種類型的來源。
輸入您要建置的**來源**分支或標籤的名稱。
注意
您可以輸入名稱,或使用正規表達式來比對要建置的來源分支或標籤名稱。如需詳細資訊,請參閱正規表達式。
輸入要套用至此來源建置的 Docker 映像檔的標籤。
注意
如果您設定了正規表達式來選擇來源,您可以參考擷取群組並將其結果用作標籤的一部分。如需詳細資訊,請參閱正規表達式。
為您設定的每個新建置規則重複步驟 2 到 4。
設定建置上下文和 Dockerfile 位置
根據您在原始碼儲存庫中排列檔案的方式,建置映像檔所需的檔案可能不在儲存庫根目錄中。如果是這種情況,您可以指定建置尋找檔案的路徑。
建置上下文是建置所需檔案的路徑,相對於儲存庫的根目錄。在建置上下文欄位中輸入這些檔案的路徑。輸入 /
將建置上下文設定為原始碼儲存庫的根目錄。
**注意**
如果您從建置上下文欄位中刪除預設路徑
/
並將其留空,建置系統會使用 Dockerfile 的路徑作為建置上下文。但是,為避免混淆,建議您指定完整路徑。
您可以將Dockerfile 位置指定為相對於建置上下文的路徑。如果 Dockerfile 位於建置上下文路徑的根目錄,請將 Dockerfile 路徑設定為 /
。如果建置上下文欄位為空白,請從原始碼儲存庫的根目錄設定 Dockerfile 的路徑。
正則表達式和自動建置
您可以指定正規表達式 (regex),以便僅建置符合的分支或標籤。您也可以使用正規表達式的結果來建立套用至已建置映像檔的 Docker 標籤。
您可以使用最多九個正規表達式擷取群組或括在括號中的表達式來選擇要建置的來源,並在Docker 標籤欄位中使用 {\1}
到 {\9}
參考這些群組。
使用 BuildKit 建置映像檔
自動建置預設使用 BuildKit 建置系統。如果您想使用舊版 Docker 建置系統,請新增環境變數 DOCKER_BUILDKIT=0
。有關 BuildKit 的更多資訊,請參閱BuildKit 頁面。
團隊的自動建置
當您在自己的使用者帳戶中建立自動建置儲存庫時,您可以啟動、取消和重試建置,以及編輯和刪除您自己的儲存庫。
如果您是擁有者,這些相同的動作也適用於 Docker Hub 中的團隊儲存庫。如果您是具有寫入
權限的團隊成員,您可以啟動、取消和重試團隊儲存庫中的建置,但您無法編輯團隊儲存庫設定或刪除團隊儲存庫。如果您的使用者帳戶具有讀取
權限,或者您是具有讀取
權限的團隊成員,您可以檢視建置設定,包括任何測試設定。
動作/權限 | 讀取 | 寫入 | 管理員 | 擁有者 |
---|---|---|---|---|
檢視建置詳細資訊 | x | x | x | x |
啟動、取消、重試 | x | x | x | |
編輯建置設定 | x | x | ||
刪除建置 | x |
團隊自動建置的服務使用者
**注意**
只有擁有者可以為團隊設定自動建置。
當您為團隊設定自動建置時,您會使用與特定使用者帳戶綁定的 OAuth 授予 Docker Hub 存取您的原始碼儲存庫的權限。這表示 Docker Hub 可以存取連結的來源提供者帳戶可以存取的所有內容。
對於組織和團隊,建議您建立專用的服務帳戶以授予對來源提供者的存取權限。這可確保在個別使用者的存取權限變更時,建置不會中斷,並且個別使用者的個人專案不會暴露給整個組織。
此服務帳戶應具有對任何要建置的儲存庫的存取權限,並且必須具有對原始碼儲存庫的管理存取權限,以便管理部署金鑰。如有需要,您可以將此帳戶限制為僅限特定建置所需的特定儲存庫集合。
如果您正在建置具有連結的私有子模組(私有依賴項)的儲存庫,您還需要將覆寫 SSH_PRIVATE
環境變數新增至與該帳戶關聯的自動建置。如需詳細資訊,請參閱疑難排解
在您的來源提供者上建立服務使用者帳戶,並為其產生 SSH 金鑰。
在您的組織中建立「建置」團隊。
確保新的「建置」團隊可以存取您需要建置的每個儲存庫和子模組。
前往儲存庫的設定頁面。在 GitHub 上,將新的「建置」團隊新增至協作者和團隊清單中。在 Bitbucket 上,將「建置」團隊新增至存取管理畫面上的核准使用者清單中。
將服務使用者新增至來源提供者上的「建置」團隊。
以擁有者身分登入 Docker Hub,切換至組織,並按照指示使用服務帳戶連結至原始碼儲存庫。
**注意**
您可能需要登出您在來源程式碼提供者上的個人帳戶,才能建立與服務帳戶的連結。
選用:使用您產生的 SSH 金鑰,使用服務帳戶和上述指示設定任何具有私有子模組的建置。