github actions 깃허브 액션

2

git

목록 보기
9/9
post-thumbnail

오늘은 깃허브의 github actions의 문법을 정리해 봅시댜. !

Github Action이란?

Github Action은 Github 저장소를 기반으로 소프트웨어 개발 Workflow를 자동화 할 수 있는 도구입니다.

  • 저장소 마다 최대 20개 까지 저장 가능하고 최대 6시간 동안 실행 될 수 있고, 초과 되면 자동으로 중지 된다.

사용방법 ?

.github/workflows폴더를 만들어서 .yml 형식 파일 만든뒤 workflow를 정의 하는것이다.

Workflow 주요 구성 ?

  • 어떤 이벤트가 발생했을 때 실행될 수 있다.
  • 최소 1개 이상의 Job을 정의해야 한다.
  • Job 안에는 여러 Step을 정의할 수 있다.
  • Step 안에는 단순한 커맨드 실행이나 Action을 가져와 사용할 수 있다.
  • Action은 Github 마켓플레이스에 공유된 Action을 이용하거나 현재 저장소에서 직접 만들어서 사용할 수 있다.
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 }}

name

필수필드는 아님 , workflow의 이름을 지정할 수 있다. (이름을 지정 안하면 파일이 저장된 경로 이름으로 자동지정된다.)

on

필수필드 , 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분이상으로 지정해야함

env

job과 step에서 사용가능한 환경변수의 map이다. 모든 job과 step에 공통적으로 사용가능한 환경 변수를 지정할 수 있으며 각각의 job / step에서만 사용할 수 있는 환경 변수 설정도 가능하다(jobs..env과 jobs..step.env).

env:
  SERVER: production

job

워크플로우는 하나 이상으로 job이 이루어져 있다.

  1. jobs.
    모든 job은 job_id를 가지고 있다. 문자열 이어야 한다.
jobs:
	job_id:
  1. job..name
    github에 표시되는 job 이름이다.

  2. jobs..needs
    job은 병렬적으로 실행되기 때문에 동기적으로 실행해야 한다면 needs 조건을 주어야 한다. 문자열 또는 문자열의 array타입이 값으로 사용된다. 만약 조건이 되는 job이 실패하면 그 job을 필요로하는 모든 job은 실행되지 않는다.

jobs:
  job1:
  job2:
    needs: job1
  job3:
    needs: [job1, job2]
  1. jobs..runs-on
    필수필드이다. job이 실행될 머신의 타입을 의미한다.
    머신의 타입에는 GitHub-hosted runner와 self-hosted runner 두 가지 타입이 있다. GitHub-hosted runner를 사용하면 아래의 가상환경을 사용할 수 있다. 중요한 점으로 각각의 job은 독립된 가상환경으로 구분되어 있다는 것이다. 즉, job1과 job2는 서로 다른 도커 컨테이너에서 구동된다고 생각하면 된다.

runs-on: ubuntu-latest
  1. jobs..env
    job_id에서 사용할 환경 변수이다. job 아래의 모든 step에서 사용가능하고 전역적으로 선언된 env를 오버라이딩한다.

  2. jobs..if
    job을 수행하는 조건을 지정한다.
    여기를참고해서 if문 작성

jobs:
  build:
    if: github.base_ref == 'master'
  1. jobs..steps
    job은 step이라고 불리는 일련의 작업들을 가진다. step은 리눅스 명령어를 실행할 수 있을 뿐만 아니라 다른 action 등을 실행할 수 있다.
 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.
  1. jobs..steps.if
    각 step은 job 처럼 실행 조건을 가질 수 있다.
steps:
      - uses: actions/checkout@v2
      - name: Git Version Beta
        id: version
        if: ${{ !startsWith(github.event.head_commit.message, '[VERSIONING]') }}
  1. jobs..steps.run
    os의 shell을 통해 커맨드라인 명령어를 실행한다. step의 name을 명시하지 않았다면 run 의 내용이 자동으로 step의 이름으로 지정된다.
# single line
- name: Install Dependencies
  run: npm install

# multi line
- name: Clean install dependencies and build
  run: |
    npm ci
    npm run build
  1. jobs..steps.env
    step안에서 사용할 환경 변수를 만든다.
steps:
  - name: My first action
    env:
      GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      FIRST_NAME: Mona
      LAST_NAME: Octocat

<참고>

profile
👩🏻‍💻항상발전하자 🔥

1개의 댓글

comment-user-thumbnail
2021년 6월 7일

잘 보구갑니다~

답글 달기