다음을 통해 공유


Azure DevOps Services에서 SAP Deployment Automation Framework 사용

Azure DevOps는 인프라 배포 및 구성 및 SAP 설치 작업을 수행하기 위해 실행할 수 있는 파이프라인을 제공하여 배포 프로세스를 간소화합니다.

Azure Repos를 사용하여 구성 파일을 저장하고 Azure Pipelines를 사용하여 인프라 및 SAP 애플리케이션을 배포하고 구성할 수 있습니다.

Azure DevOps Services에 등록

Azure DevOps Services를 사용하려면 Azure DevOps 조직이 필요합니다. 조직은 관련 프로젝트 그룹을 연결하는 데 사용됩니다. 회사 또는 학교 계정을 사용하여 조직을 Microsoft Entra ID에 자동으로 연결합니다. 계정을 만들려면 Azure DevOps를 열고 로그인하거나 새 계정을 만듭니다.

SAP Deployment Automation Framework용 Azure DevOps Services 구성

다음 스크립트를 사용하여 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 Firewall 및 Azure Bastion을 배포할지도 제어할 수 있습니다.

SAP 배포 자동화 프레임워크용 Azure DevOps Services 수동 구성

SAP Deployment Automation Framework용 Azure DevOps Services를 수동으로 구성할 수 있습니다.

새 프로젝트 만들기

Azure Repos를 사용하여 sap-automation GitHub 리포지토리 및 환경 구성 파일에서 코드를 저장할 수 있습니다.

Azure DevOps를 열고 새 프로젝트를 선택하고 프로젝트 세부 정보를 입력하여 새 프로젝트를 만듭니다. 이 프로젝트에는 배포 작업을 수행하기 위한 Azure Repos 소스 제어 리포지토리 및 Azure Pipelines가 포함되어 있습니다.

새 프로젝트가 표시되지 않으면 조직에서 새 프로젝트를 만들 수 있는 권한이 있는지 확인합니다.

프로젝트의 URL을 기록합니다.

리포지토리 가져오기

먼저 SAP Deployment Automation Framework Bootstrap GitHub 리포지토리를 Azure Repos로 가져옵니다.

리포지토리 섹션으로 이동하여 리포지토리 가져오기를 선택합니다. 리포지토리를 https://github.com/Azure/sap-automation-bootstrap.git Azure DevOps로 가져옵니다. 자세한 내용은 리포지토리 가져오기를 참조하세요.

리포지토리를 가져올 수 없는 경우 리포지토리를 수동으로 만들 수 있습니다. 그런 다음 SAP 배포 자동화 프레임워크 GitHub 부트스트랩 리포지토리에서 해당 리포지토리로 콘텐츠를 가져올 수 있습니다.

수동 가져오기를 위한 리포지토리 만들기

리포지토리를 직접 가져올 수 없는 경우에만 이 단계를 수행합니다.

작업 영역 리포지토리를 만들려면 리포지토리 섹션의 프로젝트 설정에서 만들기를 선택합니다.

리포지토리를 선택하고 , Git을 입력하고, 리포지토리의 이름을 제공합니다. 예를 들어 SAP 구성 리포지토리를 사용합니다.

리포지토리 복제

콘텐츠의 보다 포괄적인 편집 기능을 제공하기 위해 리포지토리를 로컬 폴더에 복제하고 콘텐츠를 로컬로 편집할 수 있습니다.

리포지토리를 로컬 폴더에 복제하려면 포털의 리포지토리 섹션에서 파일에서 복제를 선택합니다. 자세한 내용은 리포지토리 복제 방법에 대한 안내를 참조하세요.

리포지토리를 복제하는 방법을 보여 주는 스크린샷

로컬 클론을 사용하여 리포지토리 콘텐츠를 수동으로 가져옵니다.

SAP Deployment Automation Framework 리포지토리에서 콘텐츠를 수동으로 다운로드하고 Azure DevOps 리포지토리의 로컬 복제본에 추가할 수도 있습니다.

