빠른 시작: 앱을 게시하는 GitHub 워크플로 만들기

이 빠른 시작에서는 소스 코드에서 .NET 앱을 게시하는 GitHub 워크플로를 만드는 방법을 알아봅니다. GitHub에서 대상으로 .NET 앱을 자동으로 게시하는 것을 CD(지속적인 배포)라고 합니다. 애플리케이션을 게시할 수 있는 대상에는 여러 가지가 있는데, 이 빠른 시작에서는 Azure에 게시합니다.

필수 조건

게시 프로필 추가

Azure에 앱을 게시하려면 애플리케이션의 App Service 인스턴스에 대한 Azure Portal을 엽니다. 리소스 개요에서 게시 프로필 가져오기를 선택하고 *.PublishSetting 파일을 로컬로 저장합니다.

Azure Portal, App Service resource: Get publish profile

Warning

게시 프로필에는 Azure App Service 리소스에 액세스하기 위한 자격 증명과 같은 중요한 정보가 포함되어 있습니다. 이 정보는 항상 매우 신중하게 처리되어야 합니다.

GitHub 리포지토리의 설정으로 이동하고 왼쪽 탐색 메뉴에서 비밀을 선택합니다. 새 리포지토리 비밀을 선택하여 새 비밀을 추가합니다.

GitHub / Settings / Secret: Add new repository secret

AZURE_PUBLISH_PROFILE이름으로 입력하고 게시 프로필의 XML 콘텐츠를 텍스트 영역에 붙여넣습니다. 비밀 추가를 선택합니다. 자세한 내용은 암호화된 비밀을 참조하세요.

워크플로 파일 만들기

GitHub 리포지토리에서 .github/workflows 디렉터리에 새 YAML 파일을 추가합니다. 워크플로의 용도를 명확하게 나타내는 의미 있는 파일 이름을 선택합니다. 자세한 내용은 워크플로 파일을 참조하세요

Important

GitHub를 사용하려면 워크플로 컴퍼지션 파일을 .github/workflows 디렉터리 내에 배치해야 합니다.

워크플로 파일은 일반적으로 jobs.<job_id>/steps[*]를 통해 하나 이상의 GitHub Action의 컴퍼지션을 정의합니다. 자세한 내용은 GitHub Actions의 워크플로 구문을 참조하세요.

publish-app.yml이라는 새 파일을 만들고 다음 YML 콘텐츠를 복사하여 붙여넣습니다.

name: publish

on:
  push:
    branches: [ production ]

env:
  AZURE_WEBAPP_NAME: DotNetWeb
  AZURE_WEBAPP_PACKAGE_PATH: '.' # Set this to the path to your web app project, defaults to the repository root:
  DOTNET_VERSION: '6.0.401' # The .NET SDK version to use

jobs:
  publish:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v3
    - name: Setup .NET Core
      uses: actions/setup-dotnet@v3
      with:
        dotnet-version: ${{ env.DOTNET_VERSION }}

    - name: Install dependencies
      run: dotnet restore
      
    - name: Build
      run: |
        cd DotNet.WebApp
        dotnet build --configuration Release --no-restore
        dotnet publish -c Release -o ../dotnet-webapp -r linux-x64 --self-contained true /p:UseAppHost=true
    - name: Test
      run: |
        cd DotNet.WebApp.Tests
        dotnet test --no-restore --verbosity normal
      
    - uses: azure/webapps-deploy@v2
      name: Deploy
      with:
        app-name: ${{ env.AZURE_WEBAPP_NAME }}
        publish-profile: ${{ secrets.AZURE_PUBLISH_PROFILE }}
        package: '${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/dotnet-webapp'

