使用英语阅读

通过


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

更新 SAP 部署自动化框架

SAP 部署自动化框架定期更新。 本文介绍了如何更新该框架。

先决条件

在升级框架之前,请确保备份 SAP 库中 tfstate 存储帐户中的远程状态文件。

升级管道

你可以通过运行 Upgrade Pipelines 管道来升级管道定义。

手动创建“升级管道”管道

如果没有 Upgrade Pipelines 管道,可以手动创建它。

转到你的存储库中的管道文件夹,然后通过从“新建”菜单中选择文件来创建管道定义。 将文件命名为 21-update-pipelines.yml 并将以下内容粘贴到文件中。

---
  # /*---------------------------------------------------------------------------8
  # |                                                                            |
  # |               This pipeline updates the ADO repository                     |
  # |                                                                            |
  # +------------------------------------4--------------------------------------*/

  name:                                  Update Azure DevOps repository from GitHub $(branch) branch

  parameters:
    - name:                              repository
      displayName:                       Source repository
      type:                              string
      default:                           https://github.com/Azure/sap-automation-bootstrap.git

    - name:                              branch
      displayName:                       Source branch to update from
      type:                              string
      default:                           main

    - name:                              force
      displayName:                       Force the update
      type:                              boolean
      default:                           false

  trigger:                               none

  pool:
    vmImage:                             ubuntu-latest

  variables:
    - name:                              repository
      value:                             ${{ parameters.repository }}
    - name:                              branch
      value:                             ${{ parameters.branch }}
    - name:                              force
      value:                             ${{ parameters.force }}
    - name:                              log
      value:                             logfile_$(Build.BuildId)

  stages:
    - stage:                             Update_DEVOPS_repository
      displayName:                       Update DevOps pipelines
      jobs:
        - job:                           Update_DEVOPS_repository
          displayName:                   Update DevOps pipelines
          steps:
            - checkout:                  self
              persistCredentials:        true
            - bash: |
                #!/bin/bash
                green="\e[1;32m" ; reset="\e[0m" ; boldred="\e[1;31m"

                git config --global user.email "$(Build.RequestedForEmail)"
                git config --global user.name "$(Build.RequestedFor)"
                git config --global pull.ff false
                git config --global pull.rebase false

                git remote add remote-repo $(repository) >> /tmp/$(log) 2>&1

                git fetch --all --tags >> /tmp/$(log) 2>&1
                git checkout --quiet origin/main

                git checkout --quiet remote-repo/main ./pipelines/01-deploy-control-plane.yml
                git checkout --quiet remote-repo/main ./pipelines/02-sap-workload-zone.yml
                git checkout --quiet remote-repo/main ./pipelines/03-sap-system-deployment.yml
                git checkout --quiet remote-repo/main ./pipelines/04-sap-software-download.yml
                git checkout --quiet remote-repo/main ./pipelines/05-DB-and-SAP-installation.yml
                git checkout --quiet remote-repo/main ./pipelines/10-remover-terraform.yml
                git checkout --quiet remote-repo/main ./pipelines/11-remover-arm-fallback.yml
                git checkout --quiet remote-repo/main ./pipelines/12-remove-control-plane.yml
                git checkout --quiet remote-repo/main ./pipelines/20-update-repositories.yml
                git checkout --quiet remote-repo/main ./pipelines/22-sample-deployer-configuration.yml
                git checkout --quiet remote-repo/main ./pipelines/21-update-pipelines.yml
                return_code=$?

                if [[ "$(force)" == "True" ]]; then
                  echo "running git push to ADO with force option"
                  if ! git -c http.extraheader="AUTHORIZATION: bearer $(System.AccessToken)" push --force origin HEAD:$(branch) >> /tmp/$(log) 2>&1
                  then
                     echo -e "$red--- Failed to push ---$reset"
                     exit 1
                  fi
                else
                  git commit -m "Update ADO repository from GitHub $(branch) branch" -a
                  echo "running git push to ADO"
                  if ! git -c http.extraheader="AUTHORIZATION: bearer $(System.AccessToken)" push origin HEAD:$(branch) >> /tmp/$(log) 2>&1
                  then
                     echo -e "$red--- Failed to push ---$reset"
                     exit 1
                  fi

                fi
                # If Pull already failed then keep that error code
                if [ 0 != $return_code ]; then
                  return_code=$?
                fi

                exit $return_code

              displayName:               Update DevOps pipelines
              env:
                SYSTEM_ACCESSTOKEN:      $(System.AccessToken)
              failOnStderr:              true
