Skip to main content

Guía para la configuración de registros privados para Dependabot

Este artículo contiene información detallada sobre cómo configurar registros privados, así como comandos que puede ejecutar desde la línea de comandos para configurar los administradores de paquetes localmente.

Acerca de la configuración de Dependabot para registros privados

Este artículo contiene recomendaciones y consejos para ayudarle a configurar Dependabot para acceder al registro privado, junto con:

  • Fragmentos detallados del archivo de configuración dependabot.yml para cada administrador de paquetes.
  • Limitaciones o advertencias importantes.
  • Pasos que explican cómo probar que la configuración funciona.
  • Opciones de configuración adicionales, siempre que corresponda (por ejemplo, npm tiene un archivo de configuración que debe establecerse).
  • Asesoramiento sobre la configuración de hosts del Registro.

Encontrarás instrucciones detalladas para la configuración de los siguientes administradores de paquetes:

También encontrará recomendaciones para la configuración de los siguientes hosts del Registro:

Configuración de administradores de paquetes

Bundler

Compatible con Artifactory, Artifacts, Cloudsmith, el registro , Nexus y ProGet.

Puede autenticarse con un nombre de usuario y una contraseña o con un token. Para más información, consulta rubygems-server en "Opciones de configuración para el archivo dependabot.yml".

Fragmento de un archivo dependabot.yml mediante un nombre de usuario y una contraseña.

registries:
  ruby-example:
    type: rubygems-server
    url: https://rubygems.example.com
    username: octocat@example.com
    password: ${{secrets.MY_RUBYGEMS_PASSWORD}}

El fragmento de código del archivo dependabot.yml siguiente usa un token. Para este tipo de registro utilizando el registro GitHub Packages (xyz.pkg.github.com), el token es de hecho uno GitHub personal access token (PAT) .

registries:
  ruby-github:
    type: rubygems-server
    url: https://rubygems.pkg.github.com/octocat/github_api
    token: ${{secrets.MY_GITHUB_PERSONAL_TOKEN}}

Notas

Las dependencias procedentes directamente de un repositorio GitHub proporcionan acceso a Dependabot al repositorio a través de la interfaz de usuario de GitHub. Para obtener información sobre cómo permitir que Dependabot accedan a dependencias privadas de GitHub, vea "Permitir que Dependabot accedan a dependencias privadas".

Docker

Docker admite el uso de un nombre de usuario y una contraseña para los registros. Para más información, consulta docker-registry en "Opciones de configuración para el archivo dependabot.yml".

Fragmento de archivo dependabot.yml mediante un nombre de usuario y una contraseña.

registries:
  dockerhub:
    type: docker-registry
    url: https://registry.hub.docker.com
    username: octocat
    password: ${{secrets.MY_DOCKERHUB_PASSWORD}}

docker-registry también se puede utilizar para extraer de Amazon ECR privado utilizando credenciales estáticas de AWS.

registries:
  ecr-docker:
    type: docker-registry
    url: https://1234567890.dkr.ecr.us-east-1.amazonaws.com
    username: ${{secrets.ECR_AWS_ACCESS_KEY_ID}}
    password: ${{secrets.ECR_AWS_SECRET_ACCESS_KEY}}

Notas

Dependabot funciona con cualquier registro de contenedores que aplique la Especificación de Distribución de la Iniciativa de Contenedores Abiertos (OCI). Para obtener más información, vea https://github.com/opencontainers/distribution-spec/blob/main/spec.md.

Dependabot admite la autenticación en registros privados a través de un servicio de token central o HTTP Basic Auth. Para más información, consulte Especificación de autenticación por token en la documentación de Docker y Autenticación básica de acceso en Wikipedia.

