Skip to content

Commit 9bdeddf

Browse files
committed
Fix blocking issues
1 parent bc990c2 commit 9bdeddf

1 file changed

Lines changed: 74 additions & 74 deletions

File tree

articles/sap/automation/configure-devops.md

Lines changed: 74 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ description: Configure Azure DevOps Services for SAP Deployment Automation Frame
44
author: kimforss
55
ms.author: kimforss
66
ms.reviewer: kimforss
7-
ms.date: 03/18/2026
7+
ms.date: 03/19/2026
88
ms.topic: how-to
99
ms.service: sap-on-azure
1010
ms.subservice: sap-automation
@@ -50,73 +50,77 @@ Use this procedure when you want the framework scripts to create the Azure DevOp
5050
1. Update all parameter values so it matches your environment.
5151
1. Run the script. The script opens browser windows for authentication and for tasks in Azure DevOps.
5252

53-
```powershell
54-
# Azure DevOps Configuration
55-
$AzureDevOpsOrganizationUrl = "https://dev.azure.com/ORGANIZATIONNAME"
53+
> [!IMPORTANT]
54+
> Run the following steps on your local workstation. Also ensure that you have the latest Azure CLI installed by running the `az upgrade` command.
5655
57-
# Azure Infrastructure Configuration
58-
$ControlPlaneCode = "MGMT"
59-
$ControlPlaneRegionCode = "SECE"
60-
$Location = "swedencentral"
56+
```powershell
57+
# Azure DevOps Configuration
58+
$AzureDevOpsOrganizationUrl = "https://dev.azure.com/ORGANIZATIONNAME"
6159
62-
$ControlPlaneName = "$ControlPlaneCode-$ControlPlaneRegionCode-DEP01"
60+
# Azure Infrastructure Configuration
61+
$ControlPlaneCode = "MGMT"
62+
$ControlPlaneRegionCode = "SECE"
63+
$Location = "swedencentral"
6364
64-
$AzureDevOpsProjectName = "SDAF-" + $ControlPlaneCode + "-" + $ControlPlaneRegionCode
65+
$ControlPlaneName = "$ControlPlaneCode-$ControlPlaneRegionCode-DEP01"
6566
66-
$ControlPlaneSubscriptionId = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
67-
$TenantId = "yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy"
67+
$AzureDevOpsProjectName = "SDAF-" + $ControlPlaneCode + "-" + $ControlPlaneRegionCode
6868
69-
# SAP Support Credentials
70-
$Env:SUserName = "SXXXXXXXX"
71-
$Env:Password = Read-Host "Please enter your SUserName password" -AsSecureString
69+
$ControlPlaneSubscriptionId = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
70+
$TenantId = "yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy"
7271
73-
$MSIResourceGroupName = "SDAF-MSIs"
74-
# Azure DevOps Agent Configuration
75-
$AgentPoolName = "SDAF-$ControlPlaneCode-$ControlPlaneRegionCode-POOL"
72+
# SAP Support Credentials
73+
$Env:SUserName = "SXXXXXXXX"
74+
$Env:Password = Read-Host "Please enter your SUserName password" -AsSecureString
7675
77-
#Repository information
78-
$repo = "Azure/sap-automation"
79-
$branch = "main"
76+
$MSIResourceGroupName = "SDAF-MSIs"
77+
# Azure DevOps Agent Configuration
78+
$AgentPoolName = "SDAF-$ControlPlaneCode-$ControlPlaneRegionCode-POOL"
8079
81-
Remove-Module SDAFUtilities -ErrorAction SilentlyContinue
82-
# Import required modules
83-
$url="https://raw.githubusercontent.com/$repo/refs/heads/$branch/deploy/scripts/pwsh/Output/SDAFUtilities/SDAFUtilities.psm1"
80+
#Repository information
81+
$repo = "Azure/sap-automation"
82+
$branch = "main"
8483
85-
Write-Host "Downloading SDAFUtilities module from $url" -ForegroundColor Green
84+
Remove-Module SDAFUtilities -ErrorAction SilentlyContinue
8685
87-
Invoke-WebRequest -Uri $url -OutFile "SDAFUtilities.psm1"
88-
Unblock-File -Path ".\SDAFUtilities.psm1"
86+
# Import required modules
87+
$url="https://raw.githubusercontent.com/$repo/refs/heads/$branch/deploy/scripts/pwsh/Output/SDAFUtilities/SDAFUtilities.psm1"
8988
90-
Import-Module ".\SDAFUtilities.psm1"
89+
Write-Host "Downloading SDAFUtilities module from $url" -ForegroundColor Green
9190
92-
# Create Managed Identity
93-
$ManagedServiceIdentity = New-SDAFUserAssignedIdentity `
94-
-ManagedIdentityName "$ControlPlaneName" `
95-
-ResourceGroupName $MSIResourceGroupName `
96-
-SubscriptionId $ControlPlaneSubscriptionId `
97-
-Location $Location `
98-
-Verbose
91+
Invoke-WebRequest -Uri $url -OutFile "SDAFUtilities.psm1"
92+
Unblock-File -Path ".\SDAFUtilities.psm1"
9993
100-
# Create Azure DevOps Project with Managed Identity
101-
New-SDAFADOProject `
102-
-AdoOrganization $AzureDevOpsOrganizationUrl `
103-
-AdoProject $AzureDevOpsProjectName `
104-
-TenantId $TenantId `
105-
-ControlPlaneCode $ControlPlaneCode `
106-
-ControlPlaneSubscriptionId $ControlPlaneSubscriptionId `
107-
-ControlPlaneName $ControlPlaneName `
108-
-AuthenticationMethod 'Managed Identity' `
109-
-AgentPoolName $AgentPoolName `
110-
-ManagedIdentityObjectId $ManagedServiceIdentity.PrincipalId `
111-
-CreateConnections `
112-
-EnableWebApp `
113-
-GitHubRepoName $repo `
114-
-BranchName $branch -Verbose
94+
Import-Module ".\SDAFUtilities.psm1"
11595
116-
Write-Output "Azure DevOps Project '$AzureDevOpsProjectName' created successfully."
117-
Write-Output "Managed Identity Id: $($ManagedServiceIdentity.Id)"
118-
Write-Output "Agent Pool Name: $AgentPoolName"
119-
```
96+
# Create Managed Identity
97+
$ManagedServiceIdentity = New-SDAFUserAssignedIdentity `
98+
-ManagedIdentityName "$ControlPlaneName" `
99+
-ResourceGroupName $MSIResourceGroupName `
100+
-SubscriptionId $ControlPlaneSubscriptionId `
101+
-Location $Location `
102+
-Verbose
103+
104+
# Create Azure DevOps Project with Managed Identity
105+
New-SDAFADOProject `
106+
-AdoOrganization $AzureDevOpsOrganizationUrl `
107+
-AdoProject $AzureDevOpsProjectName `
108+
-TenantId $TenantId `
109+
-ControlPlaneCode $ControlPlaneCode `
110+
-ControlPlaneSubscriptionId $ControlPlaneSubscriptionId `
111+
-ControlPlaneName $ControlPlaneName `
112+
-AuthenticationMethod 'Managed Identity' `
113+
-AgentPoolName $AgentPoolName `
114+
-ManagedIdentityObjectId $ManagedServiceIdentity.PrincipalId `
115+
-CreateConnections `
116+
-EnableWebApp `
117+
-GitHubRepoName $repo `
118+
-BranchName $branch -Verbose
119+
120+
Write-Output "Azure DevOps Project '$AzureDevOpsProjectName' created successfully."
121+
Write-Output "Managed Identity Id: $($ManagedServiceIdentity.Id)"
122+
Write-Output "Agent Pool Name: $AgentPoolName"
123+
```
120124

