2.1.3.2 GitHub Actions 워크플로우 구성

GitHub Actions를 사용하여 CI/CD 워크플로우를 구성하는 과정은 .github/workflows 디렉토리에 YAML 파일을 생성하고, 이 파일 내에서 필요한 작업을 정의하는 것으로 시작됩니다. 워크플로우 파일은 여러 섹션으로 구성되며, 각 섹션은 워크플로우의 다양한 측면을 제어합니다.

워크플로우 파일의 기본 구조

name: CI

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2

    - name: Set up JDK 11
      uses: actions/setup-java@v2
      with:
        java-version: '11'
        distribution: 'adopt'

    - name: Build with Maven
      run: mvn clean install

    - name: Run Tests
      run: mvn test

핵심 섹션 설명

  1. name: 워크플로우의 이름을 지정합니다. GitHub UI에서 이 이름이 표시됩니다.

  2. on: 워크플로우가 어떤 이벤트에 반응하여 실행될지 정의합니다. 예를 들어, pushpull_request 이벤트에 대해 특정 브랜치를 지정할 수 있습니다.

  3. jobs: 워크플로우에서 실행할 작업을 정의합니다. 각 작업은 독립적인 환경에서 실행될 수 있으며, 여러 steps로 구성됩니다.

  4. runs-on: 작업이 실행될 환경(운영 체제)을 지정합니다. 예를 들어, ubuntu-latest, windows-latest, macos-latest 등을 지정할 수 있습니다.

  5. steps: 각 작업에서 실행할 단계를 정의합니다. uses를 사용하여 다른 Actions를 호출할 수 있으며, run을 사용하여 쉘 명령어를 실행할 수 있습니다.

GitHub Actions 워크플로우 구성 팁

  • 재사용 가능한 워크플로우 작성: 공통 작업을 재사용할 수 있도록 커스텀 Actions를 만들거나, 마켓플레이스에서 제공하는 Actions를 활용하세요.

  • 비밀과 환경 변수 관리: 민감한 정보는 GitHub Secrets를 사용하여 안전하게 관리하고, 워크플로우 파일에서 참조하세요.

  • 매트릭스 빌드 사용: 다양한 환경에서 테스트하려면 strategymatrix 키워드를 사용하여 여러 환경을 조합해 빌드할 수 있습니다.

GitHub Actions의 워크플로우 파일을 통해 복잡한 CI/CD 파이프라인을 간편하게 구성할 수 있으며, 이는 개발 팀이 보다 효율적으로 작업을 수행하고, 소프트웨어의 품질을 지속적으로 개선할 수 있게 도와줍니다. GitHub Actions의 강력한 기능을 활용하여 개발 프로세스의 자동화 및 최적화를 실현할 수 있습니다.

매트릭스 빌드 예시

매트릭스 빌드를 사용하면 여러 버전의 언어나 다양한 운영 체제에서 동시에 빌드와 테스트를 수행할 수 있습니다. 이는 코드가 다양한 환경에서도 예상대로 동작하는지 검증하는 데 유용합니다.

jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [10.x, 12.x, 14.x]
    steps:
    - uses: actions/checkout@v2
    - name: Use Node.js $
      uses: actions/setup-node@v1
      with:
        node-version: $
    - run: npm install
    - run: npm test

이 예시에서는 세 가지 버전의 Node.js를 사용하여 테스트를 실행합니다. 매트릭스 전략을 통해 여러 버전을 한 번에 정의하고, 각각에 대해 테스트를 수행할 수 있습니다.

워크플로우 최적화 팁

  • 캐싱 사용하기: 의존성 다운로드 시간을 줄이기 위해 캐싱 기능을 사용하세요. 예를 들어, actions/cache를 사용해 Node.js 프로젝트의 node_modules 디렉토리나 Maven 프로젝트의 .m2 디렉토리를 캐시할 수 있습니다.
steps:
- uses: actions/checkout@v2
- uses: actions/cache@v2
  with:
    path: ~/.m2
    key: $-m2-$
    restore-keys: |
      $-m2
- name: Build with Maven
  run: mvn -B package --file pom.xml
  • 조건부 실행 활용하기: if 조건을 사용하여 특정 조건 하에서만 작업이 실행되도록 설정할 수 있습니다. 예를 들어, 특정 브랜치에 푸시되었을 때나 특정 라벨이 있는 경우에만 배포 작업을 수행하도록 할 수 있습니다.

GitHub Actions를 통한 워크플로우 구성과 최적화를 통해, 개발 팀은 소프트웨어를 더 신속하고 안정적으로 배포할 수 있으며, 프로젝트 관리를 더욱 효과적으로 수행할 수 있습니다.

source: DevOps/2.Continuous_Integration_(CI)/2.1.Jenkins_TravisCI_GitHubActions/2.1.3.GithubActions/2.1.3.2.md