Skip to main content

Устранение ошибок Dependabot

Иногда Dependabot не удается создать запрос на вытягивание для обновления зависимостей. Вы можете просмотреть ошибку и разблокировать Dependabot.

Note

Администратор сайта должен настроить Dependabot updates для ваш экземпляр GitHub Enterprise Server, прежде чем использовать эту функцию. Дополнительные сведения см. в разделе «Включение Dependabot для предприятия».

Возможно, вы не сможете включить или отключить Dependabot updates , если владелец предприятия установил политику на уровне предприятия. Дополнительные сведения см. в разделе «Применение политик безопасности кода и анализа для вашего предприятия».

Сведения об ошибках Dependabot

Dependabot вызывает запросы на вытягивание для обновления зависимостей. В зависимости от настройки репозитория Dependabot может вызывать запросы на вытягивание для обновления версий и (или) системы безопасности. Управление этими запросами на вытягивание аналогично управлению другими запросами на вытягивание, однако также доступны несколько дополнительных команд. Сведения о включении обновлений зависимостей Dependabot см. в разделе "[AUTOTITLE" и "Настройка обновлений для системы безопасности Dependabot](/code-security/dependabot/dependabot-version-updates/configuring-dependabot-version-updates)".

Если Dependabot не может вызывать запрос на включение внесенных изменений, это отмечается как ошибка.

Note

Dependabot не создает запросы на вытягивание неактивных репозиториев. Сведения о критериях бездействия см. в разделе "[AUTOTITLE" и "Сведения об обновлениях для системы безопасности Dependabot](/code-security/dependabot/dependabot-version-updates/about-dependabot-version-updates#about-automatic-deactivation-of-dependabot-updates)" для обновлений безопасности и версий соответственно.

Dependabot security updates — использование для исследования ошибок

Если для Dependabot блокируется возможность создать запрос на включение внесенных изменений для исправления ошибки в оповещении Dependabot, этот инструмент публикует сообщение об ошибке в оповещении. В представлении Dependabot alerts отображается список всех оповещений, которые еще не разрешены. Чтобы получить доступ к представлению оповещений, щелкните Dependabot alerts на вкладке Безопасность репозитория. Если был создан запрос на включение внесенных изменений, который исправит уязвимую зависимость, оповещение содержит ссылку на этот запрос.

Снимок экрана: представление Dependabot alerts с двумя оповещениями. В правой части одного оповещения ссылка на запрос на вытягивание с именем "#353" выделена оранжевым контуром.

Существует несколько причин, по которым в оповещении может не быть ссылки на запрос на вытягивание:

  1. Dependabot security updates не включены по умолчанию для репозитория;
  2. оповещение относится к косвенной или транзитивной зависимости, которая явно не определена в файле блокировки;
  3. Dependabot не может создать запрос на включение внесенных изменений из-за ошибки.

Если Dependabot не может создать запрос на включение внесенных изменений из-за ошибки, вы можете просмотреть сведения об ошибке можно, нажав на оповещение.

Dependabot version updates — использование для исследования ошибок

Если Dependabot заблокировано при создании запроса на вытягивание для обновления зависимости в экосистеме, можно просмотреть список журналов заданий, чтобы узнать больше об ошибке .

Список журналов заданий доступен из граф зависимостей репозитория. В граф зависимостей щелкните вкладку Dependabot, а затем справа от файла затронутого манифеста щелкните "Последние задания обновления".

Чтобы просмотреть полные файлы журналов для определенного задания, справа от нужной записи журнала щелкните просмотреть журналы.

Снимок экрана: записи журнала заданий Dependabot для файла манифеста. Кнопка с именем "Просмотр журналов" выделена в темно-оранжевый контур.

Дополнительные сведения см. в разделе «Просмотр журналов заданий Dependabot».

Общие сведения об ошибках Dependabot

Запросы на включение внесенных изменений для обновлений безопасности позволяют обновить уязвимую зависимость до минимальной версии, в которой эта уязвимость устранена. Запросы на включение внесенных изменений для обновлений версий, напротив, позволяют обновить зависимость до последней версии, разрешенной в манифесте пакета и файлах конфигурации Dependabot. Следовательно, некоторые ошибки относятся только к одному типу обновления.

Dependabot не удается обновить ЗАВИСИМОСТЬ до версии без уязвимостей

Только для обновлений системы безопасности. Dependabot не может создать запрос на включение внесенных изменений, чтобы обновить уязвимую зависимость до безопасной версии, не нарушив другие зависимости в схеме зависимостей для этого репозитория.

