-
Github Action 기본 사용법Infra/CI&CD 2024. 5. 16. 22:33
CI/CD란?
소프트웨어 개발 과정에서 효율성과 신속성을 극대화하는 자동화된 프레임워크
개발부터 운영까지 소프트웨어 개발 라이프사이클의 모든 단계를 아우른다.
크게 지속적 통합, 지속적 전달, 지속적 배포로 구분 된다.지속적 통합 (CI)
- 개발자들이 작업한 코드를 주기적으로 공유레퍼지토리에 병합, 코드 통합을 자동화하는 과정
- 모든 변경사항은 자동 빌드 및 테스트를 거쳐 메인 브랜치에 통합된다.
- 코드 충돌을 최소화하며, 소프트웨어 품질을 유지하고, 배포 준비 상태를 지속적으로 유지할 수 있다.
- BUILD -> TEST -> MERGE 과정을 아우름 특히! TEST가 매우 매우 중요하다.
지속적 전달 (CD - Continuous Delivery)
- 코드 변경사항이 자동으로 빌드 및 테스트를 거쳐 실제 운영 환경에 배포될 준비가 된다.
- 배포 과정을 완전히 자동화하지 않고, 실제 배포는 수동 트리거 옵션으로 둔다.
- 배포할 준비가 되어 있으며, 비즈니스 요구에 따라 배포 시점을 선택할 수 있다.
지속적 배포 (CD - Continuous Deployment)
- 코드 변경사항이 자동 테스트를 통과하면, 즉시 프로덕션 환경에 배포된다.
- 지속적 배포를 통해 소프트웨어의 릴리스 과정이 자동화되어, 인간의 개입 없이도 신속하게 배포된다.
- 이를 통해 품질의 지속적인 개선, 개발 주기의 단축 최종적으로 사용자 만족도 증대로 이어진다.
* 모든 과정에서 모니터링도 꽤나 중요하다. CI test부터 실패 한 것을 어떻게 로그로 남기거나 알림을 받을 것인지 생각하는 것 부터 시작
* 따라서 스켈레톤 코드부터 CI/CD를 붙여서 경험해보자!
Github action
- Github에서 제공하는 CI/CD 파이프라인 도구
- 개발자는 PC나 별도의 빌드용 서버가 없이 파이프라인을 실행할 수 있다.
동작원리
- Github Repository의 이벤트 (Push,PR)에 반응하여 자동화된 워크플로우를 실행한다.
- 워크플로우는 .github/workflows 디렉토리 내 YAML파일로 정의되며, 이 파일 내에서 작업(jobs), 단계(steps), 액션(actions)을 설정할 수 있다.
Understanding GitHub Actions - GitHub Docs
- Workflow는 Github Actions에서 실행되는 자동화 프로세스를 정의하는 단위, 각 작업은 독립적으로 실행되며, 여러개의 단계로 구성될 수 있다.
- step은 각 작업 내에서 수행되는 단일 명령어 또는 액션의 연속, 작업 내에서 단계는 순차적으로 실행되며, 성공적으로 완료되어야 작업이 성공적으로 완료
- Action은 github Marketplace에서 가져오거나 직접 작성한 재사용 가능한 코드 조각이다. 다양한 용도로 사용될 수 있으며, CI/CD,테스트,배포 등과 같은 다양한 작업을 자동화하는 데 사용된다.
- secretes는 Github Actions에서 리포지토리의 중요한 데이터를 안전하게 저장하고 관리하는 데 사용한다. API 토큰, 암호, SSH키 등과 같이 민감한 정보를 포함할 수 있다. 워크플로우 사용할 때만 복호화되어 사용된다.
간단한 스크립트 작성해보기
# 이것은 Actions를 시작하는 데 도움이 되는 기본 워크플로우입니다 name: CI # 워크플로우가 실행될 시점을 제어합니다 on: # "main" 브랜치에 대한 push 또는 pull request 이벤트가 발생했을 때 워크플로우를 트리거합니다 push: branches: [ "main" ] pull_request: branches: [ "main" ] # Actions 탭에서 이 워크플로우를 수동으로 실행할 수 있습니다 workflow_dispatch: # 워크플로우 실행은 하나 이상의 작업으로 구성되며, 이러한 작업은 순차적으로 또는 병렬로 실행될 수 있습니다 jobs: # 이 워크플로우는 "build"라고 불리는 단일 작업을 포함합니다 build: # 작업이 실행될 러너의 유형 runs-on: ubuntu-latest # 단계는 작업의 일부로 실행될 일련의 작업을 나타냅니다 steps: # $GITHUB_WORKSPACE 아래에서 리포지토리를 체크아웃하여 작업이 이에 접근할 수 있도록 합니다 - uses: actions/checkout@v3 # https://github.com/actions/checkout 을 사용함. # 러너의 셸을 사용하여 단일 명령을 실행합니다 - 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.
- 한 개의 워크플로우-> 수행할 job 여러개
- 수행할 job당 여려개의 step으로 이루어져 있다.
- 각 job과 step들에는 이름이 붙어 있는데, 위와 같은 스크립트에선 주석이 굉장히 중요하다! 잘 적어두자
name: learn-github-actions run-name: ${{ github.actor }} is learning GitHub Actions on: [push] jobs: check-bats-version: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: '20' - run: npm install -g bats - run: bats -v
- 공식문서의 예제이다.
- run-name은 actions탭에 들어갔을 때 바로 보이는 이름이다 -> workflow 명과 비슷한 느낌 (mimi5963 부분)
- ${{github.actor}}은 github context이다. -> 워크플로우 트리거를 작동시킨 깃허브 유저명 표시
- ON은 trriger를 지정하는 부분이다. 현재는 push로 되어 있다. 다양한 트리거, 브랜치를 지정할 수 있다.
- jobs에 job들을 지정할 수 있다. 현재는 check-bats-version이라는 이름의 job이 지정되어 있다.
- runs-on -> job 수행 환경의미
- steps -> job을 수행하면서 실행할 명령어 모음
- uses -> actions들 사용
- with은 step을 수행하는데 조건사항
- run -> 특정 코드가 runs-on환경에서 수행하도록 명령어를 적는 부분이다.
참고자료:
Understanding GitHub Actions - GitHub Docs
GitHub Actions 가이드 - GitHub Docs
CI/CD(CI CD, 지속적 통합/지속적 배포): 개념, 툴, 구축, 차이 (redhat.com)
원티드 프리온보딩 백엔드 챌린지 4월
'Infra > CI&CD' 카테고리의 다른 글
Jenkins CI/CD 구축 (With Docker + Github + Docker Hub) (4) 2024.08.14 Github Action으로 ecr 업로드 하기 (0) 2024.05.16