GitHub Actions 및 .NET

이 개요에서는 .NET 애플리케이션 개발에서 GitHub Actions가 어떤 역할을 하는지 알아봅니다. GitHub Actions는 소스 코드 리포지토리가 CI(연속 통합) 및 CD(지속적인 업데이트)를 자동화할 수 있도록 허용합니다. 그 외에도 GitHub Actions는 코드 검토, 분기 관리 및 문제 심사를 통해 자동화를 위한 후크를 제공하는 고급 시나리오를 노출합니다. GitHub의 .NET 소스 코드를 사용하면 여러 가지 방법으로 GitHub Actions를 활용할 수 있습니다.

GitHub Actions

GitHub Actions는 다음과 같은 독립 실행형 명령을 나타냅니다.

  • actions/checkout - 이 작업은 $GITHUB_WORKSPACE 아래의 리포지토리를 체크 아웃하므로 워크플로에서 액세스할 수 있습니다.
  • actions/setup-dotnet - 이 작업은 작업에 사용할 .NET CLI 환경을 설정합니다.
  • dotnet/versionsweeper - 이 작업은 지원 외 대상 버전의 .NET 리포지토리를 스윕합니다.

이러한 명령은 단일 작업으로 격리되어 있지만 워크플로 컴퍼지션을 통해 강력하게 사용할 수 있습니다. 워크플로 컴퍼지션에서 워크플로를 트리거하는 이벤트를 정의합니다. 워크플로가 실행되면 수행하도록 지시된 다양한 작업이 있습니다. 각 작업은 여러 단계를 정의합니다. 단계는 GitHub Actions에 위임하거나 명령줄 스크립트를 호출합니다.

자세한 내용은 GitHub Actions 소개를 참조하세요. 워크플로 파일을 애플리케이션을 빌드, 테스트 및/또는 게시하는 다양한 단계를 나타내는 컴퍼지션으로 간주해 보겠습니다. 많은 .NET CLI 명령을 사용할 수 있으며, 대부분 GitHub Action의 컨텍스트에서 사용할 수 있습니다.

사용자 지정 GitHub Actions

Marketplace에서 사용할 수 있는 많은 GitHub Actions가 있지만 직접 작성할 수도 있습니다. .NET 애플리케이션을 실행하는 GitHub Actions를 만들 수 있습니다. 자세한 내용은 자습서: .NET을 사용하여 GitHub Action 만들기를 참조하세요.

워크플로 파일

GitHub Actions는 워크플로 파일을 통해 활용됩니다. 워크플로 파일은 리포지토리의 .github/workflows 디렉터리에 있어야 하며 YAML(*.yml 또는 *.yaml)이어야 합니다. 워크플로 파일은 워크플로 컴퍼지션을 정의합니다. 워크플로는 하나 이상의 작업으로 구성된 구성 가능한 자동화된 프로세스입니다. 자세한 내용은 GitHub Actions의 워크플로 구문을 참조하세요.

워크플로 단계 예제

자습서빠른 시작으로 제공되는 .NET 워크플로 파일의 많은 예가 있습니다. 다음은 워크플로 파일 이름의 몇 가지 좋은 예입니다.

워크플로 파일 이름

설명

소스 코드를 컴파일(또는 빌드)합니다. 소스 코드가 컴파일되지 않으면 실패합니다.

리포지토리 내에서 단위 테스트를 연습합니다. 테스트를 실행하려면 먼저 소스 코드를 컴파일해야 합니다. 이는 실제로 빌드 및 테스트 워크플로입니다(build-validation.yml 워크플로를 대체함). 단위 테스트에 실패하면 워크플로 오류가 발생합니다.

소스 코드를 패키지하고 대상에 게시합니다.

코드에서 보안 취약성 및 코딩 오류를 분석합니다. 취약성이 검색되면 오류가 발생할 수 있습니다.

암호화된 암호

