[GitLab CI] Monorepo (단일 리포지토리)에 여러 배포 가능한 디렉토리가있는 경우
マイクロサービス
를 モノレポ
(단일 리포지토리)로 관리하고 있는 경우, 루트에 놓인 .gitlab-ci.yml
만으로 기술하고 있으면 파일이 비대화하는 경향이 있습니다. 또한 프런트/백엔드 소스를 단일 리포지토리에 포함하는 경우에도 마찬가지입니다.마이크로서비스 등의 독립적으로 배포 가능한 단위의 소스를 별도의 리포지토리로 관리하는 경우도 있다고 생각합니다만, 특히 프로그램의 규모가 그다지 크지 않은 경우는, 단일 리포지토리로 관리하는 편이, 취급 쉽다고 생각합니다.
덧붙여서 Wikipedia에는 Google이나 Facebook등에서도 매우 대규모의 소스를
モノレポ
구성으로 관리하고 있다고 써 있습니다. 1 (영어에서는 monorepo=모노레포)Google,[5] Facebook,[6] Microsoft,[7] Uber,[8] Airbnb and Twitter[9] all employ very large monorepos with varying strategies to scale build systems and version control software with a large volume of code and daily 변경.
이번에는
GitLab 12.7
에서 도입된 親子関係のパイプライン
와 Only
와 Changes
키워드를 조합한 구성을 소개합니다.モノリシック
한 서비스의 경우나, 단순하게 .gitlab-ci.yml
가 비대화했을 경우의 대처법으로서는, include
키워드로 파일을 나누거나, extends
키워드로 리팩토링하는 방법이 있다고 생각합니다.구성안
리포지토리의 디렉토리 구성 예
+ .gitlab-ci.yml # ルートにあるCI/CD構成スクリプト
+ my_service_a # デプロイ可能なソースディレクトリ
| + .my_service_a.yml
| + ...
+ my_service_b # 別のデプロイ可能なソースディレクトリ
| + .my_service_b.yml
| + ...
| ...
+ .gitlab-ci.yml # ルートにあるCI/CD構成スクリプト
+ my_service_a # デプロイ可能なソースディレクトリ
| + .my_service_a.yml
| + ...
+ my_service_b # 別のデプロイ可能なソースディレクトリ
| + .my_service_b.yml
| + ...
| ...
상위 파이프라인 정의
.gitlab-ci.yml
내용image: alpine:3.7 # 参考用に軽いalpineに変更
stages:
- triggers
my_service_a:
stage: triggers
only:
refs: # ブランチを限定する場合
- develop
- stage
changes: # 以下ディレクトリ内に変更があった場合のみトリガーされる
- my_service_a/**/*
trigger:
include: my_service_a/.my_service_a.yml # 子パイプライン定義
strategy: depend
my_service_b:
stage: triggers
only:
refs: # ブランチを限定する場合
- develop
- stage
changes: # 以下ディレクトリ内に変更があった場合のみトリガーされる
- my_service_b/**/*
trigger:
include: my_service_b/.my_service_b.yml # 別の子パイプライン定義
strategy: depend
포인트
하위 파이프라인 정의
.my_service_a.yml
(내용은 자유이지만 참고까지 일단 기재)image: alpine:3.7
stages:
- one
- two
- three
stage_one_one:
stage: one
script:
- echo "ONE"
stage_two_one:
stage: two
script:
- echo "TWO ONE"
stage_two_two:
stage: two
allow_failure: false
only:
refs:
- develop
script:
- echo "TWO TWO"
stage_three_two:
stage: three
when: on_success
only:
refs:
- develop
script:
- echo "THREE TWO"
트리거
develop 브랜치에서
my_service_a/
또는 my_service_b/
의 디렉토리 아래의 소스를 커밋하여 원격으로 푸시.요약
단점은 작은 파이프 라인 스크립트의 코드 공통화 범위가 부분적으로 제한됩니다. (예 : .my_service_a.yml ⇔ .my_service_b.yml 사이)
참고 링크
출처: Wikipedia - Monorepo ↩
Reference
이 문제에 관하여([GitLab CI] Monorepo (단일 리포지토리)에 여러 배포 가능한 디렉토리가있는 경우), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mhoshdev/items/3b333d513eafe3abe09e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)