GitHub Actions 정의
GitHub Actions는 소프트웨어 개발 워크플로우를 자동화할 수 있게 해주는 CI/CD(지속적 통합/지속적 배포) 플랫폼입니다. 이 도구를 사용하면 코드 저장소 내에서 직접 빌드, 테스트, 배포 파이프라인을 구축하고 관리할 수 있습니다.
Github Actions Components
GitHub Actions는 다음과 같은 주요 구성 요소로 이루어져 있습니다:
- Workflow
- Event
- Job
- Step
- Action
- Runner
이들은 서로 연결되어 자동화된 프로세스를 구성합니다. 각 구성 요소에 대해 자세히 살펴보겠습니다.
https://docs.github.com/en/actions/using-workflows/about-workflows#workflow-basics
Workflow
github workflows doc https://docs.github.com/en/actions/using-workflows/about-workflows
Workflow는 GitHub Actions의 가장 상위 개념으로, 전체 자동화 프로세스를 정의합니다.
- 정의: 하나 이상의 Job으로 구성된 자동화된 프로세스입니다.
- 저장 위치: .github/workflows 디렉토리에 YAML 파일로 저장됩니다.
- 실행 조건: 특정 Event에 의해 트리거되거나 스케줄에 따라 실행될 수 있습니다.
- 구조: 여러 Job을 포함할 수 있으며, 기본적으로 Job들은 병렬로 실행됩니다.
예시:
name: CI
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: '14'
- run: npm ci
- run: npm test
이 예시 Workflow는 main 브랜치에 push되거나 PR이 생성될 때 실행되며, Node.js 환경을 설정하고 테스트를 실행합니다.
Events
Trigger workflows doc https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#about-events-that-trigger-workflows
Event는 Workflow를 트리거하는 특정 활동이나 규칙을 의미합니다.
- 종류:
- Repository Event: push, pull request, issue 생성 등
- 외부 Event: 외부 서비스의 webhook
- 예약된 Event: cron 형식으로 정의된 스케줄
- 사용 예:
- 코드 푸시 시 자동으로 테스트 실행
- PR 생성 시 코드 리뷰 봇 실행
- 매일 밤 데이터베이스 백업
예시:
on:
push:
branches: [ main ]
pull_request:
types: [opened, synchronize, reopened]
schedule:
- cron: '0 2 * * *'
이 설정은 main 브랜치로의 push, PR 생성/업데이트, 그리고 매일 오전 2시에 Workflow를 실행합니다.
Job
Event는 Workflow를 트리거하는 특정 활동이나 규칙을 의미합니다.
- 종류:
- Repository Event: push, pull request, issue 생성 등
- 외부 Event: 외부 서비스의 webhook
- 예약된 Event: cron 형식으로 정의된 스케줄
- 사용 예:
- 코드 푸시 시 자동으로 테스트 실행
- PR 생성 시 코드 리뷰 봇 실행
- 매일 밤 데이터베이스 백업
예시:
on:
push:
branches: [ main ]
pull_request:
types: [opened, synchronize, reopened]
schedule:
- cron: '0 2 * * *'
이 설정은 main 브랜치로의 push, PR 생성/업데이트, 그리고 매일 오전 2시에 Workflow를 실행합니다.
Step
Step은 Job 내에서 실행되는 개별 작업입니다.
- 구성:
- Shell 명령어 실행
- Action 실행
- 특징:
- 동일한 Runner에서 실행되므로 데이터를 공유할 수 있습니다.
- 순차적으로 실행됩니다.
- steps의 uses는 어떤 액션을 사용할지 지정함.
- 이미 만들어진 액션을 사용할 때 지정
- 각 Step들 끼리는 data를 공유할 수 있다.
예시:
steps:
- name: Check out repository
uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.9'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Run tests
run: python -m unittest discover tests
이 예시에서는 코드 체크아웃, Python 설정, 의존성 설치, 테스트 실행의 4단계가 순차적으로 실행됩니다.
Action
markgetplace https://github.com/marketplace?type=actions
Action은 Workflow에서 자주 반복되는 작업을 재사용 가능한 단위로 만든 것입니다.
- 특징:
- GitHub Marketplace에서 다양한 Action을 찾아 사용할 수 있습니다.
- 커스텀 Action을 만들어 사용할 수도 있습니다.
- 사용 방법: uses 키워드를 통해 특정 Action을 사용할 수 있습니다.
예시:
steps:
- name: Deploy to Heroku
uses: AkhileshNS/heroku-deploy@v3.12.14
with:
heroku_api_key: ${{ secrets.HEROKU_API_KEY }}
heroku_app_name: "your-app-name"
heroku_email: "your-email@example.com"
이 예시는 Heroku 배포를 위한 커뮤니티 Action을 사용하는 방법을 보여줍니다.
Runners
self hosted runners doc https://docs.github.com/en/actions/hosting-your-own-runners/adding-self-hosted-runners
Runner는 Workflow Job을 실행하는 서버입니다.
- 종류:
- GitHub-hosted runners: GitHub에서 제공하는 가상 머신
- Self-hosted runners: 직접 설정 및 관리하는 머신
- 특징:
- GitHub-hosted runners는 매 Job마다 새로운 인스턴스를 사용합니다.
- Self-hosted runners는 특별한 하드웨어나 OS가 필요한 경우 유용합니다.
예시 (GitHub-hosted runner 사용):
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Run a one-line script
run: echo Hello, world!
예시 (Self-hosted runner 사용):
jobs:
build:
runs-on: self-hosted
steps:
- uses: actions/checkout@v3
- name: Run a one-line script
run: echo Hello, world!
각 구성 요소는 서로 유기적으로 연결되어 강력한 CI/CD 파이프라인을 구성할 수 있게 해줍니다. 실제 프로젝트에서는 이러한 구성 요소들을 조합하여 복잡한 워크플로우를 자동화할 수 있습니다.
'DevOps > Git' 카테고리의 다른 글
[Gitlab]Install / Backup / Restore Gitlab (0) | 2022.05.02 |
---|---|
[Git]What is GitOps? (0) | 2022.05.02 |