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

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

워크플로 구성을 정의하는 YAML 파일(.yml)은 리포지토리의 /.github/workflows/ 경로에서 유지 관리됩니다. 이 정의에는 함수의 개발 언어에 따라 달라지는 워크플로를 구성하는 작업과 매개 변수가 포함됩니다. Functions에 대한 GitHub Actions 워크플로는 언어에 관계없이 다음 작업을 수행합니다.

  1. 환경을 설정합니다.
  2. 코드 프로젝트를 빌드합니다.
  3. Azure의 함수 앱에 패키지를 배포합니다.

Azure Functions 작업은 Azure의 기존 함수 앱에 대한 배포를 처리합니다.

배포의 워크플로 구성 파일을 수동으로 만들 수 있습니다. 다음 방법 중 하나로 언어별 템플릿 집합에서 파일을 생성할 수도 있습니다.

  • Azure Portal에서
  • Azure CLI 사용
  • GitHub 리포지토리에서

YAML 파일을 직접 만들지 않으려면 문서 맨 위에 있는 다른 방법을 선택합니다.

필수 조건

  • 활성 구독이 있는 Azure 계정. 체험 계정을 만듭니다.

  • GitHub 계정. 없는 경우 평가판에 등록하세요.

  • GitHub 리포지토리의 소스 코드를 사용하여 Azure에서 호스트되고 작동하는 함수 앱입니다.

  • Azure CLI는 로컬로 개발할 때 사용됩니다. Azure Cloud Shell에서 Azure CLI를 실행할 수도 있습니다.

배포 자격 증명 생성

GitHub Actions는 배포 중에 게시 프로필을 사용하여 함수 앱에 액세스하므로 먼저 게시 프로필을 가져와서 GitHub 비밀로 안전하게 저장해야 합니다.

Important

게시 프로필은 Azure 리소스에 액세스할 수 있는 중요한 자격 증명입니다. 항상 안전하게 전송하고 저장해야 합니다. GitHub에서 게시 프로필은 GitHub 비밀에만 저장되어야 합니다.

게시 프로필 다운로드

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

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

    게시 프로필 다운로드

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

GitHub 비밀 추가

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

  2. 설정으로 이동합니다.

  3. 비밀 및 변수 > 작업을 선택합니다.

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

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

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

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

템플릿에서 워크플로 만들기

