使用 Azure DevOps Services 的 SAP 部署自動化架構

Azure DevOps 可簡化部署程序,提供您可以用來執行基礎結構部署、組態和 SAP 安裝活動的管線。

您可以使用 Azure Repos 儲存您的組態檔,以及使用 Azure Pipelines 部署和設定基礎架構和 SAP 應用程式。

註冊 Azure DevOps Services

若要使用 Azure DevOps Services,您需要 Azure DevOps 組織。 組織會用來連線相關專案的群組。 若使用公司或學校帳戶,貴組織會自動連線至您的 Microsoft Entra ID。 若要建立帳戶,請開啟 Azure DevOps,然後登入或建立新帳戶。

設定 Azure DevOps Services 以用於 SAP 部署自動化架構

您可以使用下列指令碼,為 SAP 部署自動化架構執行 Azure DevOps Services 的基本安裝。

開啟 PowerShell ISE 並複製下列指令碼,並更新參數以符合您的環境。

    $Env:SDAF_ADO_ORGANIZATION = "https://dev.azure.com/ORGANIZATIONNAME"
    $Env:SDAF_ADO_PROJECT = "SAP Deployment Automation Framework"
    $Env:SDAF_CONTROL_PLANE_CODE = "MGMT"
    $Env:SDAF_ControlPlaneSubscriptionID = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    $Env:ARM_TENANT_ID="zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz"

    $Env:MSI_OBJECT_ID = $null

    $branchName = "main"
        
    $UniqueIdentifier = "SDAF" + $ShortCode
    
    if ($Env:ARM_TENANT_ID.Length -eq 0) {
      az login --output none --only-show-errors --scope https://graph.microsoft.com//.default
    }
    else {
      az login --output none --tenant $ARM_TENANT_ID --only-show-errors --scope https://graph.microsoft.com//.default
    }

    az config set extension.use_dynamic_install=yes_without_prompt --only-show-errors

    az extension add --name azure-devops --only-show-errors

    $differentTenant = Read-Host "Is your Azure DevOps organization hosted in a different tenant than the one you are currently logged in to? y/n"
    if ($differentTenant -eq 'y') {
        $env:AZURE_DEVOPS_EXT_PAT = Read-Host "Please enter your Personal Access Token (PAT) with permissions to add new projects, manage agent pools to the Azure DevOps organization $Env:ADO_Organization"
        try {
            az devops login --organization $Env:ADO_Organization
        }
        catch {
            $_
        }
    }
    
    $confirmationWebAppDeployment = Read-Host "Do you want to use the Web Application for editing the configuration files (recommended) y/n?"
    if ($confirmationWebAppDeployment -eq 'y') {
        $Env:SDAF_WEBAPP = "true"
        $confirmation = Read-Host "Do you want to create a new Application registration (needed for the Web Application) y/n?"
        if ($confirmation -eq 'y') {
            $Env:SDAF_APP_NAME = "SDAF " + $UniqueIdentifier + " SDAF Control Plane"
        }
        else {
            $Env:SDAF_APP_NAME = Read-Host "Please provide the Application registration name"
        }
    }
    else {
        $Env:SDAF_WEBAPP = "false"
    }
    
    $Env:SDAF_AuthenticationMethod = 'Managed Identity'
    
    $confirmationDeployment = Read-Host "Do you want to use Managed Identities for the deployment (recommended) y/n?"
    
    if ($confirmationDeployment -eq 'n') {
        $Env:SDAF_AuthenticationMethod = 'Service Principal'
         
        $confirmation = Read-Host "Do you want to create a new Service Principal for the Control plane y/n?"
        if ($confirmation -eq 'y') {
            $Env:SDAF_MGMT_SPN_NAME = "SDAF " + $UniqueIdentifier + $Env:SDAF_CONTROL_PLANE_CODE + " SPN"
        }
        else {
            $Env:SDAF_MGMT_SPN_NAME = Read-Host "Please provide the Control Plane Service Principal Name"
        }
        
    }
        
    if ( $PSVersionTable.Platform -eq "Unix") {
        if ( Test-Path "SDAF") {
        }
        else {
            $sdaf_path = New-Item -Path "SDAF" -Type Directory
        }
    }
    else {
        $sdaf_path = Join-Path -Path $Env:HOMEDRIVE -ChildPath "SDAF"
        if ( Test-Path $sdaf_path) {
        }
        else {
            New-Item -Path $sdaf_path -Type Directory
        }
    }
        
    Set-Location -Path $sdaf_path
        
    if ( Test-Path "New-SDAFDevopsProject.ps1") {
        if ( $PSVersionTable.Platform -eq "Unix") {
            Remove-Item "New-SDAFDevopsProject.ps1"
        }
        else {
            Remove-Item ".\New-SDAFDevopsProject.ps1"
        }
    }
        
    Invoke-WebRequest -Uri https://raw.githubusercontent.com/Azure/sap-automation/$branchName/deploy/scripts/New-SDAFDevopsProject.ps1 -OutFile New-SDAFDevopsProject.ps1 
    
    
    if ( $PSVersionTable.Platform -eq "Unix") {
        Unblock-File ./New-SDAFDevopsProject.ps1
        ./New-SDAFDevopsProject.ps1
    }
    else {
        Unblock-File .\New-SDAFDevopsProject.ps1
        .\New-SDAFDevopsProject.ps1
    }
    

