你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

从 Azure DevOps 服务使用 SAP 部署自动化框架

Azure DevOps 提供可用于执行基础结构部署和配置和 SAP 安装活动的管道来简化部署过程。

可以使用 Azure Repos 来存储配置文件,并使用 Azure Pipelines 部署和配置基础结构和 SAP 应用程序。

注册 Azure DevOps 服务

若要使用 Azure DevOps Services,需要一个 Azure DevOps 组织。 组织用于连接相关项目组。 使用工作或学校帐户自动将组织连接到 Microsoft Entra ID。 若要创建帐户,请打开 Azure DevOps 并登录或创建新帐户。

为 SAP 部署自动化框架配置 Azure DevOps 服务

可以使用以下脚本为 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 $Env: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 project list
        }
        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
        }
    }

    $branchName = "main"
    
    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/$branchName/deploy/scripts/New-SDAFDevopsWorkloadZone.ps1 -OutFile .\New-SDAFDevopsWorkloadZone.ps1 ; .\New-SDAFDevopsWorkloadZone.ps1
    

创建示例控制平面配置

可以运行 Create Sample Deployer Configuration 管道,为控制平面创建示例配置。 运行时,请选择相应的 Azure 区域。 你还可以控制是否要部署 Azure 防火墙和 Azure Bastion。

适用于 SAP 部署自动化框架的 Azure DevOps Services 手动配置

可以手动配置适用于 SAP 部署自动化框架的 Azure DevOps Services。

创建新项目

可以使用 Azure Repos 存储 sap 自动化 GitHub 存储库和环境配置文件中的代码。

打开 Azure DevOps ,通过选择“新建项目” 并输入项目详细信息来创建新项目 。 该项目包含用于执行部署活动的 Azure Repos 源代码管理存储库和 Azure Pipelines。

如果未看到 “新建项目”,请确保你有权在组织中创建新项目。

记录项目的 URL。

导入存储库

首先,将 SAP 部署自动化框架 Bootstrap GitHub 存储库导入 Azure Repos。

转到“ 存储库 ”部分,然后选择“ 导入存储库”。 将 https://github.com/Azure/sap-automation-bootstrap.git 存储库导入 Azure DevOps。 有关详细信息,请参阅 导入存储库

如果无法导入存储库,可以手动创建存储库。 然后,可以将内容从 SAP 部署自动化框架 GitHub Bootstrap 存储库导入到其中。

创建用于手动导入的存储库

仅当无法直接导入存储库时,才执行此步骤。

若要创建工作区存储库,请在“存储库”部分的“项目设置”下,选择“创建”。

选择存储库,输入 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 服务连接。 有关详细信息,请参阅 管理服务连接

若要创建服务连接,请转到 Project 设置,然后在“管道”部分下转到“服务连接”。

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

选择 GitHub 作为服务连接类型。 “OAuth 配置”下拉列表中选择“Azure Pipelines”。

选择“ 授权 ”以登录到 GitHub。

输入服务连接名称,例如 SDAF 连接到 GitHub。 请确保选中“为所有管道授予访问权限”复选框。 选择“保存”以保存服务连接。

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

保存应用注册 ID 和密码值供稍后使用。

创建 Azure Pipelines

Azure Pipelines 作为 YAML 文件实现。 它们存储在存储库中的 deploy/pipelines 文件夹中。

控制平面部署管道

创建控制平面部署管道。 在 “管道” 部分下,选择“ 新建管道”。 选择 Azure Repos Git 作为代码的源。 将管道配置为使用现有的 Azure Pipelines YAML 文件。 使用以下设置指定管道:

设置 “值”
存储库 “根存储库”(与项目名称相同)
分支 主要
路径 pipelines/01-deploy-control-plane.yml
名称 控制平面部署

保存管道。 若要查看“保存”,请选择“运行”旁边的 V 形。 转到“管道”部分并选择管道。右侧的省略号菜单中选择“重命名/移动 ”,并将管道重命名为 控制平面部署

SAP 工作负载区域部署管道

创建 SAP 工作负荷区域管道。 在 “管道” 部分下,选择“ 新建管道”。 选择 Azure Repos Git 作为代码的源。 将管道配置为使用现有的 Azure Pipelines YAML 文件。 使用以下设置指定管道:

设置 “值”
存储库 “根存储库”(与项目名称相同)
分支 主要
路径 pipelines/02-sap-workload-zone.yml
名称 SAP 工作负载区域部署

