오늘은 깃허브의 github actions의 문법을 정리해 봅시댜. !
Github Action은 Github 저장소를 기반으로 소프트웨어 개발 Workflow를 자동화 할 수 있는 도구입니다.
.github/workflows폴더를 만들어서 .yml 형식 파일 만든뒤 workflow를 정의 하는것이다.
name: Greet Everyone
on: [push] //이 Workflow는 저장소에 Push가 되면 실행 되도록 한다
jobs:
build: //job_id
runs-on: ubuntu-latest //이 Job은 리눅스에서 실행된다
steps:
- uses: actions/checkout@v2 //github에서 제공하는 액션
- name: Git Version Beta //이름
id: version
if: ${{ !startsWith(github.event.head_commit.message, '[VERSIONING]') }}
run: |
git config --global user.email "opentrack.dev@gmail.com"
git config --global user.name "opentrack"
npm version prerelease --preid=beta -m "[VERSIONING] %s"
git push origin
git push origin $(git describe)
echo "::set-output name=tag::$(git describe)"
- name: Test
run: echo ${{ steps.version.outputs.tag }}
필수필드는 아님 , workflow의 이름을 지정할 수 있다. (이름을 지정 안하면 파일이 저장된 경로 이름으로 자동지정된다.)
필수필드 , workflow을 수행하게하는 github 내의 이벤트를 지정해야한다.
1. on: push //push일 때 수행
2. on: [push, pull_request] // push / PR일 때 수행
3. on:
push:
branches:
- main
//Main브랜치에서 푸쉬가 일어날때
4. on:
push:
branches:
- master
tags:
- v1
- v1.*
//master 브랜치에서 특정 태그 일때 푸쉬가 일어날떄
5. on:
push:
branches-ignore: //포함 시키지 않고 싶은 브랜치
- 'mona/octocat'
- 'releases/**-alpha'
tags-ignore:
- v1.*
6. on:
push:
branches: //포함하는것과 안할꺼 함께 표현할때는 안하는거 앞에 !
- 'releases/**'
- '!releases/**-alpha'
7. on:
push:
paths-ignore: //해당경로에서 적어도 하나의 파일이 수정되고 푸쉬되었을때
- 'docs/**'
8. on:
schedule:
- cron: '*/15 * * * *'
//지정시간마다 자동수행 최소시간 5분이상으로 지정해야함
job과 step에서 사용가능한 환경변수의 map이다. 모든 job과 step에 공통적으로 사용가능한 환경 변수를 지정할 수 있으며 각각의 job / step에서만 사용할 수 있는 환경 변수 설정도 가능하다(jobs..env과 jobs..step.env).
env:
SERVER: production
워크플로우는 하나 이상으로 job이 이루어져 있다.
jobs:
job_id:
job..name
github에 표시되는 job 이름이다.
jobs..needs
job은 병렬적으로 실행되기 때문에 동기적으로 실행해야 한다면 needs 조건을 주어야 한다. 문자열 또는 문자열의 array타입이 값으로 사용된다. 만약 조건이 되는 job이 실패하면 그 job을 필요로하는 모든 job은 실행되지 않는다.
jobs:
job1:
job2:
needs: job1
job3:
needs: [job1, job2]
runs-on: ubuntu-latest
jobs..env
job_id에서 사용할 환경 변수이다. job 아래의 모든 step에서 사용가능하고 전역적으로 선언된 env를 오버라이딩한다.
jobs..if
job을 수행하는 조건을 지정한다.
여기를참고해서 if문 작성
jobs:
build:
if: github.base_ref == 'master'
steps:
- name: Print a greeting
env:
MY_VAR: Hi there! My name is
FIRST_NAME: Mona
MIDDLE_NAME: The
LAST_NAME: Octocat
run: |
echo $MY_VAR $FIRST_NAME $MIDDLE_NAME $LAST_NAME.
steps:
- uses: actions/checkout@v2
- name: Git Version Beta
id: version
if: ${{ !startsWith(github.event.head_commit.message, '[VERSIONING]') }}
# single line
- name: Install Dependencies
run: npm install
# multi line
- name: Clean install dependencies and build
run: |
npm ci
npm run build
steps:
- name: My first action
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
FIRST_NAME: Mona
LAST_NAME: Octocat
<참고>
잘 보구갑니다~