리포지토리로 https://github.com/Azure/SAP-automation-samples 이동하여 리포지토리 콘텐츠를 .zip 파일로 다운로드합니다. 코드를 선택하고 ZIP 다운로드를 선택합니다.

.zip 파일의 콘텐츠를 로컬 클론의 루트 폴더로 복사합니다.

Visual Studio Code에서 로컬 폴더를 엽니다. 소스 제어 아이콘 옆에 있는 표시기를 통해 변경 내용을 동기화해야 한다고 보셔야 합니다.

소스 코드가 변경되었음을 보여 주는 스크린샷

소스 제어 아이콘을 선택하고 변경 내용에 대한 메시지를 제공합니다. 예를 들어 GitHub에서 가져오기를 입력하고 Ctrl+Enter를 선택하여 변경 내용을 커밋합니다. 다음으로 변경 내용 동기화 를 선택하여 변경 내용을 리포지토리로 다시 동기화합니다.

Terraform 및 Ansible 코드의 원본 선택

GitHub에서 직접 SAP Deployment Automation Framework 코드를 실행하거나 로컬로 가져올 수 있습니다.

로컬 리포지토리에서 코드 실행

로컬 Azure DevOps 프로젝트에서 SAP Deployment Automation Framework 코드를 실행하려면 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 서비스 연결이 필요합니다. 자세한 내용은 서비스 연결 관리를 참조하세요.

서비스 연결을 만들려면 프로젝트 설정 으로 이동하고 파이프라인 섹션에서 서비스 연결로 이동합니다.

GitHub에 대한 서비스 연결을 만드는 방법을 보여 주는 스크린샷

GitHub를 서비스 연결 유형으로 선택합니다. OAuth 구성 드롭다운에서 Azure Pipelines를 선택합니다.

GitHub에 로그인하려면 [권한 부여 ]를 선택합니다.

서비스 연결 이름(예: GitHub에 대한 SDAF 연결)을 입력합니다. 모든 파이프라인에 대한 액세스 권한 부여 확인란이 선택되어 있는지 확인합니다. 저장을 선택하여 서비스 연결을 저장합니다.

웹앱 설정

자동화 프레임워크는 필요에 따라 SAP 워크로드 영역 및 시스템 구성 파일을 지원하기 위해 웹앱을 컨트롤 플레인의 일부로 프로비전합니다. 웹앱을 사용하려면 먼저 인증을 위해 앱 등록을 만들어야 합니다. 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 파일로 구현됩니다. 리포지토리의 배포/파이프라인 폴더에 저장됩니다.

컨트롤 플레인 배포 파이프라인

컨트롤 플레인 배포 파이프라인을 만듭니다. 파이프라인 섹션에서 새 파이프라인을 선택합니다. 코드의 소스로 Azure Repos Git 을 선택합니다. 기존 Azure Pipelines YAML 파일을 사용하도록 파이프라인을 구성합니다. 다음 설정을 사용하여 파이프라인을 지정합니다.

설정 가치
레포 "루트 리포지토리"(프로젝트 이름과 동일)
지점 메인
경로 pipelines/01-deploy-control-plane.yml
이름 컨트롤 플레인 배포

파이프라인을 저장하세요. 저장을 보려면 실행 옆에 있는 펼침 단추를 선택합니다. 파이프라인 섹션으로 이동하여 파이프라인을 선택합니다. 오른쪽의 줄임표 메뉴에서 이름 바꾸기/이동을 선택하고 파이프라인 이름을 컨트롤 플레인 배포로 바꿉니다.

SAP 워크로드 영역 배포 파이프라인

SAP 워크로드 영역 파이프라인을 만듭니다. 파이프라인 섹션에서 새 파이프라인을 선택합니다. 코드의 소스로 Azure Repos Git 을 선택합니다. 기존 Azure Pipelines YAML 파일을 사용하도록 파이프라인을 구성합니다. 다음 설정을 사용하여 파이프라인을 지정합니다.