Limitaciones y soluciones alternativas

  • Es posible que los nombres de imagen no siempre se detecten en archivos Containerfiles, archivos de Helm o archivos yaml.
  • Dockerfiles sólo pueden recibir una actualización de la versión de la primera directiva FROM.
  • Dockerfiles no reciben actualizaciones de las imágenes especificadas con la directiva ARG. Hay una solución alternativa disponible para la directiva COPY. Para obtener más información, consulte "Dependabot omite las referencias de imagen en la instrucción COPY Dockerfile" del repositorio dependabot/dependabot-core.
  • Dependabot no admite compilaciones de Docker de varias fases. Para obtener más información, consulte "Compatibilidad con compilaciones de varias fases de Docker" en el repositorio dependabot/dependabot-core.

Gradle

Dependabot no ejecuta Gradle, pero admite actualizaciones de ciertos archivos Gradle. Para más información, consulte "Gradle" en "Opciones de configuración para el archivo dependabot.yml".

Gradle admite el tipo de registro maven-repository. Para más información, consulta maven-repository en "Opciones de configuración para el archivo dependabot.yml".

El tipo maven-repository admite el nombre de usuario y la contraseña. Si la cuenta es una cuenta de GitHub, puede usar un GitHub personal access token en lugar de la contraseña.

registries:
  gradle-artifactory:
    type: maven-repository
    url: https://acme.jfrog.io/artifactory/my-gradle-registry
    username: octocat
    password: ${{secrets.MY_ARTIFACTORY_PASSWORD}}
updates:
  - package-ecosystem: "gradle"
    directory: "/"
    registries:
      - gradle-artifactory
    schedule:
      interval: "monthly"

Notas

Es posible que no vea todas las dependencias representadas en el gráfico de dependencias, especialmente si algunas dependencias son dependencias en tiempo de compilación. Puede usar API de envío de dependencias para informar a GitHub sobre las otras dependencias y recibir actualizaciones de seguridad para ellas. Para obtener más información, vea «Uso de la Dependency submission API».

Maven

Maven admite la autenticación mediante nombre de usuario y contraseña. Para más información, consulta maven-repository en "Opciones de configuración para el archivo dependabot.yml".

registries:
  maven-artifactory:
    type: maven-repository
    url: https://acme.jfrog.io/artifactory/my-maven-registry
    username: octocat
    password: ${{secrets.MY_ARTIFACTORY_PASSWORD}}

Si la cuenta es una cuenta de GitHub, puede usar un GitHub personal access token en lugar de la contraseña.

version: 2
registries:
  maven-github:
    type: maven-repository
    url: https://maven.pkg.github.com/octocat
    username: octocat
    password: ${{secrets.OCTOCAT_GITHUB_PAT}}
updates:
  - package-ecosystem: "maven"
    directory: "/"
    registries:
      - maven-github
    schedule:
      interval: "monthly"

Notas

Es posible que no vea todas las dependencias representadas en el gráfico de dependencias, especialmente si algunas dependencias son dependencias en tiempo de compilación. Puede usar API de envío de dependencias para informar a GitHub sobre las otras dependencias y recibir actualizaciones de seguridad para ellas. Para obtener más información, vea «Uso de la Dependency submission API».

npm

Puede definir la configuración en el archivo dependabot.yml utilizando el tipo npm-registry, o configurar Dependabot para enviar todas las solicitudes de registro a través de una URL base especificada.

Uso del tipo npm-registry en el archivo de configuración

Puede definir la configuración del registro privado en un archivo dependabot.yml utilizando el tipo npm-registry. Para obtener más información, vea «Opciones de configuración para el archivo dependabot.yml».

El fragmento de código de un archivo dependabot.yml siguiente usa un token. Para este tipo de registro utilizando el registro GitHub Packages (xyz.pkg.github.com), el token es de hecho uno GitHub personal access token (PAT) .

registries:
  npm-github:
    type: npm-registry
    url: https://npm.pkg.github.com
    token: ${{secrets.MY_GITHUB_PERSONAL_TOKEN}}

El ecosistema npm requiere que se registre en el repositorio un archivo .npmrc con la dirección URL del registro privado.

Ejemplo del contenido de un archivo.npmrc:

registry=https://<private-registry-url>

Como alternativa, puedes agregar la dirección URL del registro privado a un archivo .npmrc existente con el siguiente comando.

npm config set registry <url>

