출처 : https://www.youtube.com/watch?v=qP8kir2GUgo
위 영상을 기반으로 GitLab에 대한 전반적인 내용을 정리했습니다.
GitLab이란?
- 전반적인 DevOps 플랫폼으로 Manage, Plan, Create, Verify, Package, Secure, Release, Configure, Monitor, Protect 기능을 수행하는 것을 목표로 함
- 새로운 feature를 지속적으로 추가함으로써, 완전한(complete) DevOps 플랫폼이 되는 것을 목표
- 그 중 일부가 CI/CD 파이프라인
CI/CD란?
- Continuous Integration
- Continuous Deployment/Delivery
- 자동으로 수정된 코드(Code Changes)에 대해 테스트(Test), 이미지 빌드(Build), 배포(Release)하는 것
- 개발자가 GitLab repo에 대로운 코드를 커밋한다면, GitLab에서 자동으로 (해당 프로젝트를 위해 구성된) CI/CD 파이프라인을 수행. 최종적으로 end user가 사용할 수 있도록 배포.
- 결국 지속적으로(continuously) 최종 환경(end env)에 코드 변경을 배포(release)하는 것
CI/CD 툴 종류
- Jenkins (아직 가장 많이 사용)
- Azure Pipelines, Travis CI, AWS CodePipeline, TeamCity (TC)
- GitLab 장점 1: 이미 코드가 GitLab에 있기 때문에 (Source Code Management) 팀 내 SW 개발의 연장선상으로 같은 플랫폼 상에서 CI/CD 파이프라인 구축 가능
- 예) 팀에서 GitLab에서 작업해서 코드를 업데이트한다면 별도 툴 없이 CI/CD 기능
- GitLab 장점 2: Seamless한 CICD
- GitLab 장점 3: 별도 CI/CD 세팅 불필요
- GitLab 장점 4: 어플리케이션 코드의 파이프라인 구성
- 반대로 Jenkin의 단점
- 1. CI/CD 툴로서만 동작
- 2. 젠킨스 서버를 별도로 구성, 파이프라인 구축, git 프로젝트에 연결해야 함
GitLab 아키텍처
- GitLab Instance/GitLab Server
- 어플리케이션 코드와 파이프라인을 호스트 (전체 구성)
- GitLab Runners
- GitLab Server 머신과는 별도의 머신으로 파이프라인을 수행(execute)하는 역할
- GitLab에서 이미 복수의 Runners 제공
- 위 내용은 gitlab.com에서 기본으로 제공하나 조직에 따라 Self-Managed도 가능 (www.gitlab.mycompany.com)
데모 프로젝트
- Python APP 출처 : https://github.com/benc-uk/python-demoapp
- GitLab 출처 : https://gitlab.com/nanuchi/gitlab-cicd-crash-course
- Python APP을 위한 파이프라인 구축
- 순서 : python app -> 테스트 -> 도커 이미지 생성 -> 도커 Registry로 푸시 -> 서버에 배포
- open terminal
git clone git@gitlab.com:nanuchi/gitlab-cicd-crash-course.git
cd gitlab-cicd-crash-course
ls내에 있는 것들이 어플리케이션
code.
- 각 파트 설명
- 테스트
- CI/CD 파이프라인 중 일부. 새 코드가 기존 기능을 해치지 않는지 확인. 만약 테스트 fail -> 파이프라인 fail -> 새 변경사항 반영 X
- /app/tests/ 폴더 내 test_api.py, test_views.py
- makefile : test 관련 shell commands 포함
- make test
- dependencies 설치 (pip install)
- 테스트 실행 (pytest)
- 테스트 결과 표시
- 각 프로그래밍 언어에 따라 필요한 환경이 다름
- Python : pip
- Node.js : npm, yarn
- Java : maven, gradle
- make run
- make run : 어플 실행 (포트 지정)
- Pipeline은 어플리케이션 git repo에 포함되어 있어야 하고, CI/CD 설정은 yaml 파일에 작성되어 있음 (별도 설정 필요없이 실행할 수 있도록)