이번 글에서는 본격적으로 workflow를 작성하기 위한 기본적인 문법들을 학습하는 시간을 가져보도록 하겠습니다.
github 사용이 익숙하다면(PR, Push, review, issue 등등..) 이해가 더 쉬울 거라고 생각됩니다.
document의 모든 내용을 담고 있지 않으며 가장 중요하다고 생각되는 부분, 앞으로의 workflow를 작성하기 위해 알아두면 좋은 문법들을 위주로 작성하였습니다.
GitHub에서 특정 이벤트 발생 후 action 작업을 수행하려면 on:
다음에 web hook event를 추가한다.
// push, commit 시 workflow를 트리거한다
name: test1
on: [push, commit]
// 1시간마다 workflow를 트리거한다
on:
schdule:
- cron: '0 * * * *'
Web Hook Event 종류에는 여러가지가 있다. Github에서 발생하는 대부분의 이벤트에 대해서 설정이 가능할 정도로 종류가 많다.
가장 많이 사용할 법한 이벤트를 정리해보았다. 대부분 키워드만 봐도 어떤 이벤트인지 한번에 알 수 있다.
1. check_run : workflow 실행
2. deployment: 배포 이벤트가 발생할 때
3. issue_comment: 이슈에 코멘트를 남길 때
4. pull_request: 풀리퀘 관련 이벤트
기본 activity type은 opened
, synchronize
, reopened
이다.
더 많은 activity type를 사용하려면 types
키워드를 사용한다.
on:
pull_request:
types: [assigned, opened, synchronize, reopened]
특정 브랜치나 태그 버전, 경로에서만 action을 실행시키고 싶을 때 사용할 수 있는 방법이다.
하지만 이 필터링 기준은 push
와 pull_request
이벤트에서만 적용이 가능하다.
- 문법
on.<push|pull_request>.<branches|tags>
on.<push|pull_request>.paths
// test 디렉토리 하위 파일을 포함하는 푸시가
// master에서 이루어지거나 v1 태그로 푸시될 경우 실행
on:
push:
branches:
- master
tags:
- v1
# 파일 path. default = all
paths:
- 'test/*'
workflow는 리눅스 가상머신이나 Docker 컨테이너 위에서 실행할 수 있다.
또한 strategy:
키워드를 사용하여 여러 운영 체제, 플랫폼 및 언어 버전을 동시에 테스트하기 위해 빌드 매트릭스를 구성 할 수 있다.
// 다양한 우분투 버전과 노드 버전에서 작업을 실행한다
runs-on: ${{matrix.os}}
strategy:
matrix:
os: [ubuntu-16.04, ubuntu-18.04]
node: [8,10,12]
앞의 포스트에서 step에 대해 정의를 했었다. 하나의 Job안에는 여러개의 step이 존재할 수 있고 순서대로 실행이 된다.
steps
하위에 step의 이름(name
)과 동작(uses
, run
)을 정의한다.
step의 액션을 정의하는 가장 쉬운 방법은 아마 marketplace에 올라와있는 actions를 이용하는 방법일 것이다. 생각보다 다양한 action들이 마켓에 등록이 되어있다.
github에서 만든 공식 action도 있지만 일반 사용자들이 커스텀으로 만든 action이 더 많다.
따라서 star 개수와 readme를 읽어보고 잘 돌아갈 것 같은 action을 선택하는 것이 중요하다. !
github에서 action파일을 수정하면 우측에 marketplace 탭이 보인다.
marketplace에 내가 원하는 액션이 없거나 디테일하게 설정할 수가 없는 액션이 있는 경우도 있다. (실은 이런 경우가 더 많다....)
그런 경우엔 직접 쉘스크립트를 작성해서 action을 정의한다.
간단하게 특정 폴더(example)에 들어가 node를 실행하는 구문을 작성해보면,
steps:
- name: run index.js
run: |
cd ./example
node index.js
이런식으로 작성할 수 있다.
이렇게 만든 스크립트는 나중에 marketplace에 등록을 할수도 있다.
다음 포스팅에서는 특정 브랜치에 pr을 보낼 경우 test를 돌리는 action을 작성해보도록 하겠습니다!