설정 가치
레포 "루트 리포지토리"(프로젝트 이름과 동일)
지점 메인
경로 pipelines/02-sap-workload-zone.yml
이름 SAP 워크로드 존 배포

파이프라인을 저장하세요. 저장을 보려면 실행 옆에 있는 펼침 단추를 선택합니다. 파이프라인 섹션으로 이동하여 파이프라인을 선택합니다. 오른쪽의 줄임표 메뉴에서 이름 바꾸기/이동을 선택하고 파이프라인 이름을 SAP 워크로드 영역 배포로 바꿉니다.

SAP 시스템 배포 파이프라인

SAP 시스템 배포 파이프라인을 만듭니다. 파이프라인 섹션에서 새 파이프라인을 선택합니다. 코드의 소스로 Azure Repos Git 을 선택합니다. 기존 Azure Pipelines YAML 파일을 사용하도록 파이프라인을 구성합니다. 다음 설정을 사용하여 파이프라인을 지정합니다.

설정 가치
레포 "루트 리포지토리"(프로젝트 이름과 동일)
지점 메인
경로 pipelines/03-sap-system-deployment.yml
이름 SAP 시스템 배포(인프라)

파이프라인을 저장하세요. 저장을 보려면 실행 옆에 있는 펼침 단추를 선택합니다. 파이프라인 섹션으로 이동하여 파이프라인을 선택합니다. 오른쪽의 줄임표 메뉴에서 이름 바꾸기/이동을 선택하고 파이프라인 이름을 SAP 시스템 배포(인프라)로 바꿉니다.

SAP 소프트웨어 취득 파이프라인

SAP 소프트웨어 취득 파이프라인을 만듭니다. 파이프라인 섹션에서 새 파이프라인을 선택합니다. 코드의 소스로 Azure Repos Git 을 선택합니다. 기존 Azure Pipelines YAML 파일을 사용하도록 파이프라인을 구성합니다. 다음 설정을 사용하여 파이프라인을 지정합니다.

설정 가치
레포 "루트 리포지토리"(프로젝트 이름과 동일)
지점 메인
경로 deploy/pipelines/04-sap-software-download.yml
이름 SAP 소프트웨어 취득

파이프라인을 저장하세요. 저장을 보려면 실행 옆에 있는 펼침 단추를 선택합니다. 파이프라인 섹션으로 이동하여 파이프라인을 선택합니다. 오른쪽의 줄임표 메뉴에서 이름 바꾸기/이동을 선택하고 파이프라인 이름을 SAP 소프트웨어 취득으로 바꿉니다.

SAP 구성 및 소프트웨어 설치 파이프라인

SAP 구성 및 소프트웨어 설치 파이프라인을 만듭니다. 파이프라인 섹션에서 새 파이프라인을 선택합니다. 코드의 소스로 Azure Repos Git 을 선택합니다. 기존 Azure Pipelines YAML 파일을 사용하도록 파이프라인을 구성합니다. 다음 설정을 사용하여 파이프라인을 지정합니다.

설정 가치
레포 "루트 리포지토리"(프로젝트 이름과 동일)
지점 메인
경로 pipelines/05-DB-and-SAP-installation.yml
이름 구성 및 SAP 설치

파이프라인을 저장하세요. 저장을 보려면 실행 옆에 있는 펼침 단추를 선택합니다. 파이프라인 섹션으로 이동하여 파이프라인을 선택합니다. 오른쪽의 줄임표 메뉴에서 이름 바꾸기/이동을 선택하고 파이프라인 이름을 SAP 구성 및 소프트웨어 설치로 바꿉니다.

배포 해제 파이프라인

배포 제거 파이프라인을 만듭니다. 파이프라인 섹션에서 새 파이프라인을 선택합니다. 코드의 소스로 Azure Repos Git 을 선택합니다. 기존 Azure Pipelines YAML 파일을 사용하도록 파이프라인을 구성합니다. 다음 설정을 사용하여 파이프라인을 지정합니다.