Каждое приложение с зависимостями имеет схему зависимостей, то есть направленный ациклический граф всех версий пакета, от которых приложение зависит напрямую или косвенно. При каждом обновлении какой-либо зависимости целостность этой схемы не должна нарушаться, в противном случае не удастся выполнить сборку приложения. Если в какой-либо экосистеме, например в npm и RubyGems, имеется глубокая и сложная схема зависимостей, зачастую невозможно обновить одну зависимость без обновления всей экосистемы.

Лучший способ избежать этой проблемы — использовать самые последние версии, например, включив обновление версий. Это повышает вероятность того, что уязвимость в одной зависимости может быть устранена простым обновлением, которое не нарушит схему зависимостей. Дополнительные сведения см. в разделе «Настройка обновлений версий Dependabot».

Dependabot пытается обновить зависимости без предупреждения

Только для обновлений системы безопасности. Dependabot обновляет явно определенные уязвимые транзитивные зависимости для всех экосистем. Для npm Dependabot создаст запрос на вытягивание, который также обновляет родительскую зависимость, если это единственный способ исправить транзитивную.

Например, проект может иметь зависимость от A версии ~2.0.0, которая имеет транзитивную зависимость от B версии ~1.0.0, разрешенной в 1.0.1.

my project
|
--> A (2.0.0) [~2.0.0]
       |
       --> B (1.0.1) [~1.0.0]

Если появилась уязвимость для B версий <2.0.0 и доступно исправление для версии 2.0.0, то Dependabot попытается обновить B, но это окажется невозможным из-за установленного A ограничения, позволяющего использовать только более ранние, уязвимые версии. Чтобы устранить уязвимость, Dependabot будет проверять наличие обновлений для зависимости A, которые позволят использовать исправленную версию B.

Dependabot автоматически создает запрос на вытягивание, который обновляет как заблокированные родительские, так и дочерние транзитивные зависимости.

Dependabot не удается закрыть открытый запрос на вытягивание для обновления, который уже применен к ветвь по умолчанию

Dependabot закрывает запросы на вытягивание обновлений зависимостей после обнаружения фиксации этих обновлений в ветвь по умолчанию. Однако в редких случаях запрос на вытягивание может оставаться открытым. Если вы заметили, что вы зафиксировали обновление зависимости вручную и что запрос на вытягивание для этого же обновления по-прежнему открыт, можно использовать одну из следующих команд в комментарии к запросу на вытягивание:

  • @dependabot recreateили
  • @dependabot rebase.

Любой комментарий активирует Dependabot для проверки того, является ли зависимость более не обновляемой или уязвимой. Если Dependabot обнаруживает, что запрос на вытягивание больше не требуется, он закроет запрос на вытягивание в этом конкретном случае.

Дополнительные сведения о командах комментариев Dependabot см. в разделе "Управление запросами на вытягивание для обновлений зависимостей".

Dependabot не может выполнить обновление до нужной версии, так как для последней версии уже есть открытый запрос на включение внесенных изменений

Только для обновлений системы безопасности. Dependabot не создаст запрос на включение внесенных изменений, чтобы обновить уязвимую зависимость до безопасной версии, так как уже имеется открытый запрос на включение внесенных изменений для обновления этой зависимости. Эта ошибка возникает при обнаружении уязвимости в одной зависимости, когда уже существует открытый запрос на включение внесенных изменений для обновления этой зависимости до последней версии.

Существует два варианта: просмотрите открытый запрос на включение внесенных изменений и выполните его слияние, когда убедитесь, что это изменение безопасно, или закройте этот запрос и инициируйте новый для обновления безопасности. Дополнительные сведения см. в разделе "Активация запроса на включение внесенных изменений в Dependabot вручную".

Обновление системы безопасности не требуется, так как ЗАВИСИМОСТЬ больше не уязвима

Только для обновлений системы безопасности. Dependabot не может закрыть запрос на вытягивание, чтобы обновить зависимость, которая не является или больше не уязвима. Эта ошибка возникает, если граф зависимостей данные устарели или когда граф зависимостей и Dependabot не согласны, если определенная версия зависимости уязвима.

Чтобы отладить проблему, рекомендуется сначала изучить граф зависимостей для репозитория, просмотрите версию, которую она обнаружила для зависимости, и проверьте, соответствует ли указанная версия используемой в репозитории версии.

