在 Azure Stack Hub 上使用 Azure CLI 和 PowerShell 的 Azure 登入動作
您可以設定 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 自動化工作,例如測試、部署和持續整合。
若要搭配 Azure Stack Hub 使用 GitHub Actions,您必須使用具有特定需求的服務主體 (SPN)。 在本文中,您將建立 自託管的執行器。 GitHub 可讓您在 GitHub Actions 中使用 GitHub 可觸達的任何電腦。 您可以在 Azure、Azure Stack Hub 或其他位置,建立虛擬機作為執行器。
此範例工作流程包括:
- 建立及驗證SPN的指示。
- 將 Windows 2016 Server 核心電腦設定為 GitHub Actions 自我裝載執行器,以搭配 Azure Stack Hub 使用。
- 使用的工作流程:
- Azure 登入動作
- PowerShell 腳本動作
Azure Stack Hub(Azure 雲端一體機)GitHub Actions(GitHub 操作功能)
下圖顯示不同的環境及其關聯性。
使用自我裝載執行器的各個部分:
- GitHub Actions 裝載在 GitHub 上
- Azure 上裝載的自我裝載執行器
- Azure Stack Hub
使用 GitHub Actions 搭配 Azure Stack Hub 的一個限制是,該過程需要使用連接到網際網路的 Azure Stack Hub。 工作流程會在 GitHub 存放庫中觸發。 您可以使用 Microsoft Entra ID 或 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),請移除行尾的延伸部分,或使用 \
取代它們。
準備用來建立SPN的下列參數值:
參數 例 描述 端點資源管理器 “https://management.orlando.azurestack.corp.microsoft.com" 資源管理端點。 後綴存儲端點 “orlando.azurestack.corp.microsoft.com” 記憶體帳戶的端點後綴。 suffix-keyvault-dns “.vault.orlando.azurestack.corp.microsoft.com” Key Vault 服務 DNS 後綴。 端點-Active Directory-圖形資源-ID “https://graph.windows.net/" Active Directory 資源標識符。 端點-SQL-管理 https://notsupported SQL Server 管理端點。 將此設定為 https://notsupported
個人資料 2020-09-01-混合 要用於此雲端的設定檔。 開啟命令行工具,例如 Windows PowerShell 或 Bash 並登入。 使用下列命令:
az login
如果您使用現有的環境,請使用新環境的
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
取得您想要用於 SPN 的訂用帳戶識別碼和資源群組。
使用下列命令建立 SPN,其中包含訂用帳戶識別碼和資源群組:
az ad sp create-for-rbac --name "myApp" --role contributor ` --scopes /subscriptions/{subscription-id}/resourceGroups/{resource-group} ` --sdk-auth
檢查產生的 JSON 物件。 您將使用 JSON 物件,在包含動作的 GitHub 存放庫中建立秘密。 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 建議您不要在公用存放庫中使用自託管執行器,因為您的公用存放庫的分支可能會藉由建立執行程式代碼的提取要求,在自託管執行器機器上運行危險的程式代碼。 如需詳細資訊,請參閱<關於自我裝載的執行器
- 開啟或建立 GitHub 存放庫。 如果您需要在 GitHub 中建立存放庫的指引,您可以在 GitHub 檔 中找到指示。
- 將您的存放庫設定為私人。
- 選擇 [設定]>[更改存放庫可見性]。
- 選取 將其設為私人。
- 輸入存放庫的名稱。
- 選取 我瞭解,變更存放庫可見性。
- 選擇 設定。
- 選取 [秘密]。
- 選擇 新增儲存庫秘密。
- 將秘密命名為
AZURE_CREDENTIALS
。 - 貼上代表SPN的 JSON 物件。
- 選擇 新增秘密。
建立 VM 並安裝必要條件
建立自我裝載的執行器。
這些說明會在 Azure 中建立作為 Windows VM 的執行元。 如果您需要連線到裝載在數據中心的 Azure Stack Hub,您可能需要 VPN 連線。 您可以在 在可能需要 VPN 連線的自我裝載執行 器上安裝 Azure Stack Hub 工具一節中,找到啟用連線的指示。
- 如需在 Azure 中建立 Windows VM 的指引,請參閱 快速入門:在 Azure 入口網站中建立 Windows 虛擬機。 遵循這些指示時,請安裝 Windows Server 2016 Core。
- 如需在 Azure Stack Hub 中建立 Windows VM 的指引,請參閱 快速入門:使用 Azure Stack Hub 入口網站建立 Windows 伺服器 VM。 遵循這些指示時,請安裝 Windows Server 2016 Core。
使用遠端連線,使用您在建立計算機時定義的伺服器IP位址、使用者名稱和密碼,連線到您的Windows 2016 伺服器。
安裝 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'))
安裝 PowerShell Core。 從具有提升權限的 PowerShell 提示符輸入:
choco install powershell-core
安裝 Azure CLI。 從提升權限的 PowerShell 提示字元中,輸入:
choco install azure-cli
安裝 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 模組。
重新啟動電腦。 以提升權限的身分開啟 PowerShell 視窗,然後輸入:
shutdown /r
在 GitHub 儲存庫中新增這台機器作為自託管執行者。 您可以在 GitHub 文件中找到新增自託管執行者的指示。如需詳細資訊,請參閱 新增自我托管的執行者。
當您完成時,請確認服務已啟動並正在接收您的請求。 從執行器目錄執行
/run.cmd
,以再次檢查。
選擇性:在您的自我裝載執行器上安裝 Azure Stack Hub 工具
本文中的指示不需要存取 Azure Stack Hub 工具 ,但當您開發自己的工作流程時,可能會需要使用這些工具。 下列指示可協助您在 Windows 自我裝載執行器上安裝工具。 如需 Azure Stack Hub 工具的詳細資訊,請參閱 從 GitHub 下載 Azure Stack Hub 工具。 這些指示假設您已安裝套件管理員 Chocolatey。
安裝 Git。
choco install git
從提升權限的 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
如果您需要執行器來連線到 Azure Stack Hub 實例,您可以使用 PowerShell。 您可以在 使用 PowerShell連線至 Azure Stack Hub 一文中找到指示。
建立自我裝載的執行器
您可以在 GitHub Docs 中設定自我裝載的執行器。自我裝載執行器可以在任何可連線至 GitHub 的電腦上執行。 如果您的工作流程中有需要大量相依性的自動化工作、軟體授權的特定授權需求,例如軟體授權的 USB 加密機,或其他電腦或軟體特定需求,您可以選擇使用自我裝載執行器。 您的電腦可以是實體機器、VM 或容器。 您可以將執行器放在資料中心或雲端中。
在本文中,您將使用裝載在 Azure 中的 Windows VM,以 Azure Stack Hub 特定的 PowerShell 需求進行設定。
如需設定、自託管執行器並將其連線至存放庫的指示,請參閱 GitHub Docs,關於自託管的執行器。
記下自行託管的執行者名稱和標籤。 本文中的工作流程會使用 標籤 self-hosted
來呼叫它。
將工作流程新增至您的存放庫
使用本節中的 yaml 建立新的工作流程,以建立您的工作流程。
開啟您的 GitHub 存放庫。
選擇 動作。
建立新的工作流程。
- 如果這是您的第一個工作流程,請選取 在 [選擇工作流程範本]底下自行設定工作流程。
- 如果您有現有的工作流程,請選擇 [[新增工作流程>自行設定工作流程。
在路徑中,將檔案命名為
workflow.yml
。複製並貼上工作流程配置文件 yml。
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
選取 開始提交。
加入認可標題和可選詳細信息,然後選取 [認可新檔案]。
執行動作時,請確認它已成功執行。
開啟您的 GitHub 存放庫。 您可以藉由推送至存放庫來觸發工作流程。
選擇 動作。
選取提交在 所有工作流程下的名稱。
選取作業的名稱,azurestack-test。
展開區段以檢閱 PowerShell 和 CLI 命令的傳回值。
關於工作流程檔案和動作的備註:
- 工作流程包含名為
azurestack-test
的單一作業。 - 推送事件會觸發工作流程。
- 動作使用已在資料庫中設置的自託運行器,並透過在工作流程中的運行器標籤
runs on: self-hosted
行來呼叫。 - 工作流程包含三個動作。
- 第一步驟會呼叫 Azure 登入動作,以透過 PowerShell 登入。使用 GitHub Actions for Azure,您可以在存放庫中建立並設定工作流程,來執行建置、測試、封裝、發行及部署到 Azure 的作業。 此動作會使用您的 Azure Stack SPN 認證來連線並開啟 Azure Stack Hub 環境的會話。 您可以在 GitHub 中找到使用動作的詳細資訊,Azure 登入動作。
- 第二個動作使用 Azure PowerShell。 此動作會使用 Az PowerShell 模組,並同時與 Government 和 Azure Stack Hub 雲端搭配運作。 執行此工作流程之後,請檢閱作業,以驗證腳本是否已在 Azure Stack Hub 環境中收集資源群組。 如需詳細資訊,請參閱 Azure PowerShell 動作
- 第三個動作是使用 Azure CLI 登入並連線到您的 Azure Stack Hub 來收集資源群組。 如需詳細資訊,請參閱 Azure CLI 動作。
- 如需使用 GitHub Actions 和自我裝載執行器的詳細資訊,請參閱 GitHub Actions 檔。
後續步驟
- 在 GitHub Marketplace中尋找更多操作。
- 瞭解 Azure Stack Hub 的一般部署
- 瞭解 在 Azure Stack Hub 中使用 Azure Resource Manager 範本
- 檢視 DevOps 混合式雲端模式,DevOps 模式