共用方式為


在 Azure Stack Hub 上使用 Azure 登入動作,並搭配 Azure CLI 和 PowerShell

您可以設定 GitHub Actions,以登入 Azure Stack Hub 執行個體並執行 PowerShell,接著再執行 Azure CLI 指令碼。 您可以針對使用 Azure Stack Hub 的解決方案運用此方法,將其作為持續整合、持續部署 (CI/CD) 工作流程的基礎。 透過此工作流程,您可以自動建立、測試及部署解決方案,讓您可以專注於撰寫程式碼。 例如,藉由新增一些其他動作,您可能會使用此工作流程,並搭配 Azure Resource Manager 範本來佈建 VM、驗證應用程式存放庫,然後在每次合併至 GitHub 中的特定分支時,將應用程式部署至該 VM。 本文將協助您瞭解 GitHub Actions 和 Azure Stack Hub。

GitHub Actions 是由動作組成的工作流程,其可在程式碼存放庫內部啟用自動化作業。 您可以利用 GitHub 開發程序中的事件來觸發工作流序。 您可以執行常見的 DevOps 自動化工作,例如測試、部署和持續整合。

若要將 GitHub Actions 與 Azure Stack Hub 搭配使用,您必須使用具有特定需求的服務主體 (SPN)。 在本文中,您將會建立自我裝載的執行器。 GitHub 可讓您在 GitHub Actions 中,使用可由 GitHub 觸達的機器。 您可以建立虛擬機器 (VM),將其作為 Azure、Azure Stack Hub 或其他位置中的執行器。

此範例工作流程包括:

  • 建立和驗證 SPN 的指示。
  • 將 Windows 2016 Server core 機器設定為 GitHub Actions 自我裝載的執行器,以使用 Azure Stack Hub。
  • 使用的工作流程:
    • Azure 登入動作
    • PowerShell 指令碼動作

Azure Stack Hub GitHub Actions

下圖顯示不同的環境及其關聯性。

Azure Stack Hub Github 動作 使用自我裝載執行器的部分:

  • GitHub Actions 裝載於 GitHub
  • 裝載於 Azure 的自我裝載執行器
  • Azure Stack Hub

將 GitHub Actions 和 Azure Stack Hub 搭配使用會有所限制,其流程需要使用已連線至網路的 Azure Stack Hub。 工作流程會在 GitHub 存放庫中觸發。 您可以使用Microsoft Entra識別碼或 Active Directory 同盟服務 (AD FS) 作為識別提供者。

雖然這不在本文的討論範圍內,您的自我裝載執行器也可以使用虛擬私人網路,來連線到防火牆後方的 Azure Stack Hub。

取得服務主體

SPN 會提供角色型認證,讓 Azure 外部的程序能夠連線到資源,並與其互動。 您將需要具有參與者存取權的 SPN,以及這些指示中所指定的屬性,來與您的 GitHub Actions 搭配使用。

身為 Azure Stack Hub 的使用者,您沒有建立 SPN 的權限。 您需要向雲端操作員要求此準則。 若您是雲端操作員,則此處提供的指示可讓您建立 SPN;若您是開發人員,並在工作流程中使用雲端操作員提供的 SPN,便可驗證 SPN。

雲端操作員需要使用 Azure CLI 來建立 SPN。

下列是使用 PowerShell 命令提示字元,以 Azure CLI 專為 Windows 機器撰寫的程式碼片段。 如果您在 Linux 機器和 bash 上使用 CLI,請移除行延伸或將其取代為 \

  1. 準備下列用來建立 SPN 的參數值:

    參數 範例 描述
    endpoint-resource-manager "https://management.orlando.azurestack.corp.microsoft.com" 資源管理端點。
    suffix-storage-endpoint "orlando.azurestack.corp.microsoft.com" 儲存體帳戶的端點尾碼。
    suffix-keyvault-dns ".vault.orlando.azurestack.corp.microsoft.com" Key Vault 服務 DNS 尾碼。
    endpoint-active-directory-graph-resource-id "https://graph.windows.net/" Active Directory 資源識別碼。
    endpoint-sql-management https://notsupported SQL Server 管理端點。 請設為 https://notsupported
    profile 2020-09-01-hybrid 要用於此雲端的設定檔。
  2. 開啟並登入您的命令列工具 (例如 Windows PowerShell 或 Bash)。 使用下列命令:

    az login
    
  3. 請使用新環境的 register 命令;如果您使用的是現有環境,則請使用 update 命令。 使用下列命令。

    az cloud register `
        -n "AzureStackUser" `
        --endpoint-resource-manager "https://management.<local>.<FQDN>" `
        --suffix-storage-endpoint ".<local>.<FQDN>" `
        --suffix-keyvault-dns ".vault.<local>.<FQDN>" `
        --endpoint-active-directory-graph-resource-id "https://graph.windows.net/" `
        --endpoint-sql-management https://notsupported  `
        --profile 2020-09-01-hybrid
    
  4. 取得您想要用於 SPN 的訂閱識別碼和資源群組。

  5. 使用下列命令,搭配訂閱識別碼和資源群組來建立 SPN:

    az ad sp create-for-rbac --name "myApp" --role contributor `
        --scopes /subscriptions/{subscription-id}/resourceGroups/{resource-group} `
        --sdk-auth
    
  6. 檢查產生的 JSON 物件。 您將會在包含動作的 GitHub 存放庫中,使用 JSON 物件來建立秘密。 JSON 物件應該具有下列屬性:

    {
      "clientId": <Application ID for the SPN>,
      "clientSecret": <Client secret for the SPN>,
      "subscriptionId": <Subscription ID for the SPN>,
      "tenantId": <Tenant ID for the SPN>,
      "activeDirectoryEndpointUrl": "https://login.microsoftonline.com/",
      "resourceManagerEndpointUrl": "https://management.<FQDN>",
      "activeDirectoryGraphResourceId": "https://graph.windows.net/",
      "sqlManagementEndpointUrl": "https://notsupported",
      "galleryEndpointUrl": "https://providers.<FQDN>:30016/",
      "managementEndpointUrl": "https://management.<FQDN>"
    }
    

