Azure Pipelines를 사용하여 Azure Stack Hub App Service 배포

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

이 문서에서는 Azure Pipelines를 사용하여 Azure Stack Hub instance 앱 서비스에 애플리케이션을 배포하기 위한 CI/CD 파이프라인을 설정하는 방법을 안내합니다.

이 문서에서는 다음을 만들거나 유효성을 검사하는 방법을 알아볼 수 있습니다.

  • 파이프라인에 대한 Azure Stack Hub SPN(서비스 주체) 자격 증명.
  • Azure Stack Hub의 웹앱이 instance.
  • Azure Stack Hub에 대한 서비스 연결 instance.
  • 앱에 배포할 앱 코드가 있는 리포지토리

필수 구성 요소

  • App Service RP를 사용하도록 설정된 Azure Stack Hub instance 대한 액세스.
  • Azure Stack Hub 테넌트와 연결된 Azure DevOps 솔루션 입니다.

SPN 만들기 또는 유효성 검사

SPN은 Azure 외부의 프로세스가 리소스에 연결하고 상호 작용할 수 있도록 역할 기반 자격 증명을 제공합니다. Azure DevOps 파이프라인과 함께 사용하려면 기여자 액세스 권한이 있는 SPN과 이러한 지침에 지정된 특성이 필요합니다.

Azure Stack Hub의 사용자인 경우 SPN을 만들 수 있는 권한이 없습니다. 클라우드 운영자에게 이 주체를 요청해야 합니다. 클라우드 운영자인 경우 SPN을 만들거나 클라우드 운영자가 제공하는 워크플로에서 SPN을 사용하는 개발자인 경우 SPN의 유효성을 검사할 수 있도록 여기에 지침이 제공됩니다.

클라우드 운영자는 Azure CLI를 사용하여 SPN을 만들어야 합니다.

다음 코드 조각은 Azure Stack Hub용 Azure CLI와 함께 PowerShell 프롬프트를 사용하여 Windows 머신에 대해 작성됩니다. Linux 컴퓨터 및 bash에서 CLI를 사용하는 경우 줄 확장을 제거하거나 로 \바꿉니다.

  1. SPN을 만드는 데 사용되는 다음 매개 변수의 값을 준비합니다.

    매개 변수 예제 설명
    endpoint-resource-manager "https://management.orlando.azurestack.corp.microsoft.com" 리소스 관리 엔드포인트입니다.
    접미사 스토리지 엔드포인트 "orlando.azurestack.corp.microsoft.com" 스토리지 계정의 엔드포인트 접미사입니다.
    suffix-keyvault-dns ".vault.orlando.azurestack.corp.microsoft.com" Key Vault 서비스 dns 접미사입니다.
    endpoint-active-directory-graph-resource-id "https://graph.windows.net/" Active Directory 리소스 ID입니다.
    endpoint-sql-management https://notsupported sql Server 관리 엔드포인트입니다. https://notsupported
    profile 2019-03-01-hybrid 이 클라우드에 사용할 프로필입니다.
  2. Windows PowerShell 또는 Bash와 같은 명령줄 도구를 열고 로그인합니다. 다음 명령을 사용합니다.

    az login
    
  3. register 기존 환경을 사용하는 경우 새 환경에 대한 명령 또는 update 명령을 사용합니다. 다음 명령을 사용합니다.

    az cloud register `
        -n "AzureStackUser" `
        --endpoint-resource-manager "https://management.<local>.<FQDN>" `
        --suffix-storage-endpoint ".<local>.<FQDN>" `
        --suffix-keyvault-dns ".vault.<local>.<FQDN>" `
        --endpoint-active-directory-graph-resource-id "https://graph.windows.net/" `
        --endpoint-sql-management https://notsupported  `
        --profile 2019-03-01-hybrid
    
  4. SPN에 사용할 구독 ID 및 리소스 그룹을 가져옵니다.

  5. 구독 ID 및 리소스 그룹을 사용하여 다음 명령을 사용하여 SPN을 만듭니다.

    az ad sp create-for-rbac --name "myApp" --role contributor `
        --scopes /subscriptions/{subscription-id}/resourceGroups/{resource-group} `
        --sdk-auth
    

    클라우드 운영자 권한이 없는 경우 클라우드 운영자가 제공한 SPN으로 로그인할 수도 있습니다. 클라이언트 ID, 비밀 및 테넌트 ID가 필요합니다. 이러한 값을 사용하면 다음 Azure CLI 명령을 사용하여 서비스 연결을 만드는 데 필요한 값이 포함된 JSON 개체를 만들 수 있습니다.

    az login --service-principal -u "<client-id>" -p "<secret>" --tenant "<tenant-ID>" --allow-no-subscriptions
    az account show
    
  6. 결과 JSON 개체를 확인합니다. JSON 개체를 사용하여 서비스 연결을 만듭니다. JSON 개체에는 다음 특성이 있어야 합니다.

    {
      "environmentName": "<Environment name>",
      "homeTenantId": "<Tenant ID for the SPN>",
      "id": "<Application ID for the SPN>",
      "isDefault": true,
      "managedByTenants": [],
      "name": "<Tenant name>",
      "state": "Enabled",
      "tenantId": "<Tenant ID for the SPN>",
      "user": {
        "name": "<User email address>",
        "type": "user"
      }
    }
    

