GitHub Action 사용법
본 문서는 GitHub Action을 사용한 데이터 수집 자동화 방법을 담고 있다.
GitHub Action
Github Action은 github에서 공식적으로 제공하는 CI 및 CD 워크플로우를 자동화하기 위한 툴이다.
CI(Continuous Integration)
- 빌드, 테스트, 통합, 즉 배포 전까지의 단계 CD(Continuous Delivery)
- 사용자에게 프로덕트를 전달(배포)하는 단계
활용 예시
- 배포
- 서버에 새로운 기능 버전 등을 배포
- 새로운 글을 등록(GitHub 블로그도 GitHub Action을 사용하여 배포 자동화가 되어 있다.)
- 작업 스케줄러
- 코드 실행 자동화
- 주기적으로 업데이트 되는 데이터 자동 수집 등
- 코드 테스트
사용 한도
- 하나의 Repository에 최대 20개의 workflow 등록 가능
- workflow 내의 Job은 최대 6시간 동안 실행 가능
- 무료 계정의 저장 용량은 최대 500MB, 실행시간은 최대 2000시간/월
GitHub Actions 구성 요소
Workflow
하나 이상의 작업을 실행하는 자동화된 프로세스이다. YAML 파일에 의해 정의되고, Action을 실행할 Repository의 .github/workflow 폴더 아래에 저장된다.
Event
Workflow를 Trigger(실행)하는 특정 활동이나 규칙이다.
- 특정 브랜치로 Push/Pull Request
- 작업 수행을 예약(cron)
Job
Workflow의 일련의 단계로, 가상 환경의 인스턴스에서 단계적으로 실행된다. 각각의 Job은 기본적으로 종속성 없이 서로 병렬로 실행되지만, 다른 작업과 종속적으로 실행도 가능하다.
Step
Job 안에서 순차적으로 실행되는 프로세스의 단위이다.
Action
Job을 구성하기 위한 Step들의 조합으로 구성된 독립적인 명령으로 workflow의 가장 작은 빌드 단위이다. 직접 Action 만들어 사용하거나, 공용 Action을 사용할 수 있다.
Runner
GitHub Action Runner 어플리케이션이 설치된 머신으로, Workflow가 실행될 인스턴스이다.
GitHub Action으로 데이터 수집 자동화
기상청에서 제공하는 지상(종관, ASOS) 일자료 조회서비스 Open API를 사용하여 매일 업데이트 되는 어제의 날씨 데이터를 수집하는 작업을 GitHub Action을 사용하여 자동화하였다.
1. YAML
name: Update Weather Data
on:
schedule:
- cron: '10 17 * * *'
name
은 Action 탭에 노출되는 Workflow의 이름이다.on
은 Workflow 파일을 자동으로 트리거하는 이벤트를 명시한다.- schedule의 cron에 cron 표현식을 작성한다.
-
http://www.cronmaker.com/에서 cron 표현식을 생성할 수 있다.
- cron 작업 시 지연현상이 발생한다. GitHub에서 많은 사용자의 요청 작업을 순차적으로 수행하면서 발생하는 문제라고 생각된다. 해결 방법은 없다.
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: 3.x
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install ruff pytest
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
- name: Run Python Script
run: python update_weather.py
env:
WEATHER_API_KEY: $
MY_GITHUB_TOKEN: $
- name: Commit and push changes
run: |
git config user.email "jyihaan4@naver.com"
git config user.name "Jung Jaeyoung"
git add ./data_weather/*/*.csv
git clean -xdf
git commit -m "Update Data | $(TZ='Asia/Seoul' date +'%Y-%m-%d')"
git push
Checkout Repository & Set up Python
은 사용할 내장된 GitHub Actions 액션을 정의하고 소스 코드 저장소를 가져온다. 그리고 Python 버전을 지정한다.Install dependencies
필요한 패키지를 설치한다.Run Python Script
은 Python 파일을 실행한다.- 실행할 Python 코드의 경로를 작성한다.
- env 인자에필요한 환경 변수(GitHub Token, 기상청 Open API Key)를 넘겨준다.
Commit and push changes
는 변경사항(데이터 추가)을 commit & push 한다.
2. GitHub Token 발급
프로필의 Settings > Developer Settings > Personal access tokens > Tokens (classic) > Generate New token(classic)
Token의 이름과 만료기한, 필요한 사항들을 선택하고 가장 아래의 Generate Token을 눌러 Token을 발급 받는다.
발급받은 Token을 복사한다.
3. GitHub Token 등록
Action을 실행할 Repository의 Settings > Secrets and variables > New repository secret
발급받은 Token을 붙여넣고, 이 토큰의 이름을 MY_GITHUB_TOKEN: $
환경변수에 등록하면 된다.
4. Workflow 권한 부여
Action을 실행할 Repository의 Settings > Actions > General > Workflow permissions에서 읽기 및 쓰기가 가능하도록 설정한다.
Workflow 로그 확인
Actions 탭에서 진행상황을 확인할 수 있다. 진행 중이라면 노란색마커, 작업 완료면 초록색마커, 작업 실패면 빨간색마커로 표시된다.
작업 로그를 확인해 오류 사항을 확인할 수 있으며, 작업을 재실행할 수도 있다.
결과
YAML에서 설정해둔 python 파일(update_weather.py
)이 실행되고, 새로운 데이터가 추가되어 commit message(Update Data | $(TZ='Asia/Seoul' date +'%Y-%m-%d')
)와 함께 commit된 것을 확인할 수 있다.