설정 가치
레포 "루트 리포지토리"(프로젝트 이름과 동일)
지점 메인
경로 pipelines/10-remover-terraform.yml
이름 배포 제거

파이프라인을 저장하세요. 저장을 보려면 실행 옆에 있는 펼침 단추를 선택합니다. 파이프라인 섹션으로 이동하여 파이프라인을 선택합니다. 오른쪽의 줄임표 메뉴에서 이름 바꾸기/이동을 선택하고 파이프라인 이름을 배포 제거로 바꿉니다.

컨트롤 플레인 제거 파이프라인

컨트롤 플레인 배포 제거 파이프라인을 만듭니다. 파이프라인 섹션에서 새 파이프라인을 선택합니다. 코드의 소스로 Azure Repos Git 을 선택합니다. 기존 Azure Pipelines YAML 파일을 사용하도록 파이프라인을 구성합니다. 다음 설정을 사용하여 파이프라인을 지정합니다.

설정 가치
레포 "루트 리포지토리"(프로젝트 이름과 동일)
지점 메인
경로 pipelines/12-remove-control-plane.yml
이름 컨트롤 플레인 제거

파이프라인을 저장하세요. 저장을 보려면 실행 옆에 있는 펼침 단추를 선택합니다. 파이프라인 섹션으로 이동하여 파이프라인을 선택합니다. 오른쪽의 줄임표 메뉴에서 이름 바꾸기/이동을 선택하고 파이프라인 이름을 컨트롤 플레인 제거로 바꿉니다.

Azure Resource Manager를 사용하여 배포 제거 파이프라인

배포 제거 Azure Resource Manager 파이프라인을 만듭니다. 파이프라인 섹션에서 새 파이프라인을 선택합니다. 코드의 소스로 Azure Repos Git 을 선택합니다. 기존 Azure Pipelines YAML 파일을 사용하도록 파이프라인을 구성합니다. 다음 설정을 사용하여 파이프라인을 지정합니다.

설정 가치
레포 "루트 리포지토리"(프로젝트 이름과 동일)
지점 메인
경로 pipelines/11-remover-arm-fallback.yml
이름 Azure Resource Manager를 사용하여 배포 제거

파이프라인을 저장하세요. 저장을 보려면 실행 옆에 있는 펼침 단추를 선택합니다. 파이프라인 섹션으로 이동하여 파이프라인을 선택합니다. 오른쪽의 줄임표 메뉴에서 이름 바꾸기/이동을 선택하고 ARM 프로세서를 사용하여 배포 제거로 파이프라인 이름을 바꿉니다.

비고

이 파이프라인만 최후의 수단으로 사용합니다. 리소스 그룹만 제거하면 재배포가 복잡해질 수 있는 잔재가 남습니다.

리포지토리 업데이트 파이프라인

리포지토리 업데이트 관리자 파이프라인을 만듭니다. 파이프라인 섹션에서 새 파이프라인을 선택합니다. 코드의 소스로 Azure Repos Git 을 선택합니다. 기존 Azure Pipelines YAML 파일을 사용하도록 파이프라인을 구성합니다. 다음 설정을 사용하여 파이프라인을 지정합니다.

설정 가치
레포 "루트 리포지토리"(프로젝트 이름과 동일)
지점 메인
경로 pipelines/20-update-ado-repository.yml
이름 리포지토리 업데이트기

파이프라인을 저장하세요. 저장을 보려면 실행 옆에 있는 펼침 단추를 선택합니다. 파이프라인 섹션으로 이동하여 파이프라인을 선택합니다. 오른쪽의 줄임표 메뉴에서 이름 바꾸기/이동을 선택하고 파이프라인 이름을 리포지토리 업데이트 관리자로 바꿉니다.

이 파이프라인은 사용하려는 sap-automation 리포지토리에 업데이트가 있을 때 사용해야 합니다.

Visual Studio Marketplace에서 정리 작업 가져오기