...


提交更改以将文件保存到存储库并在 Azure DevOps 中创建管道。

通过从“管道”部分选择“新建管道”来创建 Upgrade Pipelines 管道。 选择 Azure Repos Git 作为代码的来源。 将管道配置为使用现有的 Azure Pipelines YAML 文件。 使用以下设置指定管道。

设置
分支 主要
路径 deploy/pipelines/21-update-pipelines.yml
名称 升级管道

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

运行管道以升级所有管道定义。

升级控制平面

控制平面是你需要升级的第一个组件。 若要升级控制平面,请重新运行 Deploy Control Plane 管道或重新运行 deploy_controlplane.sh 脚本。

升级到版本 3.8.1

在执行控制平面升级之前,请运行以下命令。


az login

az account set --subscription <subscription id>    

az vm run-command invoke -g <DeployerResourceGroup> -n <deployerVMName> --command-id RunShellScript --scripts "sudo rm /etc/profile.d/deploy_server.sh"
az vm extension delete -g <DeployerResourceGroup> -n <deployerVMName> -n configure_deployer

该脚本将移除旧的部署程序配置,并允许应用新配置。

专用 DNS 注意事项

如果你从控制平面中使用专用 DNS 区域,请在执行升级之前运行以下命令。


az network private-dns zone create --name privatelink.vaultcore.azure.net --resource-group <SAPLibraryResourceGroup>

代理登录

你还可以将 Azure DevOps 代理配置为使用服务主体登录到 Azure。 将以下变量添加到控制平面管道(通常为 SDAF-MGMT)使用的变量组。

名称
Logon_Using_SPN true

升级代理上的 Terraform

可以通过运行以下脚本升级代理上的 Terraform:


tfversion="1.6.5"

# Terraform installation directories
tf_base=/opt/terraform
tf_dir="${tf_base}/terraform_${tfversion}"
tf_bin="${tf_base}/bin"
tf_zip="terraform_${tfversion}_linux_amd64.zip"

#
# Install terraform for all users
#
sudo mkdir -p \
    "${tf_dir}" \
    "${tf_bin}"
wget -nv -O /tmp/"${tf_zip}" "https://releases.hashicorp.com/terraform/${tfversion}/${tf_zip}"
sudo unzip -o /tmp/"${tf_zip}" -d "${tf_dir}"
sudo ln -vfs "../$(basename "${tf_dir}")/terraform" "${tf_bin}/terraform"

升级部署程序上的 SAP 自动化代码库

可以通过运行以下脚本来升级部署程序虚拟机上的 SAP 自动化代码库:


cd ~/Azure_SAP_Automated_Deployment/sap-automation

git pull

cd ~/Azure_SAP_Automated_Deployment/sap-automation-samples

git pull

升级工作负载区域

工作负载区域是需要升级的第二个组件。 若要升级控制平面,请重新运行 SAP Workload Zone deployment 管道或重新运行 install_workloadzone.sh 脚本。

升级到版本 3.8.1

通过执行以下操作为升级做准备:首先,通过运行以下命令检索专用 DNS 区域资源 ID 和密钥保管库专用终结点名称:


az network private-dns zone show  --name privatelink.vaultcore.azure.net --resource-group <SAPLibraryResourceGroup> --query id --output tsv

az network private-endpoint list  --resource-group <WorkloadZoneResourceGroup> --query "[?contains(name,'keyvault')].{Name:name} | [0] | Name" --output tsv

如果你使用专用终结点,请在执行升级之前运行以下命令来更新专用终结点的 DNS 设置。 将 privateDNSzoneResourceIdkeyvaultEndpointName 占位符替换为在上一步中检索到的值。


az network private-endpoint dns-zone-group create --resource-group <WorkloadZoneResourceGroup> --endpoint-name <keyvaultEndpointName> --name privatelink.vaultcore.azure.net --private-dns-zone <privateDNSzoneResourceId>  --zone-name privatelink.vaultcore.azure.net

工作负载区域和系统部署的代理登录

你还可以将 Azure DevOps 代理配置为使用服务主体登录到 Azure。 将以下变量添加到控制平面管道(通常为 SDAF-DEV)使用的变量组。

名称
Logon_Using_SPN true

下一步