개발을 어느 정도 하다보면 자동화란 키워드를 여기저기서 들을 수 있다.
나 역시도 마찬가지인데 여태껏 어려운 개념이라 생각해 차일피일 미루며 탐색만 해오다 생각보다 어렵지 않다고 느껴 정리를 해보려 한다.
Github에서는 Github Actions를 통해 CI/CD를 돕는다고 한다.
Github에서 제공하는 개발의 workflow
를 자동화할 수 있게 도와주는 CI/CD 툴을 말한다.
CI (Continuous Integration)
: 테스트, 빌드 등의 프로세스를 지속적으로 실시해 프로덕션 환경의 품질을 유지하는 것을 의미한다.CD (Continuos Delivery or Continuous Deploy)
: 프로덕션 서비스를 실제 사용자들에게 배포하는 프로세스를 의미한다.통상적으로 CI/CD를 통해 개발의 전체적인 프로세스를 자동화하여 시간을 단축시킬 수 있다.
Github Actions를 사용하면 Github가 Runner라는 컴퓨터를 빌려준다.
특정 Event가 trigger 되면 깡통 컴퓨터에서 Runner를 구동시키거나
추가적인 데이터를 주입해 Runner를 구동시켜 여러가지 자동화된 프로세스를 진행한다.
Event
Workflow를 trigger하는 특정활동이나 규칙
Job
같은 Runner에서 실행되는 Step들의 집합. 기본적으로 Workflow는 여러 개의 Job들을 병렬로 실행하며 순차적으로 실행할 수도 있다.
Step
Job 안에서 명령어를 실행시키는 Task이다. Step에서 명령을 내리거나 Action을 실행할 수 있다.
Action
Step에서 Job을 만드는 독립적인 명령어이다. 자신이 직접 만들거나 Github Marketplace에서 만들어진 Action을 사용해도 된다.
Runner
Github Actions runner application이 설치된 서버이다. 이를 통해 한 번에 하나의 Job을 실행시키며 과정을 기록해 Github에게 알려준다.
레포지토리를 생성 후 Actions 탭에 들어가면 상단에 set up a workflow yourself
가 보인다. 클릭하여 들어가자.
yaml 파일의 템플릿이 만들어져 있다. 기존에 존재하던 주석을 제거하면 아래와 같은 형태이다.
name: CI
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Run a one-line script
run: echo Hello, world!
- name: Run a multi-line script
run: |
echo Add other actions to build,
echo test, and deploy your project.
한 부분씩 살펴보자.
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
on에서 trigger될 Event를 정의한다. main 브랜치에서 push, pull_request가 일어나면 Job이 실행된다.
on: [push]
위와 같은 형태로 작성할 수도 있다.
jobs:
build:
runs-on: ubuntu-latest
Job을 어떤 OS에서 실행할 지 정의한다. 자세한 것은 Gihub Docs-run-on를 참고하자.
steps:
- uses: actions/checkout@v3
- name: Run a one-line script
run: echo Hello, world!
- name: Run a multi-line script
run: |
echo Add other actions to build,
echo test, and deploy your project.
steps에서 Job이 할 수 있는 동작들을 나열한다. 각각의 Step은 독립적인 프로세스를 가진다.
{owner}/{repo}@{ref|version}
구조이다.
기존 템플릿의 steps를 아래와 같이 변경 후 커밋을 한다.
steps:
- name: Run pwd
run: pwd # 현재 사용자가 어떤 디렉토링 있는 알려주는 명령어
- name: Run ls -al
run: ls -al # Runner가 제공하는 디렉토리에 어떤 파일들이 있는지 알려줌.
짜잔, 실제로 레포지토리에 .github/workflows에 우리가 만든 파일이 생성된 것을 확인할 수 있다.
실제로 Job이 실행되는지 확인하기 위해 레포지토리를 로컬로 clone 후 README 파일을 생성해 push 했다.
다시 Action 탭에 들어가본 결과 on:push
이벤트가 발생하고 steps의 명령어들이 잘 실행이 되었다.
앞선 예시들은 생활코딩의 github.com - action을 참고해서 작성했다. 아직까진 실무에 도움이 될 코드들은 아니지만 Github Actions의 전체적인 흐름을 이해하는 데 많은 도움이 된 것 같다.
다음 게시글은 Action으로 체크아웃까지 진행해볼 것이다. 관련 정보는 생활코딩의 github.com - action의 18분부터 확인할 수 있다.