728x90
왜 Github Action?
CI/CD 툴로 유명한 건 Github Action 혹은 Jenkins 가 있는데, Github Action 사용
이유는 Jenkins는 Jenkins 위한 서버를 우리가 따로 구축해야하는데 Github Action은 Github 가 공짜로 제공한다.
또한 소스코드 중앙 관리를 위해 Github Repository 를 쓰는 데 Github Action 과 호환성이 좋다.
GitHub Actions를 사용하면 자동으로 코드 저장소에서 어떤 이벤드(event) 가 발생했을 때, 특정 작업이 일어나게 하거나, 주기적으로 어떤 작업들을 반복해서 실행시킬 수도 있다.
- 테스트: 누군가가 코드 저장소에 Pull Request 를 생성하게 되면, Github Action을 통해 해당 코드 변경부분에 문제가 없는지 각종 검사를 진행할 수 있다
- 배포: 어떤 새로운 코드가 기본 브랜치(master 또는 main)에 유입(push)되면, Github Action을 통해 소프트웨어를 빌드(build)하고 상용 서버에 배호(deploy)할수도 있다.
- 배치: 매일 밤 특정 시각에 그날 하루에 대한 통계 데이터를 수집시킬 수 있다.
Github Action 동작원리
- Event: 작업이 언제 실행되는지 시점 정의
- Runner: Job 작업을 수행하는 가상머신(VM) 혹은 컨테이너(Container)
- Job: 작업 처리 단위 = 소작업(Step) 집합
- Step: 소작업 처리 단위 = Command(단순), Script(복잡) 혹은 Action
- Action: 라이브러리같은 개념으로 다른 사람들이 만들어 올린 Script (재사용 및 중복 제거)
Github Action: Workflow 구성 및 작성
1. Workflow 정의: 자동화한 작업
Github Actions 에서 어떤 작업이든 정의할 수 있는 파일이자 작업 정의의 가장 상위 개념
[Workflow 설정 방법 : `.github/workflows` 폴더 내 YAML 파일 정의]
프로젝트 리포지토리 내 `.github/workflows`디렉토리를 새로 만들어서 그 안에 YAML 파일로 워크플로우 정의
여러 개의 워크플로우 YAML 파일을 생성해놓을 수 있다.
2. Workflow YAML 구성
[ON 속성: Event = 작업이 언제 실행되는지 시점 정의]
- 브랜치 기준: 어떤 브랜치에 어떤 액션(Push 혹은 Pull Request 등) 이 발생했는지 기준으로 작업 수행
- 이슈 기준: 브랜치와 비슷하게 이슈가 발행된 시점, 어떤 타입으로 발행되었는지 등을 기준으로 작업 수행
- 시간 기준: cron 문법을 통해 언제 몇시 몇분마다 수행할 것인지 스케줄에 따라 작업 수행
[JOB 속성: Job = 작업 처리 단위]
독립된 가상 머신(VM) 또는 컨테이너 (Container) 에서 돌아가는 하나의 처리 단위로 기본적으로 병렬 수행
- 1 Workflow : N Job
- 하나의 워크플로우는 여러 개의 Job 으로 구성되며 적어도 하나의 Job 은 있어야한다.
[RUN-ON 속성: Runner = Job 수행을 위한 OS(머신) 정의]
- 1 Job : 1 Runner
- Workflow 마다 Runner를 정의하는게 아닌, Job 마다 Runner 를 정의
- Workflow 내 다수의 Job 각각에 별개의 OS(머신) 설정 가능
[STEP 속성: 소작업 처리 단위 (Script 혹은 Action)]
name: learn-github-actions
run-name: ${{ github.actor }} is learning GitHub Actions
on: [push]
jobs:
check-bats-version:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- run: npm install -g bats
- run: bats -v
- `RUN` : 작업 단계는 단순한 커맨드(Command)나 스크립트(Script)가 될 수도 있고,
- `USES`: 액션(Action) 이라고 하는 라이브러리 같은 성격의 스크립트 (Script)를 가져다 사용할 수 있다.
- 위의 예시에서 체크아웃 액션(`actions/checkout`) : 코드 저장소로부터 코드 내려받는 스크립트
728x90
'ASAC 웹 풀스택 > DevOps' 카테고리의 다른 글
[Cloud] AWS 클라우드 서비스: AWS 구조와 AWS 서비스 분류 (0) | 2024.11.03 |
---|---|
[Cloud] 클라우드 컴퓨팅 모델: IaaS, PaaS, SaaS (2) | 2024.11.03 |
[Docker] best practices (1) | 2024.10.24 |
[Docker] Docker Workflow (1) | 2024.10.19 |
[Docker] Github Action으로 CI/CD - CD (1) | 2024.10.17 |