GitHub에서 제공하는 CI/CD(Continuous Integration/Continuous Deployment) 서비스로, 코드 리포지토리에서 자동화된 워크플로를 설정하고 실행할 수 있게 해줍니다. 이 워크플로는 주로 코드 빌드, 테스트, 배포 등의 작업을 자동으로 처리하는 데 사용됩니다.
깃허브 리포지토리에는 다양한 이벤트 트리거들이 존재하는데, PR(Pull Request) 요청이 열리거나 이슈가 생성되는 것과 같은 이벤트 트리거들이 있습니다. 이러한 이벤트가 있을 때, GitHub Actions Workflows를 이벤트에 맞춰 자동으로 실행되도록 설정할 수 있습니다.

깃허브 공식 홈페이지에서 가져온 이미지에 따른 GitHub Actions의 작동 순서는 다음과 같습니다.
GitHub Actions의 작동 순서
리포지토리에서 이벤트 발생 ➔ 러너에서 Job 실행 ➔ Job 아래 Step들 순차적으로 실행
워크플로를 트리거하는 깃허브 리포지토리의 이벤트입니다. 예를 들어, 이슈가 열릴 때, PR이 생성될 때, 코드가 푸시될 때 등 다양한 이벤트가 있습니다.
예시:
on:
push:
branches:
- main # main 브랜치에 푸시될 때 워크플로가 트리거됨
pull_request:
types: [opened] # PR(Pull Request)이 열릴 때 워크플로가 트리거됨
위 예시에서는 코드가 main 브랜치로 푸시될 때와 PR(Pull Request)이 열릴 때 워크플로가 트리거됩니다.
특정 이벤트가 발생했을 때 하나 이상의 작업을 실행하는 자동화된 작업 과정입니다. 하나의 워크플로는 여러 개의 작업(Job)으로 구성될 수 있습니다. 워크플로는 리포지토리의 .github/workflows 폴더 아래에 위치한 YAML(YML) 파일로 설정하며, 하나의 리포지토리에서는 여러 개의 워크플로, 즉 여러 개의 YAML 파일을 생성할 수 있습니다.
예시:
name: CI Workflow # 워크플로의 이름을 CI Workflow로 설정
on:
push:
branches:
- main # main 브랜치에 푸시될 때 트리거
jobs:
build:
runs-on: ubuntu-latest # 이 Job은 최신 우분투 환경에서 실행
steps:
- name: Checkout code # 첫 번째 단계: 코드를 체크아웃
uses: actions/checkout@v2 # GitHub 제공 액션을 사용하여 체크아웃
- name: Install dependencies # 두 번째 단계: 의존성 설치
run: npm install # npm 명령어로 의존성 설치
- name: Run tests # 세 번째 단계: 테스트 실행
run: npm test # npm 명령어로 테스트 실행
위 예시는 main 브랜치로 코드가 푸시될 때, 코드 체크아웃, 의존성 설치, 테스트 실행 작업을 자동으로 수행하는 워크플로입니다.
워크플로 내에서 동시에 실행(병렬)되거나 순차적으로 실행(직렬)될 수 있는 개별 작업 단위입니다. 작업은 기본적으로 동시에 실행되며, 각 작업은 여러 개의 Step(단계)으로 구성됩니다. 작업은 워크플로 YAML 파일 내에서 jobs 속성을 사용하며 작업 식별자(ID)와 작업 세부 내용 간의 맵핑(mapping) 형태로 명시됩니다.
예시:
jobs:
build:
runs-on: ubuntu-latest # 이 Job은 최신 우분투 환경에서 실행
steps:
- name: Checkout code # 첫 번째 단계: 코드를 체크아웃
uses: actions/checkout@v2 # GitHub 제공 액션을 사용하여 체크아웃
test:
runs-on: ubuntu-latest # 이 Job도 최신 우분투 환경에서 실행
steps:
- name: Run tests # 첫 번째 단계: 테스트 실행
run: npm test # npm 명령어로 테스트 실행
위 예시에서는 build와 test라는 두 개의 작업이 정의되어 있으며, 이 작업들은 기본적으로 동시에 실행됩니다.
GitHub Actions 워크플로우를 실행하는 애플리케이션이 설치된 컴퓨터 또는 서버입니다. 이 러너는 워크플로우의 Job을 실제로 실행하는 인스턴스 역할을 하며, GitHub에서 호스팅된 러너(예: ubuntu-latest) 또는 자체 호스팅된 러너를 사용할 수 있습니다.
예시:
jobs:
build:
runs-on: ubuntu-latest # 최신 우분투 환경에서 Job을 실행
위 예시에서는 GitHub에서 제공하는 최신 우분투 환경(ubuntu-latest)에서 작업이 실행됩니다. 이는 GitHub 호스팅 러너를 사용하는 경우입니다.
각 작업 내에서 순차적으로 실행되는 개별 명령어입니다. 예를 들어, 코드 빌드, 테스트, 배포 등이 단계에 해당합니다. Job(s)와는 다르게 step은 작성한 순서대로 실행됩니다.
예시:
jobs:
build:
runs-on: ubuntu-latest # 이 Job은 최신 우분투 환경에서 실행
steps:
- name: Checkout code # 첫 번째 단계: 코드를 체크아웃
uses: actions/checkout@v2 # GitHub 제공 액션을 사용하여 체크아웃
- name: Install dependencies # 두 번째 단계: 의존성 설치
run: npm install # npm 명령어로 의존성 설치
- name: Run tests # 세 번째 단계: 테스트 실행
run: npm test # npm 명령어로 테스트 실행
위 예시에서 steps는 코드 체크아웃, 의존성 설치, 테스트 실행을 순차적으로 수행합니다.
GitHub Actoin은 event, job, step을 정의하기 위해 YAML 파일을 사용합니다. 리포지토리의 .github/workflow 폴더 아래에 yaml(yml) 파일을 생성하여 작성하면 됩니다.
name: Simple Workflow # 워크플로의 이름을 Simple Workflow로 설정
on:
push:
branches:
- main # main 브랜치에 코드가 푸시될 때 워크플로가 실행됨
jobs:
greet: # 이 Job의 ID는 greet
runs-on: ubuntu-latest # 최신 우분투 환경에서 실행
steps:
- name: Say hello # 첫 번째 단계: 인사 메시지 출력
run: echo "Hello, world!" # 터미널에 "Hello, world!" 메시지 출력
farewell: # 이 Job의 ID는 farewell
runs-on: ubuntu-latest # 최신 우분투 환경에서 실행
needs: greet # 이 작업은 greet 작업이 성공적으로 완료된 후에 실행됨
steps:
- name: Say goodbye # 첫 번째 단계: 작별 인사 메시지 출력
run: echo "Goodbye, world!" # 터미널에 "Goodbye, world!" 메시지 출력
name:
on:
main 브랜치에 코드가 푸시될 때 워크플로우가 실행되도록 설정되어 있습니다.jobs:
greet:
runs-on:
ubuntu-latest라는 GitHub 호스팅 러너가 사용되었습니다.steps:
run:
needs:
farewell Job이 greet Job이 완료된 후에 실행되도록 설정되었습니다.






