執行指令碼並遵循指示。 指令碼會開啟瀏覽器視窗以進行驗證,以及在 Azure DevOps 專案中執行工作。

您可以選擇直接從 GitHub 執行程式碼,也可以將程式碼複製匯入您的 Azure DevOps 專案。

若要確認已建立專案,請移至 Azure DevOps 入口網站,然後選取專案。 請確定已填入存放庫,並已建立管線。

重要

在您的本機工作站上執行下列步驟。 此外,請執行 az upgrade 命令,確定您已安裝最新的 Azure CLI。

為新的工作負載區域設定 Azure DevOps Services 成品

使用下列指令碼來部署支援新工作負載區域所需的成品。 此流程會在 Azure DevOps 中建立變數群組和服務連線,並選擇性地建立部署服務主體。

開啟 PowerShell ISE 並複製下列指令碼,並更新參數以符合您的環境。

    $Env:SDAF_ADO_ORGANIZATION = "https://dev.azure.com/ORGANIZATIONNAME"
    $Env:SDAF_ADO_PROJECT = "SAP Deployment Automation Framework"
    $Env:SDAF_WorkloadZoneSubscriptionID = "yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy"
    $Env:ARM_TENANT_ID="zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz"
    
    if ( $PSVersionTable.Platform -eq "Unix") {
        if ( Test-Path "SDAF") {
        }
        else {
            $sdaf_path = New-Item -Path "SDAF" -Type Directory
        }
    }
    else {
        $sdaf_path = Join-Path -Path $Env:HOMEDRIVE -ChildPath "SDAF"
        if ( Test-Path $sdaf_path) {
        }
        else {
            New-Item -Path $sdaf_path -Type Directory
        }
    }
    
    Set-Location -Path $sdaf_path
    
    if ( Test-Path "New-SDAFDevopsWorkloadZone.ps1") {
        remove-item .\New-SDAFDevopsWorkloadZone.ps1
    }
    
    Invoke-WebRequest -Uri https://raw.githubusercontent.com/Azure/sap-automation/main/deploy/scripts/New-SDAFDevopsWorkloadZone.ps1 -OutFile .\New-SDAFDevopsWorkloadZone.ps1 ; .\New-SDAFDevopsWorkloadZone.ps1
    

建立控制平面設定範例

您可以執行 Create Sample Deployer Configuration 管線來建立控制平面的範例組態。 當管線正在執行時,請選擇適當的 Azure 區域。 您也可以控制是否要部署 Azure 防火牆和 Azure Bastion。

手動設定 SAP 部署自動化架構的 Azure DevOps Services

您可以手動設定 Azure DevOps Services 以用於 SAP 部署自動化架構。

建立新專案

您可以使用 Azure Repos,儲存來自 sap-automation GitHub 存放庫和環境組態檔兩處的程式碼。

選取 [新增專案] 並輸入專案詳細資料,以開啟 Azure DevOps 並建立新專案。 專案會包含用來執行部署活動的 Azure Repos 原始檔控制存放庫和 Azure Pipelines 兩者。

如果您並未看到 [新增專案],請確定您擁有在組織中建立新專案的權限。

請記錄該專案的 URL。

匯入存放庫

首先,將 SAP 部署自動化架構啟動程序 GitHub 存放庫匯入 Azure Repos。

