Skip to main content

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

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

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

Users with write access

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

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

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

  • **** 을(를) 사용하여 Dependabot이 종속성의 최신 버전을 확인하는 빈도를schedule합니다.
  • **** 을(를) 사용하여groups.

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

Dependabot은 구성 파일에서 설정한 빈도로 버전 업데이트 검사를 실행합니다 여기서 필수 필드인schedule.intervaldaily,weekly,monthly,quarterly,semiannually,yearly,cron로 설정되어야 합니다(cronjob 참조).

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

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

종속성 업데이트의 빈도 및 타이밍 수정

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

아래 예제dependabot.yml 파일은 npm 구성을 변경하여 Dependabot이 매주 화요일 오전 2: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에 대한 주 업데이트에 대한 끌어오기 요청을 자동으로 열지 않습니다.