建置 Docker 映射並將其發佈至 Azure Container Registry
Azure DevOps Services |Azure DevOps Server 2022
使用 Azure Pipelines,您可以設定管線工作流程,以建置 Docker 映射並將其發佈至 Azure Container Registry。 在本文中,您將了解如何:
- 建立 Azure Container Registry
- 在 Azure VM 上設定自我裝載代理程式
- 設定受控服務識別
- 建立 Docker 登錄服務連線
- 建置映像並將其發佈至 Azure Container Registry
必要條件
GitHub 帳戶。 如果您還沒有註冊,請免費註冊。
Azure DevOps 專案中服務連線的系統管理員角色。
具有有效訂用帳戶的 Azure 帳戶。 如果您還沒有註冊,請免費 註冊。
取得程式碼
分支或複製範例應用程式,以遵循本教學課程。
https://github.com/MicrosoftDocs/pipelines-javascript-docker
建立 Azure Container Registry
巡覽至 Azure 入口網站。
從左側導覽面板中選取 [建立資源],然後選取 [容器],然後選取 [容器登錄]。
選取您的訂 用帳戶 ,然後選取您的 資源群組 或建立新的訂用帳戶。
輸入 容器登錄的登錄名稱 。 登錄名稱在 Azure 內必須是唯一的,且必須包含至少 5 個字元。
選取您慣用的位置和 SKU,然後選取 [檢閱 + 建立]。
檢閱您的設定,然後在完成時選取 [ 建立 ]。
設定自我裝載的代理程式 VM
若要搭配 Azure Pipelines 使用受控服務識別,將 Docker 映像發佈至 Azure Container Registry,我們必須在 Azure VM 上設定自己的自我裝載代理程式。
建立 VM
巡覽至 Azure 入口網站。
從左側導覽面板中選取 [建立資源 ],然後選取 [虛擬機 -> 建立]。
選取您的訂 用帳戶 ,然後選取 您用來建立容器登錄的資源群組 。
為您的虛擬機指定名稱,然後選擇 映像。
輸入您的使用者名稱和密碼,然後選取 [檢閱 + 建立]。
檢閱您的設定,然後在完成時選取 [ 建立 ]。
部署完成後,請選取 [前往資源]。
建立代理程式集區
從您的 Azure DevOps 專案中,選取齒輪圖示 以流覽至您的 項目設定。
選取 [ 代理程序集區],然後選取 [ 新增集區]。
選取 [新增],然後從 [集區類型] 下拉功能表中選取 [自我裝載]。
為您的集區指定名稱,然後核取 [ 授與所有管線的訪問許可權 ] 複選框。
完成後,選取 [建立]。
現在選取您剛才建立的集區,然後選取 [ 新增代理程式]。
我們將使用此視窗中的指示,在稍早建立的 VM 中設定您的代理程式。 選取 [ 複製] 按鈕,將下載連結複製到剪貼簿。
建立個人存取權杖
從您的 Azure DevOps 專案中,選取 [ 使用者設定],然後選取 [ 個人存取令牌]。
選取 [新增令牌 ] 以建立新的個人存取令牌。
輸入 PAT 的名稱,然後選擇到期日。
選取 [範圍] 中定義的 [自定義],然後選取 [顯示所有範圍]。
選取 [代理程序集區 -> 讀取和管理],然後選取 [部署群組] ->[讀取及管理]。
選取 [完成時建立 ],並將 PAT 儲存在安全的位置。
設定自我裝載代理程式
在 Azure 入口網站 中,連線到您的 VM。
在提升許可權的 PowerShell 命令提示字元中,執行下列命令以下載代理程式。
Invoke-WebRequest -URI <YOUR_AGENT_DOWNLOAD_LINK> -UseBasicParsing -OutFile <FILE_PATH> ##Example: Invoke-WebRequest -URI https://vstsagentpackage.azureedge.net/agent/2.213.2/vsts-agent-win-x64-2.213.2.zip -OutFile C:\vsts-agent-win-x64-2.213.2.zip
執行下列命令來擷取並建立代理程式。
mkdir agent ; cd agent Add-Type -AssemblyName System.IO.Compression.FileSystem ; [System.IO.Compression.ZipFile]::ExtractToDirectory("<FILE_PATH>", "$PWD")
執行下列命令以開始設定代理程式。
.\config.cmd
當系統要求您輸入時,請輸入您的伺服器URL。 範例: https://dev.azure.com/fabrikamFiber
當系統提示您輸入驗證類型以選擇 PAT 驗證時,請按 Enter 鍵。
貼上您稍早建立的個人存取令牌,然後按 Enter 鍵。
輸入代理程式集區的名稱,然後輸入您的代理程式名稱。
保留工作資料夾的預設值,如果您想要以服務的形式執行代理程式,請輸入 Y。
既然代理程式已準備好開始接聽作業,讓我們在 VM 上安裝 Docker。 執行下列命令以下載 Docker。
Invoke-WebRequest -URI https://desktop.docker.com/win/main/amd64/Docker%20Desktop%20Installer.exe -OutFile <DOWNLOAD_PATH>
流覽至您的下載路徑,然後執行下列命令來安裝和啟動 Docker。
Start-Process 'Docker%20Desktop%20Installer.exe' -Wait install
現在,流覽回代理程式資料夾,然後執行 Cmd 檔案,以在 Azure VM 上執行代理程式。
.\run.cmd
您的代理程式現在應該列在 Azure DevOps 入口網站中的 Agent 集區 ->Agents 中。
設定受控識別
在 Azure 入口網站 中,流覽至您稍早建立的 VM。
從左側導覽面板中選取 [身分識別 ],然後啟用 [系統指派的 身分識別]。
完成時選取 [ 儲存 ],然後確認您的選擇。
選取 [Azure 角色指派],然後選取 [ 新增角色指派]。
從 [範圍] 下拉功能表中選取 [資源群組]。
選取您的 訂用 帳戶和資源 群組,然後選取 AcrPush 角色。
重複步驟 5 和 6 以新增 AcrPull 角色。
建立 Docker 登錄服務連線
從您的 Azure DevOps 專案中,選取齒輪圖示 以流覽至您的 項目設定。
從左窗格中選取 [服務連線 ]。
選取 [新增服務連線],然後選取 [Docker 登錄],然後選取 [下一步]。
選取 [Azure Container Registry],然後選取 [ 受控服務識別 ] 作為您的 驗證類型。
輸入您的訂用帳戶標識碼訂用帳戶名稱,以及您的 Azure Container Registry 登入伺服器。 在 [租使用者標識符] 文字字段中,貼上您在上一個步驟 中建立的 VM 系統指派的租使用者標識符 。
輸入服務連線的名稱,然後核取 [ 授與所有管線 的訪問許可權] 複選框。 若要選取此選項,您需要服務連線 系統管理員 角色。
完成時選取 [ 儲存 ]。
建置併發佈至 Azure Container Registry
從您的 Azure DevOps 專案中,選取 [ 管線] ,然後選取 [ 建立管線]。
選取裝載原始程式碼的服務(Azure Repos、GitHub 等)。
選取您的存放庫,然後選取 [入門管線]。
刪除預設 yaml 管線,並使用下列代碼段:
trigger: - main variables: dockerRegistryServiceConnection: '<SERVICE_CONNECTION_NAME>' imageRepository: '<IMAGE_NAME>' dockerfilePath: '$(Build.SourcesDirectory)/app/Dockerfile' tag: '$(Build.BuildId)' stages: - stage: Build displayName: Build and publish stage jobs: - job: Build displayName: Build job pool: name: '<YOUR_AGENT_POOL_NAME>' steps: - task: DockerInstaller@0 inputs: dockerVersion: '17.09.0-ce' - task: Docker@2 displayName: Build and publish image to Azure Container Registry inputs: command: buildAndPush containerRegistry: $(dockerRegistryServiceConnection) repository: $(imageRepository) dockerfile: $(dockerfilePath) tags: | $(tag)
管線執行完成後,您可以在 Azure 中驗證映像。 流覽至 Azure 入口網站 中的 Azure Container Registry,然後選取 [存放庫]。
清除資源
如果您不打算繼續使用此應用程式,請刪除資源群組以避免產生持續費用。
az group delete --name myapp-rg