Para más información, consulte el registro en la documentación de npm.

También puede definir el ámbito de la configuración en una sola dependencia u organización, en cuyo caso el token solo será válido para la organización y se pueden usar tokens diferentes para diferentes organizaciones para el mismo repositorio.

npm config set @<org-name>:registry <url>

Esto daría lugar a ".npmrc" en el registro:

@<org-name>:registry=https://<private-registry-url>

npm se puede configurar para usar la dirección URL del registro privado en archivos de bloqueo con replace-registry-host. Para más información, consulte replace-registry-host en la documentación de npm.

npm config set replace-registry-host "never"

Si usa replace-registry-host, debe ejecutar npm install localmente para volver a generar el archivo de bloqueo para usar la dirección URL del Registro privado. Dependabot usará la misma dirección URL al proporcionar actualizaciones.

Una vez configurado el registro, también puede ejecutar npm login para comprobar que la configuración es correcta y válida. El archivo de bloqueo también se puede volver a generar para usar el nuevo registro privado ejecutando npm install de nuevo.

Debe asegurarse de que el archivo .npmrc está protegido en el mismo directorio que package.json del proyecto y que el archivo no incluye ninguna variable de entorno ni secretos. Si usa un monorepo, el archivo .npmrc debe estar en el directorio raíz del proyecto.

Configuración de Dependabot para enviar solicitudes del registro a través de una dirección URL base especificada

Puede configurar Dependabot para enviar todas las solicitudes del Registro a través de una dirección URL base especificada. Para que Dependabot accedan a una dependencia pública, el registro debe tener una copia clonada de la dependencia con la versión solicitada o permitir que el tráfico capture desde un registro público si la dependencia no está disponible.

Si no hay ningún registro global definido en un archivo .npmrc, puede establecer replaces-base como true en el archivo dependabot.yml. Para más información, consulte "replaces-base" en "Opciones de configuración para el archivo dependabot.yml".

Notas

Las dependencias procedentes directamente de un repositorio GitHub proporcionan acceso a Dependabot al repositorio a través de la interfaz de usuario de GitHub. Para obtener información sobre cómo permitir que Dependabot accedan a dependencias privadas de GitHub, vea "Permitir que Dependabot accedan a dependencias privadas".

En el caso de las dependencias con ámbito (@my-org/my-dep), Dependabot requiere que el registro privado se defina en .npmrc file del proyecto. Para definir registros privados para ámbitos individuales, usa @myscope:registry=https://private_registry_url.

Los registros deben configurarse mediante el protocolo https.

NuGet

Compatible con Artifactory, Artifacts, Cloudsmith, el registro , Nexus y ProGet.

El tipo nuget-feed admite el nombre de usuario y la contraseña, o el token. Para más información, consulta nuget-feed en "Opciones de configuración para el archivo dependabot.yml".

registries:
  nuget-example:
    type: nuget-feed
    url: https://nuget.example.com/v3/index.json
    username: octocat@example.com
    password: ${{secrets.MY_NUGET_PASSWORD}}
registries:
  nuget-azure-devops:
    type: nuget-feed
    url: https://pkgs.dev.azure.com/.../_packaging/My_Feed/nuget/v3/index.json
    username: octocat@example.com
    password: ${{secrets.MY_AZURE_DEVOPS_TOKEN}}

Notas

También puede usar un token en el archivo dependabot.yml. Para este tipo de registro utilizando el registro GitHub Packages (xyz.pkg.github.com), el token es de hecho uno GitHub personal access token (PAT) .

registries:
  nuget-azure-devops:
    type: nuget-feed
    url: https://pkgs.dev.azure.com/.../_packaging/My_Feed/nuget/v3/index.json
    token: ${{secrets.MY_AZURE_DEVOPS_TOKEN}}

Python

Compatible con Artifactory, Azure Artifacts, Cloudsmith, Nexus y ProGet. El registro GitHub Packages no es compatible.

El tipo python-index admite el nombre de usuario y la contraseña, o el token. Para más información, consulta python-index en "Opciones de configuración para el archivo dependabot.yml".

