본문 바로가기
Development

[Info] Github Actions 간단 사용기

by 선인장 🌵 2022. 12. 11.
728x90
728x90

Github Actions 간단 사용기

Github Actions은 Github가 Microsoft로 인수된 이후 공개한 기능이다.

이미 전 세계 많은 사람들이 Github Actions의 기능을 매우 잘 사용하여 CI / CD 파이프라인을 구축하고 있다.

그렇다면 Github Actions를 이용하는 방법 그리고 그것을 이용하여 구동, 배포 등을 어떻게 하는지에 대해서 한번 간단하게 알아보도록 하자.

여러 항목들에 대해서 하나하나 추후에 작성하도록 하겠다.

[Info] Github Actions 간단 사용기

1. Github Actions 란?

우선 Github Actions가 어떤 건지 간단히 알아보도록 하자.

Github Repositories(리포지토리)를 기반으로 Linux, Windows, MacOS 가상화 환경을 이용하여 빌드, 테스트, 릴리즈 및 배포 등과 같은 소프트웨어 개발의 Wokrflow를 자동화할 수 있게 도와주는 CI / CD Tool이다.

  • CI : Continuous Integration의 약어이며, 테스트와 빌드를 자동으로 진행하는 프로세스
  • CD : Continuous Deploy, Continuous Delivery의 약어이며, 배포 자동화

Github Actions을 사용하려면 구성요소 내용들을 이해해야 한다.

  • Workflows : 워크플로는 하나 이상의 작업을 실행하는 구성 가능한 자동화된 프로세스
  • Events : 이벤트는 워크플로 실행을 트리거하는 리포지토리의 특정 활동
  • Jobs : Job은 동일한 실행기에서 실행되는 워크플로의 일련의 단계
  • Actions : Action은 복잡하지만 자주 반복되는 작업을 수행하는 GitHub Actions 플랫폼용 사용자 지정 애플리케이션
  • Runners : Runner는 트리거 될 때 워크플로를 실행하는 서버

해당 구성요소를 이해해야 나중에 Workflow를 진행하기 위한 yaml 파일을 작성할 수 있다.

하지만 지금은 간단하게 알아보고 동작하는 것을 테스트만 해보기 위함이기에 좀 더 자세한 내용에 대해서 알고 싶다면 Github Docs에서 읽어 보도록 하자.

728x90

2. Github Actions 사용

2.1 Repositories 및 Test Code 생성

Github Actions를 테스트해보기 위해서 먼저 Git Repositories(리포지토리)를 생성하도록 하자.

2. Github Actions 사용해보기
2. Github Actions 사용해보기

생성 후 간단한 Python Code를 작성해보도록 하자.

## test_run.py ##

#!/usr/bin/python
# -*- coding: utf-8 -*-

def test_hello():
    return "Hello World"


if __name__ == "__main__":
    print(test_hello())

작성 완료 후 Github에 Push 하자.

그럼 이제 Github Actions를 이용해서 해당 Test Code가 정상적으로 구동되는지 확인해 보도록 하자.

2.2 Test Actions 생성, 설정 및 확인

먼저 상단 메뉴에 있는 Actions를 선택 후 Python application을 선택하도록 하자.

물론 set up a workflow yourself를 통해서 혹은 처음부터 Workflow 디렉터리 생성 및 yaml 파일을 생성을 할 수 있다.

지금은 생성하고 설정하고 구동되는 부분을 알아보기 위함이기에 아래와 같이 진행하도록 하자. 

2.2 Test Actions 생성, 설정 및 확인
2.2 Test Actions 생성, 설정 및 확인

해당 부분을 선택하면 현재 Python application을 구동해야 하는 workflow yaml 파일을 생성하도록 되어 있다. 

여기서 workflow yaml 파일을 아래와 같은 내용을 수정해 주도록 하자.

2.2 Test Actions 생성, 설정 및 확인
2.2 Test Actions 생성, 설정 및 확인

# This workflow will install Python dependencies, run tests and lint with a single version of Python
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python

name: Python application

on:
  push:
    branches: [ "master" ]
  pull_request:
    branches: [ "master" ]

permissions:
  contents: read

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v3
    - name: Set up Python 3.11
      uses: actions/setup-python@v3
      with:
        python-version: "3.11"
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install flake8 pytest
        if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
    - name: Lint with flake8
      run: |
        # stop the build if there are Python syntax errors or undefined names
        flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
        # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
        flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
#     - name: Test with pytest
#       run: |
#         pytest
    - name: Test Run
      run: |
        python -V 
        python ./test_run.py

해당 workflow yaml 파일 내용 중 pytest 부분은 주석 처리를 해놓았다.

pytest를 주석 혹은 삭제하지 않으면 Error가 발생된다.

물론 해당 부분을 사용할 수 있으나, 현재는 pytest를 진행하는 Code가 존재하지 않기 때문이다.

