[CI] Continuous Integration

yoonseok choi·2022년 8월 29일
0

AWS

목록 보기
10/11

최근 듣고 있는 연사님의 강의를 통해 CI에 대해서 알아 볼 수 있는 시간을 가졌다.

신입 개발자에게 코딩,엔지니어링 요소도 물론 중요하지만, 해당 요소를 많이 기대하지는 않고 기본기를 많이 중요시 한다고 하시면서 CI의 중요성에 대해서 말씀해주시며 CI를 사용하는 습관을 가지면 좋겠다고 조언해주셨다.



CI

CI란
Continuous Integration로 지속적인 통합으로 소스/버전에 대한 코드 변경사항을 주기적으로 commit & push하여 자동으로 테스트 과정을 거치고 동작이 이루어지는지 error사항은 없는지 확인 하는 것을 의미한다.
(현업에서는 시니어 개발자가 CI를 통해 error 사항이 발생했을 때 merge 되는 것을 방지하기 위해 사용한다.)

간단하게 빌드,테스트,배포의 자동화 과정이라고 할 수 있다.



Git actions

Github Actions를 사용하여 repo에서 바로 소프트웨어 개발 워크플로를 자동화, 사용자 지정 및 실행하며, CI/CD를 포함하여 원하는 작업을 수행하기 위한 작업을 검색, 생성 및 공유하고 완전히 사용자 정의된 워크플로에서 작업을 결합할 수 있다.

https://docs.github.com/en/actions

Lint

Lint: 코드의 문법 및 코드 스타일의 오류를 미리 점검하기 위해서 사용하는 툴
(ex. python: black,flake8... etc..)

Lint 예시 코드


name: Lint Code Base

on: push

jobs:
  # Set the job key. The key is displayed as the job name
  # when a job name is not provided
  super-lint:
    # Name the Job
    name: Lint Code Base
    # Set the type of machine to run on
    runs-on: ubuntu-latest

    env:
      #OS: ${{ matrix.os }}
      PYTHON: '3.7'

    steps:
      # Checks out a copy of your repository on the ubuntu-latest machine
      - name: Checkout code
        uses: actions/checkout@v2

      # Runs the Super-Linter action
      - name: Lint Code Base
        uses: github/super-linter@v4
        env:
          DEFAULT_BRANCH: master
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          VALIDATE_PYTHON_BLACK: true
          VALIDATE_PYTHON_FLAKE8: true
경로: .github/workflows/lintcode.yml

위의 예시 코드는 yml형식으로 되어 있고 같은 폴더에 위치한 *.py file를 자동으로 확인해준다.

  • jobs: job은 여러 steps으로 나뉜다.
    - runs-on: ubuntu 환경에서 실행.
  • env: 어떤 python version에서 실행하는지 여부.
  • steps: Task의 집합으로 action을 실행한다.
    linter(python_black,python_flake8)과 같은 작업을 실행.

Git actions에서 Lintcode 정상 작동 예시



Code Coverage

Coverage

coverage: 작성한 코드가 테스트에 얼마만큼 충족되었는지 알려주는 툴
name: Coverage Report

# Run this workflow every time a new commit pushed to your repository
on: push

jobs:
  coverage-report:
    name: Coverage Report
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v2

      - name: Set up Python 3.7
        uses: actions/setup-python@v2
        with:
          # Semantic version range syntax or exact version of a Python version
          python-version: '3.7' 
          # Optional - x64 or x86 architecture, defaults to x64
          architecture: 'x64'

      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
        
      - name: Run unit test
        run: |
          coverage run --source=./ -m unittest discover -p "*_test.py"
        
      - name: Publish code coverage
        uses: paambaati/codeclimate-action@v3.0.0
        with:
          coverageCommand: coverage xml
          coverageLocations: ${{github.workspace}}/coverage.xml:coverage.py
        env:
          CC_TEST_REPORTER_ID: 24437f0fe93e1caa579319885785a0172b2343e17af1dfce3a8aaecc2606a51c
          # codeclimate -> repo setting -testcoverage id
      
경로: .github/workflows/coverage.yml
	+) requirements.txt

coverage.xml에서 유심히 볼 내용

- name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          if [ -f requirements.txt ]; then pip install -r requirements.txt; fi

  - name: Run unit test
    run: |
      coverage run --source=./ -m unittest discover -p "*_test.py"
       
    env:
      CC_TEST_REPORTER_ID: token_ID

requirements.txt

black==19.10b0
coverage==4.3
codeclimate-test-reporter==0.2.3

해당 txt에는 lint,coverage,codeclimate등의 패키지 목록이 담겨있다.

unittest를 사용하는경우

coverage run --source=./ -m unittest discover -p "*_test.py"
    -> terminal에 위의 명령어를 통해 실행 할 수 있다.	

coverage xml
    -> terminal에 위의 명령어를 통해 internet과 연결하는 xml file을 생성 할 수 있다.

env

env:
    CC_TEST_REPORTER_ID: token_ID

token_ID 경로 : codeclimate -> repo setting -testcoverage ID copy

CC_TEST_REPORTER_ID의 경우, codeclimate에서 제공하는 id 값을 사용하여야 coverage의 진행률을 확인 할 수 있다.
https://docs.codeclimate.com/docs/configuring-test-coverage (참고 url)



CodeClimate

앞선 내용에서 Git actions & lint,coverage code를 사용하여 CI를 자동화하는 과정을 살펴보았다.

앞선 과정에 대한 코드의 품질에 대한 평가 및 이를 한 눈에 보기 쉽게 시각화 해주는 사이트를 CodeClimate라고 할 수 있다.

또한, CodeClimate는 Git 계정과 연동이 가능하기 때문에 자신의 repo에 대한 품질 평가를 진행 할 수 있다.

codeclimate 사이트에서 py file별, 종합적으로 품질 평가 결과를 확인 할 수 있다.


Github repo에서도 markdown 설정을 통해 다음과 같이 확인 할 수 있다.

profile
Concilio et Labore ( 지혜와 노력으로 )

0개의 댓글