Github Actions
Github Repository를 기반으로 빌드/테스트/배포의 Workflow를 자동화할 수 있는 CI/CD 도구
다른 CI/CD 도구들과 비교했을 때, Github Actions는 딱 Github 플랫폼 하나에서만 모든 CI/CD 과정을 처리할 수 있다는 점이 존재하며, Github이 Workflow를 처리할 수 있는 환경을 자체적으로 제공하기 때문에 Jenkins와 같이 따로 처리환경을 생성하지 않고도 간단하게 사용할 수 있다는 점이 장점으로 존재한다.
Github Actions 단위 개념
Workflow
Github Actions에서의 최상위 개념으로, 자동화시켜놓은 작업의 전체 과정/흐름이다.
각 Repository의 최상단에서 .github/workflows 디렉토리 아래에 Workflow 스크립트를 작성해 Workflow를 설정할 수 있다.
하나의 Repo에 여러 Workflow를 생성해 적용시킬 수 있다.
Workflow는 YAML 스크립트로 작성하며, 이 Workflow가 언제 실행되는 지의 정의와 어떤 작업을 수행하는지의 정의를 작성한다.
아래에서 간단한 Workflow 파일을 볼 수 있다.
name: test-cicd # 이름 설정 : Workflow의 이름
on: # Event 트리거 설정 : Main 브랜치에 push되면 Workflow를 실행하겠다.
push:
branches: [main]
jobs: # Job 설정 : Workflow가 실행할 Job 설정
build:
Event
Workflow를 실행시킬 트리거(동작)으로, Event의 종류에는 코드 push, 프로젝트 fork와 같은 이벤트 발생시 실행하는 유형과 예약된 시각에 실행하도록 하는 유형이 존재한다.
Github Actions가 지원하는 전체 Event 유형은 아래 참조한 Docs에서 확인할 수 있다.
Jobs
Workflow에서 실행되는 작업 집합으로, Workflow에서 하나 이상의 Job은 기본적으로 병렬로 실행된다.
물론 각 Job에 수식을 걸어 순차적 혹은 종속적으로 실행되도록 구성할 수도 있다.
Steps
Job 내에서 명령을 실행시키는 구문, 각 Job들은 하나 이상의 Step들로 구성된다.
Step은 Job과 달리 순차적으로 진행되도록 구성된다.
이러한 Step은 간단한 쉘 스크립트를 실행시키거나, 복잡한 구조의 명령을 실행할 수 있다. 쉘 스크립트를 실행할 때에는 run 속성을 이용하고, 복잡한 구조의 명령은 action 속성을 이용해 정의할 수 있다.
Github Actions 구성요소
Action
Step에서 사용되는 복잡한 작업을 모듈화시켜 공유가능하도록 만든 실행 단위
위의 Step에서 action 속성에서 사용되며, Marketplace나 다른 사람의 repo에서 정의된 action을 가져와서 사용할 수 있다.
아래 코드와 같이 각 Step에서 Action을 사용하는 모습을 볼 수 있다.
...
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4 # Repository의 코드를 다운로드하는 Action
- name: Set up Python
uses: actions/setup-python@v4 # Python을 설치하는 Action
with:
python-version: '3.x'
# You can test your matrix by printing the current Python version
- name: Display Python version
run: python -c "import sys; print(sys.version)"
Runner
Job이 실행되는 실행환경에 대한 정의로, 각 Job 별로 Runner를 지정해주어야한다.
Job 내에서 runs-on 속성으로 Runner를 지정할 수 있다.
Github은 기본적으로 Ubuntu, MacOS, Windows의 Runner 환경을 제공해준다. (Azure의 VM을 이용한다고 한다.)
물론, Github 제공 Runner(Github-hosted runner)는 기본적으로 Job/Workflow 실행시간, API 호출 수, 동시작업 수 등의 제한이 존재하며, 제한에 걸리면 Job이 fail로 끝나거나 Workflow가 중지된다.
Runner 서버 비용이 부담되거나, Workflow를 자주 실행하거나, 보안 등의 요소로 인해 Github hosted-server를 사용하지 않기를 원할때에는 사용자가 Runner 서버를 지정해주는 Self-hosted Runner를 통해서도 Workflow를 실행할 수 있다.
최종적으로 Github Actions의 구조를 그림으로 나타내면 아래와 같다.