서론
이번 포스팅에선 최근 CI/CD로 많이 사용되는 github actions의 기본적인 개념과 주요 용어들에 대해 간략히 정리해보려한다. 필자도 미숙한 부분이기에 공식 홈페이지 내용 과 다른 포스팅의 검색을 통해 더 알아보는것을 추천한다.
Github Actions란?
workflow를 자동화 할 수 있도록 도와주는 도구를 말한다.
특징
- repo에서 어떤 event가 발생했을 때 특정 작업을 실행시키거나, 주기적으로 어떤 작업들을 반복해서 실행시킬 수 있다.
- pull request 검사
- 누군가 repo에 pr을 생성하게 되면 github actions를 통해 해당 코드 변경분에 문제가 없는지 각종 검사를 진행한다.
- 빌드 및 배포
- 어떤 새로운 코드가 메인 브랜치에 유입(push)되면 github actions를 통해 소프트웨어 빌드를 하고 상용 서버에 배포할 수 있다.
- 정해둔 시각 데이터 수집
- 뿐만 아니라 정해둔 특정 시각에 그날 하루에 대한 통계 데이터를 수집시킬 수도 있다.
- pull request 검사
기능
- Workflow(작업 흐름)
- 자동화 해놓은 작업 과정이라 볼 수 있다.
- repo내에서 .github/workflows 폴더 아래에 위치한 yaml 파일로 설정하며 하나의 코드 저장소에는 여러 개의 워크플로우, 즉 여러개의 yaml 파일을 생성할 수 있다.
- 이 workflow yaml 파일에는 크게 2가지를 정의하는데, 첫번째는 on 속성을 통해 해당 workflow가 언제 실행되는지를 정의한다.
- ex) repo의 main 브랜치에 push이벤트가 발생할 때마다 workflow를 실행하려면 다음과 같이 설정해준다.
on: push: branches: - main
- 또 다른예로, 매일 자정 워크플로우를 실행하려면 다음과 같이 설정한다.
on: schedule: - cron: "0 0 * * *"
- Events
- workflow를 trigger하는 특정 활동이나 규칙을 의미한다.
- 아래 예시를 말한다.
- 특정 브랜치로 push
- 특정 브랜치로 pr
- 특정 시간대에 반복(cron)
- Jobs
- 독립된 가상머신 또는 컨테이너에서 돌아가는 하나의 처리 단위를 의미한다.
- 하나의 워크플로우는 여러 개의 작업으로 구성되며 적어도 하나의 작업은 있어야한다.
- 그리고 모든 작업은 기본적으로 동시에 실행되며, 필요 시 작업간에 의존 관계를 설정하여 작업이 실행되는 순서를 제어할 수도 있다.
- jobs 의존 관계를 설정 할때는 needs를 사용하여 설정한다.
jobs: job1: job2: needs: job1 job3: needs: [job1, job2]
- yaml 파일 내에서 jobs 속성을 사용하여 작업 식별자(key id)와 작업 세부 내용 간의 매핑 형태로 명시가 된다.
- ex) job1, job2, job3이라는 작업 id를 가진 3개의 작업을 추가하려면 다음과 같이 설정한다.
위 처럼 명시하면 되며, 필수로 runs-on 속성을 통해 해당 리눅스나 윈도우즈와 같은 실행 환경을 지정해줘야한다.jobs: job1: # job1에 대한 세부 내용 job2: # job2에 대한 세부 내용 job3: # job3에 대한 세부 내용
- ex) 우분투의 최신 실행환경에서 해당 작업을 실행한다면, 다음과 같이 설정한다.
또 중요한 부분이 작업 순서를 정해줘야하는데, 이 부분은 steps 속성을 통해서 설정하면 된다.jobs: job1: runs-on: ubuntu-latest steps: # ...(생략)...
- Steps
- 작업 단계를 의미한다.
- 작업 단계는 단순한 커맨드 또는 스크립트가 될 수도 있고 actio과 같이 좀 복잡한 명령일 수 있다.
- 커맨드를 실행할 때는 run 속성을 사용하고, 액션을 사용할 때는 uses 속성을 사용한다.
- ex) js 프로젝트를 내려받고, 패키지를 설치한 후, 테스트 스크립트를 실행한다.
jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - run: npm install - run: npm test
- Actions
- 빈번하게 필요한 반복 단계를 재사용하기 용이하도록 제공되는 일종의 작업 공유 메커니즘을 말한다.
- action은 하나의 코드 저장소 범위내에서 여러 워크플로우 간에 공유를 할 수 있을 뿐만 아니라. 공개 코드 저장소를 통해 액션을 공유하면 github 상의 모든 코드 저장소에서 사용이 가능해진다.
마무리
해당 포스팅은 필자가 공부하며 정리한 내용들을 적은것뿐이기에 github actions의 많은 개념중 일부중 하나입니다. 서론에서 말씀드렸듯이 더 많은 문서를 찾아보며 개념을 잡아가기를 추천드립니다.
반응형
'Infra' 카테고리의 다른 글
DockerFile의 개념과 예시 정리 (0) | 2023.01.11 |
---|---|
Docker의 개념과 사용 이유에 대해서 (+ 라이프사이클) (0) | 2022.12.02 |
댓글