다중 에코시스템 업데이트란?
다중 에코시스템 업데이트를 사용하면 Dependabot에서 npm, Docker, Python 및 Terraform과 같은 다양한 패키지 에코시스템의 종속성 업데이트를 그룹당 단일 끌어오기 요청으로 그룹화할 수 있습니다.
각 에코시스템에 대해 별도의 끌어오기 요청을 받는 대신 해당 그룹의 에코시스템에 대한 모든 업데이트를 포함하는 하나의 통합된 끌어오기 요청을 받게 됩니다.
다중 에코시스템 업데이트 작동 방식
다중 에코시스템 그룹을 구성하는 경우:
- 파일의
dependabot.yml섹션에서multi-ecosystem-groups일정을 사용하여 그룹을 정의합니다. - 키를 사용하여 그룹에 개별 패키지 에코시스템을 할당합니다
multi-ecosystem-group. - 각 에코시스템에 대해
patterns키를 사용하여 포함할 종속성을 지정합니다. - Dependabot은 설정된 그룹 일정에 맞춰 업데이트를 점검합니다.
- 그룹의 모든 에코시스템에서 업데이트를 포함하는 단일 끌어오기 요청이 생성됩니다.
- PR은 분기 이름과 제목 모두에서 그룹 식별자를 사용합니다.
다중 에코시스템 업데이트를 사용하는 경우
다중 에코시스템 업데이트는 다음 작업에 특히 유용합니다.
- 여러 기술을 사용하는 인프라 프로젝트(Docker, Terraform, Python 스크립트)
- 함께 업데이트해야 하는 프런트 엔드 및 백 엔드 종속성이 있는 전체 스택 애플리케이션
- 언어 간에 동기화된 프로토콜 버전이 필요한 플랫폼 간 라이브러리
- 다양한 언어의 서비스가 버전 관리를 공유하는 Monorepos
다중 에코시스템 및 단일 에코시스템 그룹
Dependabot은 두 가지 유형의 그룹화를 지원합니다.
**다중 에코시스템 그룹:**
-
파일의 여러
package-ecosystem항목에dependabot.yml파일을 걸쳐 확장하세요. -
`patterns` 포함할 종속성을 지정하려면 키가 필요합니다. -
`multi-ecosystem-groups` 섹션에 고유한 일정을 정의합니다. -
키를
multi-ecosystem-group사용하여 그룹에 에코시스템 할당**단일 에코시스템 그룹:** -
하나의 패키지 에코시스템 내에서 작업
-
`updates` 항목 내에서 `groups` 키 사용 -
부모
updates항목에서 일정 상속 -
단일 패키지 관리자 내에서 종속성을 구성하는 데 더 적합합니다.
여러 패키지 관리자 간에 업데이트를 결합하려는 경우 다중 에코시스템 그룹을 사용합니다. 단일 패키지 관리자 내에서 종속성을 구성하려는 경우 단일 에코시스템 그룹을 사용합니다(예: 모든 AWS 관련 npm 패키지 그룹화).
구성 병합 동작
일부 구성 옵션은 그룹 수준 및 에코시스템 수준에서 설정할 수 있습니다. Dependabot는 선택한 옵션에 따라 이러한 값들을 서로 다르게 조합합니다.
**추가 옵션** (값이 병합됨):
*
assignees - 두 수준의 모든 담당자가 끌어오기 요청에 할당됩니다.
*
labels - 두 수준의 모든 레이블이 끌어오기 요청에 적용됩니다.
예를 들어 @platform-team을 그룹 수준에 할당하고 @docker-admin을 Docker 에코시스템 수준에 할당하는 경우, 결과적으로 생성되는 풀 리퀘스트는 @platform-team 및 @docker-admin 모두에 할당됩니다.
**그룹 전용 옵션** (그룹 수준에서만 설정할 수 있음):
milestonecommit-messagetarget-branchpull-request-branch-name
에코시스템 수준에서 이러한 옵션을 설정하려고 하면 구성 오류가 발생합니다.
사용 가능한 모든 구성 옵션 및 해당 동작에 대한 전체 참조는 Dependabot 옵션 참조을 참조하세요.
사용 사례
인프라 프로젝트
인프라 코드는 Docker 컨테이너, 클라우드 리소스용 Terraform 및 자동화를 위한 Python 스크립트와 같은 여러 기술을 사용하는 경우가 많습니다. 이러한 업데이트를 함께 그룹화하면 검토 및 배포 조정이 간소화됩니다.
**이러한 그룹을 함께 그룹화해야 하는 이유:** 인프라 변경 내용을 함께 배포해야 하는 경우가 많습니다. 각 기술에 대해 별도의 PR이 있으면 조정 오버헤드가 발생하며 단위로 배포해야 하는 사항을 추적하기가 더 어려워집니다.
**예제 시나리오:** 서비스에 대한 Docker 이미지, AWS 리소스용 Terraform 모듈 및 자동화 작업을 위한 Python 스크립트가 있습니다. 단일 주간 "인프라" 끌어오기 요청에는 세 가지 모두에 대한 업데이트가 포함되어 있어 인프라 변경 내용을 더 쉽게 검토하고 배포할 수 있습니다.
풀 스택 애플리케이션
프런트 엔드 및 백 엔드 구성 요소가 있는 웹 애플리케이션은 호환성을 보장하고 테스트를 간소화하기 위해 종속성을 함께 업데이트하는 이점을 누릴 수 있습니다.
**이러한 그룹을 함께 그룹화해야 하는 이유:** 프런트 엔드와 백 엔드는 종종 서로 의존합니다. 함께 업데이트하면 프런트 엔드 변경 내용을 병합한 다음 나중에 백 엔드 비호환성을 검색하는 대신 한 번으로 전체 애플리케이션 스택을 테스트할 수 있습니다.
**예제 시나리오:** React 프런트 엔드 및 Rails 백 엔드는 단일 "앱 종속성" 끌어오기 요청으로 매일 업데이트되므로 병합하기 전에 전체 애플리케이션을 함께 테스트할 수 있습니다.
플랫폼 간 라이브러리
여러 언어(예: gRPC 및 프로토콜 버퍼)에서 동일한 프로토콜을 사용하는 라이브러리 또는 서비스는 모든 구현에서 라이브러리 버전을 동기화된 상태로 유지해야 합니다.
**이러한 그룹을 함께 그룹화해야 하는 이유:** 프로토콜 라이브러리는 다양한 언어 구현에서 호환성을 유지해야 합니다. 함께 업데이트하면 서비스 간에 통신 오류가 발생할 수 있는 버전 불일치를 방지할 수 있습니다.
**예제 시나리오:** Node.js 및 Ruby 서비스는 모두 gRPC를 사용합니다. 단일 끌어오기 요청은 `@grpc/grpc-js` (npm) 및 `grpc` (번들러)를 함께 업데이트하여 프로토콜 호환성을 보장합니다.
여러 서비스를 사용하는 Monorepos
여러 언어로 된 여러 서비스를 포함하는 대규모 리포지토리는 팀 책임 또는 배포 주기별로 업데이트를 그룹화하면 도움이 됩니다.
**이러한 그룹을 함께 그룹화해야 하는 이유:** 다른 팀은 모노레포의 서로 다른 부분을 소유하고 있으며, 업데이트를 적절한 검토자에게 라우팅해야 합니다. 또는 서비스가 함께 배포되고 조정된 업데이트가 필요합니다.
**예제 시나리오:** monorepo에는 Python API 서비스, Go 작업자 서비스 및 Node.js 프런트 엔드가 있습니다. "백 엔드 서비스"(Python + Go) 및 "프런트 엔드"(Node.js)에 대해 각각 다른 일정과 담당자를 사용하여 별도의 그룹을 만듭니다.
예: 복잡한 다중 그룹 구성
이 예제에서는 복잡한 프로젝트에서 다양한 업데이트 전략을 사용하여 여러 그룹을 사용하는 방법을 보여 드립니다.
version: 2
multi-ecosystem-groups:
# Infrastructure updates - weekly, tracked in milestone
infrastructure:
schedule:
interval: "weekly"
assignees: ["@platform-team"]
labels: ["infrastructure", "dependencies"]
milestone: 10
# Application code updates - daily, with development team
full-stack:
schedule:
interval: "daily"
assignees: ["@full-stack-team"]
labels: ["full-stack"]
updates:
# Docker images - infrastructure group with additional docker expertise
- package-ecosystem: "docker"
directory: "/"
patterns: ["nginx", "redis", "postgres"]
assignees: ["@docker-admin"] # Adds to @platform-team
labels: ["docker"] # Adds to infrastructure, dependencies
multi-ecosystem-group: "infrastructure"
# Terraform - infrastructure group
- package-ecosystem: "terraform"
directory: "/"
patterns: ["aws", "terraform-*"]
multi-ecosystem-group: "infrastructure"
# Frontend - full-stack group with frontend focus
- package-ecosystem: "npm"
directory: "/frontend"
patterns: ["react", "lodash", "@types/*"]
labels: ["frontend"] # Adds to full-stack
multi-ecosystem-group: "full-stack"
# Backend - full-stack group with backend specialist
- package-ecosystem: "bundler"
directory: "/backend"
patterns: ["rails", "pg", "sidekiq"]
assignees: ["@backend-dev"] # Adds to @full-stack-team
multi-ecosystem-group: "full-stack"
version: 2
multi-ecosystem-groups:
# Infrastructure updates - weekly, tracked in milestone
infrastructure:
schedule:
interval: "weekly"
assignees: ["@platform-team"]
labels: ["infrastructure", "dependencies"]
milestone: 10
# Application code updates - daily, with development team
full-stack:
schedule:
interval: "daily"
assignees: ["@full-stack-team"]
labels: ["full-stack"]
updates:
# Docker images - infrastructure group with additional docker expertise
- package-ecosystem: "docker"
directory: "/"
patterns: ["nginx", "redis", "postgres"]
assignees: ["@docker-admin"] # Adds to @platform-team
labels: ["docker"] # Adds to infrastructure, dependencies
multi-ecosystem-group: "infrastructure"
# Terraform - infrastructure group
- package-ecosystem: "terraform"
directory: "/"
patterns: ["aws", "terraform-*"]
multi-ecosystem-group: "infrastructure"
# Frontend - full-stack group with frontend focus
- package-ecosystem: "npm"
directory: "/frontend"
patterns: ["react", "lodash", "@types/*"]
labels: ["frontend"] # Adds to full-stack
multi-ecosystem-group: "full-stack"
# Backend - full-stack group with backend specialist
- package-ecosystem: "bundler"
directory: "/backend"
patterns: ["rails", "pg", "sidekiq"]
assignees: ["@backend-dev"] # Adds to @full-stack-team
multi-ecosystem-group: "full-stack"
다음 단계
-
[AUTOTITLE](/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/configuring-multi-ecosystem-updates)