왜 Github Action?
Github Action을 이용하면 여러 테스트를 자동화할 수 있습니다.
저는 42Seoul 과정을 진행하면서 팀 과제를 진행하며 Github Action을 통해 2개의 테스트 자동화를 구축하고 사용하고 있습니다.
1. Makefile의 make명령이 제대로 make가 되는지 여부 테스트
2. Norminnete(코딩 컨벤션)을 맞춰서 코드를 작성했는지 테스트
이러한 테스트들을 통해 Make가 가능한 코드만 master에 머지를 한다던지 등의 팀 내규를 만들어서 소스코드를 관리할 수 있어서 매우 편리합니다.
어떻게 작동하나요? (간단히)
Github Action은 일시적으로 가상 환경을 띄워서 그 안에서 사전에 지정해둔 job들이 실행되는 순서로 작동합니다.
꼭 테스트뿐이 아니라 일련을 작업을 자동화하는 등에 사용할 수 있습니다.
제가 직접 짜서 사용하기에는 너무 어려워요
저도 마찬가지로 느낍니다. 그래서 이 글에서는 간단한 테스트를 어떻게 자동화 시키는가에 대한 설명을 드리려고합니다.
테스트를 간단히 작동하는 방법은 2가지가 있습니다.
1. 진짜 간단히 exit code만 테스트하는 테스트를 만든다.
-> 이 방법은 제가 Make 테스트를 구축할 때 사용한 방법입니다.
2. 기존에 누군가가 만들어둔 action을 가져와서 실행만 시킨다.
-> 이 방법은 제가 Norminnete(코딩 컨벤션)테스트를 구축할 때 사용한 방법입니다.
1. 에러를 이용한 테스트 구축
Makefile의 make명령은 make에 실패할시 exit코드를 error로 세팅합니다.
github action은 따로 다른 지정을 해주지 않더라도 기본적으로 exit코드가 error로 세팅이 된다면 Job의 실패로 간주합니다.
따라서 단순히 작동을 원하는 작업을 실행을 시키는 action을 작성해두는 것만으로도 그 작업이 제대로 성공하는지를 테스트할 수 있습니다.
아래는 Make테스트를 하는 Github Action 워크플로우입니다.
name: Make test
on:
push:
branches: [ "master" ]
paths-ignore:
- '**/README.md'
pull_request:
branches: [ "master" ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: make
run: make
간단한 설명을 해보도록 하겠습니다.
name: Make test -> Make test라는 이름의 name을 가지는 action이라는 의미입니다.
on push branches: [ "master" ] -> master 브랜치에 push가 발생했을 때 jobs가 실행된다는 의미입니다.
on pull_request branches : [ "master" ] -> master 브랜치에 pull_request가 발생했을 때 jobs가 실행된다는 의미입니다.
jobs build runs-on: ubuntu-latest -> 가장 최신 버전의 ubuntu 환경인 ubuntu-latest os에서 작업을 실행하겠다는 의미입니다.
jobs build steps: - uses: actions/checkout@v3 -> 가상 환경에 actions/checkout@v3 이라는 기존에 만들어진 action을 이용해서 현재 github의 소스코드를 가상환경에 내려받는다는 의미입니다.
jobs build steps: - name: make -> make라는 이름을 가진 하나의 step이라는 의미입니다.
jobs build steps: - run: make -> make라는 명령을 쉘상에서 작동시키라는 의미입니다. 이 때 make 명령이 실행되고 테스트되게 됩니다.
하나씩 뜯어보면 결국 그냥 가상환경을 키고 거기에 코드를 다운받은다음 make를 실행하는 것이 테스트의 전부임을 알 수 있습니다.
2. 다른사람이 만들어둔 Action을 이용한 테스트 구축
위에서 jobs build steps: - uses: actions/checkout@v3 를 한 부분이 다른 사람이 만들어둔 Action을 불러와서 이용한 것입니다.
# This is a simple norminette validation action.
name: 42-C-Norminette
on:
push:
branches:
- master
pull_request:
branches:
- master
jobs:
norminette_job:
runs-on: ubuntu-latest
name: norminette
steps:
- uses: actions/checkout@v2
- uses: alexandregv/norminette-action@v3
with:
flags: ''
아까와 다른 부분은 따로 없고 추가로 alexandregv/norminette-action@v3라는 다른 사람의 Action을 가져와서 추가로 사용해주는 것을 알 수 있습니다.
with flags: ''는 alexandregv/norminette-action@v3의 사용법에 적혀있는 추가 flags에 대한 부분의 명시입니다.
위와 같이 생각보다 GithubAction을 이용한 자동화 테스트 구축이 어렵지 않다는 것을 알 수 있었습니다.
다들 기술적인 코딩생활 되길 기원합니다.
'Develop(개발)' 카테고리의 다른 글
[AWS] 프리티어 VPC 과금 문제 해결법 (RDS Public IP 없이 MySQL 워크벤치 연결) (0) | 2024.07.18 |
---|---|
스프링 동시성 문제 해결법의 종류와 장단점 (3) | 2024.03.17 |
스프링이 어떻게 여러 요청을 동시에 처리할 수 있을까? (0) | 2024.03.10 |
vscode 터미널에서 실행하는 환경변수 직접 설정하는 방법 (0) | 2023.10.03 |