워크플로 파일에서 암호화된 비밀을 사용하려면 secrets 컨텍스트 개체의 워크플로 식 구문을 사용하여 비밀을 참조합니다.

${{ secrets.MY_SECRET_VALUE }} # The MY_SECRET_VALUE must exist in the repository as a secret

비밀 값은 로그에 인쇄되지 않습니다. 대신 해당 이름은 값을 나타내는 별표와 함께 인쇄됩니다. 예를 들어 각 단계가 작업 내에서 실행되므로 사용하는 모든 값은 작업 로그에 출력됩니다. 비밀 값은 다음과 유사하게 렌더링됩니다.

MY_SECRET_VALUE: ***

Important

secrets 컨텍스트는 리포지토리, 분기 및 작업 범위가 지정된 GitHub 인증 토큰을 제공합니다. 이러한 토큰은 사용자 개입 없이 GitHub에서 제공합니다.

${{ secrets.GITHUB_TOKEN }}

자세한 내용은 워크플로에서 암호화된 비밀 사용을 참조하세요.

이벤트

워크플로는 다양한 유형의 이벤트에 의해 트리거됩니다. 가장 일반적인 웹후크 이벤트 외에도 예약된 이벤트와 수동 이벤트도 있습니다.

웹후크 이벤트 예제

다음 예제에서는 워크플로에 대한 웹후크 이벤트 트리거를 지정하는 방법을 보여 줍니다.

name: code coverage

on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main, staging

jobs:
  coverage:

    runs-on: ubuntu-latest

    # steps omitted for brevity

이전 워크플로에서 pushpull_request 이벤트는 워크플로가 실행되도록 트리거합니다.

예약된 이벤트 예제

다음 예제에서는 워크플로에 대한 예약된(cron 작업) 이벤트 트리거를 지정하는 방법을 보여 줍니다.

name: scan
on:
  schedule:
  - cron: '0 0 1 * *'
  # additional events omitted for brevity

jobs:
  build:
    runs-on: ubuntu-latest

    # steps omitted for brevity

이전 워크플로에서 schedule 이벤트는 매월 첫째 날에 실행되도록 워크플로를 트리거하는 '0 0 1 * *'cron을 지정합니다. 일정에 따라 워크플로를 실행하는 것은 실행하는 데 시간이 오래 걸리거나 덜 주의가 필요한 작업을 수행하는 워크플로에 적합합니다.

수동 이벤트 예제

다음 예제에서는 워크플로에 대한 수동 이벤트 트리거를 지정하는 방법을 보여 줍니다.

name: build
on:
  workflow_dispatch:
    inputs:
      reason:
        description: 'The reason for running the workflow'
        required: true
        default: 'Manual run'
  # additional events omitted for brevity

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name: 'Print manual run reason'
        if: ${{ github.event_name == 'workflow_dispatch' }}
        run: |
          echo 'Reason: ${{ github.event.inputs.reason }}'

    # additional steps omitted for brevity

이전 워크플로에서 workflow_dispatch 이벤트에는 입력으로 reason이 필요합니다. GitHub는 워크플로를 수동으로 실행하는 이유를 제공하라는 메시지를 표시하기 위해 이 UI와 해당 UI가 동적으로 변경되는 것을 확인합니다. steps는 사용자가 제공한 이유를 출력합니다.

자세한 내용은 워크플로를 트리거하는 이벤트를 참조하세요.

.NET CLI

.NET CLI(명령줄 인터페이스)는 .NET 애플리케이션의 개발, 빌드, 실행, 게시에 사용되는 플랫폼 간 도구 체인입니다. .NET CLI는 워크플로 파일 내에서 개별 steps의 일부로 run하는 데 사용됩니다. 일반적인 명령은 다음과 같습니다.

자세한 내용은 .NET CLI 개요를 참조하세요.

참고 항목

.NET을 사용한 GitHub Actions에 대해 자세히 알아보려면 다음 리소스를 참조하세요.