나의 이번년도 공부 목표 중 하나는 CI/CD이다.
CI/CD 무엇인지는 조금이나마 알고 있다. 3월쯤에 간단히 작성한 글도 있고, 프로젝트에 적용을 고민하기도 했었기 때문이다.
이전에 작성했던 CI/CD
https://velog.io/@pp8817/CICD란
그러나 프로젝트에는 적용하지 못했고, 한동안 이론과 AWS Cloud 공부를 하다보니 실무로 적용할 경험이 없다보니 CI/CD 공부가 점점 밀리는 것이 느껴졌다.
이를 깨달은 지금 CI/CD를 자세히 정리하고, 사용할 툴을 정해 혼자서라도 프로젝트에 적용시켜보려고 한다.
CI(Continuous Integration): 지속적인 통합
CD(Continuous Delivery or Deployment): 지속적인 제공/배포
CI/CD는 반드시 같이 사용해야 되는 개념은 아니다.
CI/CD를 소개하는 글, 영상을 보면 둘은 항상 묶여있길래 하나의 개념인줄 알았다.
그러나 CI, CD는 자동화를 통해 업무 속도의 향상을 돕는다는 것은 같지만, 자동화의 분야가 다르다. 이는 차차 뒤에서 소개할 예정이다.
CI는 Continuous Integration. 즉, 지속적인 통합이라는 의미이다.
지속적인 통합?
CI가 필요한 환경 조건
다수의 개발자가 형상관리 툴을 공유하여 사용하는 환경
MSA(Micro Service Archietecture) 환경
-IT 업계에 떠오른 아키텍처 모델
CI의 핵심 목표
CD는 Continuous Delivery & Continuous Deployment 두 용어의 축약어이다.
해석하자면 지속적인 서비스 제공 혹은 지속적인 배포라는 의미이다.
Continuous Delivery
Continuous Deployment
정리하자면, CI가 새로운 소스코드의 빌드, 테스트, 병합까지를 의미했는데, CD는 개발자의 변경 사항이 Repository를 넘어, 고객의 Production 환경까지 릴리즈 되는 것을 의미한다.
CI에서 예로 든 MSA와 같은 환경에서 Agile 방법론이 적용될 경우, 서비스의 사용자는 최대한 빠른 시간 내에 최신 버전의 Production을 제공받을 필요가 있다.
이런 경우 소프트웨어가 언제든지 신뢰 가능한 수준의 버전을 유지할 수 있도록 support 하는 것이 CD라고 할 수 있다.
이는 서비스의 개발팀과 비즈니스팀 간의 커뮤니케이션 부족 문제를 해결해 주고, 개포에 이르기까지의 노력을 최소한으로 단축시켜 준다는 이점을 제공한다.
CI/CD 툴은 팀이 개발, 배포, 테스트를 자동화하도록 지원한다.
CI/CD 툴 선택
나는 Jenkins와 Github Actions 중 어떤 툴을 사용할까 고민했다.
Jenkins는 전세계적으로 가장 많이 사용하는 툴이고, 전통 강자이다.
Github Actions는 Jenkins에 비해서는 인기가 덜하지만 CI/CD 툴 시장 점유율 2위이고, 클라우드로 동작하기에 별도의 서버가 필요없다.
고민을 했지만 아래 다른 분이 작성하신 CI/CD 툴 비교를 보고 Github Actions를 사용하기로 결정했다.
Github Actions으로 결정한 이유
물론 아직 연습 단계이기에 툴은 별로 중요하지 않다고 생각한다. 결국 중요한 것은 CI/CD 파이프라인을 올바르고 효율적으로 구축하는 것이라고 생각하기 때문이다.
Github Actions를 통해 CI/CD 파이프라인 구축을 실습해보고 Jenkins 또한 사용해볼 예정이다.
공식 문서 가이드: https://docs.github.com/ko/actions/writing-workflows/quickstart
도움이 되는 템플릿: https://github.com/actions/starter-workflows
Github Actions Core 개념
Github Action을 이해하기 위해서 알아야 하는 개념은 Workflow, Event, Job, Step, Action, Runner 등이 있다.
우선 이해를 위해 공식 가이드에서 예시로 제공되는 github-actions-demo.yml
파일을 읽고 시작하자.
yml
name: GitHub Actions Demo
run-name: ${{ github.actor }} is testing out GitHub Actions 🚀
on: [push]
jobs:
Explore-GitHub-Actions:
runs-on: ubuntu-latest
steps:
- run: echo "🎉 The job was automatically triggered by a ${{ github.event_name }} event."
- run: echo "🐧 This job is now running on a ${{ runner.os }} server hosted by GitHub!"
- run: echo "🔎 The name of your branch is ${{ github.ref }} and your repository is ${{ github.repository }}."
- name: Check out repository code
uses: actions/checkout@v4
- run: echo "💡 The ${{ github.repository }} repository has been cloned to the runner."
- run: echo "🖥️ The workflow is now ready to test your code on the runner."
- name: List files in the repository
run: |
ls ${{ github.workspace }}
- run: echo "🍏 This job's status is ${{ job.status }}."
.github/workflows
폴더 아래에 저장된다.자세한 내용: Events that trigger workflows
출처
CI/CD 관련
유튜브 드림코딩님의 CI/CD 개념 소개 영상
Redhat 공식 문서_CI/CD
Github Action 관련
Events that trigger workflows
Github Marketplace
Github Actions Repository
Github Self-hosted runners
Github 공식 문서 가이드
Github Actions 시작 템플릿
An Introduction to Github Actions