Github 작업: 단일 워크플로에서 여러 환경에 배포

Github Actions는 훌륭하고 많은 것을 자동화할 수 있습니다. 하지만 한 가지 부족한 기능은 워크플로우 yaml 파일에 있습니다support for code reuse.

유용한 한 가지 특정 사용 사례는 최신 코드를 원격 시스템에 게시하는 지속적인 배포 워크플로입니다. 배포 대상은 업데이트를 수신하는 git 분기에 의해 결정됩니다.

예를 들어 dev 분기에 푸시하면 staging 환경에 배포하고 master에 푸시하면 prod에 코드를 게시해야 합니다.

다음은 단일 워크플로 yaml 파일에서 여러 환경에 배포하는 해결 방법입니다.

예제 워크플로우 파일



예를 들어 Azure 함수 앱을 배포하는 Github 작업을 살펴보겠습니다.

Azure에 코드를 게시하려면 함수 앱 이름과 게시 프로필(배포 키)이라는 두 가지 변수가 필요합니다.

각 환경에는 개별 Github 리포지토리 암호에 정의된 자체 게시 프로필이 있습니다.



다음은 워크플로 yaml의 관련 부분입니다. 전체를 보실 수 있습니다here .

먼저 커밋 시 배포해야 하는 분기에서만 워크플로를 트리거하려고 합니다.

on:
  push:
    branches:
      - dev
      - master


다음으로 워크플로 정의의 맨 처음에 현재 분기에 따라 올바른 환경 변수를 설정하기 위한 조건부 단계를 추가합니다.
  • 함수 앱 이름
  • 프로필 비밀 이름 게시

  • jobs:
      deploy:
        runs-on: ubuntu-latest
        steps:
          - name: Set env vars (dev)
            if: endsWith(github.ref, '/dev')
            run: |
              echo "AZURE_FUNCTIONAPP_NAME=azfunccdgh-dev-function-app" >> $GITHUB_ENV
              echo "PUBLISH_PROFILE_VAR_NAME=AZURE_FUNCTIONAPP_PUBLISH_PROFILE_DEV" >> $GITHUB_ENV
          - name: Set env vars (prod)
            if: endsWith(github.ref, '/master')
            run: |
              echo "AZURE_FUNCTIONAPP_NAME=azfunccdgh-prod-function-app" >> $GITHUB_ENV
              echo "PUBLISH_PROFILE_VAR_NAME=AZURE_FUNCTIONAPP_PUBLISH_PROFILE_PROD" >> $GITHUB_ENV
    


    다음은 환경 간에 공유되는 단계입니다. 이들은 다중 환경 배포와 관련이 없으며 여기에 나열되지 않습니다. 제 경우에는 코드를 확인하고, 캐싱하고, 종속성을 설치하고, 프로젝트를 빌드합니다.

    마지막으로 배포 단계에서는 위에서 설정한 환경 변수를 사용하여 코드를 올바른 대상 환경에 게시합니다.

          - name: Run Azure Functions action
            uses: Azure/functions-action@v1
            id: fa
            with:
              app-name: ${{ env.AZURE_FUNCTIONAPP_NAME }}
              package: ${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}
              publish-profile: ${{ secrets[env.PUBLISH_PROFILE_VAR_NAME] }}
              respect-funcignore: true
    


    참조


  • https://github.com/actions/starter-workflows/issues/245
  • https://github.com/maximivanov/azure-functions-cd-github-actions

  • ...



    여전히 이것은 내가 그다지 만족하지 않는 해킹이지만 환경당 전체 워크플로 파일의 복사본을 갖는 것보다 낫다고 생각합니다.

    Github Actions에서 여러 환경에 배포하는 더 좋은 방법을 알고 있다면 알려주세요!

    이러한 유형의 콘텐츠가 마음에 들면 Twitter에서 최신 업데이트를 확인할 수 있습니다.

    좋은 웹페이지 즐겨찾기