[github] github action 사용법

somnode·2020년 9월 19일
0

github action을 사용해서 velog의 글을 백업하는 프로그램을 자동으로 매주 토요일에 수행하려고 한다.
백업 소스코드는 velog-backup 참고

github action runner 설치

Github -> Settings -> Actions -> Add self-hosted runner 메뉴에 들어가면 설치 방법이 나온다.

github action runner는 반드시 root 권한이 없는 계정에서 수행해야 한다.
root 계정에서 수행하면 에러가 발생한다.

  • Download
> mkdir actions-runner && cd actions-runner
> curl -O -L https://github.com/actions/runner/releases/download/v2.273.2/actions-runner-linux-x64-2.273.2.tar.gz
> tar xzf ./actions-runner-linux-x64-2.273.2.tar.gz
  • Configure
    • token과 url은 각자 프로젝트에 맞게... github action 설정 메뉴에서 확인하자...
> ./config.sh --url [PROJECT_GIT_URL] --token [PROJECT_TOKEN]

만약 이전에 configure를 수행한 적이 있다면 먼저 아래 명령어로 삭제해야 한다.

> ./config.sh remove --token [PROJECT_TOKEN]
  • Execute
    혹시라도 컴퓨터에 세션 타임 아웃이 설정되어 있다면, tmuxscreen에서 runner를 실행시켜야 세션 타임 아웃으로 인해 runner가 중단되는 일이 없다.
> ./run.sh &

또는

> tmux new-session -ds velog-backup /home/somnode/actions-runner/run.sh

github action 사용하기

github action runner 등록 후 .github/workflows/ 경로에 workflow 파일(.yml)이 존재하면 runner가 동작한다.

  • name : workflow 이름
  • on : workflow가 동작하는 조건
    • ex) [push] : git push를 하면 동작
  • jobs : 수행할 job들
    • build : job 이름
      • runs-on : runner 지정
        • steps : job에서 수행할 목록들을 나열
          • uses : 이미 만들어진 action을 사용하려고 할 때 지정
          • name : 수행할 목록의 이름
          • run : 수행할 명령어
name: Velog Backup

on: [push]

jobs:
  build:
    runs-on: self-hosted

    steps:
    - uses: actions/checkout@v2
    - name: Use Node.js
      uses: actions/setup-node@v1
      with:
        node-version: '12.x'
    - name: Install dependencies
      run: npm install
    - name: Backup velog
      run: |
        node app.js -u somnode
    - name: Upload artifact
      uses: actions/upload-artifact@v2
      with:
        name: Upload velog backup files
        path: |
          backup-somnode     

schedule 기능

github action에서 schedule 기능을 사용해서 자동으로 지정한 때에 workflow가 동작하도록 할 수 있다.
on 하위에 schedule에 cron을 지정할 수 있다.
cron 사용법 관련해서는 [linux] crontab 사용법 글을 참고하자.

참고로 github action에서 cron은 UTC 시간대 기준이다.
아래 workflow는 UTC 시간대 기준으로 매일 00시 00분에 동작한다.

on:
  schedule:
    - cron: "0 0 * * *"

0개의 댓글