파이프라인은 사용자 지정 작업을 사용하여 배포 후 정리 작업을 수행합니다. 빌드 후 정리에서 사용자 지정 작업을 설치할 수 있습니다. 파이프라인을 실행하기 전에 Azure DevOps 조직에 설치합니다.

자체 호스팅 에이전트에 대한 준비

  1. 조직 설정으로 이동하여 에이전트 풀을 만듭니다. 파이프라인 섹션에서 에이전트 풀>풀 추가를 선택합니다. 풀 유형으로 자체 호스팅 을 선택합니다. 컨트롤 플레인 환경에 맞게 풀 이름을 지정합니다. 예를 들면 MGMT-WEEU-POOL를 사용합니다. 모든 파이프라인에 대한 액세스 권한 부여가 선택되어 있는지 확인하고 만들기를 선택하여 풀을 만듭니다.

  2. Azure DevOps 조직에서 사용하려는 사용자 계정으로 로그인합니다.

  3. 홈페이지에서 사용자 설정을 열고 개인용 액세스 토큰을 선택합니다.

    개인용 액세스 토큰 생성을 보여 주는 다이어그램

  4. 다음 설정을 사용하여 개인용 액세스 토큰을 만듭니다.

    • 에이전트 풀: 읽기 및 관리를 선택합니다.

    • 빌드: 읽기 및 실행을 선택합니다.

    • 코드: 읽기 및 쓰기를 선택합니다.

    • 변수 그룹: 읽기, 만들기 및 관리를 선택합니다.

      만든 토큰 값을 적어 씁니다.

    개인 액세스 토큰의 특성을 보여 주는 다이어그램

변수 정의

배포 파이프라인은 변수 그룹을 사용하여 정의된 미리 정의된 매개 변수 값 집합을 사용하도록 구성됩니다.

공통 변수

공통 변수는 모든 배포 파이프라인에서 사용됩니다. 라는 변수 그룹에 SDAF-General저장됩니다.

파이프라인 섹션의 SDAF-General 페이지를 사용하여 명명 된 새 변수 그룹을 만듭니. 다음 변수를 추가합니다.

