2.1.3.3 GitHub Actions를 이용한 다양한 자동화 작업

GitHub Actions는 개발 워크플로우를 자동화하고 최적화하는 데 있어 매우 유용한 도구입니다. 이 섹션에서는 테스트, 빌드, 배포를 포함한 다양한 자동화 작업을 구현하는 방법에 대해 설명합니다.

코드 테스트 자동화

코드 변경이 발생할 때마다 자동으로 유닛 테스트를 실행하여 코드의 신뢰성을 확보할 수 있습니다.

name: Automated Testing

on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Set up Python
      uses: actions/setup-python@v2
      with:
        python-version: '3.8'
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install -r requirements.txt
    - name: Run tests
      run: python -m unittest

이 예시에서는 Python 유닛 테스트를 자동으로 실행합니다.

빌드 자동화

빌드 프로세스를 자동화하여 소프트웨어 빌드를 보다 신속하고 효율적으로 수행할 수 있습니다.

name: Automated Build

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Build Docker Image
      run: docker build . --file Dockerfile --tag myapp:latest

이 예시에서는 Docker 이미지를 빌드하는 과정을 자동화합니다.

배포 자동화

테스트와 빌드가 성공적으로 완료되면, 코드를 자동으로 배포할 수 있습니다.

name: Automated Deployment

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Deploy to Heroku
      uses: akhileshns/heroku-deploy@v3.12.12
      with:
        heroku_api_key: $
        heroku_app_name: "your-heroku-app-name"
        heroku_email: "your-email@example.com"

이 예시에서는 Heroku에 애플리케이션을 배포합니다.

보안 취약점 스캔

코드를 정기적으로 스캔하여 보안 취약점을 탐지하고 해결할 수 있습니다.

name: Security Scan

on: [push]

jobs:
  security-scan:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Run ZAP Scan
      uses: zaproxy/action-baseline@v0.4.0
      with:
        token: $

이 예시에서는 OWASP ZAP을 사용하여 보안 취약점을 스캔합니다.

문서 자동화

문서를 자동으로 생성하고 업데이트하여 프로젝트 문서를 최신 상태로 유지할 수 있습니다.

name: Documentation

on:
  push:
    branches:
      - main

jobs:
  docs:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Generate Docs
      run: doxygen Doxyfile
    - name: Deploy Docs
      uses: peaceiris/actions-gh-pages@v3
      with:
        github_token: $
        publish_dir: ./docs

이 예시에서는 Doxygen을 사용하여 문서를 생성하고, GitHub Pages에 배포합니다.

알림 설정

작업의 성공, 실패, 또는 다른 상태 변경에 따라 개발자에게 알림을 보내는 것도 중요한 자동화 작업입니다. Slack이나 이메일로 알림을 보낼 수 있습니다.

name: Notification

on: [push]

jobs:
  notify:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Send Success Notification
      if: success()
      uses: rtCamp/action-slack-notify@v2
      env:
        SLACK_CHANNEL: general
        SLACK_COLOR: good
        SLACK_MESSAGE: 'Deployment successful! :tada:'
        SLACK_WEBHOOK: $
    - name: Send Failure Notification
      if: failure()
      uses: rtCamp/action-slack-notify@v2
      env:
        SLACK_CHANNEL: general
        SLACK_COLOR: danger
        SLACK_MESSAGE: 'Deployment failed. :x:'
        SLACK_WEBHOOK: $

이 예시에서는 배포 작업이 성공하거나 실패할 때 Slack 채널에 알림을 보냅니다. 작업의 결과에 따라 다른 메시지와 색상을 사용하여 팀에 알림을 제공합니다.

결론

GitHub Actions를 통한 자동화는 개발 팀이 더 효율적으로 작업하고, 개발 프로세스의 안정성을 높이며, 프로젝트의 품질을 지속적으로 관리할 수 있게 해줍니다. 각 프로젝트의 요구사항과 팀의 작업 흐름에 맞춰서 다양한 자동화 워크플로우를 설계하고 구현하세요. GitHub Actions는 이러한 과정을 단순화하고, 더 나은 개발 경험을 제공하기 위한 강력한 도구입니다.

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