공통 CI/CD 파이프라인 ===================== **수행 기간 : 2024.08 ~ 2024.09 (2개월)** 프로젝트 개요 ------------- .. image:: _static/cloud-pipeline/파이프라인-컨샙.png :align: center :width: 800px **팀에서 사용하는 CI 관련 스크립트를 표준화 하고 모든 프로젝트에서 참조할 수 있게 하는 공통 파이프라인 스크립트를 만드는 프로젝트 입니다.** 핵심 기능 --------- - 표준화 된 CI/CD 스크립트 - CI/CD 단계에서 스크립트를 하나의 레포지토리에서 관리할 수 있는 형태로 구현 - 재사용 가능한 CI JOB을 제공 .. image:: _static/cloud-pipeline/표준-파이프라인-예시.png :align: center :width: 800px 개발 환경 --------- - Gitlab CI/CD - yaml 해결 방법 --------- - Project include 로 다른 gitlab 레포지토리 에서 파일을 가져와 include - hidden job, extends를 통한 브랜치 별 job 추상화 - 파이프라인 스크립트에서 배포관련 템플릿을 clone 후 사용 - yaml anchor를 통해 스크립트 간소화 성과 ---- Before ^^^^^^ - 레포 마다 독립적인 CI/CD 스크립트를 사용하고 있어 유지보수가 어려움 - CI/CD 를 실행 시키기 위한 helm template, 패키징 관련 파일이 모든 레포지토리에 존재 .. image:: _static/cloud-pipeline/파이프라인-파일.png :align: center :width: 800px After ^^^^^ - 파이프라인 표준화 - CI/CD 관련 템플릿을 하나의 소스에서 관리할 수 있게 개선 - 프로젝트에 CI/CD 파이프라인을 적용하기 쉽게 개선 - 파이프라인 STEP/JOB을 추가하기 쉬운 형태로 변경 - 실제로 사용하는 스크립트 라인 ``90% 감소`` .. image:: _static/cloud-pipeline/파이프라인-결과.png :align: center :width: 800px 예시 스크립트 ------------- .. code-block:: yaml # .gitlab-ci.yml # 공통 파이프라인 프로젝트에서 job include include: - project: cloud/backend/cloud-pipeline file: - jobs/poetry-test.yml - jobs/prepare-ci.yml - jobs/pages-ci.yml - jobs/build-ci.yml - jobs/deploy-ci.yml - jobs/poetry-init.yml - feature.gitlab-ci.yml - develop.gitlab-ci.yml - qa.gitlab-ci.yml - prod.gitlab-ci.yml variables: stages: - test - prepare_page - pages - package - deploy .develop-settings: &develop-settings only: - develop tags: - dev - cloud api-page: <<: *develop-settings stage: prepare_page image: nikolaik/python-nodejs:python3.11-nodejs18 extends: .poetry_init script: - | BUILD_TYPE=local ENV_FILE=.env.sample poetry run \ python infra/docs/extract_openapi.py --app main:create_app --app-dir ./app/main npx @redocly/cli build-docs -o api/index.html openapi.yaml - mv openapi.yaml public/ - cp -r api public artifacts: paths: - public docs-page: <<: *develop-settings stage: prepare_page image: python:3.11 extends: .poetry_init script: - . docs/plantuml_init.sh - poetry run make html - cp -r docs/build/html public - mv public/html public/docs artifacts: paths: - public pages: only: refs: - /^develop$/ stage: pages script: - echo "publish pages" artifacts: paths: - public tags: - dev - cloud