Github 저장소 기반 소프트웨어 개발 Workflow 자동화 도구이다.
저장소에서 발생하는 build, test, package, release, deploy 등 다양한 이벤트를 기반으로 한다.
.github/workflows 폴더를 만들어서 .yml 형식 파일 만든 뒤 정의한다
name: Greet Everyone
# 이 Workflow는 저장소에 Push가 되면 실행 되도록 한다
on: [push]
jobs:
# Job ID: 문자와 -(대시), _(언더바)로 구성된 Job 고유 식별자
build:
# Job 이름
name: Greeting
# 이 Job은 리눅스에서 실행된다
runs-on: ubuntu-latest
steps:
# 이 Step은 Github이 제공하는 `hello-world-javascript-action` Action을 사용한다
- name: Hello world
uses: actions/hello-world-javascript-action@v1
with:
who-to-greet: 'Mona the Octocat'
id: hello
# 이 Step은 이전 Step에서 나온 출력을 사용한다
- name: Echo the greeting's time
run: echo 'The time was ${{ steps.hello.outputs.time }}.'
on:
push:
branches:
- master
tags:
- v1
# push 변경 사항 중 test 폴더 밑에 파일이 포함된 경우에 Workflow 실행
paths:
- 'test/*'
runs-on
항목으로 지정
Action은 도커 컨테이너와 Javascript로 만든다.
도커 컨테이너 - 일관된 동작을 보장하고, Github이 호스팅하는 리눅스 환경에서만 실행 가능하다.
Javascript - 간단하며, 도커 컨테이너보다 더 빨리 실행된다.
action.yaml
이나 aciton.yml
을 반드시 작성해야 한다.
name: 'Hello World'
description: 'Greet someone and record the time'
branding:
color: 'yellow'
icon: 'code'
inputs:
who-to-greet:
description: 'Who to greet'
required: true
default: 'World'
outputs:
time:
description: 'The time we greeted you'
runs:
using: 'node12'
main: 'index.js'
const core = require('@actions/core');
const github = require('@actions/github');
try {
const nameToGreet = core.getInput('who-to-greet');
console.log(`Hello ${nameToGreet}!`);
const time = (new Date()).toTimeString();
core.setOutput("time", time);
const payload = JSON.stringify(github.context.payload, undefined, 2)
console.log(`The event payload: ${payload}`);
} catch (error) {
core.setFailed(error.message);
}
# 윗부분 생략
jobs:
greeting_job:
name: Greeting
runs-on: ubuntu-latest
steps:
- name: Hello world
uses: jonnung/github-action-practice@master
with:
who-to-greet: 'Jonnung'
id: hello
- name: Echo the greeting's time
run: echo 'The time was ${{ steps.hello.outputs.time }}.'
Action 저장소가 다른 저장소의 Workflow 에서 사용되려면 반드시 Public 저장소로 설정되어야 한다.
Action 공유 목적 아니라면 action.yaml
어디다 두던 상관 없지만,
.github/actions/action1
이런 구성이 좋다.
Action을 독립된 Git 저장소로 구성하기 위해서는 꼭 Public 저장소 타입이어야 한다!
Workflow: 코드가 레포지토리에 올라갔을 때 빌드, 테스트 및 배포를 실행하기 위한 자동화된 프로세스 구성이다.
Event: 워크플로우를 실행시키기 위한 전제 조건이다.
ex) push or pull request
Runer: 워크플로우를 실행시키기 위한 운영체제 환경, 깃헙에 제공하는 러너 또는 직접 만들 수 있다.
Action: 워크플로우안에 정의된 개별 작업을 의미하고 이를 통해 빌드, 테스트 및 배포 뿐 아니라 다양한 작업을 실행시킨다.
Job: 러너와 액션의 논리적인 묶음이며, 워크 플로우 안에서 여러 개의 잡을 정의하고 동시 실행 또는 연속 실행 가능하다.