연습 - 워크플로에 미리 보기 작업 추가

완료됨

Azure 환경이 어떻게 변경되는지 확인할 수 있도록 워크플로에 작업을 추가하려고 합니다.

이 과정에서 다음 작업을 수행합니다.

  • 새 미리 보기 작업을 추가하도록 워크플로 정의 YAML 파일을 업데이트합니다.
  • GitHub 리포지토리에 환경을 추가합니다.
  • 검토가 필요하도록 환경을 구성합니다.
  • 배포 작업에 환경을 사용하도록 워크플로 YAML 파일을 업데이트합니다.
  • what-if 결과를 보고 워크플로 실행을 승인합니다.

미리 보기 작업을 추가하도록 워크플로 정의 업데이트

여기서는 what-if 작업을 실행하는 새 작업을 워크플로에 추가합니다.

  1. Visual Studio Code에서 .github/workflows 폴더의 workflow.yml 파일을 엽니다.

  2. 유효성 검사배포 작업 사이에 미리 보기 작업에 대한 다음 정의를 추가합니다.

    preview:
      runs-on: ubuntu-latest
      needs: [lint, validate]
      steps:
      - uses: actions/checkout@v3
      - uses: azure/login@v1
        name: Sign in to Azure
        with:
          client-id: ${{ secrets.AZURE_CLIENT_ID }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
      - uses: azure/arm-deploy@v1
        name: Run what-if
        with:
          failOnStdErr: false
          resourceGroupName: ${{ env.AZURE_RESOURCEGROUP_NAME }}
          template: deploy/main.bicep
          parameters: >
            environmentType=${{ env.ENVIRONMENT_TYPE }}
          additionalArguments: --what-if
    

    미리 보기 작업은 린팅유효성 검사 작업을 성공적으로 완료했는지에 따라 달라집니다.

  3. 배포 작업을 미리 보기 작업에 종속되도록 업데이트합니다.

    deploy:
      runs-on: ubuntu-latest
      needs: preview
      steps:
      - uses: actions/checkout@v3
      - uses: azure/login@v1
        name: Sign in to Azure
        with:
          client-id: ${{ secrets.AZURE_CLIENT_ID }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
      - uses: azure/arm-deploy@v1
        name: Deploy website
        with:
          failOnStdErr: false
          deploymentName: ${{ github.run_number }}
          resourceGroupName: ${{ env.AZURE_RESOURCEGROUP_NAME }}
          template: ./deploy/main.bicep
          parameters: environmentType=${{ env.ENVIRONMENT_TYPE }}
    
  4. 파일의 변경 내용을 저장합니다.

환경 추가

  1. 브라우저에서 설정>환경으로 이동합니다.

  2. 새 환경을 선택합니다.

    환경을 만드는 버튼이 강조 표시된 환경 페이지를 보여주는 GitHub 인터페이스 스크린샷

  3. 환경 이름으로 Website를 입력합니다.

  4. 환경 구성을 선택합니다.

    세부 정보가 완료되고 환경 구성 단추가 강조 표시된 새 환경에 대한 GitHub 페이지의 스크린샷

이 모듈의 설정 단계에서는 환경에 배포할 때 사용할 워크플로에 대한 페더레이션 자격 증명을 이미 만들었습니다.

환경에 필수 검토자 보호 규칙 추가

  1. 필수 검토자 확인란을 선택합니다.

  2. 검토자 목록에 고유한 GitHub 사용자 이름을 추가합니다.

    필수 검토자 확인란 및 텍스트 상자가 강조 표시된 웹 사이트 환경을 보여주는 GitHub 인터페이스의 스크린샷

  3. 보호 규칙 저장을 선택합니다.

  4. 환경을 선택하여 구성을 종료합니다.

환경 및 검토자가 필요하도록 워크플로 정의 업데이트

여기서는 이전에 만든 Website 환경에 대해 실행되도록 배포 작업을 구성합니다.

  1. Visual Studio Code에서 ‘workflow.yml’ 파일을 엽니다.

  2. 배포 작업에 environment 매개 변수를 추가합니다. 앞서 환경의 이름과 일치하도록 값을 Website로 설정합니다.

    deploy:
      runs-on: ubuntu-latest
      environment: Website
      needs: preview
      steps:
      - uses: actions/checkout@v3
      - uses: azure/login@v1
        name: Sign in to Azure
        with:
          client-id: ${{ secrets.AZURE_CLIENT_ID }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
      - uses: azure/arm-deploy@v1
        name: Deploy website
        with:
          failOnStdErr: false
          deploymentName: ${{ github.run_number }}
          resourceGroupName: ${{ env.AZURE_RESOURCEGROUP_NAME }}
          template: ./deploy/main.bicep
          parameters: environmentType=${{ env.ENVIRONMENT_TYPE }}
    
  3. 파일을 저장합니다.

워크플로 정의 확인 및 커밋

  1. ‘workflow.yml’ 파일이 다음 코드와 같이 표시되는지 확인합니다.

    name: deploy-toy-website-test
    concurrency: toy-company
    
    on:
      push:
        branches:
          - main
    
    permissions:
      id-token: write
      contents: read
    
    env:
      AZURE_RESOURCEGROUP_NAME: ToyWebsiteTest
      ENVIRONMENT_TYPE: Test
    
    jobs:
      lint:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v3
        - name: Run Bicep linter
          run: az bicep build --file deploy/main.bicep
    
      validate:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v3
        - uses: azure/login@v1
          name: Sign in to Azure
          with:
            client-id: ${{ secrets.AZURE_CLIENT_ID }}
            tenant-id: ${{ secrets.AZURE_TENANT_ID }}
            subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
        - uses: azure/arm-deploy@v1
          name: Run preflight validation
          with:
            deploymentName: ${{ github.run_number }}
            resourceGroupName: ${{ env.AZURE_RESOURCEGROUP_NAME }}
            template: ./deploy/main.bicep
            parameters: environmentType=${{ env.ENVIRONMENT_TYPE }}
            deploymentMode: Validate
    
      preview:
        runs-on: ubuntu-latest
        needs: [lint, validate]
        steps:
        - uses: actions/checkout@v3
        - uses: azure/login@v1
          name: Sign in to Azure
          with:
            client-id: ${{ secrets.AZURE_CLIENT_ID }}
            tenant-id: ${{ secrets.AZURE_TENANT_ID }}
            subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
        - uses: azure/arm-deploy@v1
          name: Run what-if
          with:
            failOnStdErr: false
            resourceGroupName: ${{ env.AZURE_RESOURCEGROUP_NAME }}
            template: deploy/main.bicep
            parameters: >
              environmentType=${{ env.ENVIRONMENT_TYPE }}
            additionalArguments: --what-if
    
      deploy:
        runs-on: ubuntu-latest
        environment: Website
        needs: preview
        steps:
        - uses: actions/checkout@v3
        - uses: azure/login@v1
          name: Sign in to Azure
          with:
            client-id: ${{ secrets.AZURE_CLIENT_ID }}
            tenant-id: ${{ secrets.AZURE_TENANT_ID }}
            subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
        - uses: azure/arm-deploy@v1
          name: Deploy website
          with:
            failOnStdErr: false
            deploymentName: ${{ github.run_number }}
            resourceGroupName: ${{ env.AZURE_RESOURCEGROUP_NAME }}
            template: ./deploy/main.bicep
            parameters: environmentType=${{ env.ENVIRONMENT_TYPE }}
    

    파일이 달라 보이면 다음 예제와 일치하도록 업데이트한 후 저장합니다.

  2. Visual Studio Code 터미널에서 다음 명령을 실행하여 변경 내용을 커밋하고 Git 리포지토리에 푸시합니다.

    git add .
    git commit -m "Add preview job"
    git push
    

워크플로를 실행하고 what-if 출력 검토

  1. 브라우저에서 워크플로 실행으로 이동합니다.

  2. 가장 최근에 실행한 워크플로를 선택합니다.

    워크플로가 린팅, 유효성 검사미리 보기 작업을 완료할 때까지 기다립니다. GitHub는 자동으로 페이지를 최신 상태로 업데이트하지만 가끔 페이지를 새로 고치는 것이 좋습니다.

  3. 워크플로에서 검토를 요청하는 메시지를 표시합니다. GitHub 계정을 설정한 방법에 따라 워크플로를 검토하라는 요청 메일 또는 웹 알림을 받게 됩니다.

    검토 요구 사항이 강조 표시된 워크플로 실행을 보여주는 GitHub 인터페이스의 스크린샷

    워크플로를 계속하도록 승인하기 전에, what-if 결과를 검토하여 예상과 일치하는지 확인합니다.

  4. 미리 보기 작업을 선택합니다.

  5. 가상 실행 단계를 선택하여 가상 명령이 보고하는 변경 내용을 검사합니다.

  6. 워크플로 로그는 다음 코드와 비슷한 what-if 결과를 제공합니다.

    Resource and property changes are indicated with these symbols:
      - Delete
      + Create
      ~ Modify
      = Nochange
      * Ignore
    
    The deployment will update the following scope:
    
    Scope: /subscriptions/***/resourceGroups/ToyWebsiteTest
    
      ~ Microsoft.OperationalInsights/workspaces/workspace-abcdefghijklm [2022-10-01]
        - properties.retentionInDays: 30
        - properties.sku:
    
            name: "pergb2018"
    
        - properties.workspaceCapping:
    
            dailyQuotaGb: -1.0
    
      ~ Microsoft.Web/sites/toy-website-abcdefghijklm [2022-03-01]
        + properties.siteConfig.localMySqlEnabled:   false
        + properties.siteConfig.netFrameworkVersion: "v4.6"
    
      = Microsoft.Insights/components/toywebsite [2020-02-02]
      = Microsoft.Storage/storageAccounts/mystorageabcdefghijklm [2022-09-01]
      = Microsoft.Web/serverfarms/toy-website [2022-03-01]
      * microsoft.alertsmanagement/smartDetectorAlertRules/Failure Anomalies - toywebsite
    
    Resource changes: 2 to modify, 3 no change, 1 to ignore.
    

    가상 작업에서 로그 분석 작업 영역 및 웹 사이트 리소스에 대한 변경을 감지했습니다. 그러나 감지된 변경 내용은 노이즈입니다. 노이즈는 리소스를 실제로 변경하지 않습니다. Azure 팀에서 노이즈를 줄이기 위해 노력하고 있습니다. 당분간은 감지된 변경을 무시해도 됩니다.

    리소스 종류 microsoft.alertsmanagement/smartDetectorAlertRules/Failure Anomalies - toywebsite에 대한 가상 출력에 항목이 표시될 수도 있습니다. 이 리소스는 Application Insights에서 자동으로 생성하는 리소스입니다. 가상 명령은 리소스에 대한 변경 내용이 없는 것을 확인합니다.

워크플로 실행 승인

  1. 요약을 선택하여 워크플로 실행에 대한 개요로 돌아갑니다.

    뒤로 화살표가 강조 표시된 요약 메뉴를 보여주는 GitHub 인터페이스의 스크린샷

  2. 검토 패널에서 배포 검토 단추를 선택합니다.

  3. 보류 중인 배포 검토 팝업에서 Website 환경을 선택합니다. 의견 남기기 상자에 Reviewed what-if results를 입력합니다.

  4. 승인 및 배포를 선택합니다.

    승인 단추가 강조 표시된 워크플로 승인 페이지를 보여주는 GitHub 인터페이스의 스크린샷

성공한 배포 관찰

  1. 워크플로 실행을 승인한 후에는 배포 작업의 실행이 시작되는 것을 확인할 수 있습니다.

    작업이 완료될 때까지 기다립니다.

  2. 워크플로 실행이 성공적으로 완료됩니다.