Если вы подозреваете, что данные граф зависимостей устарели, может потребоваться вручную обновить граф зависимостей для репозитория или изучить сведения о зависимости дальше. Дополнительные сведения см. в разделе «Устранение неполадок графа зависимостей».

Если вы можете подтвердить, что версия зависимости больше не уязвима, можно закрыть запрос на вытягивание Dependabot.

Истекло время ожидания для Dependabot во время обновления

Для оценки необходимого обновления и подготовки запроса на включение внесенных изменений инструменту Dependabot потребовалось больше времени, чем разрешено. Эта ошибка обычно встречается только для больших репозиториев с множеством файлов манифестов, например npm или проектов yarn monorepo с сотнями файлов package.json. Обновления экосистемы Composer также требуют больше времени для оценки и срок ожидания для них может истекать.

Эту ошибку трудно устранить. Если время ожидания для обновления версии истекает, можно указать наиболее важные зависимости, которые нужно обновить, с помощью параметра allow или с помощью параметра ignore исключить обновление некоторых зависимостей. При обновлении конфигурации Dependabot сможет просмотреть обновление версии и создать запрос на включение внесенных изменений, когда появится доступное время.

Вы можете снизить вероятность истечения времени ожидания для обновления безопасности истекает, обеспечив постоянно обновление зависимостей, например, включив обновление версий. Дополнительные сведения см. в разделе «Настройка обновлений версий Dependabot».

Dependabot не удается открыть новые запросы на включение внесенных изменений

Существует ограничение на количество открытых запросов на включение внесенных изменений, которые может создавать Dependabot. По достижении этого лимита новые запросы на включение внесенных изменений не открываются и возникает эта ошибка. Лучший способ устранить ее — проверить некоторые открытые запросы на включение внесенных изменений и выполнить их слияние.

У запросов на включение внесенных изменений, связанных с безопасностью и обновлением версий, разные ограничения, поэтому открытые запросы на включение внесенных изменений для обновления версий не могут блокировать создание запроса на включение внесенных изменений для обновления безопасности. Максимальное число запросов на включение внесенных изменений для обновлений безопасности равно 10. По умолчанию ограничение для обновления версий равно 5, но его можно изменить с помощью параметра open-pull-requests-limit в файле конфигурации. Дополнительные сведения см. в разделе «Параметры конфигурации для файла dependabot.yml».

Лучший способ устранить эту ошибку — выполнить слияние или закрыть некоторые существующие запросы на включение внесенных изменений и запустить новый запрос на включение внесенных изменений вручную. Дополнительные сведения см. в разделе "Активация запроса на включение внесенных изменений в Dependabot вручную".

Dependabot не может разрешить зависимости или получить к ним доступ

Если Dependabot пытается проверить, нужно ли обновить ссылки на зависимости в репозитории, но не может получить доступ к одному или нескольким файлам, на которые указывают ссылки, операция завершится сообщением об ошибке "Dependabot не может разрешить файлы зависимостей LANGUAGE". Тип ошибки API: git_dependencies_not_reachable.

Аналогично, если Dependabot не может получить доступ к частному реестру пакетов, в котором находится зависимость, возникает одна из следующих ошибок:

  • "Dependabot не может получить доступ к зависимости в частном реестре пакетов"
    (Тип ошибки API:private_source_not_reachable)
  • "Dependabot не может пройти проверку подлинности в частном реестре пакетов"
    (Тип ошибки API:private_source_authentication_failure)
  • "Время ожидания доступа к частному реестру пакетов для Dependabot истекло"
    (Тип ошибки API:private_source_timed_out)
  • "Dependabot не удалось проверить сертификат для частного реестра пакетов"
    (Тип ошибки API:private_source_certificate_failure)

Чтобы Dependabot мог обновить ссылки на зависимости, все эти зависимости должны быть размещены в доступных расположениях.

Только обновление версий. При обновлении системы безопасности или версий некоторые экосистемы должны иметь возможность разрешить все зависимости от источника, чтобы убедиться, что обновления успешно выполнены. Если файлы манифеста или блокировки содержат какие-либо частные зависимости, Dependabot должен иметь доступ к расположению, в котором размещаются эти зависимости. Владельцы организации могут предоставлять Dependabot доступ к частным репозиториям, содержащим зависимости для проекта, в той же организации. Дополнительные сведения см. в разделе Управление параметрами безопасности и анализа для организации. Вы можете настроить доступ к частным реестрам в файле конфигурации репозитория dependabot.yml . Дополнительные сведения см. в разделе Параметры конфигурации для файла dependabot.yml. Кроме того, Dependabot не поддерживает частные зависимости GitHub для всех менеджеров пакетов. Дополнительные сведения см. в разделе «Поддерживаемые экосистемы и репозитории Dependabot».