保存管道。 若要查看“保存”,请选择“运行”旁边的 V 形。 转到“管道”部分并选择管道。右侧的省略号菜单中选择“重命名/移动 ”,并将管道重命名为 SAP 工作负荷区域部署

SAP 系统部署管道

创建 SAP 系统部署管道。 在 “管道” 部分下,选择“ 新建管道”。 选择 Azure Repos Git 作为代码的源。 将管道配置为使用现有的 Azure Pipelines YAML 文件。 使用以下设置指定管道:

设置 “值”
存储库 “根存储库”(与项目名称相同)
分支 主要
路径 pipelines/03-sap-system-deployment.yml
名称 SAP 系统部署(基础结构)

保存管道。 若要查看“保存”,请选择“运行”旁边的 V 形。 转到“管道”部分并选择管道。右侧的省略号菜单中选择“重命名/移动”,并将管道重命名为 SAP 系统部署(基础结构)。

SAP 软件获取管道

创建 SAP 软件获取管道。 在 “管道” 部分下,选择“ 新建管道”。 选择 Azure Repos Git 作为代码的源。 将管道配置为使用现有的 Azure Pipelines YAML 文件。 使用以下设置指定管道:

设置 “值”
存储库 “根存储库”(与项目名称相同)
分支 主要
路径 deploy/pipelines/04-sap-software-download.yml
名称 SAP 软件获取

保存管道。 若要查看“保存”,请选择“运行”旁边的 V 形。 转到“管道”部分并选择管道。右侧的省略号菜单中选择“重命名/移动 ”,并将管道重命名为 SAP 软件获取

SAP 配置和软件安装管道

创建 SAP 配置和软件安装管道。 在 “管道” 部分下,选择“ 新建管道”。 选择 Azure Repos Git 作为代码的源。 将管道配置为使用现有的 Azure Pipelines YAML 文件。 使用以下设置指定管道:

设置 “值”
存储库 “根存储库”(与项目名称相同)
分支 主要
路径 pipelines/05-DB-and-SAP-installation.yml
名称 配置和 SAP 安装

保存管道。 若要查看“保存”,请选择“运行”旁边的 V 形。 转到“管道”部分并选择管道。 选择 右侧省略号菜单中的“重命名/移动 ”,并将管道重命名为 SAP 配置和软件安装

部署删除管道

创建部署删除管道。 在 “管道” 部分下,选择“ 新建管道”。 选择 Azure Repos Git 作为代码的源。 将管道配置为使用现有的 Azure Pipelines YAML 文件。 使用以下设置指定管道:

设置 “值”
存储库 “根存储库”(与项目名称相同)
分支 主要
路径 pipelines/10-remover-terraform.yml
名称 部署删除

保存管道。 若要查看“保存”,请选择“运行”旁边的 V 形。 转到“管道”部分并选择管道。右侧的省略号菜单中选择“重命名/移动 ”,并将管道重命名为 “部署删除”。

控制平面删除管道

创建控制平面部署删除管道。 在 “管道” 部分下,选择“ 新建管道”。 选择 Azure Repos Git 作为代码的源。 将管道配置为使用现有的 Azure Pipelines YAML 文件。 使用以下设置指定管道:

设置 “值”
存储库 “根存储库”(与项目名称相同)
分支 主要
路径 pipelines/12-remove-control-plane.yml
名称 控制平面删除

保存管道。 若要查看“保存”,请选择“运行”旁边的 V 形。 转到“管道”部分并选择管道。右侧的省略号菜单中选择“重命名/移动 ”,并将管道重命名为 “控制平面删除”。

使用 Azure 资源管理器 部署删除管道

创建部署删除 Azure 资源管理器 管道。 在 “管道” 部分下,选择“ 新建管道”。 选择 Azure Repos Git 作为代码的源。 将管道配置为使用现有的 Azure Pipelines YAML 文件。 使用以下设置指定管道:

设置 “值”
存储库 “根存储库”(与项目名称相同)
分支 主要
路径 pipelines/11-remover-arm-fallback.yml
名称 使用 Azure 资源管理器 删除部署

保存管道。 若要查看“保存”,请选择“运行”旁边的 V 形。 转到“管道”部分并选择管道。右侧的省略号菜单中选择“重命名/移动”,并使用 ARM 处理器将管道重命名为部署删除。

注意

仅将此管道用作最后手段。 仅删除资源组会留下可能会使重新部署复杂化的剩余项。

存储库更新程序管道