將服務主體新增至存放庫

您可以使用 GitHub 祕密加密在動作中使用的敏感性資訊。 您將建立包含 SPN 的秘密,以便動作可以登入您的 Azure Stack Hub 執行個體。

警告

GitHub 建議您不要在公用存放庫的分支中,使用自我裝載的執行器,其會建立提取要求,並在工作流程中執行程式碼,可能會在您的自我裝載執行機器上執行危險程式碼。 如需詳細資訊,請參閱「關於自我裝載的執行器」。

  1. 開啟或建立 GitHub 存放庫。 如果您需要在 GitHub 建立存放庫的指引,您可以參閱 GitHub 文件中的指示
  2. 將您的存放庫設定為私人。
    1. 選取 [設定] > [變更存放庫可見度]。
    2. 選取 [設為私人]。
    3. 輸入您的存放庫名稱。
    4. 選取 [我瞭解,變更存放庫可見度]。
  3. 選取 [設定]。
  4. 選取 [祕密]。
  5. 選取 [新增存放庫祕密]。 新增您的 GitHub Actions 秘密
  6. 將祕密命名為 AZURE_CREDENTIALS
  7. 貼上代表 SPN 的 JSON 物件。
  8. 選取 [新增祕密]。

建立您的 VM 並安裝必要條件

  1. 建立您的自我裝載執行器。

    這些指示會建立執行器,並在 Azure 中作為 Windows VM。 如果您需要連線至 Azure Stack Hub (裝載於資料中心),則可能需要 VPN 連線。 您可以從〈在自我裝載的執行器上安裝 Azure Stack Hub 工具〉一節中,找到啟用連線作業的指示 (可能需要 VPN 連線)。

  2. 使用在建立機器時定義的伺服器 IP 位址、使用者名稱和密碼,來使用遠端連線,並連線至您的 Windows 2016 伺服器。

  3. 安裝 Chocolatey。 Chocolatey 是 Windows 的套件管理員,可從命令列安裝和管理相依性。 來自提升權限的 PowerShell 提示字元,其類型為:

    Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
    
  4. 安裝 PowerShell Core。 來自提升權限的 PowerShell 提示字元,其類型為:

    choco install powershell-core
    
  5. 安裝Azure CLI。 來自提升權限的 PowerShell 提示字元,其類型為:

    choco install azure-cli
    
  6. 安裝 Azure Stack Hub PowerShell。 來自提升權限的 PowerShell 提示字元,其類型為:

    [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
    
    Install-Module -Name Az.BootStrapper -Force -AllowPrerelease
    Install-AzProfile -Profile 2020-09-01-hybrid -Force
    Install-Module -Name AzureStack -RequiredVersion 2.0.2-preview -AllowPrerelease
    

    若需使用 Azure Stack Hub 的 Az 模組詳細資訊,請參閱安裝 Azure Stack Hub 的 PowerShell Az 模組

  7. 重新啟動您的電腦。 來自提升權限的 PowerShell 提示字元,其類型為:

    shutdown /r
    
  8. 將機器新增為 GitHub 存放庫的自我裝載執行器。 您可以在 GitHub 文件中,找到新增自我裝載執行器的指示。如需詳細資訊,請參閱新增自我裝載的執行器

    執行器正在接聽

  9. 當您完成時,請確認服務正在執行並接聽您的服務。 從執行器的目錄執行 /run.cmd,以進行雙重檢查。

選擇性:在自我裝載執行器上安裝 Azure Stack Hub 工具

本文中的指示不需要存取 Azure Stack Hub 的工具,但當您開發自己的工作流程時,便可能需要使用這些工具。 下列指示可協助您在 Windows 自我裝載執行器上安裝工具。 如需 Azure Stack Hub 工具的詳細資訊,請參閱從 GitHub 下載 Azure Stack Hub 工具。 這些指示會假設您已安裝套件管理員 Chocolatey。

  1. 安裝 GIT。

    choco install git
    
  2. 來自提升權限的 PowerShell 提示字元,其類型為:

    # Change directory to the root directory.
    cd \
    
    # Download the tools archive.
    [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 
    invoke-webrequest `
      https://github.com/Azure/AzureStack-Tools/archive/az.zip `
      -OutFile az.zip
    
    # Expand the downloaded files.
    expand-archive az.zip `
      -DestinationPath . `
      -Force
    
    # Change to the tools directory.
    cd AzureStack-Tools-az
    
  3. 如果您需要將執行器連線至 Azure Stack Hub 執行個體,便可以使用 PowerShell。 您可以在使用 PowerShell 連線至 Azure Stack Hub 文章中找到指示。

建立自我裝載的執行器

您可以在 GitHub Docs 中設定自我裝載的執行器。自我裝載的執行器可以在任何可連線到 GitHub 的機器上執行。 如果工作流程中的自動化工作需要廣泛相依性、特定授權需求 (例如用於軟體授權的 USB 硬體鎖)、或者其他機器或軟體特定的需求,您便可選擇使用自我裝載的執行器。 您的機器可以是實體機器、VM 或容器。 您可以將執行器置於資料中心或雲端。

在本文中,您將會使用裝載於 Azure 的 Windows VM,其會以 Azure Stack Hub 特定的 PowerShell 需求來進行組態。

如需有關設定、組態,以及將自我裝載執行器連線至存放庫的指示,請參閱 GitHub 文件「關於自我裝載的執行器」。

自我裝載的執行器已連線

記下自我裝載執行器的名稱和標記。 本文中的工作流程會使用標記 self-hosted 來進行呼叫。

將工作流程新增至您的存放庫

使用本節中的 yaml,建立您的新工作流程。

  1. 開啟 GitHub 存放庫。

  2. 選取 [動作]。

  3. 建立新工作流程。

    • 如果這是您的第一個工作流程,請選取 [選擇工作流程範本] 下的 [自行設定工作流程]。
    • 如果您具有現有的工作流程,請選取 [新增工作流程] > [自行設定工作流程]。
  4. 將路徑中的檔案命名為 workflow.yml

  5. 複製並貼上工作流程 YAML。

    on: [push]
    
    env:
      ACTIONS_ALLOW_UNSECURE_COMMANDS: 'true'
    
    jobs: 
      azurestack-test:
        runs-on: self-hosted
        steps:
    
          - name: Login to AzureStack with Az Powershell
            uses: azure/login@releases/v1
            with:
              creds: ${{ secrets.AZURE_CREDENTIALS }}
              environment: 'AzureStack'
              enable-AzPSSession: true
    
          - name: Run Az PowerShell Script Against AzureStack
            uses: azure/powershell@v1
            with:
              azPSVersion: '3.1.0'
              inlineScript: |
                hostname
                Get-AzContext
                Get-AzResourceGroup
    
          - name: Login to AzureStack with CLI
            uses: azure/login@releases/v1
            with:
              creds: ${{ secrets.AZURE_CREDENTIALS }}
              environment: 'AzureStack'
              enable-AzPSSession: false
    
          - name: Run Azure CLI Script Against AzureStack
            run: |
              hostname
              az group list --output table
    
  6. 選取 [開始認可]。

  7. 新增認可標題和選擇性詳細資料,然後選取 [認可新檔案]。

當動作執行時,請驗證確已成功執行。

  1. 開啟 GitHub 存放庫。 您可以利用推送至存放庫來觸發工作流程。

  2. 選取 [動作]。

  3. 在 [所有工作流程] 下選取要認可的名稱。

    檢閱認可摘要

  4. 選取工作名稱 azurestack-test

    檢閱認可詳細資料

  5. 展開區段以檢閱 PowerShell 和 CLI 命令的傳回值。

工作流程檔案和動作的注意事項:

  • 工作流程包含名為 azurestack-test 的單一工作。
  • 推送事件會觸發工作流程。
  • 此動作會使用已在存放庫中設定的自我裝載執行器,並在工作流程的執行器標籤中,透過下列程式碼來呼叫:runs on: self-hosted
  • 工作流程有三個動作。
  • 第一個動作會呼叫 Azure 登入動作,使用 PowerShell 並搭配 Azure 的 GitHub Actions 來登入,您可以建立可在存放庫中設定的工作流程,來建立、測試、封裝、發行及部署至 Azure。 此動作會使用您的 Azure Stack SPN 認證,來連線到 Azure Stack Hub 環境,並開啟工作階段。 您可以在 GitHub、Azure 登入動作中找到使用動作的詳細資訊。
  • 第二個動作會使用 Azure PowerShell。 此動作會使用 Az PowerShell 模組,並與政府和 Azure Stack Hub 雲端搭配運作。 請在執行此工作流程之後檢閱工作,驗證指令碼是否已在 Azure Stack Hub 環境中收集資源群組。 如需詳細資訊,請參閱 Azure PowerShell 動作
  • 第三個動作會使用 Azure CLI 登入,並連線至您的 Azure Stack Hub 以收集資源群組。 如需詳細資訊,請參閱 Azure CLI 動作
  • 如需使用 GitHub Actions 和自我裝載執行器的詳細資訊,請參閱 GitHub Actions 文件。

後續步驟