GitHub 워크플로 내에서 배포된 Azure Static Web App URL에 대한 액세스 권한 얻기

21336 단어 githubplaywrightazure
Twitter에서 팔로우 | 구독하기 Newsletter | timdeschryver.dev에 원래 게시되었습니다.


Read the TLDR version on timdeschryver.dev

이봐.
당신이 여기 있다면 그것은 아마도 네 가지를 의미할 것입니다:
  • Azure SWA(Static Web App)를 사용 중입니다
  • .
  • GitHub Actions를 사용 중입니다
  • .
  • Azure/static-web-apps-deploy GitHub 작업
  • 을 사용하여 SWA를 배포하고 있습니다.
  • 풀 요청이 열려 있는 동안 미리 보기 환경에 대해 테스트 도구 모음(아마도 )을 실행하려고 합니다
  • .

    이것이 당신이라면 내가 당신을 덮었기 때문에 더 이상 볼 필요가 없습니다!

    Azure Portal 내에서 Azure Static Web App을 만들고 GitHub Actions와 함께 GitHub를 사용하도록 구성하면 자동으로 GitHub 워크플로가 생성됩니다. 워크플로 파일은 GitHub 리포지토리에도 추가되며 SWA를 빌드하고 배포하기 위해 미리 구성된 몇 가지 단계를 정의합니다.

    내 블로그를 SWA로 마이그레이션했을 때 생성된 워크플로는 다음과 같습니다.

    name: Azure Static Web Apps CI/CD
    
    on:
      push:
        branches:
          - main
      pull_request:
        types: [opened, synchronize, reopened, closed]
        branches:
          - main
    
    jobs:
      build_and_deploy_job:
        if: github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.action != 'closed')
        runs-on: ubuntu-latest
        name: Build and Deploy Job
        steps:
          - uses: actions/checkout@v2
            with:
              submodules: true
          - name: Build And Deploy
            id: builddeploy
            uses: Azure/static-web-apps-deploy@v1
            with:
              azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_SALMON_ROCK_0FB035B03 }}
              repo_token: ${{ secrets.GITHUB_TOKEN }} # Used for Github integrations (i.e. PR comments)
              action: "upload"
              ###### Repository/Build Configurations - These values can be configured to match your app requirements. ######
              # For more information regarding Static Web App workflow configurations, please visit: https://aka.ms/swaworkflowconfig
              app_location: "/" # App source code path
              api_location: "" # Api source code path - optional
              output_location: "build" # Built app content directory - optional
              ###### End of Repository/Build Configurations ######
    
      close_pull_request_job:
        if: github.event_name == 'pull_request' && github.event.action == 'closed'
        runs-on: ubuntu-latest
        name: Close Pull Request Job
        steps:
          - name: Close Pull Request
            id: closepullrequest
            uses: Azure/static-web-apps-deploy@v1
            with:
              azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_SALMON_ROCK_0FB035B03 }}
              action: "close"
    


    워크플로는 Azure/static-web-apps-deploy GitHub 작업을 사용하여 응용 프로그램을 빌드하고 Azure 리소스에 배포합니다.
    워크플로는 풀 요청이 열리거나 main 분기에 대해 푸시가 이루어질 때 트리거됩니다.

    여기서 내가 놓친 것은 내가 변경할 때 내 블로그를 손상시키지 않도록 하는 방법입니다.
    뭔가 고장났을 때 타이밍이 항상 나쁘다고 내가 말할 때 저를 믿으세요.
    특히 안정적인 v1 릴리스를 위해 정기적으로 변경되는 SvelteKit 으로 내 블로그를 작성했기 때문에 이런 일이 과거에 여러 번 발생했습니다.

    블로그를 수동으로 확인하고 싶지 않습니다. 변경하는 데 시간이 오래 걸리고 항상 잊어버린 것이 있기 때문입니다.
    그래서 워크플로 내에 안전 확인을 추가하고 싶었습니다.
    모든 것이 예상대로 작동하는지 확인하는 자동화된 테스트.
    물론 이 작업을 위해 즉시 Playwright을 잡았습니다.

    생성된 GitHub 워크플로와 마찬가지로 Playwright도 워크플로를 생성할 수 있습니다.init 스크립트로 Playwright를 설치하고 단계 마법사를 통해 작업하십시오.

    npm init playwright
    


    마법사를 완료하면 새 GitHub 워크플로 파일이 생성됩니다.
    제 경우에는 다음 파일과 같았습니다.

    name: Playwright Tests
    on:
      push:
        branches: [ main, master ]
      pull_request:
        branches: [ main, master ]
    jobs:
      test:
        timeout-minutes: 60
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v2
        - uses: actions/setup-node@v2
          with:
            node-version: '14.x'
        - name: Install dependencies
          run: npm ci
        - name: Install Playwright Browsers
          run: npx playwright install --with-deps
        - name: Run Playwright tests
          run: npx playwright test
        - uses: actions/upload-artifact@v2
          if: always()
          with:
            name: playwright-report
            path: playwright-report/
            retention-days: 30
    


    워크플로는 Playwright를 설치하고 main 분기에 대한 푸시가 발생하거나 풀 요청이 열릴 때 테스트 스위트를 실행합니다.

    내 Azure 워크플로 내에서 이러한 테스트를 실행하기 위해 해당 콘텐츠를 SWA 워크플로 파일에 복사하여 붙여넣기만 하면 다음과 같은 결과가 나타납니다.

    name: Azure Static Web Apps CI/CD
    
    on:
      push:
        branches:
          - main
      pull_request:
        types: [opened, synchronize, reopened, closed]
        branches:
          - main
    
    jobs:
      build_and_deploy_job:
        if: github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.action != 'closed')
        runs-on: ubuntu-latest
        name: Build and Deploy Job
        steps:
          - uses: actions/checkout@v2
            with:
              submodules: true
          - name: Build And Deploy
            id: builddeploy
            uses: Azure/static-web-apps-deploy@v1
            with:
              azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_SALMON_ROCK_0FB035B03 }}
              repo_token: ${{ secrets.GITHUB_TOKEN }} # Used for Github integrations (i.e. PR comments)
              action: "upload"
              ###### Repository/Build Configurations - These values can be configured to match your app requirements. ######
              # For more information regarding Static Web App workflow configurations, please visit: https://aka.ms/swaworkflowconfig
              app_location: "/" # App source code path
              api_location: "" # Api source code path - optional
              output_location: "build" # Built app content directory - optional
              ###### End of Repository/Build Configurations ######
    
      smoke_test_job:
        name: ☁️ Smoke test ${{ github.event.deployment_status.target_url }}
        runs-on: ubuntu-latest
        steps:
          - name: 🛎️ Checkout
            uses: actions/checkout@v3
    
          - name: 🔢 Use Node.js 16
            uses: actions/setup-node@v3
            with:
              node-version: 16
    
          - name: 🔎 Install dependencies
            run: npm install
    
          - name: 🎭 Install Playwright
            run: npx playwright install --with-deps
    
          - name: 🧪 Run Playwright Tests
            run: npm run test
    
          - name: 📦 Upload Test Results Artifact
            uses: actions/upload-artifact@v3
            if: always()
            with:
              name: playwright-test-results
              path: playwright-report
    
      close_pull_request_job:
        if: github.event_name == 'pull_request' && github.event.action == 'closed'
        runs-on: ubuntu-latest
        name: Close Pull Request Job
        steps:
          - name: Close Pull Request
            id: closepullrequest
            uses: Azure/static-web-apps-deploy@v1
            with:
              azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_SALMON_ROCK_0FB035B03 }}
              action: "close"
    


    이 단계에서 이러한 테스트를 최대한 활용하려면 배포된 환경에 대해 테스트를 실행해야 합니다.

    따라서 배포된 URL을 알아야 합니다.
    docs에는 https://<SUBDOMAIN-PULL_REQUEST_ID>.<AZURE_REGION>.azurestaticapps.net와 같은 미리보기 URL을 빌드하는 규칙이 있다고 언급되어 있습니다. 그러나 이것은 main 로 추진할 때 라이브 환경도 있다는 점을 고려하지 않습니다. 이상적으로는
    이것이 계속 작동한다는 것입니다.

    하지만 더 나은 방법이 있어야 합니다.
    다행스럽게도 GitHub Actionstatic_web_app_url에 정의된 출력 변수Azure/static-web-apps-deploy가 있습니다.

    이 지식을 바탕으로 빌드 작업의 출력 변수에 static_web_app_url 변수를 포함하기만 하면 됩니다. 이렇게 하면 테스트 작업 내의 변수에 액세스하여 Playwright를 구성할 수 있습니다.
    미리보기 환경에 대해 Playwright 테스트를 실행하려면 출력 변수를 테스트 작업 내의 PLAYWRIGHT_TEST_BASE_URL 환경 변수에 할당하십시오.

    name: Azure Static Web Apps CI/CD
    
    on:
      push:
        branches:
          - main
      pull_request:
        types: [opened, synchronize, reopened, closed]
        branches:
          - main
    
    jobs:
      build_and_deploy:
        if: github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.action != 'closed')
        runs-on: ubuntu-latest
        name: Build and Deploy Job
    +    outputs:
    +      swa_url: ${{ steps.builddeploy.outputs.static_web_app_url }}
        steps:
          - uses: actions/checkout@v2
            with:
              submodules: true
          - name: Build And Deploy
            id: builddeploy
            uses: Azure/static-web-apps-deploy@v1
            with:
              azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_SALMON_ROCK_0FB035B03 }}
              repo_token: ${{ secrets.GITHUB_TOKEN }} # Used for Github integrations (i.e. PR comments)
              action: 'upload'
              ###### Repository/Build Configurations - These values can be configured to match your app requirements. ######
              # For more information regarding Static Web App workflow configurations, please visit: https://aka.ms/swaworkflowconfig
              app_location: '/' # App source code path
              api_location: '' # Api source code path - optional
              output_location: 'build' # Built app content directory - optional
              production_branch: 'main'
              ###### End of Repository/Build Configurations ######
    
      smoke_test_job:
        name: ☁️ Smoke test ${{ github.event.deployment_status.target_url }}
    +    needs: build_and_deploy
        runs-on: ubuntu-latest
        env:
    +      PLAYWRIGHT_TEST_BASE_URL: ${{ needs.build_and_deploy.outputs.swa_url }}
        steps:
          - name: 🛎️ Checkout
            uses: actions/checkout@v3
    
          - name: 🔢 Use Node.js 16
            uses: actions/setup-node@v3
            with:
              node-version: 16
    
          - name: 🔎 Install dependencies
            run: npm install
    
          - name: 🎭 Install Playwright
            run: npx playwright install --with-deps
    
          - name: 🧪 Run Playwright Tests
            run: npm run test
    
          - name: 📦 Upload Test Results Artifact
            uses: actions/upload-artifact@v3
            if: always()
            with:
              name: playwright-test-results
              path: playwright-report
    
      close_pull_request_job:
        if: github.event_name == 'pull_request' && github.event.action == 'closed'
        runs-on: ubuntu-latest
        name: Close Pull Request Job
        steps:
          - name: Close Pull Request
            id: closepullrequest
            uses: Azure/static-web-apps-deploy@v1
            with:
              azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_SALMON_ROCK_0FB035B03 }}
              action: 'close'
    


    이제 이 변경으로 더 이상 가짜 패스가 내 블로그 🤞의 라이브 환경에 도달하지 않습니다.
    그리고 만약 그렇다면, 나는 그것에 대해 통지를 받습니다.


    Twitter에서 팔로우 | 구독하기 Newsletter | timdeschryver.dev에 원래 게시되었습니다.

    좋은 웹페이지 즐겨찾기