워크플로 구성을 수동으로 만드는 가장 좋은 방법은 공식적으로 지원되는 템플릿에서 시작하는 것입니다.

  1. Windows 또는 Linux를 선택하여 올바른 운영 체제에 대한 템플릿을 가져오는지 확인합니다.

    Windows에 배포하는 경우 runs-on: windows-latest를 사용합니다.

  2. 다음 링크를 사용하여 Azure Functions 작업 리포지토리에서 언어별 템플릿을 복사합니다.

  3. Azure에서 함수 앱 리소스의 이름으로 env.AZURE_FUNCTIONAPP_NAME 매개 변수를 업데이트합니다. 필요에 따라 앱에서 사용하는 언어 버전을 설정하는 매개 변수를 업데이트해야 할 수 있습니다(예: C#의 경우 DOTNET_VERSION).

  4. 리포지토리의 /.github/workflows/ 경로에 이 새 YAML 파일을 추가합니다.

포털에서 워크플로 구성을 만들기

포털을 사용하여 GitHub Actions를 사용하도록 설정하면 Functions는 애플리케이션 스택을 기반으로 워크플로 파일을 만들고 올바른 디렉터리의 GitHub 리포지토리에 커밋합니다.

포털은 게시 프로필을 자동으로 가져와서 리포지토리의 GitHub 비밀에 추가합니다.

함수 앱을 만드는 동안

Azure Portal에서 함수를 만들 때 배포 탭을 통해 GitHub Actions를 빠르게 시작할 수 있습니다. 새 함수 앱을 만들 때 GitHub Actions 워크플로를 추가하려면 다음을 수행합니다.

  1. Azure Portal함수 앱 만들기 흐름에서 배포를 선택합니다.

    함수 메뉴의 배포 옵션 스크린샷

  2. 각 코드 업데이트가 Azure Portal에 대한 코드 푸시를 트리거하도록 하려면 지속적인 배포를 사용하도록 설정합니다.

  3. GitHub 조직, 리포지토리, 분기를 입력합니다.

    GitHub 사용자 계정 세부 정보 스크린샷

  4. 함수 앱 구성을 완료합니다. 이제 GitHub 리포지토리에 /.github/workflows/의 새 워크플로 파일이 포함됩니다.

기존 함수 앱의 경우

기존 함수 앱에 GitHub Actions 워크플로를 추가하려면 다음을 수행합니다.

  1. Azure Portal에서 함수 앱으로 이동하여 배포 센터를 선택합니다.

  2. 원본에서 GitHub를 선택합니다. 기본 메시지인 GitHub Actions로 빌드가 표시되지 않으면 공급자 변경을 선택하고 GitHub Actions를 선택한 다음 확인을 선택합니다.

  3. GitHub 액세스 권한을 아직 부여하지 않은 경우 권한 부여를 선택합니다. GitHub 자격 증명을 제공하고 로그인을 선택합니다. 다른 GitHub 계정에 권한을 부여하려면 계정 변경을 선택하고 다른 계정으로 로그인합니다.

  4. GitHub 조직, 리포지토리, 분기를 선택합니다. GitHub Actions를 사용하여 배포하려면 이 리포지토리에 대한 쓰기 권한이 있어야 합니다.

  5. 인증 설정에서 GitHub Actions가 사용자 할당 ID로 인증할지 아니면 기본 인증 자격 증명을 사용하여 인증할지 선택합니다. 기본 인증의 경우 현재 자격 증명이 사용됩니다.

  6. 미리 보기 파일을 선택하여 github/workflows/의 GitHub 리포지토리에 추가되는 워크플로 파일을 확인합니다.

  7. 저장을 선택하여 리포지토리에 워크플로 파일을 추가합니다.

리포지토리에 워크플로 구성 추가

az functionapp deployment github-actions add 명령을 사용하여 함수 앱의 올바른 템플릿에서 워크플로 구성 파일을 생성할 수 있습니다. 그러면 새 YAML 파일은 사용자가 제공한 GitHub 리포지토리의 올바른 위치(/.github/workflows/)에 저장되고 앱의 게시 프로필 파일은 동일한 리포지토리의 GitHub 비밀에 추가됩니다.

  1. az functionapp 명령을 실행하여 githubUser/githubRepo값, MyResourceGroup, MyFunctionapp을 바꿉니다.

    az functionapp deployment github-actions add --repo "githubUser/githubRepo" -g MyResourceGroup -n MyFunctionapp --login-with-github
    

    이 명령은 대화형 방법을 사용하여 GitHub 계정에 대한 개인용 액세스 토큰을 검색합니다.

  2. 터미널 창에는 다음과 같은 메시지가 표시됩니다.

    Please navigate to https://github.com/login/device and enter the user code XXXX-XXXX to activate and retrieve your GitHub personal access token.
    
  3. 고유 XXXX-XXXX 코드를 복사하고, https://github.com/login/device로 이동한 다음, 복사한 코드를 입력합니다. 코드를 입력하면 다음과 같은 메시지가 표시됩니다.

    Verified GitHub repo and branch
    Getting workflow template using runtime: java
    Filling workflow template with name: func-app-123, branch: main, version: 8, slot: production, build_path: .
    Adding publish profile to GitHub
    Fetching publish profile with secrets for the app 'func-app-123'
    Creating new workflow file: .github/workflows/master_func-app-123.yml
    
  4. GitHub 리포지토리로 이동하여 작업을 선택합니다. 워크플로가 실행되었는지 확인합니다.

워크플로 구성 파일 만들기

GitHub 리포지토리에서 직접 Azure Functions 템플릿의 GitHub Actions 워크플로 구성 파일을 만들 수 있습니다.

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

  2. 작업새 워크플로를 선택합니다.

  3. 함수를 검색합니다.

    GitHub Actions 함수 템플릿 검색 스크린샷

  4. Microsoft Azure에서 작성한 표시된 함수 앱 워크플로에서 코드 언어와 일치하는 워크플로를 찾고 구성을 선택합니다.

  5. 새로 만든 YAML 파일에서 env.AZURE_FUNCTIONAPP_NAME 매개 변수를 Azure의 함수 앱 리소스 이름으로 업데이트합니다. 필요에 따라 앱에서 사용하는 언어 버전을 설정하는 매개 변수를 업데이트해야 할 수 있습니다(예: C#의 경우 DOTNET_VERSION).

  6. 새 워크플로 파일이 /.github/workflows/에 저장되고 있는지 확인하고 변경 내용 커밋...을 선택합니다.

워크플로 구성 업데이트

어떤 이유에서든 기존 워크플로 구성을 업데이트하거나 변경해야 하는 경우 리포지토리의 /.github/workflows/ 위치로 이동하여 특정 YAML 파일을 열고 필요한 변경을 수행한 다음 리포지토리에 업데이트를 커밋하면 됩니다.

예제: 워크플로 구성 파일

다음 템플릿 예에서는 functions-action의 버전 1 및 인증용 publish profile을 사용합니다. 템플릿은 선택한 언어와 함수 앱이 배포되는 운영 체제에 따라 달라집니다.

함수 앱이 Linux에서 실행되는 경우 Linux를 선택합니다.

name: Deploy DotNet project to Azure Function App

on:
  [push]

env:
  AZURE_FUNCTIONAPP_NAME: 'your-app-name'   # set this to your function app name on Azure
  AZURE_FUNCTIONAPP_PACKAGE_PATH: '.'       # set this to the path to your function app project, defaults to the repository root
  DOTNET_VERSION: '6.0.x'                   # set this to the dotnet version to use (e.g. '2.1.x', '3.1.x', '5.0.x')

jobs:
  build-and-deploy:
    runs-on: windows-latest
    environment: dev
    steps:
    - name: 'Checkout GitHub Action'
      uses: actions/checkout@v3

    - name: Setup DotNet ${{ env.DOTNET_VERSION }} Environment
      uses: actions/setup-dotnet@v3
      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
      id: fa
      with:
        app-name: ${{ env.AZURE_FUNCTIONAPP_NAME }}
        package: '${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}/output'
        publish-profile: ${{ secrets.AZURE_FUNCTIONAPP_PUBLISH_PROFILE }}

Azure Functions 작업

Azure Functions 작업(Azure/azure-functions)은 Azure의 기존 함수 앱 또는 앱의 특정 슬롯에 코드를 게시하는 방법을 정의합니다.

매개 변수

이 작업에 가장 일반적으로 사용되는 매개 변수는 다음과 같습니다.

매개 변수 설명
app-name (필수) 함수 앱의 이름.
slot-name (선택 사항) 배포하려는 특정 배포 슬롯의 이름입니다. 슬롯은 함수 앱에 이미 있어야 합니다. 지정하지 않으면 코드가 활성 슬롯에 배포됩니다.
publish-profile (선택 사항) 게시 프로필이 포함된 GitHub 비밀의 이름입니다.

다음 매개 변수도 지원되지만 특정 경우에만 사용됩니다.

매개 변수 설명
패키지 (선택 사항) 게시할 리포지토리의 하위 경로를 설정합니다. 기본적으로 이 값은 .로 설정되며 이는 GitHub 리포지토리의 모든 파일 및 폴더가 배포됨을 의미합니다.
respect-pom-xml (선택 사항) Java 함수에만 사용됩니다. 앱의 배포 아티팩트가 pom.xml 파일에서 파생되는 데 필요한지 여부입니다. Java 함수 앱을 배포할 때 이 매개 변수를 true로 설정하고 package.로 설정해야 합니다. 기본적으로 이 매개 변수는 false로 설정되어 있는데, 이는 package 매개 변수가 ./target/azure-functions/와 같이 앱의 아티팩트 위치를 가리켜야 함을 의미합니다.
respect-funcignore (선택 사항) GitHub Actions가 .funcignore 파일을 적용하여 파일에 정의된 파일 및 폴더를 제외할지 여부입니다. 리포지토리에 .funcignore 파일이 있고 이를 사용하여 텍스트 편집기 구성, .vscode/ 또는 Python 가상 환경(.venv/)과 같은 경로와 파일을 제외하려면 이 베일을 true로 설정합니다. 기본 설정은 false입니다.
scm-do-build-during-deployment (선택 사항) App Service 배포 사이트(Kudu)가 배포 전 작업을 수행하는지 여부입니다. 함수 앱의 배포 사이트는 https://<APP_NAME>.scm.azurewebsites.net/에서 찾을 수 있습니다. GitHub Actions 워크플로에서 종속성을 확인하는 대신 Kudu에서 배포를 제어해야 하는 경우 이 설정을 true로 변경합니다. 기본값은 false입니다. 자세한 내용은 SCM_DO_BUILD_DURING_DEPLOYMENT 설정을 참조하세요.
enable-oryx-build (선택 사항) Kudu 배포 사이트에서 Oryx를 사용하여 프로젝트 종속성을 확인하는지 여부입니다. Oryx를 사용하여 GitHub Actions 워크플로 대신 원격 빌드를 사용하여 프로젝트 종속성을 확인하려는 경우에는 true로 설정합니다. true일 때는 scm-do-build-during-deploymenttrue로 설정해야 합니다. 기본값은 false입니다.

고려 사항

Azure Functions 작업을 사용할 때 다음 사항을 고려해야 합니다.

  • GitHub Actions를 사용할 때 코드는 Azure Functions의 Zip 배포를 사용하여 함수 앱에 배포됩니다.

  • GitHub가 배포를 위해 Azure에 연결하는 데 필요한 자격 증명은 GitHub 리포지토리에 비밀로 저장되고 배포에서 secrets.<SECRET_NAME>으로 액세스됩니다.

  • GitHub Actions가 배포를 위해 Azure Functions로 인증하는 가장 쉬운 방법은 게시 프로필을 사용하는 것입니다. 서비스 주체를 사용하여 인증할 수도 있습니다. 자세히 알아보려면 이 GitHub Actions 리포지토리를 참조하세요.

  • 환경을 설정하고 빌드를 실행하기 위한 작업은 템플릿에서 생성되며 언어에 따라 달라집니다.

  • 템플릿은 env 요소를 사용하여 빌드 및 배포에 고유한 설정을 정의합니다.

다음 단계