프로젝트/사이드 프로젝트

학교 공지 사항 자동화를 해보자 - 5

Beomsu Koh 2023. 3. 23.

학교 공지 사항 자동화를 해보자 - 5

Intro. Github Action… 완전 혜자다

Github Action은 깃허브에서 제공하는 CI/CD 등의 자동화를 위해 지원하는 기능이다.
나의 경우, Crontab 용도로 사용 할 것이다.
기존에 구글 클라우드 등에서 스크립트를 계속 돌며, 시간을 체크 했는데 자원 낭비라 생각이 들어, Github Action Crontab을 생각했다

지금 만들고 있는 간단한 스크립트 위주의 봇 경우 깃허브 액션으로 돌리면 클라우드 비용도 안들고 괜찮은 듯하다

진행 방법

1. 레퍼지터리에 .github/workflows 생성

  • .github/workflows 디렉터리를 생성하고 auto.yml로 파일을 생성한다.

2. auto.yml 내용 채우기

name: Auto Post Mail

on:
  schedule:
    - cron: "0 9 * * * "
  push:
    branches:
      - main
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - name: Set up Python 3.9.x
        uses: actions/setup-python@v1
        with:
          python-version: 3.9.x
      - name: Setup pip
        run: |
          python -m pip install —upgrade pip
          pip install requests
          pip install BeautifulSoup4
          pip install datetime
      - name: run
        env:
          EMAIL_ADDRESS: ${{secrets.EMAIL_ADDRESS}}
          EMAIL_PASSWORD: ${{secrets.EMAIL_PASSWORD}}
        run: python main.py
  • name : github action의 이름

    • 위에서 보다시피 Auto Post Mail이란 이름을 Github Repo actions 에서 확인 할 수 있다.
  • on : Github action 구동 조건

    • schedule : crontab 기능
      • 0 9 * * * : 하루에 한 번 UTC 09:00에 실행 하겠다는 뜻이다
      • 기본적으로 시간대가 UTC 기준이다
    • push : 깃허브에 푸시하면 실행하겠다
      • branches: 어떤 브랜치에서 푸시 될 때인지도 설정해줘야 한다
      • push는 github actions 작동 테스트 하려고 임의로 추가해뒀다
on:
  schedule:
    - cron: "0 9 * * * "
  push:
    branches:
      - main
  • jobs
    • 기본적으로 jobs 아래에 여러 job들이 소속되어 일을 하는 구조이다.
    • build : job
      • 내가 만든 job의 이름이 build인거라 이름 바꿔도 된다
    • runs-on:
      • steps에서 구동 될 행동들의 구동 환경
    • steps
      • job 내에서 순차적으로 진행 될 일들을 기술한다
    • env
      • 환경 변수를 저장 할 때 사용한다.
      • 앞선 글에서 말했던 os.environ 해서 가져오는 값들이다.
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - name: Set up Python 3.9.x
        uses: actions/setup-python@v1
        with:
          python-version: 3.9.x
      - name: Setup pip
        run: |
          python -m pip install —upgrade pip
          pip install requests
          pip install BeautifulSoup4
          pip install datetime
      - name: run
        env:
          EMAIL_ADDRESS: ${{secrets.EMAIL_ADDRESS}}
          EMAIL_PASSWORD: ${{secrets.EMAIL_PASSWORD}}
        run: python main.py

3. Github Secret 추가

|500
환경 변수를 github action에서 사용하기 위해서, secret을 이용한다
github 레퍼지터리에 가서 settings의 secrets and variables에서 추가 할 수 있다

4. 준비 끝!

이제 지금까지 작성한 코드들을 푸시하면, 메일로 공지사항이 오는 것을 확인 할 수 있다.

고도화?

  • 고도화라 말하기 부끄럽지만 향후 계획이다
  1. Github 이슈를 일종의 데이터베이스처럼 사용해서, 매일 공지 사항을 저장하고 불러온다
  2. 하루에 3번 정도 확인해서 메일을 보내도록 하되, 이에 따른 변동 사항을 예외 처리한다
  3. 더 많은 사람들이 사용할 수 있도록! 인터페이스를 더 단순하게 만든다

댓글