移至 [存放庫] 區段,然後選取 [匯入存放庫]。 將 https://github.com/Azure/sap-automation-bootstrap.git 存放庫匯入 Azure DevOps。 如需詳細資訊,請參閱匯入存放庫

如果您無法匯入存放庫,則可以手動建立存放庫。 然後,您可以從 SAP 部署自動化架構 GitHub 啟動程序存放庫將內容匯入其中。

建立存放庫以用於手動匯入

只有在您無法直接匯入存放庫時,才執行此步驟。

若要建立工作區存放庫,請在 [Repos] 區段中的 [專案設定] 底下,選取 [建立]

選擇存放庫、輸入 Git,並提供存放庫的名稱。 例如,使用 SAP 組態存放庫

複製存放庫

為提供更完整的內容編輯功能,您可以將存放庫複製到本機資料夾,在本機編輯內容。

若要將存放庫複製到本機資料夾,請在入口網站的 [Repos] 區段上,選取 [檔案] 底下的 [複製]。 如需詳細資訊,請參閱複製存放庫

Screenshot that shows how to clone the repository.

使用本機複製品手動匯入存放庫內容

您也可以從 SAP 部署自動化架構存放庫手動下載內容,然後將其新增至 Azure DevOps 存放庫的本機複製品。

移至 https://github.com/Azure/SAP-automation-samples 存放庫,並以 .zip 檔案的形式下載存放庫內容。 選取 [程式碼],然後選擇 [下載 ZIP]

將內容從 ZIP 檔案複製到本機複製品的根資料夾。

在 Visual Studio Code 中開啟本機資料夾。 您應該會看到指標必須依照此處所示的原始檔控制圖示來同步變更。

Screenshot that shows that source code is changed.

選取原始檔控制圖示,並提供變更的相關訊息。 例如,輸入 [從 GitHub 匯入],然後選取 Ctrl+Enter 來認可變更。 接下來,選取 [同步變更],將變更同步回存放庫。

為 Terraform 和 Ansible 程式碼選擇來源

您可以直接從 GitHub 執行 SAP 部署自動化架構程式碼,也可以從本機匯入。

從本機存放庫執行程式碼

如果您想要從本機 Azure DevOps 專案執行 SAP 部署自動化架構程式碼,您需要在 Azure DevOps 專案中建立個別的程式碼存放庫和設定存放庫:

  • 組態存放庫的名稱Same as the DevOps Project name。 來源為 https://github.com/Azure/sap-automation-bootstrap.git
  • 程式碼存放庫的名稱sap-automation。 來源為 https://github.com/Azure/sap-automation.git
  • 範例和範本存放庫的名稱sap-samples。 來源為 https://github.com/Azure/sap-automation-samples.git

直接從 GitHub 執行程式碼

如果您想要直接從 GitHub 執行程式碼,您需要提供 Azure DevOps 認證,才能從 GitHub 提取內容。

建立 GitHub 服務連線

若要從 GitHub 提取程式碼,您需要 GitHub 服務連線。 如需詳細資訊,請參閱管理服務連線

若要建立服務連線,請移至 [專案設定],然後在 [管線] 區段底下,移至 [服務連線]

Screenshot that shows how to create a service connection for GitHub.

選取 [GitHub] 作為服務連線類型。 在 [OAuth 設定] 下拉式清單中選取 [Azure Pipelines]

選取 [授權] 以登入 GitHub。

輸入服務連線名稱,例如 GitHub 的 SDAF 連線。 確定已選取 [為所有管線授與存取權限] 核取方塊。 選取 [儲存] 以儲存服務連線。

設定 Web 應用程式

自動化架構會選擇性地將 Web 應用程式佈建為控制平面的一部分,以協助部署 SAP 工作負載區域和系統設定檔。 如果您想要使用 Web 應用程式,您必須先建立應用程式註冊以進行驗證。 開啟 Azure Cloud Shell,然後執行下列命令。

視需要將 MGMT 取代為您的環境。

echo '[{"resourceAppId":"00000003-0000-0000-c000-000000000000","resourceAccess":[{"id":"e1fe6dd8-ba31-4d61-89e7-88639da4683d","type":"Scope"}]}]' >> manifest.json

TF_VAR_app_registration_app_id=$(az ad app create --display-name MGMT-webapp-registration --enable-id-token-issuance true --sign-in-audience AzureADMyOrg --required-resource-access @manifest.json --query "appId" | tr -d '"')

