GitHub Actions 간단 소개! - Team-HGD/SniffMEET GitHub Wiki
GitHub Actions 소개
빌드, 테스트, 및 배포 파이프라인을 자동화하는 CI/CD
CI/CD
- CI(Continuous Integration): 코드의 변경 사항을 정기적으로 공용 코드 저장소에 통합하는 프로세스, 변경 사항이 저장소에 추가될 때, 자동으로 빌드와 테스트를 실행한다.
- 빠른 피드백(자동 빌드및 테스트), 충돌 조기 발견
- CD(Continuous Deployment): 테스트를 통과한 모든 코드 변경 사항이 자동으로 프로덕션에 배포됨.
- 빠른 배포를 통해서 수정 사항이 유저에게 빠르게 전달 가능
구조
워크플로우, name, on, jobs, steps 등으로 구성
name
name: HGD Workflow
워크플로우의 이름, 작성하지 않은 경우에는 .github/workflows/
디렉토리 내부의 ‘상대경로’를 name
으로 사용한다.
run-name
# 누가 이 워크플로우를 실행시켰는지 알 수 있는 run-name 설정
run-name: HGD Workflow triggered by ${{ github.actor }} ${{문법몰라요 ㅜ}}
워크플로우 실행(run)의 이름, 이름을 동적으로 표현할 수 있어서 현재 실행된 워크플로우를 쉽게 식별하게 할 수 있음.
on
# main 브랜치에 커밋이 푸시되면 워크플로우가 실행되도록 트리거를 설정
on:
push:
branches:
- main
워크플로우가 트리거되는 이벤트를 정의한다.
on
에서 트리거 할 수 있는 키워드
push
: 브랜치에 커밋이 푸시 될 때 워크플로우를 실행pull_request
: PR이 열리거나 혹은 업데이트 될 때 워크플로우 실행label
: 특정 레이블이 추가되거나 제거될 때 워크플로우 실행- 타입
created
,edited
,deleted
issues
: 이슈가 열리거나 닫힐 때, 이슈에 코멘트가 달릴 때 실행- 타입
opened
,edited
,closed
schedule
: 정해진 시간에 주기적으로 워크플로우 실행 - cron 표현식 사용(ㅋㅋ)workflow_dispatch
: 수동으로 워크플로우를 실행할 수 있도록 함, GitHub 웹에서 Run workflow 버튼을 눌러서 실행release
: 새로운 릴리즈가 생성되거나 업데이트 될 때 워크플로우 실행- 다음과 같은
type
들이 있다. created
: 새로운 릴리즈 생성될 때published
: 릴리즈가 게시될 때 (사용자에게 릴리즈가 공개 될 때)unpublished
: 릴리즈가 게시 취소될 때edited
: 기존 릴리즈가 수정될 때- 위 타입들은 배열에 넣어서 사용, 2개 이상도 사용 가능
[created, published]
- 다음과 같은
복합적인 이벤트 처리도 가능하다:
# main 브랜치에 커밋이 푸시되거나, PR이 열리면 워크플로우가 실행되도록 트리거를 설정
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs
워크플로우에서 실행되는 작업을 정의하는 부분, runs-on
, steps
등으로 구성됨
jobs id
jobs:
build: # 이게 식별자
작업을 구분하는 역할을 한다.
runs-on
jobs:
build: # 이게 식별자
runs-on: macos-latest # 이게 runs-on
어떤 환경에서 실행 될지 지정한다.
steps
jobs:
build:
runs-on: macos-latest
steps: # 실제 수행할 작업, 쉘 명령어 실행 가능
name: stepname
run echo ...
continue-on-error: true
작업이 수행할 단계의 리스트, 각 단계는 run
명령어로 쉘 명령어를 실행하거나 uses
를 통해 GitHub Actions 호출 가능
step
의 구조
name
: 스텝의 이름uses
: GitHub Action을 호출할 때 사용run
: 쉘 명령어 실행할 때 사용continue-on-error
: true로 설정된 스텝이 실패하더라도 워크플로우 계속 실행
needs
jobs:
build:
runs-on: macos-latest
steps:
deploy:
needs: build # build 작업이 끝난 이후에 deploy 스텝 실행
작업이 동기적으로 실행되게 함