Dependabot не удалось сгруппировать набор зависимостей в один запрос на вытягивание для Dependabot version updates

Группы можно создавать только для Dependabot version updates. Dependabot security updates не поддерживают группированные обновления. Кроме того, если есть сгруппированные запросы на вытягивание для уязвимого пакета, Dependabot security updates всегда будет пытаться создать отдельный запрос на вытягивание, даже если существующий запрос на вытягивание группы является обновлением до той же или более поздней версии.

При настройке группированных обновлений версий необходимо настроить группы для каждой экосистемы пакетов. Чтобы отладить проблему, рекомендуется просмотреть журналы. Сведения о доступе к журналам манифеста см. в разделе "Исследование ошибок с помощью Dependabot version updates" выше.

Возможно, вы непреднамеренно создали пустые группы. Это происходит, например, при установке dependency-type ключа allow для общего задания.

allow:
  dependency-type: production
  # this restricts the entire job to production dependencies
  groups:
      development-dependencies:
        dependency-type: "development"
        # this group will always be empty

В этом примере Dependabot будет:

  1. Просмотрите список зависимостей и ограничьте задание только зависимостями, используемыми production только.
  2. Попробуйте создать группу, которая development-dependencies является подмножеством этого сокращенного списка.
  3. Убедитесь, что development-dependencies группа пуста, так как все development зависимости были удалены на шаге 1.
  4. Отдельно обновите все зависимости, которые не находятся в группе. Так как группа зависимостей в рабочей среде пуста, Dependabot будет игнорировать группу и создавать отдельный запрос на вытягивание для каждой зависимости.

Необходимо убедиться, что параметры конфигурации не отменяют друг друга и обновляют их соответствующим образом в файле конфигурации.

Дополнительные сведения о настройке групп для Dependabot version updatesсм. в разделе "Параметры конфигурации для файла dependabot.yml".

Dependabot не удается обновить одну из зависимостей в сгруппированного запроса на вытягивание

Только обновление версий. Dependabot отобразит неудачное обновление в журналах, а также в сводке заданий в конце журналов. Чтобы снова создать группу, следует использовать @dependabot recreate комментарий к запросу на вытягивание. Дополнительные сведения см. в разделе «Управление запросами на вытягивание для обновлений зависимостей».

Если зависимость по-прежнему не удается обновить, следует использовать exclude-patterns конфигурацию, чтобы зависимость была исключена из группы. Затем Dependabot создает отдельный запрос на вытягивание для обновления зависимости.

Если зависимость по-прежнему не удается обновить, может возникнуть проблема с самой зависимостью или с Dependabot для этой конкретной экосистемы.

Если вы хотите игнорировать обновления для зависимости, необходимо выполнить одно из следующих действий.

Непрерывная интеграция (CI) завершается сбоем при выполнении группового запроса на вытягивание

Только обновление версий. Если сбой связан с одной зависимостью, следует использовать exclude-patterns конфигурацию, чтобы зависимость была исключена из группы. Затем Dependabot создает отдельный запрос на вытягивание для обновления зависимости.

Если вы хотите игнорировать обновления для зависимости, необходимо выполнить одно из следующих действий.

Если вы продолжаете видеть сбои CI, необходимо удалить конфигурацию группы, чтобы Dependabot вернулся к увеличению отдельных запросов на вытягивание для каждой зависимости. Затем необходимо проверить и убедиться, что обновление работает правильно для каждого отдельного запроса на вытягивание.

Активация запроса на включение внесенных изменений в Dependabot вручную

Если разблокировать Dependabot, можно вручную заново попытаться создать запрос на включение внесенных изменений.

  • Обновления системы безопасности: отображает оповещение Dependabot с исправленной ошибкой и нажмите кнопку "Создать Dependabot".
  • Обновления версий: на вкладке "Аналитика " для репозитория щелкните граф зависимостей и перейдите на вкладку Dependabot . Нажмите кнопку "Последнее проверенное время назад ", чтобы просмотреть файл журнала, созданный Dependabot при последней проверке обновлений версий. Щелкните ссылку Проверка обновлений.

Дополнительные материалы