你当前正在访问 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
脚本。
在执行控制平面升级之前,请运行以下命令。
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 区域,请在执行升级之前运行以下命令。
az network private-dns zone create --name privatelink.vaultcore.azure.net --resource-group <SAPLibraryResourceGroup>
你还可以将 Azure DevOps 代理配置为使用服务主体登录到 Azure。 将以下变量添加到控制平面管道(通常为 SDAF-MGMT
)使用的变量组。
名称 | 值 |
---|---|
Logon_Using_SPN | true |
可以通过运行以下脚本升级代理上的 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 自动化代码库:
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
脚本。
通过执行以下操作为升级做准备:首先,通过运行以下命令检索专用 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 设置。 将 privateDNSzoneResourceId
和 keyvaultEndpointName
占位符替换为在上一步中检索到的值。
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 |