echo $TF_VAR_app_registration_app_id

az ad app credential reset --id $TF_VAR_app_registration_app_id --append --query "password"

rm manifest.json

儲存應用程式註冊識別碼和密碼值以供稍後使用。

建立 Azure Pipelines

Azure Pipelines 會實作為 YAML 檔案。 它們會儲存在存放庫中的 deploy/pipelines 資料夾中。

控制平面部署管線

建立控制平面部署管線。 在 [管線] 區段下,選取 [新增管線]。 選取 [Azure Repos Git] 作為程式碼的來源。 將您的管線設定為使用現有的 Azure Pipeline YAML 檔案。 使用下列設定指定管線:

設定
存放庫 「根存放庫」(與專案名稱相同)
分行 main
路徑 pipelines/01-deploy-control-plane.yml
名稱 控制平面部署

儲存管線。 若要查看 [儲存],請選取 [執行] 旁的>形箭號。 移至 [管線] 區段,然後選取管線。 從右側的省略號功能表選擇 [重新命名/移動],並將管線重新命名為控制平面部署

SAP 工作負載區域部署管線

建立 SAP 工作負載區域管線。 在 [管線] 區段下,選取 [新增管線]。 選取 [Azure Repos Git] 作為程式碼的來源。 將您的管線設定為使用現有的 Azure Pipeline YAML 檔案。 使用下列設定指定管線:

設定
存放庫 「根存放庫」(與專案名稱相同)
分行 main
路徑 pipelines/02-sap-workload-zone.yml
名稱 SAP 工作負載區域部署

儲存管線。 若要查看 [儲存],請選取 [執行] 旁的>形箭號。 移至 [管線] 區段,然後選取管線。 從右側的省略號功能表選擇 [重新命名/移動],並將管線重新命名為 SAP 工作負載區域部署

SAP 系統部署管線

建立 SAP 系統部署管線。 在 [管線] 區段下,選取 [新增管線]。 選取 [Azure Repos Git] 作為程式碼的來源。 將您的管線設定為使用現有的 Azure Pipeline YAML 檔案。 使用下列設定指定管線:

設定
存放庫 「根存放庫」(與專案名稱相同)
分行 main
路徑 pipelines/03-sap-system-deployment.yml
名稱 SAP 系統部署 (基礎結構)

儲存管線。 若要查看 [儲存],請選取 [執行] 旁的>形箭號。 移至 [管線] 區段,然後選取管線。 從右側的省略號功能表選擇 [重新命名/移動],並將管線重新命名為 SAP 系統部署 (基礎結構)

SAP 軟體擷取管線

建立 SAP 軟體擷取管線。 在 [管線] 區段下,選取 [新增管線]。 選取 [Azure Repos Git] 作為程式碼的來源。 將您的管線設定為使用現有的 Azure Pipeline YAML 檔案。 使用下列設定指定管線:

設定
存放庫 「根存放庫」(與專案名稱相同)
分行 main
路徑 deploy/pipelines/04-sap-software-download.yml
名稱 SAP 軟體擷取

儲存管線。 若要查看 [儲存],請選取 [執行] 旁的>形箭號。 移至 [管線] 區段,然後選取管線。 從右側的省略號功能表選擇 [重新命名/移動],並將管線重新命名為 SAP 軟體取得

SAP 設定和軟體安裝管線

建立 SAP 設定和軟體安裝管線。 在 [管線] 區段下,選取 [新增管線]。 選取 [Azure Repos Git] 作為程式碼的來源。 將您的管線設定為使用現有的 Azure Pipeline YAML 檔案。 使用下列設定指定管線:

設定
存放庫 「根存放庫」(與專案名稱相同)
分行 main
路徑 pipelines/05-DB-and-SAP-installation.yml
名稱 設定和 SAP 安裝

儲存管線。 若要查看 [儲存],請選取 [執行] 旁的>形箭號。 移至 [管線] 區段,然後選取管線。 從右側的省略號功能表選擇 [重新命名/移動],並將管線重新命名為 SAP 組態和軟體安裝

部署移除管線

建立部署移除管線。 在 [管線] 區段下,選取 [新增管線]。 選取 [Azure Repos Git] 作為程式碼的來源。 將您的管線設定為使用現有的 Azure Pipeline YAML 檔案。 使用下列設定指定管線:

