카일 스쿨 8회차

  • Hits
  • #1. Github Action
    • 첫 Github Action
    • YES24 IT 신간 40개 크롤링해서 Issue에 올리는 Github Action

1. Github Action

  • workflow의 대표적인 예
  • 1) Test Code
    • ex) df의 타입이 pd.DataFrame이 맞는가
    • ex) value1에 특정 값이 들어가는가?
    • ex) 특정 함수의 테스트 코드가 정상적으로 작동하는가?
    • 쿼리를 날리고 데이터가 맞는지 정합성 체크하는 것도 테스트의 일종이라 볼 수 있음
  • workflow의 대표적인 예
  • 2) 배포
    • 코드가 어디서 작동할까?
    • 서버에서 작동!
    • 서버에 코드를 어떻게 보내야할까?
    • 단순한 방법 예시 : 그냥 소스코드를 그대로 scp로 보낸다
      • 이런 것들을 수동으로 하려면 => 소스코드를 git clone 받고, checkout하고, 압축해서 scp하고 압축 풀고 작동중 프로그램 껐다 키고..
    • 고도화된 방법 예시 : 쿠버네티스에 배포한다
  • 이런 행동들을 자동화할 때 도와주는 도구
  • Github에 연동되서 특정 행동이 발생할 때 실행되도록 설정 가능
    • 예 : 커밋시, 새로운 브랜치 생성시, 태그 생성시 등
  • Public이면 추가 서버 비용이 들지 않음
  • Github Marketplace에서 어떤 도구들이 있는지 확인 가능함
  • 가격
    • Public repo : 무료
    • Private repo : 링크 참고, 한달에 500MB 스토리지와 실행 시간 2,000분이 무료로 제공됨(무료 계정의 경우)
  • 사용할 수 있는 한도
    • Workflow는 하나의 Repo에 최대 20개까지 등록할 수 있음
    • Workflow 안에 존재하는 Job은 6시간동안 실행될 수 있고, 초과시 자동으로 중지됨
    • 동시에 실행할 수 있는 Job 개수가 정해짐
  • Github Action 사용하는 방식
    • 1) 코드 작성
    • 2) 코드 작성 후, 진행할 workflow 정의(Test Code, 배포, 단순 작업 등)
    • 3) 정상 작동하는지 Test
  • Workflow 시작하기
    • 기본적인 방법 : .github/worfklows 폴더 안에 .yml 파일을 생성 => 템플릿이 있어요
    • Github Repo에서 Actions 클릭
  • Set up this workflow 클릭하면 간단한 workflow 생성할 수 있음
  • Workflow 구성
    • 특정 이벤트 발생시 실행
    • Jobs에 Job들을 정의하고, 여러 Step을 정의할 수 있음(마치 Airflow와 비슷한 느낌)
    • Steps에서 커맨드 실행 또는 이미 만들어진 액션을 사용할 수 있음
  • yml 파일 구성
    • name : workflow의 구성
    • on : 언제 실행할 것인지?
      • push - master : master에 push될 경우
      • pul_requests - master : master에 pull requests가 올 경우
    • Jobs 인자 안에 여러 Job들이 존재
    • Jobs를 어디서 실행할 지는 runs-on에 지정
    • Job들은 name, run으로 구성
  • 이벤트 트리거는 언제 가능할까?
    • 1) Push, Pull Request
    • 2) Crontab처럼 반복적인 상황
    • 3) REST API를 호출시 실행

첫 Github Action

  • Github Repo 생성! 아무 이름으로 설정
  • hello.py 파일 push
    • 내용 : print("hello world")
  • Actions 클릭 - New workflow - Continuous integration workflows 더보기 - Python application - Set up the workflow
  • 아래에 pip install하는 부분과 pytest를 지우고, python3 hello.py 실행하도록 수정
    • 템플릿 코드를 조금만 수정함
    • python3 hello.py를 다양한 파이썬 버전에서 실행함
  • 디버깅
    • 현재 Github Action은 바로 실행 기능이 없음
    • Master branch로 push시 바로 실행으로 테스트하고, Cron으로 정의하는 방식으로 사용
    • 참고로 Crontab 실행은 조금 지연이 있는듯
  • push
    • 노란색으로 표시되는 것은 현재 작업 중임을 의미함
  • 노란색 아이콘(또는 초록색 체크)를 클릭하면 작업 상태를 확인할 수 있음
  • Details 클릭
    • 세부 작업 내용을 확인할 수 있음

YES24 IT 신간 40개 크롤링해서 Issue에 올리는 Github Action

  • (복습) Github Action 사용하는 방식
    • 1) 코드 작성
    • 2) 코드 작성 후, 진행할 workflow 정의(Test Code, 배포, 단순 작업 등)
    • 3) 정상 작동하는지 Test
  • YES24 Github Action 사용하는 방식
    • 1) 코드 작성 : 크롤링 코드 + Issue 업로드 코드 작성
    • 2) 코드 작성 후, 진행할 workflow 정의 : 크롤링 코드 실행
    • 3) 정상 작동하는지 Test
    • 추가 작업 : Github Issue에 글 올리기 위해 Key가 필요함
  • 1) 크롤링 코드 설명
  • 2) workflow 정의

      name: yes24_crawler
    
      on:
        schedule:
          - cron: '0 0 * * *'
    
      jobs:
        build:
          runs-on: ubuntu-latest
          steps:
          - uses: actions/checkout@v2
          - name: Set up Python
            uses: actions/setup-python@v2
            with:
              python-version: 3.7
          - name: Install dependencies
            run: |
              python -m pip install --upgrade pip
              if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
          - name: Run main.py
            run: |
              python main.py
            env:
              MY_GITHUB_TOKEN: ${{ secrets.MY_GITHUB_TOKEN }}
  • MY_GITHUB_TOKEN이란?
    • 암호화된 키를 노출하지 않으려고 사용
    • Github Issue에 글 올릴 때 활용함
  • secrets.key 등록하는 방법
    • 문서
    • 1) Key 생성하기
      • Settings - Developer settings - Personal access tokens - Generate new token 클릭
      • 체크박스에 repo, workflow 설정 후 저장
      • Value 복사하기
    • 2) Secret Key 등록하기
      • Repository의 Settings - 왼쪽에 Secrets 클릭
      • New secret 클릭하고 Name과 Value 입력하기
      • Repository access 쪽으로 가면, access policy를 정할 수 있음
      • workflow에서 사용할 땐 ${{ secrets.이름 }} 으로 사용하고, python에선 os.getenv(변수 이름)으로 사용
  • Master branch에 push 후 테스트