121125
1. In Azure DevOps, validate that:
122126

@@ -129,9 +133,6 @@ Write-Output "Agent Pool Name: $AgentPoolName"
129133
- Run code directly from GitHub.
130134
- Import and run code from repositories in your Azure DevOps project.
131135

132-
> [!IMPORTANT]
133-
> Run the following steps on your local workstation. Also ensure that you have the latest Azure CLI installed by running the `az upgrade` command.
134-
135136
### Configure artifacts for a new workload zone
136137

137138
Run this procedure after the control plane project is available.
@@ -206,7 +207,7 @@ New-SDAFADOWorkloadZone `
206207
-Verbose
207208
```
208209

209-
1. In Azure DevOps, confirm that the workload zone variable group and service connection were created.
210+
In Azure DevOps, confirm that the workload zone variable group and service connection were created.
210211

211212
### Create a sample control plane configuration
212213

@@ -252,17 +253,17 @@ Only do this step if direct import is unavailable.
252253
1. In **Repos** > **Files**, select **Clone**.
253254
1. Clone the repository to a local folder.
254255

255-
For more information, see [Clone a repository](/azure/devops/repos/git/clone?view=azure-devops#clone-an-azure-repos-git-repo&preserve-view=true).
256+
:::image type="content" source="./media/devops/automation-repo-clone.png" alt-text="Screenshot of Azure DevOps with a repository ready for cloning.":::
256257

257-
:::image type="content" source="./media/devops/automation-repo-clone.png" alt-text="Screenshot of Azure DevOps with a repository ready for cloning.":::
258+
For more information, see [Clone a repository](/azure/devops/repos/git/clone?view=azure-devops#clone-an-azure-repos-git-repo&preserve-view=true).
258259

259260
### Manually import the repository content by using a local clone
260261

261262
1. Download [sap-automation-samples](https://github.com/Azure/sap-automation-samples) as a `.zip` file.
262263
1. Extract the archive and copy the content into the root of your local clone.
263264
1. Open the local folder in Visual Studio Code and verify that source control shows pending changes.
264265

265-
:::image type="content" source="./media/devops/automation-vscode-changes.png" alt-text="Screenshot of Visual Studio Code showing pending source control changes after files are copied.":::
266+
:::image type="content" source="./media/devops/automation-vscode-changes.png" alt-text="Screenshot of Visual Studio Code showing pending source control changes after files are copied.":::
266267

267268
1. Commit the imported content, for example with message **Import from GitHub**.
268269
1. Select **Sync Changes** to push changes back to Azure Repos.
@@ -289,7 +290,7 @@ To pull the code from GitHub, you need a GitHub service connection. For more inf
289290

290291
1. In Azure DevOps, go to **Project Settings** > **Pipelines** > **Service connections**.
291292

292-
:::image type="content" source="./media/devops/automation-create-service-connection.png" alt-text="Screenshot that shows how to create a service connection for GitHub in Azure DevOps.":::
293+
:::image type="content" source="./media/devops/automation-create-service-connection.png" alt-text="Screenshot that shows how to create a service connection for GitHub in Azure DevOps.":::
293294

294295
1. Select **GitHub** as the service connection type.
295296
1. In **OAuth Configuration**, select **Azure Pipelines**.
@@ -302,8 +303,7 @@ To pull the code from GitHub, you need a GitHub service connection. For more inf
302303

303304
The automation framework can provision a web app as part of the control plane. If you want to use the web app, create an app registration first.
304305

305-
1. Open Azure Cloud Shell.
306-
1. Run the following commands for your shell environment.
306+
Open an Azure Cloud Shell, then run the following commands for your shell environment:
307307

308308
# [Linux](#tab/linux)
309309

@@ -343,7 +343,7 @@ del manifest.json
343343

344344
---
345345

346-
1. Store the app registration ID and generated client secret in a secure location, such as Azure Key Vault or Azure DevOps secret variables. Don't store credentials in plain text files, screenshots, or source control.
346+
Store the app registration ID and generated client secret in a secure location, such as Azure Key Vault or Azure DevOps secret variables. Don't store credentials in plain text files, screenshots, or source control.
347347

348348
## Create Azure Pipelines
349349

@@ -491,7 +491,7 @@ Most of the pipelines add files to the Azure Repos and therefore require pull pe
491491
1. Open the source repository **Security** tab.
492492
1. Grant **Contribute** permission to `Build Service`.
493493

494-
:::image type="content" source="./media/devops/automation-repo-permissions.png" alt-text="Screenshot of Azure DevOps repository security settings with Build Service permissions.":::
494+
:::image type="content" source="./media/devops/automation-repo-permissions.png" alt-text="Screenshot of Azure DevOps repository security settings with Build Service permissions.":::
495495

496496
## Deploy the control plane
497497

@@ -509,9 +509,9 @@ To connect to the deployer:
509509

510510
1. Sign in to the [Azure portal](https://portal.azure.com).
511511

512-
1. Go to the resource group that contains the deployer virtual machine.
512+
1. Go to the resource group that contains the deployer virtual machine (VM).
513513

514-
1. Connect to the virtual machine by using Azure Bastion.
514+
1. Connect to the VM by using Azure Bastion.
515515

516516
1. The default username is **azureadm**.
517517

@@ -523,7 +523,7 @@ To connect to the deployer:
523523

524524
1. From the list of secrets, select the secret that ends with **-sshkey**.
525525

526-
1. Connect to the virtual machine.
526+
1. Connect to the VM.
527527

528528
To configure the deployer, run the following script:
529529

@@ -580,12 +580,12 @@ az ad app update --id $TF_VAR_app_registration_app_id --web-home-page-url https:
580580

581581
---
582582

583-
1. Grant **Reader** at subscription scope to the app service system-assigned managed identity:
583+
Grant **Reader** at subscription scope to the app service system-assigned managed identity:
584584

585-
- Open the app service resource.
586-
- Select **Identity**.
587-
- On **System assigned**, select **Azure role assignments** > **Add role assignment**.
588-
- Select scope **Subscription** and role **Reader**, then select **Save**.
585+
- Open the app service resource.
586+
- Select **Identity**.
587+
- On **System assigned**, select **Azure role assignments** > **Add role assignment**.
588+
- Select scope **Subscription** and role **Reader**, then select **Save**.
589589

590590
You should now be able to visit the web app and use it to deploy SAP workload zones and SAP system infrastructure.
591591

0 commit comments

Comments
 (0)