設定
存放庫 「根存放庫」(與專案名稱相同)
分行 main
路徑 pipelines/10-remover-terraform.yml
名稱 部署移除

儲存管線。 若要查看 [儲存],請選取 [執行] 旁的>形箭號。 移至 [管線] 區段,然後選取管線。 從右側的省略號功能表選擇 [重新命名/移動],並將管線重新命名為部署移除

控制平面移除管線

建立控制平面部署移除管線。 在 [管線] 區段下,選取 [新增管線]。 選取 [Azure Repos Git] 作為程式碼的來源。 將您的管線設定為使用現有的 Azure Pipeline YAML 檔案。 使用下列設定指定管線:

設定
存放庫 「根存放庫」(與專案名稱相同)
分行 main
路徑 pipelines/12-remove-control-plane.yml
名稱 控制平面移除

儲存管線。 若要查看 [儲存],請選取 [執行] 旁的>形箭號。 移至 [管線] 區段,然後選取管線。 從右側的省略號功能表選擇 [重新命名/移動],並將管線重新命名為控制平面移除

使用 Azure Resource Manager 部署移除管線

建立部署移除 Azure Resource Manager 管線。 在 [管線] 區段下,選取 [新增管線]。 選取 [Azure Repos Git] 作為程式碼的來源。 將您的管線設定為使用現有的 Azure Pipeline YAML 檔案。 使用下列設定指定管線:

設定
存放庫 「根存放庫」(與專案名稱相同)
分行 main
路徑 pipelines/11-remover-arm-fallback.yml
名稱 使用 Azure Resource Manager 的部署移除

儲存管線。 若要查看 [儲存],請選取 [執行] 旁的>形箭號。 移至 [管線] 區段,然後選取管線。 從右側的省略號功能表選擇 [重新命名/移動],然後將管線重新命名為使用 ARM 處理器的部署移除

注意

只使用此管線作為最後手段。 只要移除資源群組,就會留下可能會使重新部署複雜化的剩餘部分。

存放庫更新程式管線

建立存放庫更新程式管線。 在 [管線] 區段下,選取 [新增管線]。 選取 [Azure Repos Git] 作為程式碼的來源。 將您的管線設定為使用現有的 Azure Pipeline YAML 檔案。 使用下列設定指定管線:

設定
存放庫 「根存放庫」(與專案名稱相同)
分行 main
路徑 pipelines/20-update-ado-repository.yml
名稱 存放庫更新程式

儲存管線。 若要查看 [儲存],請選取 [執行] 旁的>形箭號。 移至 [管線] 區段,然後選取管線。 從右側的省略號功能表選擇 [重新命名/移動],並將管線重新命名為存放庫更新程式

當您想要使用 sap-automation 存放庫中的更新時,應該會用到此管線。

從 Visual Studio Marketplace 匯入清除工作

部署後,管線會使用自訂工作執行清除活動。 您可以從建置後清除安裝自訂工作。 請先將其安裝至您的 Azure DevOps 組織,再執行管線。

自我裝載代理程式的準備事項

  1. 移至 [組織設定] 以建立代理程式集區。 在 [管線] 區段底下,選取 [代理程式集區]>[新增集區]。 選取 [自我裝載] 作為集區類型。 命名集區以與控制平面環境一致。 例如,使用 MGMT-WEEU-POOL。 確定已選取 [授與所有管線的存取權限],然後選取 [建立] 以建立集區。

  2. 使用您計畫在 Azure DevOps 組織中使用的使用者帳戶登入。

  3. 從您的首頁開啟使用者設定,然後選取 [個人存取權杖]

    Diagram that shows the creation of a personal access token.

  4. 使用這些設定建立個人存取權杖:

    • 代理程式集區:選取 [讀取和管理]

    • 建置:選取 [讀取和執行]

    • 程式碼:選取 [讀取和寫入]

    • 變數群組:選取 [讀取、建立和管理]

      記下建立的權杖值。

    Diagram that shows the attributes of the personal access token.

變數定義

部署管線會設定為使用一組變數群組預先定義的參數值。

常用變數

所有部署管線都會使用常用變數。 它們會儲存在稱為 SDAF-General 的變數群組中。

請使用 [管線] 區段中的 [程式庫] 頁面,建立名為 SDAF-General 的新變數群組。 新增下列變數:

