github actions은 사용자 정의 소프트웨어 개발 라이프 사이클 워크 플로우를 github 레파지토리에 직접 만들수 있도록 도와주는 도구다.
GitHub Actions enables you to create custom software development life cycle (SDLC) workflows directly in your GitHub repository.
github actions을 활용하여 코드를 저장하고 협업하는 공간에서 동시에 소프트웨어 개발 워크 플로우를 자동화 할 수 있다.
.github/workflows
폴더에 있어야 한다.위에서 언급했던 것처럼, 이 파일은 ./github/workflows
에 정의 되어 있어야 한다.
name: Greet Everyone
# 이 워크플로우는 코드가 푸쉬되면 발동한다.
on: [push]
jobs:
build:
# 작업 명칭
name: Greeting
# 이 작업은 우분투에서 실행된다.
runs-on: ubuntu-latest
steps:
# 이 작업은 hello-world-javascript-action: https://github.com/actions/hello-world-javascript-action 의 예제다.
- name: Hello world
uses: actions/hello-world-javascript-action@v1
with:
who-to-greet: 'Mona the Octocat'
id: hello
# 여기에서는 이전 스텝에서 부터 얼마나 걸렸는지를 나타낸다.
- name: Echo the greeting's time
run: echo 'The time was ${{ steps.hello.outputs.time }}.'
워크플로우에서 사용할 수 있는 스탠다드 액션 중에, checkout action은 아래와 같은 액션이 있다면 반드시 이전에 실행되어야 한다.
checkout-cation을 사용하기 위해서는, 다음 스텝을 포함하면 된다.
- uses: actions/checkout@v2
프로젝트의 요구사항에 맞추어 사용할 수 있는 두가지 유형의 액션이 존재한다.
액션을 선택하는데 앞서서 이미 공개 저장소나 도커 허브에 나와 있는 다양한 액션을 살펴보기를 권장한다.
name: Node.js CI
on: [push]
jobs:
build:
runs-on: ubuntu-latest
# 어떤 노드버전을 사용할지 나타낸다. x는 해당 버전의 가장 최신버전을 의미한다. (wildcard)
strategy:
matrix:
node-version: [8.x, 10.x, 12.x]
steps:
- uses: actions/checkout@v2
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
with:
# strategy.matrix를 지정하지 않고, 단일 노드버전을 명시하여 하나만 설치할 수도 있다.
node-version: ${{ matrix.node-version }}
- run: npm install
- run: npm run build --if-present
- run: npm test
env:
CI: true
유니크 키를 활용하여, 현재 디펜던시를 캐싱하고 cache
액션을 추가하여 이 캐싱한 디펜던시를 재 활용할 수 있다.
steps:
- uses: actions/checkout@v2
- name: Use Node.js
uses: actions/setup-node@v1
with:
node-version: '12.x'
- name: Cache Node.js modules
uses: actions/cache@v2
with:
# npm cache files are stored in `~/.npm` on Linux/macOS
path: ~/.npm
# 캐시키
key: ${{ runner.OS }}-node-${{ hashFiles('**/package-lock.json') }}
# 캐시키로 찾지 못했을 경우 다시 시도해볼 키
restore-keys: |
${{ runner.OS }}-node-
${{ runner.OS }}-
- name: Install dependencies
run: npm ci