위의 워크플로 컴퍼지션에서 다음을 수행합니다.

  • name: publish는 이름을 정의합니다. 워크플로 상태 배지에 "게시"가 표시됩니다.

    name: publish
    
  • on 노드는 워크플로를 트리거하는 이벤트를 의미합니다.

    on:
      push:
        branches: [ production ]
    
    • production 분기에서 push가 발생할 때 트리거됩니다.
  • env 노드는 명명된 환경 변수(env var)를 정의합니다.

    env:
      AZURE_WEBAPP_NAME: DotNetWeb
      AZURE_WEBAPP_PACKAGE_PATH: '.' # Set this to the path to your web app project, defaults to the repository root:
      DOTNET_VERSION: '6.0.401' # The .NET SDK version to use
    
    • 환경 변수 AZURE_WEBAPP_NAME에 값 DotNetWeb이 할당됩니다.
    • 환경 변수 AZURE_WEBAPP_PACKAGE_PATH에 값 '.'이 할당됩니다.
    • 환경 변수 DOTNET_VERSION에 값 '6.0.401'이 할당됩니다. 환경 변수는 나중에 actions/setup-dotnet@v3 GitHub Action의 dotnet-version을 지정하기 위해 참조됩니다.
  • jobs 노드는 워크플로가 수행할 단계를 빌드합니다.

    jobs:
      publish:
    
        runs-on: ubuntu-latest
    
        steps:
        - uses: actions/checkout@v3
        - name: Setup .NET Core
          uses: actions/setup-dotnet@v3
          with:
            dotnet-version: ${{ env.DOTNET_VERSION }}
    
        - name: Install dependencies
          run: dotnet restore
          
        - name: Build
          run: |
            cd DotNet.WebApp
            dotnet build --configuration Release --no-restore
            dotnet publish -c Release -o ../dotnet-webapp -r linux-x64 --self-contained true /p:UseAppHost=true
        - name: Test
          run: |
            cd DotNet.WebApp.Tests
            dotnet test --no-restore --verbosity normal
          
        - uses: azure/webapps-deploy@v2
          name: Deploy
          with:
            app-name: ${{ env.AZURE_WEBAPP_NAME }}
            publish-profile: ${{ secrets.AZURE_PUBLISH_PROFILE }}
            package: '${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/dotnet-webapp'
    
    • Ubuntu의 최신 버전에서 실행되는 publish라는 단일 작업이 있습니다.
    • actions/setup-dotnet@v3 GitHub Action은 DOTNET_VERSION 환경 변수에서 지정된 버전으로 .NET SDK를 설정하는 데 사용됩니다.
    • dotnet restore 명령이 호출됩니다.
    • dotnet build 명령이 호출됩니다.
    • dotnet publish 명령이 호출됩니다.
    • dotnet test 명령이 호출됩니다.
    • azure/webapps-deploy@v2 GitHub Action은 지정된 publish-profilepackage를 사용하여 앱을 배포합니다.
      • publish-profileAZURE_PUBLISH_PROFILE 리포지토리 비밀에서 할당됩니다.

워크플로 상태 배지 만들기

GitHub 리포지토리가 리포지토리 디렉터리의 루트에 README.md 파일을 갖는 것은 일반적인 명명법입니다. 마찬가지로 다양한 워크플로에 대한 최신 상태를 보고하는 것이 좋습니다. 모든 워크플로는 README.md 파일 내에서 시각적으로 매력적인 상태 배지를 생성할 수 있습니다. 워크플로 상태 배지를 추가하려면 다음을 수행합니다.

  1. GitHub 리포지토리에서 작업 탐색 옵션을 선택합니다.

  2. 모든 리포지토리 워크플로가 왼쪽에 표시되며, 원하는 워크플로와 줄임표(...) 단추를 선택합니다.

    • 줄임표(...) 단추는 선택한 워크플로의 메뉴 옵션을 확장합니다.
  3. 상태 배지 만들기 메뉴 옵션을 선택합니다.

    GitHub: Create status badge

  4. 상태 배지 복사 Markdown 단추를 선택합니다.

    GitHub: Copy status badge Markdown

  5. Markdown을 README.md 파일에 붙여넣고, 파일을 저장하고, 변경 내용을 커밋하고 푸시합니다.

자세한 내용은 워크플로 상태 배지 추가를 참조하세요.

워크플로 상태 배지 게시 예제

전달 실패 상태 없음
GitHub: publish passing badge GitHub: publish failing badge GitHub: publish no-status badge

참고 항목

다음 단계