變數 備註
Deployment_Configuration_Path 工作區 若要測試範例組態,請使用 samples/WORKSPACES 而非 WORKSPACES。
分行 main
S-Username <SAP Support user account name>
S-Password <SAP Support user password> 選取鎖定圖示,將變數類型變更為祕密。
tf_version 1.6.0 要使用的 Terraform 版本。 請參閱 Terraform 下載

儲存變數。

或者,您也可以使用 Azure DevOps CLI 來設定群組。

s-user="<SAP Support user account name>"
s-password="<SAP Support user password>"

az devops login

az pipelines variable-group create --name SDAF-General --variables ANSIBLE_HOST_KEY_CHECKING=false Deployment_Configuration_Path=WORKSPACES Branch=main S-Username=$s-user S-Password=$s-password tf_varsion=1.3.0 --output yaml

請記得使用管線權限指派所有管線的權限。

環境特定變數

由於每個環境可能有不同的部署認證,因此您必須為每個環境建立變數群組。 例如,使用 SDAF-MGMTSDAF-DEVSDAF-QA

請使用 [管線] 區段中的 [程式庫] 頁面,建立名為 SDAF-MGMT 的新變數群組,以用於控制平面環境。 新增下列變數:

變數 備註
專員 Azure Pipelines 或代理程式集區的名稱 此集區會在稍後的步驟中建立。
CP_ARM_CLIENT_ID Service principal application ID
CP_ARM_OBJECT_ID Service principal object ID
CP_ARM_CLIENT_SECRET Service principal password 選取鎖定圖示,將變數類型變更為祕密。
CP_ARM_SUBSCRIPTION_ID Target subscription ID
CP_ARM_TENANT_ID Tenant ID 用於服務主體
AZURE_CONNECTION_NAME 先前建立的連線名稱
sap_fqdn SAP 完整網域名稱,例如 sap.contoso.net 只有在未使用私人 DNS 時才需要用到。
FENCING_SPN_ID Service principal application ID 用於隔離代理程式 若針對隔離代理程式使用服務主體進行高可用性部署,則這是必要項目。
FENCING_SPN_PWD Service principal password 用於隔離代理程式 若針對隔離代理程式使用服務主體進行高可用性部署,則這是必要項目。
FENCING_SPN_TENANT Service principal tenant ID 用於隔離代理程式 若針對隔離代理程式使用服務主體進行高可用性部署,則這是必要項目。
PAT <Personal Access Token> 使用上一個步驟中定義的個人權杖。
POOL <Agent Pool name> 要用於此環境的代理程式集區。
APP_REGISTRATION_APP_ID App registration application ID 部署 Web 應用程式時為必要項目。
WEB_APP_CLIENT_SECRET App registration password 部署 Web 應用程式時為必要項目。
SDAF_GENERAL_GROUP_ID SDAF-General 群組的群組識別碼 使用瀏覽器存取變數群組時,可以從 URL 參數 variableGroupId 擷取識別碼。 例如: variableGroupId=8
WORKLOADZONE_PIPELINE_ID SAP workload zone deployment 管線的識別碼 您可以從 Azure DevOps 中的管線頁面,從 URL 參數 definitionId 擷取識別碼。 例如: definitionId=31
SYSTEM_PIPELINE_ID SAP system deployment (infrastructure) 管線的識別碼 您可以從 Azure DevOps 中的管線頁面,從 URL 參數 definitionId 擷取識別碼。 例如: definitionId=32

儲存變數。

請記得使用管線權限指派所有管線的權限。

當您使用 Web 應用程式時,請確定建置服務至少有 「參與」權限。

您可以使用複製功能建立下一個環境變數群組。 SDAF-MGMT 群組僅需要 APP_REGISTRATION_APP_ID、WEB_APP_CLIENT_SECRET、SDAF_GENERAL_GROUP_ID、WORKLOADZONE_PIPELINE_ID 和 SYSTEM_PIPELINE_ID。

建立服務連線

若要移除 Azure 資源,您需要 Azure Resource Manager 服務連線。 如需詳細資訊,請參閱管理服務連線

若要建立服務連線,請移至 [專案設定]。 在 [管線] 區段底下,選取 [服務連線]

Screenshot that shows how to create a service connection.

選取 [Azure Resource Manager] 作為服務連線類型,以及選擇 [服務主體 (手動)] 作為驗證方法。 輸入目標訂用帳戶,通常是控制平面訂用帳戶。 取得服務主體詳細資料。 選取 [驗證] 以驗證認證。 如需如何建立服務主體的詳細資訊,請參閱建立服務主體