그리고 Test Run 하위에 파이썬 버전 정보 확인 및 작성한 Test Code를 실행하도록 설정한다.

설정 완료 후 Commit을 누르면 .github/workflows라는 디렉터리가 생성 및 방금 만든 yaml 파일이 된다.

2.2 Test Actions 생성, 설정 및 확인
2.2 Test Actions 생성, 설정 및 확인

이제 기본적인 설정이 완료되었다.

이제 Actions를 다시 한번 더 클릭해 보자.

2.2 Test Actions 생성, 설정 및 확인
2.2 Test Actions 생성, 설정 및 확인

동일하게 작성을 하였다면 이미지와 같이 해당 내용이 정상적으로 빌드(Build) 되면서 설정한 파이썬 버전 및 구동되어 실행됨을 확인할 수 있다.

3. Github Actions Secrets 설정 사용

이제 Github Actions를 이용하여 지금처럼 Code를 작성 및 수정 후 Github에 Push를 하게 된다면 설정한 내용에 따라서 빌드, 배포, 릴리즈 등을 자동적으로 진행할 수가 있다. 

그렇지만 특정 API를 이용하거나 로그인 등에 사용하기 위한 Token 값과 같은 Secret 정보에 대해서 Code 내에 Hard Coding 하여 Github에 Push 하게 되는 경우 많은 위험을 발생시킬 수 있다.

Github 측에서는 이러한 방법을 해결하기 위해서 Secrets라는 기능도 같이 제공을 하고 있다.

그럼 이 부분도 간단히 알아보도록 하자.

3.1 Secrets 설정

먼저 Secrets를 설정해보도록 하자.

해당 Git Repositories(리포지토리)에서 Settings를 선택 후 왼쪽 메뉴에 있는 Secrets > Actions를 선택 후 New repository secret를 클릭하여 생성하도록 하자.

3.1 Secrets 설정
3.1 Secrets 설정
3.1 Secrets 설정
3.1 Secrets 설정
3.1 Secrets 설정
3.1 Secrets 설정

3.2 Github Actions에서 이용

이제 해당 Secret을 설정하였다.

해당 Secret을 Github Actions에서 사용해 보도록 하자.

Secret을 사용할 수 있도록 yaml 파일과 Test Code 파일도 수정하였다.

	... 이하 생략 ...
    
    env:
      TEST_KEY: ${{ secrets.TEST_KEY }}
    
    ... 이하 생략 ...
    
    - name: Test Secrets
      run: |
        a=${{ secrets.TEST_KEY }}
        b=testkey.VGVzdEtleQo=
        if [ $a = $b ]
            then
                echo "True"
            else
                echo "False"
        fi
    - name: Test Run2
      run: |
        python -V 
        python ./test_run2.py

먼저 python-app.yml 파일에서는 세 가지 내용을 추가하였다.

Secrets을 env에 추가하도록 설정을 하였다.

그리고 가지고 온 Secrets 값과 동일하게 생성한 값이 일치하는지 확인을 하였다.

이유는 Github 측에서 Secret에 해당하는 값에 대해서는 마스킹 처리를 하고 있기 때문에 정확히 가지고 왔는지를 한번 더 확인해보는 ShellScript를 추가해보았다.

해당 부분은 테스트 용도로 남겨 놓은 거니 당연히 다른 부분에서는 사용하지 않아야 한다.

마지막은 새롭게 생성한 Test Code를 실행하도록 추가하였다.

#!/usr/bin/python
# -*- coding: utf-8 -*-
import os


def test_hello2():
    return "Hello World2"


if __name__ == "__main__":
    print(test_hello2())
    print(os.environ.get('TEST_KEY'))
728x90

이제 수정한 내용들을 모두 Push 하게 되면 자동적으로 Github Actions이 새롭게 진행하게 된다.

3.2 Github Actions에서 이용
3.2 Github Actions에서 이용
3.2 Github Actions에서 이용
3.2 Github Actions에서 이용

새롭게 작성한 내용을 확인해 보면 모두 정상적으로 실행되었음을 확인할 수 있다.

ShellScript도 True로 Secret에서 가지고 온 값과 동일함을 확인되었고, 정상적으로 Python Code에서도 출력되었다.

위에서도 이야기한 것처럼 Secret 값에 대해서는 마스킹을 하고 있다.

4. 예제 Code

해당 내용에 대해서 간단하게 작성한 예제 파일에 대해서는 Github에 올려놓았다.

 

GitHub - happylie/Test_GithubActions: Github Actions Test Code

Github Actions Test Code. Contribute to happylie/Test_GithubActions development by creating an account on GitHub.

github.com

해당 내용에 대해서 문제가 있거나 궁금한 내용이 있다면 Github Issus 혹은 댓글로 남겨주면 답변하도록 하겠다.

728x90
728x90


🌵댓글

 

loading