공통 CI/CD 파이프라인
수행 기간 : 2024.08 ~ 2024.09 (2개월)
프로젝트 개요
핵심 기능
개발 환경
Gitlab CI/CD
yaml
해결 방법
Project include 로 다른 gitlab 레포지토리 에서 파일을 가져와 include
hidden job, extends를 통한 브랜치 별 job 추상화
파이프라인 스크립트에서 배포관련 템플릿을 clone 후 사용
yaml anchor를 통해 스크립트 간소화
성과
Before
After
예시 스크립트
# .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:
<some 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