共用方式為


建置 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

必要條件

取得程式碼

分支或複製範例應用程式,以遵循本教學課程。

https://github.com/MicrosoftDocs/pipelines-javascript-docker

建立 Azure Container Registry

  1. 巡覽至 Azure 入口網站

  2. 從左側導覽面板中選取 [建立資源],然後選取 [容器],然後選取 [容器登錄]。

  3. 選取您的訂 用帳戶 ,然後選取您的 資源群組 或建立新的訂用帳戶。

  4. 輸入 容器登錄的登錄名稱 。 登錄名稱在 Azure 內必須是唯一的,且必須包含至少 5 個字元。

  5. 選取您慣用的位置和 SKU,然後選取 [檢閱 + 建立]。

  6. 檢閱您的設定,然後在完成時選取 [ 建立 ]。

設定自我裝載的代理程式 VM

若要搭配 Azure Pipelines 使用受控服務識別,將 Docker 映像發佈至 Azure Container Registry,我們必須在 Azure VM 上設定自己的自我裝載代理程式。

建立 VM

  1. 巡覽至 Azure 入口網站

  2. 從左側導覽面板中選取 [建立資源 ],然後選取 [虛擬機 -> 建立]。

  3. 選取您的訂 用帳戶 ,然後選取 您用來建立容器登錄的資源群組

  4. 為您的虛擬機指定名稱,然後選擇 映像

  5. 輸入您的使用者名稱和密碼,然後選取 [檢閱 + 建立]。

  6. 檢閱您的設定,然後在完成時選取 [ 建立 ]。

  7. 部署完成後,請選取 [前往資源]

建立代理程式集區

  1. 從您的 Azure DevOps 專案中,選取齒輪圖示 齒輪圖示 以流覽至您的 項目設定

  2. 選取 [ 代理程序集區],然後選取 [ 新增集區]。

  3. 選取 [新增],然後從 [集區類型] 下拉功能表中選取 [自我裝載]。

  4. 為您的集區指定名稱,然後核取 [ 授與所有管線的訪問許可權 ] 複選框。

  5. 完成後,選取 [建立]

  6. 現在選取您剛才建立的集區,然後選取 [ 新增代理程式]。

  7. 我們將使用此視窗中的指示,在稍早建立的 VM 中設定您的代理程式。 選取 [ 複製] 按鈕,將下載連結複製到剪貼簿。

    顯示如何設定代理程式的螢幕快照。

建立個人存取權杖

  1. 從您的 Azure DevOps 專案中,選取 [ 使用者設定],然後選取 [ 個人存取令牌]。

  2. 選取 [新增令牌 ] 以建立新的個人存取令牌。

  3. 輸入 PAT 的名稱,然後選擇到期日。

  4. 選取 [範圍] 中定義的 [自定義],然後選取 [顯示所有範圍]。

  5. 選取 [代理程序集區 -> 讀取和管理],然後選取 [部署群組] ->[讀取及管理]。

  6. 選取 [完成時建立 ],並將 PAT 儲存在安全的位置。

設定自我裝載代理程式

  1. 在 Azure 入口網站 中,連線到您的 VM。

  2. 在提升許可權的 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
    
  3. 執行下列命令來擷取並建立代理程式。

    mkdir agent ; cd agent
    Add-Type -AssemblyName System.IO.Compression.FileSystem ; [System.IO.Compression.ZipFile]::ExtractToDirectory("<FILE_PATH>", "$PWD")
    
  4. 執行下列命令以開始設定代理程式。

    .\config.cmd
    
  5. 當系統要求您輸入時,請輸入您的伺服器URL。 範例: https://dev.azure.com/fabrikamFiber

  6. 當系統提示您輸入驗證類型以選擇 PAT 驗證時,請按 Enter 鍵。

  7. 貼上您稍早建立的個人存取令牌,然後按 Enter 鍵。

  8. 輸入代理程式集區的名稱,然後輸入您的代理程式名稱。

  9. 保留工作資料夾預設值,如果您想要以服務的形式執行代理程式,請輸入 Y。

    顯示如何在 Azure VM 上設定代理程式的螢幕快照。

  10. 既然代理程式已準備好開始接聽作業,讓我們在 VM 上安裝 Docker。 執行下列命令以下載 Docker。

    Invoke-WebRequest -URI https://desktop.docker.com/win/main/amd64/Docker%20Desktop%20Installer.exe -OutFile <DOWNLOAD_PATH>
    
  11. 流覽至您的下載路徑,然後執行下列命令來安裝和啟動 Docker。

    Start-Process 'Docker%20Desktop%20Installer.exe' -Wait install
    
  12. 現在,流覽回代理程式資料夾,然後執行 Cmd 檔案,以在 Azure VM 上執行代理程式。

    .\run.cmd
    
  13. 您的代理程式現在應該列在 Azure DevOps 入口網站中的 Agent 集區 ->Agents 中。

    螢幕快照,顯示 [代理程式] 索引標籤中可用的代理程式。

設定受控識別

  1. 在 Azure 入口網站 中,流覽至您稍早建立的 VM。

  2. 從左側導覽面板中選取 [身分識別 ],然後啟用 [系統指派的 身分識別]。

  3. 完成時選取 [ 儲存 ],然後確認您的選擇。

    顯示如何啟用系統指派身分識別的螢幕快照。

  4. 選取 [Azure 角色指派],然後選取 [ 新增角色指派]。

  5. 從 [範圍] 下拉功能表中選取 [資源群組]。

  6. 選取您的 訂用 帳戶和資源 群組,然後選取 AcrPush 角色。

  7. 重複步驟 5 和 6 以新增 AcrPull 角色。

    顯示如何設定 acrpull 和 push 角色的螢幕快照。

建立 Docker 登錄服務連線

  1. 從您的 Azure DevOps 專案中,選取齒輪圖示 齒輪圖示 以流覽至您的 項目設定

  2. 從左窗格中選取 [服務連線 ]。

  3. 選取 [新增服務連線],然後選取 [Docker 登錄],然後選取 [下一步]。

  4. 選取 [Azure Container Registry],然後選取 [ 受控服務識別 ] 作為您的 驗證類型

  5. 輸入您的訂用帳戶標識碼訂用帳戶名稱,以及您的 Azure Container Registry 登入伺服器。 在 [租使用者標識符] 文字字段中,貼上您在上一個步驟 中建立的 VM 系統指派的租使用者標識符

  6. 輸入服務連線的名稱,然後核取 [ 授與所有管線 的訪問許可權] 複選框。 若要選取此選項,您需要服務連線 系統管理員 角色。

  7. 完成時選取 [ 儲存 ]。

    顯示如何設定 Docker 登錄服務連線 MSI 的螢幕快照。

建置併發佈至 Azure Container Registry

  1. 從您的 Azure DevOps 專案中,選取 [ 管線] ,然後選取 [ 建立管線]。

  2. 選取裝載原始程式碼的服務(Azure Repos、GitHub 等)。

  3. 選取您的存放庫,然後選取 [入門管線]。

  4. 刪除預設 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)
    
  5. 管線執行完成後,您可以在 Azure 中驗證映像。 流覽至 Azure 入口網站 中的 Azure Container Registry,然後選取 [存放庫]。

    顯示 Azure 入口網站 影像的螢幕快照。

清除資源

如果您不打算繼續使用此應用程式,請刪除資源群組以避免產生持續費用。

az group delete --name myapp-rg