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 스텝 실행

작업이 동기적으로 실행되게 함