웹앱 대상 만들기

  1. Azure Stack Hub 포털에 로그인합니다.
  2. 리소스 만들기>웹 + 모바일>웹앱을 선택합니다.
  3. 구독을 선택합니다.
  4. 리소스 그룹을 만들거나 선택합니다.
  5. 앱의 이름을 입력합니다. 예를 들어 앱의 이름은 앱의 URL에 표시됩니다. yourappname.appservice.<region>.<FQDN>
  6. 앱에 대한 런타임 스택 을 선택합니다. 런타임은 웹앱에 사용하려는 코드와 일치해야 합니다.
  7. 런타임 및 앱을 호스트할 OS(운영 체제 )를 선택합니다.
  8. Azure Stack Hub instance 대한 지역을 선택하거나 입력합니다.
  9. Azure Stack Hub instance, 지역 및 앱 OS에 따라 계획을 선택합니다.
  10. 검토 + 생성를 선택합니다.
  11. 웹앱을 검토합니다. 만들기를 선택합니다.
  12. 리소스로 이동을 선택합니다.
  13. 앱 이름을 기록해 둡다. 리포지토리에서 파이프라인을 정의하는 yml 문서에 이름을 추가합니다.

서비스 연결 만들기

서비스 연결을 만듭니다. SPN의 값과 Azure Stack Hub 구독의 이름이 필요합니다.

  1. Azure DevOps organization 로그인한 다음 프로젝트로 이동합니다.

  2. 프로젝트 설정을 선택한 다음 서비스 연결을 선택합니다.

  3. 서비스 연결>새 서비스 연결을 선택합니다.

  4. Azure Resource Manager 선택한 다음, 다음을 선택합니다.

  5. 서비스 주체(수동)를 선택합니다.

  6. 환경에서Azure Stack을 선택합니다.

  7. 양식을 입력한 다음 확인 및 저장을 선택합니다.

  8. 서비스 연결에 이름을 지정합니다. yaml 파이프라인을 만들려면 서비스 연결 이름이 필요합니다.

    Azure Stack Hub에 대한 서비스 연결 만들기

리포지토리 만들기 및 파이프라인 추가

  1. 리포지토리에 웹앱 코드를 추가하지 않은 경우 지금 추가합니다.

  2. 리포지토리를 엽니다. 리포지토리를 선택하고 찾아보기를 선택합니다.

  3. 파이프라인 선택

  4. 새 파이프라인을 선택합니다.

  5. Azure Repos Git를 선택합니다.

  6. 리포지토리를 선택합니다.

  7. 시작 파이프라인을 선택합니다.

  8. 리포지토리로 다시 이동하여 를 azure-pipelines.yml엽니다.

  9. 다음 yaml을 추가합니다.

    # Starter pipeline
    # Start with a minimal pipeline that you can customize to build and deploy your code.
    # Add steps that build, run tests, deploy, and more:
    # https://aka.ms/yaml
    trigger:
    - main
    variables:
      azureSubscription: '<your connection name>'
      VSTS_ARM_REST_IGNORE_SSL_ERRORS: true
    steps:
    - task: AzureWebApp@1
      displayName: Azure Web App Deploy
      inputs:
        azureSubscription: $(azureSubscription)
        appName: <your-app-name>
        package: '$(System.DefaultWorkingDirectory)'
    

    참고

    SSL 오류를 무시하려면 이 예제와 같이 라는 VSTS_ARM_REST_IGNORE_SSL_ERRORS 변수를 빌드 또는 릴리스 파이프라인의 값 true 으로 설정합니다.

  10. azureSubscription 값을 서비스 연결의 이름으로 업데이트합니다.

  11. appName 앱 이름으로 업데이트합니다. 배포할 준비가 되었습니다.

Azure Stack Hub에서 Azure 작업을 사용하는 방법에 대한 참고 사항

다음 Azure 작업은 Azure Stack Hub를 사용하여 유효성을 검사합니다.

다음 단계