GitHub Actions를 사용한 지속적인 업데이트

GitHub Actions를 사용하여 Azure Functions에서 함수 앱에 코드를 자동으로 빌드하고 배포하는 워크플로를 정의합니다.

GitHub Actions에서 워크플로는 GitHub 리포지토리에서 정의하는 자동화된 프로세스입니다. 이 프로세스는 GitHub에서 함수 앱 프로젝트를 빌드하고 배포하는 방법을 GitHub에 알려 줍니다.

워크플로는 리포지토리의 /.github/workflows/ 경로에 있는 YAML(.yml) 파일에서 정의됩니다. 이 정의는 워크플로를 구성하는 다양한 단계와 매개 변수를 포함합니다.

Azure Functions 워크플로의 경우 파일에는 다음 세 개의 섹션이 있습니다.

섹션 작업
인증 게시 프로필을 다운로드합니다.
GitHub 비밀을 만듭니다.
빌드 환경을 설정합니다.
함수 앱을 빌드합니다.
배포 함수 앱을 배포합니다.

사전 요구 사항

배포 자격 증명 생성

GitHub Actions에 대해 Azure Functions를 사용하여 인증하려면 게시 프로필을 사용하는 것이 좋습니다. 서비스 주체를 사용하여 인증할 수도 있습니다. 자세히 알아보려면 이 GitHub Actions 리포지토리를 참조하세요.

게시 프로필 자격 증명을 GitHub 암호로 저장한 후 워크플로 내에서 이 암호를 사용하여 Azure에 인증합니다.

게시 프로필 다운로드

함수 앱의 게시 프로필을 다운로드하려면 다음을 수행합니다.

  1. 함수 앱의 개요 페이지를 선택한 다음 게시 프로필 가져오기를 선택합니다.

    게시 프로필 다운로드

  2. 파일 콘텐츠를 저장한 후 복사합니다.

GitHub 비밀 추가

  1. GitHub에서 리포지토리로 이동합니다.

  2. 설정 > 비밀 > 작업을 선택합니다.

  3. 새 리포지토리 비밀을 선택합니다.

  4. 이름 AZURE_FUNCTIONAPP_PUBLISH_PROFILE 및 값이 게시 프로필 파일의 내용으로 설정된 새 비밀을 추가합니다.

  5. 비밀 추가를 선택합니다.

이제 GitHub에서 Azure의 함수 앱에 인증할 수 있습니다.

환경 만들기

환경 설정은 언어별 게시 설정 작업을 사용하여 수행됩니다.

.NET(ASP.NET 포함)은 actions/setup-dotnet 작업을 사용합니다.
다음 예에서는 환경을 설정하는 워크플로의 일부를 보여 줍니다.

    - name: Setup DotNet 2.2.402 Environment
      uses: actions/setup-dotnet@v1
      with:
        dotnet-version: 2.2.402

함수 앱 빌드

이 작업은 언어에 따라 달라지며 Azure Functions에서 지원하는 언어의 경우 이 섹션은 각 언어의 표준 빌드 단계여야 합니다.

다음 예에서는 함수 앱을 빌드하는 워크플로의 일부를 보여 줍니다(언어별).

    env:
      AZURE_FUNCTIONAPP_PACKAGE_PATH: '.' # set this to the path to your web app project, defaults to the repository root

    - name: 'Resolve Project Dependencies Using Dotnet'
      shell: bash
      run: |
        pushd './${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}'
        dotnet build --configuration Release --output ./output
        popd

함수 앱 배포

함수 앱에 코드를 배포하려면 Azure/functions-action 작업을 사용합니다. 이 작업에는 다음 3개의 매개 변수가 있습니다.

매개 변수 설명
app-name (필수) 함수 앱의 이름.
slot-name (선택) 배포하고자 하는 위치인 배포 슬롯의 이름. 슬롯은 함수 앱에 이미 정의되어 있어야 합니다.
publish-profile (선택) 필드 게시 프로필에 대한 GitHub 암호의 이름.

다음 예에서는 functions-action의 버전 1 및 인증용 publish profile을 사용합니다.

게시 프로필을 사용하는 .NET Linux 워크플로를 설정합니다.

name: Deploy DotNet project to function app with a Linux environment

on:
  [push]

env:
  AZURE_FUNCTIONAPP_NAME: your-app-name  # set this to your application's name
  AZURE_FUNCTIONAPP_PACKAGE_PATH: '.'    # set this to the path to your web app project, defaults to the repository root
  DOTNET_VERSION: '2.2.402'              # set this to the dotnet version to use

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
    - name: 'Checkout GitHub action'
      uses: actions/checkout@v2

    - name: Setup DotNet ${{ env.DOTNET_VERSION }} Environment
      uses: actions/setup-dotnet@v1
      with:
        dotnet-version: ${{ env.DOTNET_VERSION }}

    - name: 'Resolve Project Dependencies Using Dotnet'
      shell: bash
      run: |
        pushd './${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}'
        dotnet build --configuration Release --output ./output
        popd
    - name: 'Run Azure Functions action'
      uses: Azure/functions-action@v1
      with:
        app-name: ${{ env.AZURE_FUNCTIONAPP_NAME }}
        package: '${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}/output'
        publish-profile: ${{ secrets.AZURE_FUNCTIONAPP_PUBLISH_PROFILE }}

게시 프로필을 사용하는 .NET Windows 워크플로를 설정합니다.

name: Deploy DotNet project to function app with a Windows environment

on:
  [push]

env:
  AZURE_FUNCTIONAPP_NAME: your-app-name  # set this to your application's name
  AZURE_FUNCTIONAPP_PACKAGE_PATH: '.'    # set this to the path to your web app project, defaults to the repository root
  DOTNET_VERSION: '2.2.402'              # set this to the dotnet version to use

jobs:
  build-and-deploy:
    runs-on: windows-latest
    steps:
    - name: 'Checkout GitHub action'
      uses: actions/checkout@v2

    - name: Setup DotNet ${{ env.DOTNET_VERSION }} Environment
      uses: actions/setup-dotnet@v1
      with:
        dotnet-version: ${{ env.DOTNET_VERSION }}

    - name: 'Resolve Project Dependencies Using Dotnet'
      shell: pwsh
      run: |
        pushd './${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}'
        dotnet build --configuration Release --output ./output
        popd
    - name: 'Run Azure Functions action'
      uses: Azure/functions-action@v1
      with:
        app-name: ${{ env.AZURE_FUNCTIONAPP_NAME }}
        package: '${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}/output'
        publish-profile: ${{ secrets.AZURE_FUNCTIONAPP_PUBLISH_PROFILE }}

다음 단계