변수 가치 비고
배포_구성_경로 작업 영역 샘플 구성을 테스트하려면 WORKSPACES 대신 사용합니다 samples/WORKSPACES .
지점 메인
S-Username <SAP Support user account name>
S-암호 <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-MGMT, SDAF-DEV, 그리고 SDAF-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 연결 이름 (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 펜싱 에이전트용 펜싱 에이전트에 서비스 주체를 사용하는 고가용성 배포에 필요합니다.
<Personal Access Token> 이전 단계에서 정의한 개인 토큰을 사용합니다.
수영장 <Agent Pool name> 이 환경에 사용할 에이전트 풀입니다.
앱_등록_앱_ID App registration application ID 웹앱을 배포하는 경우 필수입니다.
웹 앱 클라이언트 비밀키 App registration password 웹앱을 배포하는 경우 필수입니다.
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.

변수를 저장합니다.

파이프라인 권한을 사용하여 모든 파이프라인에 대한 권한을 할당해야 합니다.

웹앱을 사용하는 경우 빌드 서비스에 최소한 참가 권한이 있는지 확인합니다.

복제 기능을 사용하여 다음 환경 변수 그룹을 만들 수 있습니다. APP_REGISTRATION_APP_ID, WEB_APP_CLIENT_SECRET, SDAF_GENERAL_GROUP_ID, WORKLOADZONE_PIPELINE_ID 및 SYSTEM_PIPELINE_ID SDAF-MGMT 그룹에만 필요합니다.

서비스 연결 만들기

Azure 리소스를 제거하려면 Azure Resource Manager 서비스 연결이 필요합니다. 자세한 내용은 서비스 연결 관리를 참조하세요.

서비스 연결을 만들려면 프로젝트 설정으로 이동합니다. 파이프라인 섹션에서 서비스 연결을 선택합니다.

서비스 연결을 만드는 방법을 보여 주는 스크린샷

서비스 연결 유형으로 Azure Resource Manager 를 선택하고 인증 방법으로 서비스 주체(수동) 를 선택합니다. 대상 구독(일반적으로 컨트롤 플레인 구독)을 입력합니다. 서비스 주체 세부 정보를 입력합니다. 확인을 선택하여 자격 증명의 유효성을 검사합니다. 서비스 주체를 만드는 방법에 대한 자세한 내용은 서비스 주체 만들기를 참조하세요.

예를 들어 서비스 연결 이름을 입력합니다 Connection to MGMT subscription. 모든 파이프라인에 대한 액세스 권한 부여 확인란이 선택되어 있는지 확인합니다. 확인 및 저장을 선택하여 서비스 연결을 저장합니다.

권한

대부분의 파이프라인은 Azure Repos에 파일을 추가하므로 끌어오기 권한이 필요합니다. 프로젝트 설정리포지토리 섹션에서 소스 코드 리포지토리의 보안 탭을 선택하고 참가 권한을 할당합니다Build Service.

리포지토리 권한을 보여 주는 스크린샷.

컨트롤 플레인 배포

새로 만든 파이프라인은 기본 보기에 표시되지 않을 수 있습니다. 최근 탭을 선택하고 모든 탭으로 돌아가서 새 파이프라인을 봅니다.

컨트롤 플레인 배포 파이프라인을 선택하고 배포자 및 SAP 라이브러리의 구성 이름을 입력합니다. 실행을 선택하여 컨트롤 플레인을 배포합니다. 구성 웹앱을 설정하려면 구성 웹 애플리케이션 배포 확인란을 선택해야 합니다.

Azure DevOps Services 자체 호스팅 에이전트를 수동으로 구성

수동 구성은 Azure DevOps Services 에이전트가 자동으로 구성되지 않은 경우에만 필요합니다. 계속하기 전에 에이전트 풀이 비어 있는지 확인합니다.

배포자에 연결하려면 다음을 수행합니다.

  1. Azure Portal에 로그인합니다.

  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 를 선택하고 이전 단계의 토큰 값을 입력합니다.

메시지가 표시되면 이전 단계에서 만든 애플리케이션 풀 이름을 입력합니다. 기본 에이전트 이름 및 기본 작업 폴더 이름을 적용합니다. 이제 에이전트가 구성되고 시작됩니다.

컨트롤 플레인 웹 애플리케이션 배포

컨트롤 플레인 배포 파이프라인을 deploy the web app infrastructure 실행할 때 매개 변수를 선택하면 웹앱을 호스팅하는 데 필요한 인프라가 프로비전됩니다. 웹앱 배포 파이프라인은 애플리케이션의 소프트웨어를 해당 인프라에 게시합니다.

배포가 완료될 때까지 기다립니다. 확장 탭 선택하고 지침에 따라 구성을 완료합니다. 앱 등록에 reply-url 대한 값을 업데이트합니다.

컨트롤 플레인 파이프라인을 실행한 결과 필요한 웹앱 URL의 일부가 환경별 변수 그룹에 명명 WEBAPP_URL_BASE 된 변수에 저장됩니다. 언제든지 다음 명령을 사용하여 등록된 애플리케이션 웹앱의 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 시스템 할당 관리 ID에 판독기 권한을 부여해야 합니다. 앱 서비스 리소스로 이동합니다. 왼쪽에서 ID를 선택합니다. 시스템 할당 탭에서 Azure 역할 할당> 추가를 선택합니다. 구독을 범위로 선택하고 리더를 역할로 선택합니다. 그런 다음 저장을 선택합니다. 이 단계가 없으면 웹앱 드롭다운 기능이 작동하지 않습니다.

이제 웹앱을 방문하여 SAP 워크로드 영역 및 SAP 시스템 인프라를 배포하는 데 사용할 수 있습니다.

다음 단계