Skip to main content

Dependabot 버전 업데이트에 대한 끌어오기 요청 만들기 최적화

Dependabot 끌어오기 요청을 간소화하고 효율적으로 관리하는 방법을 알아봅니다.

누가 이 기능을 사용할 수 있나요?

Users with write access

기본적으로 Dependabot 은 각 종속성을 업데이트하는 새 끌어오기 요청을 엽니다. 보안 업데이트를 사용하도록 설정하면 취약한 종속성이 발견되면 새 끌어오기 요청이 열립니다. 하나 이상의 에코시스템에 대한 버전 업데이트를 구성할 때 종속성의 새 버전이 제공되면 새로운 끌어오기 요청이 열리며 해당 빈도는 dependabot.yml 파일에 정의되어 있습니다.

프로젝트에 많은 종속성이 있는 경우 검토 및 병합할 Dependabot 끌어오기 요청이 매우 많으므로 관리하기가 빠르게 어려워질 수 있습니다.

프로세스에 맞게 Dependabot 업데이트 끌어오기 요청을 최적화하기 위해 구현할 수 있는 몇 가지 사용자 지정 옵션이 있습니다.

  • schedule을(를) 사용하여 Dependabot이 종속성의 최신 버전을 확인하는 빈도를 제어합니다.
  • groups을(를) 사용하여 의미 있는 업데이트를 우선 순위 지정합니다.

종속성 업데이트의 빈도 및 타이밍 제어

Dependabot은 구성 파일에서 설정한 빈도로 버전 업데이트 확인을 실행합니다(필수 필드인 schedule.interval은(는) daily, weekly 또는 monthly로 설정해야 함).

기본적으로 Dependabot은 임의 시간을 할당하여 종속성 업데이트에 대한 끌어오기 요청을 확인하고 발생시켜 워크로드의 균형을 조정합니다.

그러나 산만을 줄이거나 버전 업데이트를 검토하고 해결하기 위한 시간과 리소스를 더 잘 구성하려면 빈도와 타이밍을 수정하는 것이 유용할 수 있습니다. 예를 들어 Dependabot은 매일 업데이트를 확인하는 대신 매주 실행하며, 팀의 심사 세션에 대해 끌어오기 요청이 발생하기 전에 끌어오기 요청이 발생하는 것을 확인할 수 있습니다.

schedule을(를) 여러 옵션과 함께 사용하면 Dependabot이 버전 업데이트를 확인하는 빈도와 타이밍을 수정할 수 있습니다.

아래 예제 dependabot.yml 파일은 npm 구성을 변경하여 Dependabot이 매일 02:00 일본 표준시(UTC +09:00)에 npm 종속성에 대한 버전 업데이트를 확인해야 하도록 지정합니다.

YAML
# `dependabot.yml` file with
# customized schedule for version updates

version: 2
updates:
  # Keep npm dependencies up to date
  - package-ecosystem: "npm"
    directory: "/"
    # Check the npm registry every week on Tuesday at 02:00 Japan Standard Time (UTC +09:00)
    schedule:
      interval: "weekly"
      day: "tuesday"
      time: "02:00"
      timezone: "Asia/Tokyo"

일정도 참조하세요.

의미 있는 업데이트 우선 순위 지정

groups을(를) 사용하면 여러 종속성에 대한 업데이트를 단일 끌어오기 요청으로 통합할 수 있습니다. 이렇게 하면 더 높은 위험 업데이트에 검토 시간을 집중하고 부 버전 업데이트를 검토하는 데 소요된 시간을 최소화할 수 있습니다. 예를 들어 개발 종속성에 대한 부 또는 패치 업데이트에 대한 업데이트를 단일 끌어오기 요청으로 결합하고 코드베이스의 주요 영역에 영향을 주는 보안 또는 버전 업데이트를 위한 전용 그룹을 가질 수 있습니다.

개별 패키지 에코시스템당 그룹을 구성해야 하며, 다음 조건을 조합하여 패키지 에코시스템당 여러 그룹을 만들 수 있습니다.

  • Dependabot 업데이트 형식: applies-to
  • 종속성 형식: dependency-type.
  • 종속성 이름: patternsexclude-patterns
  • 유의적 버전 관리 수준: update-types

각 기준에 대해 지원되는 모든 값을 보려면 groups을(를) 참조하세요.

아래 예제에서는 조건을 사용하여 종속성 그룹을 만드는 여러 가지 방법을 제공합니다.

예제 1: 세 가지 버전 업데이트 그룹

이 예제에서 dependabot.yml 파일은 다음과 같습니다.

  • "production-dependencies", "development-dependencies", "rubocop"라는 세 개의 그룹을 만듭니다.
  • patternsdependency-type을(를) 사용하여 그룹의 종속성을 포함합니다.
  • exclude-patterns을(를) 사용하여 그룹에서 종속성(또는 여러 종속성)을 제외합니다.
version: 2
updates:
  # Keep bundler dependencies up to date
  - package-ecosystem: "bundler"
    directory: "/"
    schedule:
      interval: "weekly"
    groups:
      production-dependencies:
        dependency-type: "production"
      development-dependencies:
        dependency-type: "development"
        exclude-patterns:
          - "rubocop*"
      rubocop:
        patterns:
          - "rubocop*"

