목차
GitHub Actions Cheatsheet
GitHub Actions에서 워크플로우를 작성할 때 자주 사용하는 문법들을 모아보았습니다.
2020-02-20#프로그래밍
💡 이 글은 작성된지 1년 이상 지났습니다. 정보글의 경우 최신 내용이 아닐 수 있음에 유의해주세요.
GitHub Actions 워크플로우를 작성할 때 자주 사용하는 문법들을 분류별로 정리해보았습니다. (2020년 3월 4일 기준)
on:
실행 조건# 푸시 했을 때
on: push
# 푸시 했거나 PR을 열었을 때
on: [push, pull_request]
# 특정 브랜치를 푸시했을 때
on:
push:
branches:
- master
- feature/*
# 특정 태그를 푸시했을 때
on:
push:
tags:
- v*
# Cron 스케줄에 따라 (시간대 기준은 UTC)
on:
schedule:
- cron: '*/30 * * * *'
# GitHub API로 수동 트리거
on: repository_dispatch
워크플로우를 실행할 수 있는 이벤트의 목록은 이 문서에서 확인할 수 있으며, 그 중에 자주 사용하는 것들을 간추리면 다음과 같습니다.
create
: 브랜치, 태그를 새로 만들었을 떄issues
: 이슈를 생성, 삭제, 수정 등의 작업했을 때 (이슈를 메신저로 쏴주는 등의 워크플로우를 만들 수 있습니다.)pull_request
: 위 issues
의 PR 버전push
: 커밋, 태그를 푸시했을 때env:
환경변수 설정모든 워크플로우 전역에 환경변수 값을 설정합니다.
env:
DATABASE_URL: 127.0.0.1
DATABASE_PORT: 5432
jobs:
워크플로우 Job 설정이름이 jobs의 복수형인 것에서 확인할 수 있듯이 여러 개의 job을 실행할 수도 있습니다. 기본적으로 job들은 병렬로 실행되나, needs
문법을 이용하여 job간의 의존성 관계를 명시할 수 있습니다.
jobs:
build:
name: Run Tests and Build
runs-on: ubuntu-18.04
env:
DATABASE_NAME: mydb_test
DATABASE_USER: myuser
# DB 등 job 실행에 필요한 서비스
services:
mysql:
image: mysql:5.7
env:
MYSQL_ROOT_PASSWORD: mypassword
ports:
- 3306
# Job을 복수의 서로 다른 환경으로 실행.
strategy:
matrix:
node_version: [8, 10, 12] # 각 step에서 ${{ matrix.node_version }} 으로 접근
# 예제는 'Job의 실행 조건' 문단 참조
if: github.event_name == 'push'
steps:
- name: Run something
run: |
echo 'Hello, world'
- name: Notify results
if: success() # 예제는 'Step의 실행 조건' 문단 참조
run: |
curl -X POST ...
deploy:
name: Deploy
needs: build # 먼저 실행되어야하는 job id. 앞선 job이 실패하면 이 job은 실행되지 않는다.
jobs.<job_id>.if:
Job의 실행 조건Job이 실행되어야하는 조건을 설정할 수 있습니다.
# 특정 브랜치로 푸시했을 때
if: github.event_name == 'push' && github.ref == 'refs/heads/master'
# 특정 패턴의 태그를 푸시했을 때
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
# master 브랜치로의 PR을 열었을 때
if: github.event_name == 'pull_request' && github.base_ref == 'refs/heads/master'
# Windows 대상 빌드일 때
if: runner.os == 'Windows'
# 특정 환경변수가 설정되어 있을 때
if: env.NODE_ENV == 'test'
jobs.<job_id>.steps.if:
Step의 실행 조건해당 Step이 실행되어야하는 조건을 설정할 수 있습니다.
### 모든 'Job의 실행 조건' 에 해당하는 문법 사용 가능 ###
# 앞선 Step이 성공하였을 때만
if: success()
# 앞선 Step이 실패하였을 때만
if: failure()
# 앞선 Step의 성공/실패 여부와 무관하게 항상 (결과를 Slack 등으로 발송할 때 유용)
if: always()
# 특정 strategy 에서만
if: ${{ matrix.node_version }} >= 8
더 추가되었으면 좋을 것 같은 내용은 댓글로 제보 부탁드립니다.
관련된 글
Rails와 GitHub Actions에 커버리지 레포트를 달아보자
이 블로그의 CMS이기도 한 Shiori를 대폭 리팩토링하면서 테스트가 얼마나 잘 작성되어있는지 궁금해졌습니다.
Rails Global ID로 전역 객체 식별하기
Global ID는 Rails의 모든 객체를 식별할 수 있는 URI(Uniform Resource Identifier)입니다.
Ruby on WebAssembly: 살짝 맛보기
Ruby 3.2에 추가된 WebAssembly 지원을 간단하게 테스트해봅시다.
본 사이트의 저작물은 별도의 언급이 없는 한 크리에이티브 커먼즈 저작자표시-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.
LYnLab, 2011 - 2025.
작성한 댓글은 giscus를 통해 GitHub Discussion에 저장됩니다.