이번 글에서는 Github Actions에 대해 정리하려고 한다.
본 글의 내용은 드림코딩님의 제발 깃허브 액션 🔥 모르는 개발자 없게해 주세요 🙏 영상을 바탕으로 작성했다.
목차는 다음과 같다.
1. 개발 프로세스의 핵심 자동화
2. Github Actions 개념
2-1. Events
2-2. Workflow
2-3. Jobs
2-4. Actions
2-5. Runner
3. Github Actions 사용법?
4. 마무리
1. 개발 프로세스의 핵심 자동화
앞선 글에서 `CI/CD`를 정리했었는데, 이러한 `CI/CD`의 핵심 포인트는 자동화라고 할 수 있다.
그렇다면 어떻게 자동화를 할 수 있을까?
최근 다양한 버전 관리 시스템이 존재하고 있지만, 제일 많이 쓰는 것은 `Git`일 것이다. 또한 이를 배포할 수 있는 `Github`도 존재하고 있다.
예전에는 Git/Github를 통해 자동화를 이용하려면 Jenkins, Buildkit, circleci등 외부 tool들을 사용했어야 했다.
하지만 2018년 `Github Actions`가 등장하게 되면서 별도의 외부 tool 없이도 자동화 프로세스를 만들 수 있게 되었다.
`Github Actions`는 소프트웨어 개발 워크플로우를 자동화할 수 있는 `CI/CD` 도구이다. 이를 활용하면 코드의 빌드, 테스트, 배포 등의 작업을 `Github`에서 직접 수행할 수 있다.
이제 이러한 `Github Actions` 개념에 대해 알아보자.
2. Github Actions 개념
Github Actions의 개념에 대해서는 5가지를 알면된다.
- `Events`
- `Workflows`
- `Jobs`
- `Actions`
- `Runners`
각각에 대해 알아보자
2-1. Events
Github Actions은 어떠한 이벤트가 발생했을 때 자동으로 내가 원하는 일을 수행할 수 있게 만들어주는 tool이다.
따라서, 어떤 일 발생 했는지를 지정할 수 있는 `Events`를 잘 이해해야한다.
Github Actions의 `Events`는 Github에서 일어날 수 있는 대부분의 이벤트를 지정할 수 있다.
예를 들어, main branch로 merge를 한다거나, commit을 push 또는 issue를 누군가가 open 등 다양하게 지정할 수 있다.
각각에 `Event`마다 내가 수행하고 싶은 무언가가 있을 수 있다. 특정한 `Event`가 발생했을 때 내가 어떤 일을 수행하고 싶냐를 명시할 수 있는 것이 `Workflow`이다.
2-2. Workflow
앞서 설명했듯이, 특정한 `Event`가 발생했을 때 내가 어떤 일을 수행하고 싶냐를 명시할 수 있는 것이 `Workflow`이다.
위 그림으로 설명해보면, 만약 push라는 `Event`가 발생하면 `Workflow`에 지정된 것들이 자동으로 수행되게 된다.
실제 수행하는 것은 `Workflow` 안에 `Jobs`라는 것이다.
2-3. Jobs
`Workflow`안에는 하나 또는 다수의 `Job`이 있을 수 있다.
각각의 `Job` 할 일 가지고 있는데, 위 그림에 예제에서는 하나의 `Job`은 unit test를 진행하고, 하나의 `Job`은 E2E test를 진행하게 된다.
기본적으로는 하나의 `Job`이 수행되는 동안 다른 `Job`도 수행이되어 병렬적, 동시다발적으로 실행이된다.
만약, 나는 unit test를 하고 통과되면 E2E test를 진행하고 싶다고 한다면 순차적으로 진행될 수 있도록 만들 수도 있다.
또한 각각 `Job`안에는 어떤 순서대로 실행이 되어야 하는지 step을 하나씩 명시해줄 수도 있다.
shell script를 사용해서 어떤 step을 해야하는지 명시해 줄 수 있으며, 위 그림과 같이 npm install 같은 명령어도 수행할 수 있다.
또한 Github Actions에서 짠 유용한 `Action`이라는 것도 사용할 수 있다.
2-4. Actions
Github Actions에는 재사용할 수 있는 공개적으로 오픈되어있는 `Action`들이 많이 있다.
그래서, 흔하게 사용할 수 있는 다양한 명령들이 `Action`이라는 것으로 정의 되어 있다.
예를 들어, 위 그림에서 `action` checkout을 통해 현재 레포지토리를 checkout해서 원하는 명령어를 수행할 수 있다.
따라서, 이미 잘 만들어진 필요한 대부분 `Action`들이 공개적으로 정의되어져 있기 때문에 그냥 갖다가 쓰면 된다.
Events, Workflow, Jobs, Actions를 정리보면 다음과 같다.
특정한 `Events`가 발생했을 때, 자동화하여 실행하고 싶은 script를 `Workflow`안에 작성해둘 수 있다
`Workflow`안에는 하나 또는 다수의 `Job`을 정의할 수 있다.
각각에 `Job` 안에는 어떤 순서대로 일이 진행되어야 하는지 script 형태로 작성할 수 있고, Github에서 제공해주는 유용한 `Actions`을 그대로 가져다가 사용할 수 있다.
앞서, 기본적으로 각각의 `Job`들은 병렬적으로 실행된다고 했는데, 이러한 `Job`들을 실행하는 것이 `Runner`이다.
2-5. Runner
앞서 설명했듯이 `Job`들을 실행하는 것이 `Runner`이다.
이 `Runner`는 VM 또는 Docker Container라고 볼 수 있다.
즉, 각각의 `Job`들은 각각의 독립적인 컨테이너에서 시행된다고 보면 된다.
Gihub Actions 사용법?
Github Actions를 사용하기 위해서는 프로젝트 경로안에 .github/workflow/ 경로에 yml 파일을 생성하면 된다.
yml 파일은 아래와 같이 구성할 수 있다.
name: learn-github-actions
on: [push]
jobs:
check-bats-version:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '14'
- run: npm install -g bats
- run: bats - v
파일 맨 위에 workflow의 이름을 정의할 수 있고, 어떠한 Event가 발생했을 때 뭐를 실행할건지 정의할 수 있다.
위 예제에서는 `on: [push]`라고 되어있는데 이것은 push Event가 발생했을 때, 정의한 Job들이 수행된다.
위 그림에서 `jobs:` 부분이 job을 명시하는 부분이다.
jobs의 첫줄에는 job의 이름을 정의 할 수 있다. 위 예시에서는 check-bats-version이다.
그리고 `runs-on`은 Runner을 사용할 때 어떠한 VM을 사용할 것인지 정의하는 것이다.
위 예시에서는 ubunt 최신버전의 VM을 사용한다.
밑에 `steps`에는 job이 어떠한 일을 수행할지 정의할 수 있고, 순서도 정의할 수 있다.
위 예시에서는 action의 checkout@v3와 setup-node@v3를 사용하여 실행하고, npm install -g bats, bats -v 등과 같이 명령어를 실행한다.
설정이 완료되면, push 이벤트가 발생할 때 마다 자동으로 설정한 작업들이 수행된다.
마무리
이번 글에서는 `Github Actions`에 대해 정리하였다.
`Github Actions`를 활용하면 CI/CD 파이프라인을 쉽게 구축할 수 있으며, 다양한 이벤트를 기반으로 자동화할 수 있다.
앞으로의 프로젝트에서도 유용하게 사용할 것 같다.
'CI|CD' 카테고리의 다른 글
[CI/CD] Github Actions 사용해보기 (1) | 2025.02.13 |
---|---|
[CI/CD] CI/CD 란? (1) | 2025.02.11 |