결과적으로 다음이 수행됩니다.

  • 버전 업데이트는 종속성 유형별로 그룹화됩니다.
  • 패턴 rubocop*과(와) 일치하는 개발 종속성은 development-dependencies 그룹에서 제외됩니다.
  • 대신 rubocop*과(와) 일치하는 개발 종속성은 rubocop 그룹에 포함됩니다. 순서 지정으로 인해 rubocop*과(와) 일치하는 프로덕션 종속성이 production-dependencies 그룹에 포함됩니다.
  • 또한, applies-to 키가 없기 때문에 모든 그룹은 기본적으로 버전 업데이트에만 적용됩니다.

예제 2: 제외된 종속성이 있는 그룹화된 업데이트

이 예제에서 dependabot.yml 파일은 다음과 같습니다.

  • 사용자 지정된 번들러 구성의 일부로 "support-dependencies"라는 그룹을 만듭니다.
  • 종속성(하나 이상의 종속성)의 이름과 일치하는 patterns을(를) 사용하여 그룹에 종속성을 포함합니다.
  • 종속성(하나 이상의 종속성)의 이름과 일치하는 exclude-patterns을(를) 사용하여 그룹에서 종속성을 제외합니다.
  • applies-to: version-updates이(가) 사용되므로 그룹화를 버전 업데이트에만 적용합니다.
version: 2
updates:
  # Keep bundler dependencies up to date
  - package-ecosystem: "bundler"
    directories:
      - "/frontend"
      - "/backend"
      - "/admin"
    schedule:
      interval: "weekly"
    # Create a group of dependencies to be updated together in one pull request
    groups:
      # Specify a name for the group, which will be used in pull request titles
      # and branch names
      support-dependencies:
        # Define patterns to include dependencies in the group (based on
        # dependency name)
        applies-to: version-updates # Applies the group rule to version updates
        patterns:
          - "rubocop" # A single dependency name
          - "rspec*"  # A wildcard string that matches multiple dependency names
          - "*"       # A wildcard that matches all dependencies in the package
                      # ecosystem. Note: using "*" may open a large pull request
        # Define patterns to exclude dependencies from the group (based on
        # dependency name)
        exclude-patterns:
          - "gc_ruboconfig"
          - "gocardless-*"

결과적으로 다음이 수행됩니다.

  • 와일드카드("*") 패턴으로 인해 번들러에 대한 대부분의 종속성은 support-dependencies 그룹으로 통합됩니다.
  • gc_ruboconfiggocardless-*와 일치하는 종속성은 그룹에서 제외되고, Dependabot은 이러한 종속성에 대한 단일 끌어오기 요청을 계속 발생시킵니다. 이러한 종속성에 대한 업데이트를 자세히 검토해야 하는 경우 이 기능이 유용할 수 있습니다.
  • support-dependencies의 경우, Dependabot은 버전 업데이트에 대한 끌어오기 요청만 발생시킵니다.

예제 3: 주요 업데이트에 대한 개별 끌어오기 요청 및 부/패치 업데이트에 대한 그룹화

이 예제에서 dependabot.yml 파일은 다음과 같습니다.

  • "angular"라는 그룹을 만듭니다.
  • 종속성 이름과 일치하는 patterns을(를) 사용하여 그룹에 종속성을 포함합니다.
  • update-type을(를) 사용하여 그룹에 minor 또는 patch 업데이트만 포함합니다.
  • applies-to: version-updates이(가) 사용되므로 그룹화를 버전 업데이트에만 적용합니다.
version: 2
updates:
  - package-ecosystem: "npm"
    directory: "/"
    schedule:
      interval: "weekly"
    groups:
      # Specify a name for the group, which will be used in pull request titles
      # and branch names
      angular:
        applies-to: version-updates
        patterns:
          - "@angular*"
        update-types:
          - "minor"
          - "patch"

결과적으로 다음이 수행됩니다.

  • Dependabot은 부 또는 패치 업데이트가 있는 모든 Angular 종속성에 대해 그룹화된 끌어오기 요청을 만듭니다.
  • 모든 주요 업데이트는 개별 끌어오기 요청을 통해 계속 발생합니다.

예제 4: 부/패치 업데이트에 대한 그룹화된 끌어오기 요청 및 주요 업데이트에 대한 끌어오기 요청 없음

이 예제에서 dependabot.yml 파일은 다음과 같습니다.

  • "angular" 및 "minor-and-patch"라는 두 개의 그룹을 만듭니다.
  • applies-to을(를) 사용하면 첫 번째 그룹은 버전 업데이트에만 적용되고 두 번째 그룹은 보안 업데이트에만 적용됩니다.
  • update-type을(를) 사용하여 두 그룹 모두에 대해 minor 또는 patch 업데이트만 포함합니다.
  • ignore 조건을 사용하여 @angular* 패키지의 major 버전에 대한 업데이트를 제외합니다.
version: 2
updates:
  # Keep npm dependencies up to date
  - package-ecosystem: "npm"
    directory: "/"
    schedule:
      interval: "weekly"
    groups:
      angular:
        applies-to: version-updates
        patterns:
          - "@angular*"
        update-types:
          - "minor"
          - "patch"
      minor-and-patch:
        applies-to: security-updates
        patterns:
          - "@angular*"
        update-types:
          - "patch"
          - "minor"
    ignore:
      - dependency-name: "@angular*"
        update-types: ["version-update:semver-major"]

결과적으로 다음이 수행됩니다.

  • Angular 종속성에 대한 부 버전 및 패치 버전 업데이트는 단일 끌어오기 요청으로 그룹화됩니다.
  • Angular 종속성에 대한 부 및 패치 보안 업데이트도 단일 끌어오기 요청으로 그룹화됩니다.
  • Dependabot은 Angular에 대한 주 업데이트에 대한 끌어오기 요청을 자동으로 열지 않습니다.