Skip to main content

Dependabot의 버전 업데이트를 위한 끌어오기 요청 최적화하기

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

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

Users with write access

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

프로젝트에 많은 종속성이 있는 경우 매우 많은 수의 Dependabot 풀 요청을 검토하고 병합해야 하므로, 이를 관리하는 것이 빠르게 어려워질 수 있습니다.

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

  •           **빈도를 제어하여** `schedule`를 통해 Dependabot이 종속성의 최신 버전을 확인하는 주기를 관리합니다.
    
  • 의미 있는 업데이트를 우선순위로 설정합니다 를 사용하여groups.

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

          Dependabot는 구성 파일에서 사용자가 설정한 빈도로 버전 업데이트에 대한 검사를 실행합니다. 여기서 필요한 필드는 `schedule.interval`, `daily`, `weekly`, `monthly``quarterly``semiannually``yearly` 또는 (참조`cronjob`)로 [](/code-security/dependabot/working-with-dependabot/dependabot-options-reference#cronjob)설정해야 합니다.

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

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

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

옵션 조합과 함께 사용하여 schedule 버전 업데이트를 확인하는 경우 Dependabot 의 빈도 및 타이밍을 수정할 수 있습니다.

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

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"
          [일정](/code-security/dependabot/working-with-dependabot/dependabot-options-reference#schedule-)도 참조하세요.

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

          `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에 대한 주 업데이트에 대한 끌어오기 요청을 자동으로 열지 않습니다.