registries:
  python-example:
    type: python-index
    url: https://example.com/_packaging/my-feed/pypi/example
    username: octocat
    password: ${{secrets.MY_BASIC_AUTH_PASSWORD}}
registries:
  python-azure:
    type: python-index
    url: https://pkgs.dev.azure.com/octocat/_packaging/my-feed/pypi/example
    username: octocat@example.com
    password: ${{secrets.MY_AZURE_DEVOPS_TOKEN}}
registries:
  python-gemfury:
    type: python-index
    url: https://pypi.fury.io/my_org
    token: ${{secrets.MY_GEMFURY_TOKEN}}

Notas

Las dependencias procedentes directamente de un repositorio GitHub proporcionan acceso a Dependabot al repositorio a través de la interfaz de usuario de GitHub. Para obtener información sobre cómo permitir que Dependabot accedan a dependencias privadas de GitHub, vea "Permitir que Dependabot accedan a dependencias privadas".

url debe contener la dirección URL, la organización y el repositorio "feed".

Yarn

El registro de Yarn usa una configuración similar a la del registro de npm. Para más información, consulte "npm-registry" en "Opciones de configuración para el archivo dependabot.yml".

registries:
  yarn-github:
    type: npm-registry
    url: https://npm.pkg.github.com
    token: ${{secrets.MY_GITHUB_PERSONAL_TOKEN}}
  • Para los registros privados, tiene que registrar un archivo .yarnrc.yml (para Yarn 3) o un archivo .yarnrc (para Yarn Classic).
  • Los archivos de configuración de yarn no deben contener variables de entorno.
  • Debe configurar registros privados enumerados en el archivo dependabot.yml mediante https.

Yarn Classic

Puede especificar la configuración del Registro privado en el archivo dependabot.yml o configurar Yarn Classic según las instrucciones del administrador de paquetes estándar.

Definición de la configuración del registro privado en el archivo dependabot.yml

Puede definir la configuración del registro privado en su archivo dependabot.yml. Para obtener más información, vea "Opciones de configuración para registros privados" en "Opciones de configuración para el archivo dependabot.yml".

Para asegurarse de que el registro privado aparece como fuente de dependencia en el archivo yarn.lock del proyecto, debe ejecutar yarn install en una máquina con acceso al registro privado. Yarn debe actualizar el campo resuelto para incluir la URL del registro privado.

encoding@^0.1.11:
  version "0.1.13"
  resolved "https://private_registry_url/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9"
  integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==
  dependencies:
    iconv-lite "^0.6.2"
Siguiendo las instrucciones estándar del administrador de paquetes

Si el archivo yarn.lock no lista el registro privado como origen de la dependencia, puede configurar Yarn Classic según las instrucciones estándar del administrador de paquetes.

  1. Defina la configuración del registro privado en el archivo dependabot.yml.

  2. Después puede hacer lo siguiente:

    • Establecer manualmente el registro privado en el archivo .yarnrc agregando el registro a un archivo .yarnrc.yml en la raíz del proyecto con el registro de claves o
    • Realizar la misma acción ejecutando yarn config set registry <private registry URL> en el terminal.

    Ejemplo de .yarnrc con un registro privado definido: registry https://nexus.example.com/repository/yarn-all

Yarn Berry (v3)

Para obtener información sobre la configuración, consulte Configuración (.yarnrc.yml) en la documentación de Yarn.

Al igual que con Yarn Classic, puede especificar la configuración del registro privado en el archivo dependabot.yml o configurar Yarn Berry según las instrucciones del administrador de paquetes.

Definición de la configuración del registro privado en el archivo dependabot.yml

Puede definir la configuración del registro privado en su archivo dependabot.yml. Para obtener más información, vea "Opciones de configuración para registros privados" en "Opciones de configuración para el archivo dependabot.yml".

Para asegurarte de que el registro privado aparece como origen de dependencia en el archivo yarn.lock del proyecto, ejecuta yarn install en una máquina con acceso privado al registro. Yarn debe actualizar el campo resuelto para incluir la URL del registro privado.

