연습 - 파이프라인의 트리거 업데이트

완료됨

한 동료가 웹 사이트 앱이 항상 실행되도록 회사 웹 사이트에서 App Service Always On 기능을 켜라고 요청합니다.

이 연습에서는 main 분기에서 파일이 변경될 때마다 자동으로 실행되도록 앞서 만든 파이프라인을 업데이트합니다. 업데이트된 파이프라인을 사용하여 요청된 구성 변경 사항을 웹 사이트에 배포합니다.

프로세스 중에 다음을 수행합니다.

  • main 분기의 deploy 폴더에서 파일이 변경될 때마다 자동으로 트리거되도록 파이프라인을 업데이트합니다.
  • Bicep 파일을 변경하세요.
  • 파이프라인이 자동으로 실행되는지 확인합니다.

트리거를 분기 기반이 되도록 업데이트합니다.

  1. Visual Studio Code에서 deploy/azure-pipelines.yml 파일을 엽니다.

  2. 첫 번째 줄에서 수동 트리거를 제거합니다.

  3. 첫 번째 줄에 다음 트리거 정의를 추가합니다.

    trigger:
      batch: true
      branches:
        include:
        - main
    

    또한 동시성 제어를 사용하도록 설정하여 파이프라인이 동시에 여러 번 실행되는 것을 방지합니다.

  4. 파일의 변경 내용을 저장합니다.

  5. 변경 내용을 커밋하되 아직 푸시하지 않습니다. 곧 푸시할 것입니다.

    git add .
    git commit -m 'Add branch trigger'
    

Bicep 파일 업데이트

  1. Visual Studio Code에서 main.bicep 파일을 엽니다.

  2. appServiceApp 리소스 정의의 siteConfig 속성 내에서 alwaysOn 속성을 true 값으로 추가합니다.

    resource appServiceApp 'Microsoft.Web/sites@2022-03-01' = {
      name: appServiceAppName
      location: location
      properties: {
        serverFarmId: appServicePlan.id
        httpsOnly: true
        siteConfig: {
          alwaysOn: true
          appSettings: [
            {
              name: 'ToyManualsStorageAccountConnectionString'
              value: toyManualsStorageAccountConnectionString
            }
          ]
        }
      }
    }
    
  3. 파일의 변경 내용을 저장합니다.

  4. Visual Studio Code 터미널에서 다음 코드를 실행하여 변경 내용을 커밋하고 두 커밋을 모두 푸시합니다.

    git add .
    git commit -m 'Configure app Always On setting'
    git push
    

파이프라인에 오류가 있는지 확인

  1. 브라우저에서 파이프라인을 선택하고 파이프라인을 선택합니다.

  2. 가장 최근의 실행을 선택하여 파이프라인이 자동으로 실행되었는지 확인합니다. 분기 트리거가 모니터링하는 분기에 변경 내용을 푸시했기 때문에 파이프라인이 실행한 것입니다. 파이프라인이 계속 실행 중인 경우 잠시 기다렸다가 페이지를 새로 고칩니다.

    Screenshot of Azure DevOps that shows the failed pipeline run.

    파이프라인이 실패한 배포를 표시합니다.

  3. 오류를 진단 하려면 작업에서 작업을 선택한 다음 실패한 AzureResourceManagerTemplateDeployment 작업을 선택합니다. 전체 오류 메시지를 보려면 스크롤하세요. 오류 메시지에는 다음 텍스트가 포함됩니다.

    There was a conflict. AlwaysOn cannot be set for this site as the plan does not allow it. For more information on pricing and features, please see: https://aka.ms/appservicepricingdetails

    이 오류 메시지는 App Service 앱이 Always On 기능을 지원하지 않는 F1 무료 계층을 사용하여 배포되었기 때문에 배포에 오류가 발생했음을 나타냅니다.

    중요

    이 예제는 사용하는 모든 매개 변수 값을 포함하여 Bicep 파일을 테스트하는 것이 얼마나 중요한지 보여줍니다. 미묘한 오류가 리소스 구성 또는 기타 코드에 추가되기 쉽습니다. 파이프라인이 코드를 배포하고 실패할 때까지 문제를 검색하지 못할 수 있습니다. 이후 모듈에서는 Bicep 코드를 확인하고 테스트하는 데 사용할 수 있는 몇 가지 전략을 알아봅니다.

Bicep 파일을 픽스하고 파이프라인이 다시 트리거되는지 확인합니다.

오류가 발생한 배포에 대해 동료에게 문의합니다. Always On 설정은 프로덕션 환경에만 적용하면 된다고 함께 결정합니다. 여기에서는 사용하기로 결정한 새 규칙을 적용하여 배포 오류를 일으킨 문제를 해결합니다.

  1. Visual Studio Code에서 각 환경 유형의 새 속성을 environmentConfigurationMap 변수에 추가합니다.

    var environmentConfigurationMap = {
      nonprod: {
        appServiceApp: {
          alwaysOn: false
        }
        appServicePlan: {
          sku: {
            name: 'F1'
            capacity: 1
          }
        }
        toyManualsStorageAccount: {
          sku: {
            name: 'Standard_LRS'
          }
        }
      }
      prod: {
        appServiceApp: {
          alwaysOn: true
        }
        appServicePlan: {
          sku: {
            name: 'S1'
            capacity: 2
          }
        }
        toyManualsStorageAccount: {
          sku: {
            name: 'Standard_ZRS'
          }
        }
      }
    }
    
  2. 환경 유형에 적절한 구성 맵 값을 사용하도록 애플리케이션의 alwaysOn 설정을 변경합니다.

    resource appServiceApp 'Microsoft.Web/sites@2022-03-01' = {
      name: appServiceAppName
      location: location
      properties: {
        serverFarmId: appServicePlan.id
        httpsOnly: true
        siteConfig: {
          alwaysOn: environmentConfigurationMap[environmentType].appServiceApp.alwaysOn
          appSettings: [
            {
              name: 'ToyManualsStorageAccountConnectionString'
              value: toyManualsStorageAccountConnectionString
            }
          ]
        }
      }
    }
    
  3. 파일의 변경 내용을 저장합니다.

  4. Visual Studio Code 터미널에서 변경 내용을 커밋하고 푸시합니다.

    git add .
    git commit -m 'Enable App Service Always On for production environments only'
    git push
    

파이프라인 성공 여부 확인

  1. Azure DevOps에서 파이프라인 목록으로 돌아가 파이프라인을 선택합니다.

  2. 가장 최근 실행을 선택합니다. 파이프라인이 계속 실행 중인 경우 잠시 기다렸다가 페이지를 새로 고칩니다.

    Screenshot of Azure DevOps that shows the successful pipeline run.

    파이프라인은 성공적인 배포를 표시합니다. 이번에는 유효한 Bicep 파일을 사용했기 때문에 성공했습니다.

리소스 정리

이제 연습을 완료했으므로 리소스에 대한 요금이 청구되지 않도록 리소스를 제거할 수 있습니다.

Visual Studio Code 터미널에서 다음 명령을 실행합니다.

az group delete --resource-group ToyWebsite --yes --no-wait

리소스 그룹은 백그라운드에서 삭제됩니다.

Remove-AzResourceGroup -Name ToyWebsite -Force