輸入服務連線名稱,例如,請使用 Connection to MGMT subscription。 確定已選取 [為所有管線授與存取權限] 核取方塊。 選取 [驗證並儲存],儲存服務連線。

權限

大部分的管線會將檔案新增至 Azure Repos,因此需要提取權限。 在 [專案設定] 的 [存放庫] 區段下,選取原始程式碼存放庫的 [安全性] 索引標籤,並將「參與」權限指派給 Build Service

Screenshot that shows repository permissions.

部署控制平面

新建管線可能不會顯示在預設檢視中。 選取 [最近的] 索引標籤,然後返回 [所有] 索引標籤以檢視新管線。

選取 [控制平面部署] 管線,然後輸入部署器和 SAP 程式庫的組態名稱。 選取 [執行] 以部署控制平面。 如果您想要設定組態 Web 應用程式,請務必選取 [部署組態 Web 應用程式] 核取方塊。

手動設定 Azure DevOps Services 自我裝載式代理程式

只有在 Azure DevOps Services 代理程式未自動設定時,才需要手動設定。 請先確認代理程式集區是空的,再繼續進行。

若要連線至部署器:

  1. 登入 Azure 入口網站

  2. 移至包含部署器虛擬機器的資源群組。

  3. 使用 Azure Bastion 連線至虛擬機器。

  4. 預設的使用者名稱為 azureadm

  5. 選取 [來自 Azure Key Vault 的 SSH 私密金鑰]

  6. 選取包含控制平面的訂用帳戶。

  7. 選取部署器金鑰保存庫。

  8. 從祕密清單中,選取以 -sshkey 結尾的祕密。

  9. 連線到虛擬機器。

執行下列指令碼以設定部署器:

mkdir -p ~/Azure_SAP_Automated_Deployment

cd ~/Azure_SAP_Automated_Deployment

git clone https://github.com/Azure/sap-automation.git

cd sap-automation/deploy/scripts

./configure_deployer.sh

重新啟動部署器、重新連線,然後執行下列指令碼,以設定 Azure DevOps 代理程式:

cd ~/Azure_SAP_Automated_Deployment/

$DEPLOYMENT_REPO_PATH/deploy/scripts/setup_ado.sh

當您接受授權,並在系統提示輸入伺服器 URL 時,輸入您在建立 Azure DevOps 專案時擷取的 URL。 針對驗證,選取 [PAT],然後輸入先前步驟中取得的權杖值。

出現提示時,請輸入您在先前步驟中建立的應用程式集區名稱。 接受預設代理程式名稱和預設工作資料夾名稱。 代理程式現在已設定並啟動。

部署控制平面 Web 應用程式

當您執行控制平面部署管線時選取 deploy the web app infrastructure 參數,系統會佈建裝載 Web 應用程式所需的基礎結構。 部署 Web 應用程式管線會將應用程式的軟體發佈至該基礎結構。

等待部署完成。 選取 [延伸模組] 索引標籤,然後遵循指示來完成設定。 更新用於應用程式註冊的 reply-url 值。

因為執行控制平面管線的緣故,部分的所需 Web 應用程式 URL 會儲存在環境特定變數群組裡名為 WEBAPP_URL_BASE 的變數中。 您可以隨時使用下列命令來更新已註冊 Web 應用程式的 URL。

webapp_url_base=<WEBAPP_URL_BASE>
az ad app update --id $TF_VAR_app_registration_app_id --web-home-page-url https://${webapp_url_base}.azurewebsites.net --web-redirect-uris https://${webapp_url_base}.azurewebsites.net/ https://${webapp_url_base}.azurewebsites.net/.auth/login/aad/callback

您也需要將讀者權限授與應用程式服務系統指派的受控識別。 移至 App Service 資源。 選取左側的 [身分識別]。 在 [系統指派] 索引 標籤上,選取 [Azure 角色指派]>[新增角色指派]。 選取 [訂用帳戶] 作為範圍,然後選取 [讀者] 作為角色。 然後選取儲存。 如果沒有此步驟,Web 應用程式下拉式清單功能將無法運作。

您現在應該能夠瀏覽 Web 應用程式,並用其來部署 SAP 工作負載區域和 SAP 系統基礎結構。

後續步驟