创建存储库更新程序管道。 在 “管道” 部分下,选择“ 新建管道”。 选择 Azure Repos Git 作为代码的源。 将管道配置为使用现有的 Azure Pipelines YAML 文件。 使用以下设置指定管道:

设置 “值”
存储库 “根存储库”(与项目名称相同)
分支 主要
路径 pipelines/20-update-ado-repository.yml
名称 存储库更新程序

保存管道。 若要查看“保存”,请选择“运行”旁边的 V 形。 转到“管道”部分并选择管道。 选择 右侧省略号菜单中的“重命名/移动 ”,并将管道重命名为 存储库更新程序

如果要使用的 sap-automation 存储库存在更新,则应使用此管道。

从 Visual Studio Marketplace 导入清理任务

管道使用自定义任务执行部署后清理活动。 可以从 Post Build Cleanup 安装自定义任务。 在运行管道之前,请将其安装到 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.

变量定义

部署管道配置为使用使用变量组定义的一组预定义参数值。

常见变量

所有部署管道都使用通用变量。 它们存储在名为 <a0/> 的变量组中。

使用“管道”部分中的“库”页创建一SDAF-General个新的变量组。 添加以下变量:

变量 说明
Deployment_Configuration_Path 工作区 若要测试示例配置,请使用 samples/WORKSPACES 而不是 WORKSPACES。
分支 主要
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_version=1.3.0 --output yaml

请记住,使用 管道权限为所有管道分配权限

特定于环境的变量

由于每个环境可能具有不同的部署凭据,因此需要为每个环境创建一个变量组。 例如,使用 SDAF-MGMTSDAF-DEVSDAF-QA

使用“管道”部分中的“库”页为控制平面环境创建一个新的变量组SDAF-MGMT。 添加以下变量:

变量 说明
Agent 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 组的组 ID 使用浏览器访问变量组时,可以从 URL 参数 variableGroupId 检索 ID。 例如:variableGroupId=8
WORKLOADZONE_PIPELINE_ID 管道的 SAP workload zone deployment ID 可以从 Azure DevOps 中的管道页中的 URL 参数 definitionId 检索 ID。 例如:definitionId=31
SYSTEM_PIPELINE_ID 管道的 SAP system deployment (infrastructure) ID 可以从 Azure DevOps 中的管道页中的 URL 参数 definitionId 检索 ID。 例如: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 资源管理器服务连接。 有关详细信息,请参阅 管理服务连接

若要创建服务连接,请转到 Project 设置。 在 “管道 ”部分下,选择“ 服务连接”。

Screenshot that shows how to create a service connection.

选择 Azure 资源管理器作为服务连接类型和服务主体(手动)作为身份验证方法。 输入目标订阅,通常是控制平面订阅。 输入服务主体详细信息。 选择“ 验证” 以验证凭据。 有关如何创建服务主体的详细信息,请参阅 “创建服务主体”。

输入服务连接名称,例如,使用 Connection to MGMT subscription。 请确保选中“为所有管道授予访问权限”复选框。 选择“验证并保存”以保存服务连接。

权限

大多数管道将文件添加到 Azure Repos,因此需要拉取权限。 在 Project 设置“存储库”部分下,选择源代码存储库的“安全”选项卡,并为 “Build Service参与”权限分配参与权限。

Screenshot that shows repository permissions.

部署控制平面

在默认视图中可能看不到新创建的管道。 选择“ 最近 使用”选项卡并返回到 “所有”选项卡 以查看新管道。

选择 控制平面部署 管道,并输入部署器和 SAP 库的配置名称。 选择“运行以部署控制平面。 如果要设置配置 Web 应用,请确保选择“部署配置 Web 应用程序”检查框。

手动配置 Azure DevOps Services 自托管代理

仅当 Azure DevOps Services 代理未自动配置时,才需要手动配置。 在继续操作之前,请检查代理池是否为空。

连接到 Deployer:

  1. 登录 Azure 门户

  2. 转到包含 deployer 虚拟机的资源组。

  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

还需要向应用服务系统分配的托管标识授予读取者权限。 转到应用服务资源。 在左侧,选择“ 标识”。 在“系统分配”选项卡上,选择“添加角色分配”的 Azure 角色分配>。 选择“订阅”作为范围,选择“读取者”作为角色。 再选择“保存” 。 如果不执行此步骤,Web 应用下拉列表功能将不起作用。

现在应该能够访问 Web 应用,并使用它来部署 SAP 工作负荷区域和 SAP 系统基础结构。

下一步