encoding@^0.1.11:
  version "0.1.13"
  resolved "https://private_registry_url/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9"
  integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==
  dependencies:
    iconv-lite "^0.6.2"

También puede configurar registros privados con npmAuthIdent o npmAuthToken. Para más información, consulte "npmAuthIdent" y "npmAuthToken" en la documentación de Yarn.

yarn config set registry <url>

Puede definir el ámbito de la configuración para que solo cubra una sola dependencia u organización.

yarn config set @<SCOPE>:registry <url>

Por último, se recomienda ejecutar yarn login para comprobar que la configuración es correcta y válida. El archivo de bloqueo también se puede volver a generar para usar el nuevo registro privado ejecutando yarn install de nuevo.

Siguiendo las instrucciones estándar del administrador de paquetes

Si el archivo yarn.lock no muestra el registro privado como origen de dependencia, puede configurar Yarn Berry según las instrucciones normales del administrador de paquetes.

  1. Defina la configuración del registro privado en el archivo dependabot.yml.

  2. Después puede hacer lo siguiente:

    • Establecer manualmente el registro privado en el archivo .yarnrc agregando el registro a un archivo .yarnrc.yml en la raíz del proyecto con la clave npmRegistryServer o
    • Realizar la misma acción ejecutando yarn config set npmRegistryServer <private registry URL> en el terminal.

    Ejemplo de un archivo .yarnrc.yml con un registro privado configurado: npmRegistryServer: "https://nexus.example.com/repository/yarn-all"

    Para más información, consulte npmRegistryServer en la documentación de Yarn.

Notas

Las dependencias procedentes directamente de un repositorio GitHub proporcionan acceso a Dependabot al repositorio a través de la interfaz de usuario de GitHub. Para obtener información sobre cómo permitir que Dependabot accedan a dependencias privadas de GitHub, vea "Permitir que Dependabot accedan a dependencias privadas".

En el caso de las dependencias con ámbito (@my-org/my-dep), Dependabot requiere que el registro privado se defina en .yarnrc file del proyecto. Para definir registros privados para ámbitos individuales, usa @myscope:registry" "https://private_registry_url".

Configuración de hosts de registro privados

Artifactory

Para obtener información sobre la configuración de Artifactory, consulte Configuración de Artifactory en la documentación de JFrog Artifactory.

Repositorios remotos

Los repositorios remotos sirven como memoria caché para crear artefactos y dependencias. En lugar de tener que ponerse en contacto con un repositorio de dependencias global, la herramienta de compilación puede usar la caché de artefactos, lo que acelerará los tiempos de compilación. Para obtener más información, consulte Repositorios remotos en la documentación de JFrog Artifactory.

Si usa la configuraciónreplace-base , también debe configurar un repositorio remoto para Artifactory si desea que Dependabot acceda a otro registro siempre que no se encuentre la dependencia en el registro privado.

Registro virtual

Puede usar un registro virtual para agrupar todas las dependencias públicas y privadas en un solo dominio. Para obtener más información, consulte npm Registry en la documentación de JFrog Artifactory.

Limitaciones y soluciones alternativas

La configuración target branch no funciona con Dependabot security updates en Artifactory. Si recibe un error de autenticación 401, debe quitar la propiedad target-branch del archivo dependabot.yml. Para más información, consulte ARTIFACTORY: Por qué las actualizaciones de seguridad de GitHub Dependabot están fallando con un error de autenticación 401, al iniciar una conexión con el registro privado Artifactory npm para actualizaciones de seguridad en la documentación de JFrog Artifactory.

Azure Artifacts

Para obtener información sobre Azure Artifacts e instrucciones sobre cómo configurar Dependabot para trabajar con Azure Artifacts, consulte Azure DevOps en la documentación de Azure Artifacts y Uso de Dependabot en GitHub con Azure Artifacts, respectivamente.

Ejemplo del registro de Azure Artifacts:

registries:
  nuget-azure-devops:
    type: nuget-feed
    url: https://pkgs.dev.azure.com/my_org/_packaging/public/nuget/v3/index.json
    token: ${{secrets.AZURE_DEVOPS_TOKEN}}

La contraseña de Azure Artifacts debe ser un token no codificado y debe incluir : después del token. Además, la contraseña no puede codificarse en base64.

Puedes comprobar si se ha accedido correctamente al registro privado si examinas los registros de Dependabot.

Cloudsmith

Para obtener información sobre Cloudsmith e instrucciones sobre cómo configurar Dependabot para trabajar con Cloudsmith, consulte Introducción a Cloudsmith e Integración de Github Dependabot con Cloudsmith en la documentación de Cloudsmith.

Registro GitHub Packages

Para más información sobre GitHub Packages, consulte "Trabajar con un registro de Paquetes de GitHub". Desde ese artículo, puede acceder a las páginas que describen cómo configurar los registros siguientes.

  • Bundler (rubygems)
  • Docker (contenedores)
  • GitHub Actions
  • Gradle
  • Maven
  • Npm
  • NuGet
  • Yarn
registries:
  github:
    type: npm-registry
    url: https://npm.pkg.github.com
    token: ${{ secrets.<token> }}

Notas

No hay ningún registro de contenedor de Python.

En el caso de los registros privados cuyo ámbito es una organización determinada, Dependabot espera que la dirección URL incluya el nombre de la organización en el archivo dependabot.yml.

Nexus

Para obtener información sobre la configuración de Nexus, vea Administrador de Repositorios 3 en la documentación de Sonatype.

Notas

Con Nexus Repository Pro, puede habilitar tokens de usuario. Para obtener más información, consulte Tokens de usuario en la documentación de Sonatype.

Ejemplo del registro Nexus:

registries:
  npm-nexus:
    type: npm-registry
    url: https://registry.example.com/repository/npm-internal/
    token: ${{secrets.NEXUS_NPM_TOKEN}}

Si ejecuta Nexus detrás de un proxy inverso, debe asegurarse de que el servidor sea accesible mediante un token de autenticación mediante curl -v -H 'Authorization: Bearer <token>' 'https://<nexus-repo-url>/repository/<repo-name>/@<scope>%2<package>'. Para obtener más información, vea Ejecutar detrás de un proxy inverso en la documentación de Sonatype.

Si va a restringir las direcciones IP que pueden llegar al host de Nexus, debe agregar las direcciones IP de Dependabot a la lista de permitidos.

Los registros pueden utilizarse como proxy para llegar a un registro público en caso de que una dependencia no esté disponible en el registro privado. Sin embargo, es posible que desee que Dependabot solo acceda al registro privado y no acceda al registro público en absoluto. Para más información, consulte la "Guía de inicio rápido - Proxy de Maven y NPM" en la documentación de Sonatype, y "Eliminación del acceso de Dependabot a registros públicos."

ProGet

Para obtener información sobre ProGet e instrucciones sobre cómo configurar Dependabot para trabajar con fuentes en ProGet, consulta la documentación de ProGet.

Ejemplo de configuración del registro ProGet para una fuente NuGet:

registries:
  proget-nuget-feed:
    type: nuget-feed
    url: https://proget.corp.local/nuget/MyNuGetFeed/v3/index.json
    token: ${{secrets.PROGET_APK_KEY}}

Ejemplo de configuración del Registro ProGet para Bundler (rubygems):

registries:
  proget-gems-feed:
    type: rubygems-server
    url: https://proget.corp.local/rubygems/MyRubygemsFeed
    token: ${{secrets.PROGET_APK_KEY}}

Ejemplo de configuración del registro ProGet para Python (PyPI):

registries:
  proget-python-feed:
    type: python-index
    url: https://proget.corp.local/pypi/MyPythonFeed
    token: ${{secrets.PROGET_APK_KEY}}

Notas

token debe ser una clave de API con acceso para ver los paquetes. Para más información, consulta Acceso a API y claves de API en la documentación de ProGet.

Puedes comprobar si se ha accedido correctamente al registro privado si examinas los registros de Dependabot.