Overview
오늘은 Github Action에 대해서 공부해보려고 한다.
Github Action이란?
GitHub Actions는 빌드, 테스트 및 배포 파이프라인을 자동화할 수 있는 지속적 통합 및 지속적 배포(CI/CD) 플랫폼이다.
리포지토리에 대한 모든 풀 요청을 빌드 및 테스트하는 워크플로를 생성하거나 Merge된 풀 요청을 프로덕션에 배포할 수 있다.
Github Action 구성요소
Workflows
워크플로는 GitHub Actions의 기본 구성 단위이다. 일반적으로 ".github/workflows/<workflow_name>.yml"이라는 YAML 파일에 정의된다. 워크플로우는 하나 이상의 작업을 포함할 수 있으며 리포지토리에서 푸시 또는 풀 요청과 같은 이벤트에 의해 트리거된다.
on:
push:
branches:
- main
- develop
pull_request:
Events
이벤트는 워크플로를 시작하는 트리거이다. 일반적인 이벤트에는 push, pull_request 및 일정이 포함된다. 특정 요구 사항에 따라 워크플로를 트리거하는 사용자 지정 이벤트를 만들 수도 있다.
Jobs
작업은 워크플로 내에서 실행되는 개별 작업이다. 러너라는 가상 머신에서 실행되며 하나 이상의 단계를 포함할 수 있다. 작업은 종속성에 따라 병렬 또는 순차적으로 실행될 수 있다.
jobs:
echo-hello-world:
runs-on: ubuntu-latest
name: Echo Hello World Job
steps:
- uses: actions/checkout@v2
- run: echo Hello World!
Steps
단계는 작업 내 작업의 가장 작은 단위이다. 각 단계는 셸 명령을 실행하거나 작업을 실행할 수 있다. 단계는 워크플로 파일에 지정된 순서대로 실행되며 각 단계는 동일한 실행기 인스턴스 내에서 실행된다.
작업은 작업 흐름에서 공유 및 결합할 수 있는 재사용 가능한 코드 단위이다. GitHub 커뮤니티에서 개발 및 게시하거나 자체적으로 사용할 수 있도록 만들 수 있다. 작업은 일반적으로 별도의 리포지토리에 저장되며 해당 리포지토리 이름으로 워크플로 파일에서 참조된다.
Runners
Runners는 작업이 실행되는 가상 머신 또는 자체 호스팅 환경이다. GitHub는 다양한 운영 체제(Linux, macOS 및 Windows) 및 하드웨어 구성을 호스팅 러너에 제공하거나 보다 전문적인 요구 사항을 위해 자체 호스팅 러너를 설정할 수 있다.
Environment Variables and Secrets
환경 변수는 워크플로 내의 작업 및 스크립트에서 액세스할 수 있는 데이터를 저장하는 데 사용된다. 비밀은 액세스 토큰 또는 API 키와 같은 민감한 데이터를 저장하는 데 사용되는 암호화된 환경 변수이다. 로그에 노출되지 않으며 동일한 리포지토리에서 실행되는 작업을 통해서만 액세스할 수 있다.
Artifacts and Caching
아티팩트는 빌드 출력 또는 테스트 결과와 같이 나중에 저장하고 사용할 수 있는 워크플로에서 생성된 파일이다. 캐싱은 워크플로 실행 간에 데이터를 저장하고 검색하는 데 사용되므로 이전에 다운로드한 종속성 또는 빌드 출력을 재사용하여 프로세스 속도를 높일 수 있다.
jobs:
# archive generated json to artifact
artifact:
name: Archive data json files
runs-on: ubuntu-20.04
steps:
- name: Checkout repository
uses: actions/checkout@v3
with:
ref: ${{ github.ref }}
- name: Set ENVIRONMENT
run: |
if [ ${{ github.ref_name }} == 'production' ]; then
echo "ENVIRONMENT=somaz" >> $GITHUB_ENV
else
echo "ENVIRONMENT=${{ github.ref_name }}" >> $GITHUB_ENV
fi
- name: Archive data json files
uses: actions/upload-artifact@v3
with:
name: ${{ env.ENVIRONMENT }}_somaz_staticdata_server_v${{ github.run_number }}
path: |
somaz/somazJson
retention-days: 30
jobs:
generate:
name: Download somaz staticdata files and Generate ts files
runs-on: ubuntu-20.04
steps:
# node modules 캐싱
- name: Cache node modules
id: node-cache
uses: actions/cache@v2
env:
cache-name: cache-node-modules
with:
# npm cache files are stored in `~/.npm` on Linux/macOS
path: |
**/node_modules
key: ${{ runner.os }}-build-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-build-
Reference
'IaC > CI CD Tool' 카테고리의 다른 글
3. Github Action (With Automate Pull Request) (0) | 2023.05.23 |
---|---|
2. Github Action (With Syntax) (0) | 2023.05.22 |
ArgoCD란? (0) | 2023.05.17 |
3. GitLab이란? / GitLab CI/CD (0) | 2023.04.24 |
2. GitLab이란? / GitLab Runner 개념 및 설치 (0) | 2023.04.23 |