규도자 개발 블로그

django로 github actions찍먹해보기 본문

DevOps/Git

django로 github actions찍먹해보기

규도자 (gyudoza) 2022. 2. 26. 20:43

django로 github actions찍먹해보기

github actions라고 요즘 핫한 친구가 있다. 간단하게 말하자면 github actions를 설정한 저장소에 특정 이벤트가 일어나면(push를 했을 때나 정해진 시간 등) 정해놓은 워크플로우를 자동으로 실행하게 해주는 기능이다. 일종의 CI/CD작업을 깃허브에서 실행하게 만들 수도 있는 셈이다. 그래서 보통 jenkins에서 수행하던 CI작업을 github actions로 많이 옮기는 추세이다. 허나 완전한 무료는 아니라는 걸(2,000 Actions minute/month FREE) 알아둬야 한다.

github에서 직접 지원하는 기능일 뿐더러 build, test, package, release, deploy 등 다양한 이벤트를 기반으로 직접 원하는 Workflow를 만들 수 있어서 많이 각광받는 추세이다. 다양한 동작에 대응할 수 있고 커스터마이징이 쉬우니 활용성도 무궁무진하다. 이걸 이용해 무료 서버리스 크롤링 툴도 만들 수 있으니 관심 있는 사람은 이 글을 참조해보는 것도 좋을 것이다.

 

간단하게 django로 프로젝트를 만들고 어떻게 적용하는지 살펴보자.

$ pip install django
$ pip freeze > requirements.txt
$ django-admin startproject testproject .
$ python manaer.py runserver

위 명령어를 통해 후다다다다닥 파이썬 기본 프로젝트를 실행해보자.

 

django project가 생성되고 실행도 정상적으로 된다. 정말 사랑할 수밖에 없는 프레임워크다. 뭐 아무튼 이걸 commit해서 올려보자.

해당과정은 https://github.com/jujumilk3/infrastudyrepo 여기서 진행하였다.

 

멀쩡히 잘 진행된 걸 볼 수 있다. 그럼 상단의 Actions버튼을 눌러 들어가보면

 

이런식으로 이거 한번 써보라고 추천을 해준다. repo 내부의 소스를 읽어서 어떤 workflow가 적당한지 제안해주는 구조이다. django로 만든 프로젝트이니 좌측에 있는 django의 configure를 누르면

 

이런식으로 어떻게 구성하겠다는 yaml파일이 예제로 보여진다.

# django.yml
name: Django CI

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:

    runs-on: ubuntu-latest
    strategy:
      max-parallel: 4
      matrix:
        python-version: [3.7, 3.8, 3.9]

    steps:
    - uses: actions/checkout@v2
    - name: Set up Python ${{ matrix.python-version }}
      uses: actions/setup-python@v2
      with:
        python-version: ${{ matrix.python-version }}
    - name: Install Dependencies
      run: |
        python -m pip install --upgrade pip
        pip install -r requirements.txt
    - name: Run Tests
      run: |
        python manage.py test

파일은 이렇게 구성돼있는데 정말 직관적이게도 main branch에 PR이나 push를 받으면 build라는 잡을 실행하겠다 이게 전부이다. Start commit 버튼을 누르면

이렇게 .github디렉토리 내에 내가 설정한 workflows파일이 생성된다.

 

만약에 이 글을 보고 따라하고 있는 사람은 github에서 빌드에 실패했다는 메일이 왔을 것이다. 왜냐, workflow를 추가하는 과정 자체가 main branch에 대한 push이고, main branch에 push가 되면 해당 workflow를 실행하게 되는데 현재 django 최신버전인 4.0.2번은 python 3.7을 지원하지 않기 때문에 build과정에서 실패했다는 알림이 뜬 것이다.

이렇게 메일이 온다. 레포의 actions로 가서 자세한 내용을 보면

 

이렇게 어떤 과정을 통해 build가 되지 않았는지 알려준다. 우린 맨 마지막 줄만 보면 된다

ERROR: No matching distribution found for Django==4.0.2

자, 이렇게 django 4.0.2와 파이썬 3.7이 호환되지 않는다는 걸 알았으니 한번 원할한 CI가 될 수 있게 진행해보자. 방법은 간단하다. workflow에서 python 3.7이라는 조건을 하나 지워주면 된다.

# django.yml
name: Django CI

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:

    runs-on: ubuntu-latest
    strategy:
      max-parallel: 4
      matrix:
        python-version: [3.8, 3.9]

    steps:
    - uses: actions/checkout@v2
    - name: Set up Python ${{ matrix.python-version }}
      uses: actions/setup-python@v2
      with:
        python-version: ${{ matrix.python-version }}
    - name: Install Dependencies
      run: |
        python -m pip install --upgrade pip
        pip install -r requirements.txt
    - name: Run Tests
      run: |
        python manage.py test

이렇게 workflow파일을 수정하고 다시 push하면

 

이렇게 actions페이지에서 돌아가다가

 

두개의 조건에서 실행한 job이 정상적으로 종료된 것을 확인할 수 있다.

 

 

누구라도 보고 따라할 수 있게 간단한 튜토리얼을 제작해보았다. 이렇게 CI까지만 진행해볼 수 있고 CI가 완료되면 해당 파일을 docker image로 만들어서 aws ECR에 등록한뒤 그 이미지로 CD를 진행하던가 혹은 여기에서 CD까지 진행하던가 뭐 그런 선택지들이 있다. 선택은 언제나 각 회사의 비지니스 특성과 상황, 환경을 고려한 최선이 돼야할 것이다.

 

 

Comments