关于专用注册表
Dependabot version updates 会保持依赖项为最新,而 Dependabot security updates 会更新有漏洞的依赖项。 Dependabot 可以访问公共注册表。 此外,你可以授予 Dependabot 对专用包注册表和 GitHub 专用仓库的访问权限,以便你可以像管理公共依赖项一样,保持你的专用和内部源依赖项的最新性和安全性。
在大多数生态系统中,专用依赖项通常会发布到专用包注册表。 这些专用注册表与公共注册表类似,但需要身份验证。
对于特定的生态系统,可通过移除对公共注册表的调用,将 Dependabot 配置为_仅_访问专用注册表。 有关详细信息,请参阅“删除对公共注册表的 Dependabot 访问权限”。
配置专用注册表
可以在 dependabot.yml
文件中配置 Dependabot 对专用注册表的访问。
顶级的 registries
密钥是可选的,用于指定身份验证详细信息。
dependabot.yml
文件中有 2 个位置可以使用 registries
密钥:
- 在顶级,可在这里定义注册表及其访问信息(如果需要)。
- 在
updates
块中,可以使用registries: "*"
告知 Dependabot 使用你在顶级定义的任何或所有注册表。
# registries: gradle-artifactory - provides access details for the gradle-artifactory registry
# registries: "*" - allows Dependabot to use all the defined registries specified at the top level
version: 2
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: "*"
schedule:
interval: "monthly"
您使用以下选项来指定访问设置。 注册表设置必须包含 type
和 url
,并且通常包含 username
和 password
组合或 token
。
参数 | 用途 |
---|---|
REGISTRY_NAME | 必需: 定义注册表的标识符。 |
type | 必需: 确定注册表的类型。 |
身份验证详细信息 | 必需: 提供身份验证详细信息所支持的参数因不同类型的注册表而异。 |
url | 必需: 用于访问此注册表中的依赖项的 URL。 协议是可选的。 如果未指定,则假定为 https:// 。 Dependabot 根据需要添加或忽略尾随斜线。 |
replaces-base | 如果布尔值为 true ,Dependabot 会使用指定的 url 而不是该生态系统的基 URL 来解析依赖项。 |
有关可用的配置选项以及支持的类型的详细信息,请参阅“Dependabot 选项参考”。
存储供 Dependabot 使用的凭据
若要授予 Dependabot 对 GitHub 支持的专用注册表的访问权限,可以将注册表的访问令牌或机密存储在存储库或组织的机密存储中。
关于 Dependabot 的加密机密
Dependabot 密码是您在组织级别或仓库级别创建的加密凭据。 当您在组织级别添加密码时,可以指定哪些仓库可以访问该密码。 您可以使用密码允许 Dependabot 更新位于私人包注册表中的依赖项。 添加机密时,它会在到达 GitHub 之前进行加密,并且保持加密状态,直到 Dependabot 将其用于访问专用包注册表。
Dependabot 机密还包括 Dependabot 拉取请求触发的 GitHub Actions 工作流所使用的机密。 Dependabot 本身可能不会使用这些机密,但工作流需要这些机密。 有关详细信息,请参阅“对 GitHub Actions 上的 Dependabot 进行故障排除”。
添加 Dependabot 机密后,可在 dependabot.yml
配置文件中引用它,如下所示:${{secrets.NAME}}
,其中“NAME”是为机密选择的名称。 例如:
password: ${{secrets.MY_ARTIFACTORY_PASSWORD}}
password: ${{secrets.MY_ARTIFACTORY_PASSWORD}}
命名您的密码
Dependabot 密码的名称:
- 只能包含字母数字字符(
[A-Z]
、[0-9]
)或下划线 (_
)。 不允许空格。 如果您输入小写字母,这些字母将更改为大写字母。 - 不得以
GITHUB_
前缀开头。 - 不能以数字开头。
为 Dependabot 添加仓库密码
要为个人帐户存储库创建机密,你必须是存储库所有者。 要为组织存储库创建密码,必须具有 admin
访问权限。
-
在 GitHub 上,导航到存储库的主页面。
-
在存储库名称下,单击 “设置”。 如果看不到“设置”选项卡,请选择“”下拉菜单,然后单击“设置”。
-
在边栏的“安全性”部分中,选择 机密和变量,然后单击 Dependabot。
-
单击“新建存储库机密”。
-
在“名称”输入框中键入机密名称。
-
输入密码的值。
-
单击“添加机密”。
密码名称列在 Dependabot 密码页面上。 可单击“更新”来更改机密值。 可单击“删除”来删除机密。
将组织机密添加到 Dependabot
在组织中创建密码时,可以使用策略来限制可以访问该密码的仓库。 例如,您可以将访问权限授予所有仓库,也可以限制仅私有仓库或指定的仓库列表拥有访问权限。
要在组织级别创建机密,必须具有 admin
访问权限。
-
在 GitHub 上,导航到组织的主页面。
-
在组织名称下,单击 “设置”****。 如果看不到“设置”选项卡,请选择“”下拉菜单,然后单击“设置”********。
-
在边栏的“安全性”部分中,选择 机密和变量,然后单击 Dependabot。
-
单击“新建组织机密”。
-
在“名称”输入框中键入机密名称。
-
输入“机密”的值。
-
从“存储库访问”下拉列表中,选择访问策略。
-
如果选择“选定的存储库”:
- 单击“”。
- 在对话框中,选择可以访问此机密的存储库。
- 单击“更新选择”。
-
单击“添加机密”。
机密的名称列在 Dependabot 机密页面中。 可单击“更新”以更改机密值或其访问策略。 可单击“删除”来删除机密。
允许外部代码执行
授予 Dependabot 对一个或多个注册表的访问权限时,外部代码执行会自动禁用,以保护你的代码免受受损包的影响。 但是,某些版本的更新可能会失败。
如果需要授予 Dependabot 对专用包注册表的访问权限并允许有限的外部代码执行,可以将 insecure-external-code-execution
设置为 allow
。 任何外部代码执行都只能访问与封闭 updates
设置关联的注册表中的包管理器。 不允许访问顶级 registries
配置中定义的任何注册表。
在此示例中,配置文件允许 Dependabot 访问 ruby-github
专用包注册表。 在相同 updates
设置中,insecure-external-code-execution
设置为 allow
,这意味着通过依赖项执行的代码将只能访问 ruby-github
注册表,而不能访问 dockerhub
注册表。
# Allow external code execution when updating dependencies from private registries version: 2 registries: ruby-github: type: rubygems-server url: https://rubygems.pkg.github.com/octocat/github_api token: ${{secrets.MY_GITHUB_PERSONAL_TOKEN}} updates: - package-ecosystem: "bundler" directory: "/rubygems-server" insecure-external-code-execution: allow registries: "*" schedule: interval: "monthly"
# Allow external code execution when updating dependencies from private registries
version: 2
registries:
ruby-github:
type: rubygems-server
url: https://rubygems.pkg.github.com/octocat/github_api
token: ${{secrets.MY_GITHUB_PERSONAL_TOKEN}}
updates:
- package-ecosystem: "bundler"
directory: "/rubygems-server"
insecure-external-code-execution: allow
registries: "*"
schedule:
interval: "monthly"
支持的专用注册表
有关如何配置对 Dependabot 支持的专用注册表的访问权限的示例。
composer-repository
docker-registry
git
hex-organization
hex-repository
maven-repository
npm-registry
nuget-feed
python-index
rubygems-server
terraform-registry
composer-repository
composer-repository
类型支持用户名和密码。 如果帐户是 GitHub 帐户,则可以使用 GitHub personal access token 代替密码。
此注册表类型会与 url
选项中提供的路径进行前缀匹配。 这表示可以向同一主机提供多个凭据,用于访问不同的路径。 不过,如果同一主机上没有多个注册表,建议省略 url
中的路径,以便注册表的所有路径都会收到凭据。
registries: composer: type: composer-repository url: https://repo.packagist.com/example-company/ username: octocat password: ${{secrets.MY_PACKAGIST_PASSWORD}}
registries:
composer:
type: composer-repository
url: https://repo.packagist.com/example-company/
username: octocat
password: ${{secrets.MY_PACKAGIST_PASSWORD}}
docker-registry
Dependabot 可与实现 OCI 容器注册表规范的任何容器注册表配合使用。有关详细信息,请参阅 https://github.com/opencontainers/distribution-spec/blob/main/spec.md。 Dependabot 支持通过中央令牌服务或 HTTP 基本身份验证对专用注册表进行身份验证。有关更多详细信息,请参阅 Docker 文档中的令牌身份验证规范和维基百科上的基本访问身份验证。
docker-registry
类型支持用户名和密码。 如果帐户是 GitHub 帐户,则可以使用 GitHub personal access token 代替密码。
此注册表类型会与 url
选项中提供的路径进行前缀匹配。 这表示可以向同一主机提供多个凭据,用于访问不同的路径。 不过,如果同一主机上没有多个注册表,建议省略 url
中的路径,以便注册表的所有路径都会收到凭据。
registries: dockerhub: type: docker-registry url: https://registry.hub.docker.com username: octocat password: ${{secrets.MY_DOCKERHUB_PASSWORD}} replaces-base: true
registries:
dockerhub:
type: docker-registry
url: https://registry.hub.docker.com
username: octocat
password: ${{secrets.MY_DOCKERHUB_PASSWORD}}
replaces-base: true
docker-registry
类型还可用于通过静态 AWS 凭据从专用 Amazon ECR 中拉取。
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}} replaces-base: true
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}}
replaces-base: true
git
git
类型支持用户名和密码。 如果帐户是 GitHub 帐户,则可以使用 GitHub personal access token 代替密码。
registries: github-octocat: type: git url: https://github.com username: x-access-token password: ${{secrets.MY_GITHUB_PERSONAL_TOKEN}}
registries:
github-octocat:
type: git
url: https://github.com
username: x-access-token
password: ${{secrets.MY_GITHUB_PERSONAL_TOKEN}}
hex-organization
hex-organization
类型支持组织和密钥。
此注册表类型会与 url
选项中提供的路径进行前缀匹配。 这表示可以向同一主机提供多个凭据,用于访问不同的路径。 不过,如果同一主机上没有多个注册表,建议省略 url
中的路径,以便注册表的所有路径都会收到凭据。
registries: github-hex-org: type: hex-organization organization: github key: ${{secrets.MY_HEX_ORGANIZATION_KEY}}
registries:
github-hex-org:
type: hex-organization
organization: github
key: ${{secrets.MY_HEX_ORGANIZATION_KEY}}
hex-repository
hex-repository
类型支持身份验证密钥。
repo
是必填字段,必须与依赖项声明中使用的存储库的名称匹配。
public-key-fingerprint
为可选配置字段,表示 Hex 存储库的公钥指纹。 Hex 使用 public-key-fingerprint
与专用存储库建立信任关系。 public-key-fingerprint
字段可以以纯文本形式列出,也可以存储为 Dependabot 机密。
registries: github-hex-repository: type: hex-repository repo: private-repo url: https://private-repo.example.com auth-key: ${{secrets.MY_AUTH_KEY}} public-key-fingerprint: ${{secrets.MY_PUBLIC_KEY_FINGERPRINT}}
registries:
github-hex-repository:
type: hex-repository
repo: private-repo
url: https://private-repo.example.com
auth-key: ${{secrets.MY_AUTH_KEY}}
public-key-fingerprint: ${{secrets.MY_PUBLIC_KEY_FINGERPRINT}}
maven-repository
maven-repository
类型支持用户名和密码。 如果帐户是 GitHub 帐户,则可以使用 GitHub personal access token 代替密码。
此注册表类型会与 url
选项中提供的路径进行前缀匹配。 这表示可以向同一主机提供多个凭据,用于访问不同的路径。 不过,如果同一主机上没有多个注册表,建议省略 url
中的路径,以便注册表的所有路径都会收到凭据。
registries: maven-artifactory: type: maven-repository url: https://acme.jfrog.io/artifactory/my-maven-registry username: octocat password: ${{secrets.MY_ARTIFACTORY_PASSWORD}}
registries:
maven-artifactory:
type: maven-repository
url: https://acme.jfrog.io/artifactory/my-maven-registry
username: octocat
password: ${{secrets.MY_ARTIFACTORY_PASSWORD}}
npm-registry
npm-registry
类型支持用户名和密码或者令牌。 如果帐户是 GitHub 帐户,则可以使用 GitHub personal access token 代替密码。
使用用户名和密码时,.npmrc
的身份验证令牌可能包含 base64
编码的 _password
;但是,Dependabot 配置文件中引用的密码必须是原始(未编码)密码。
Note
使用 npm.pkg.github.com
时不包括路径。 请改用没有路径的 https://npm.pkg.github.com
URL。
registries: npm-npmjs: type: npm-registry url: https://registry.npmjs.org username: octocat password: ${{secrets.MY_NPM_PASSWORD}} # Must be an unencoded password replaces-base: true
registries:
npm-npmjs:
type: npm-registry
url: https://registry.npmjs.org
username: octocat
password: ${{secrets.MY_NPM_PASSWORD}} # Must be an unencoded password
replaces-base: true
registries: npm-github: type: npm-registry url: https://npm.pkg.github.com token: ${{secrets.MY_GITHUB_PERSONAL_TOKEN}} replaces-base: true
registries:
npm-github:
type: npm-registry
url: https://npm.pkg.github.com
token: ${{secrets.MY_GITHUB_PERSONAL_TOKEN}}
replaces-base: true
出于安全原因, Dependabot 不设置环境变量。 Yarn(v2 及更高版本)要求设置任何访问的环境变量。 访问 .yarnrc.yml
文件中的环境变量时,应提供回退值,例如 ${ENV_VAR-fallback}
或 ${ENV_VAR:-fallback}
。 有关详细信息,请参阅 Yarn 文档中的 Yarnrc 文件。
nuget-feed
nuget-feed
类型支持用户名和密码或者令牌。 如果帐户是 GitHub 帐户,则可以使用 GitHub personal access token 代替密码。
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-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}}
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}}
python-index
python-index
类型支持用户名和密码或者令牌。 如果帐户是 GitHub 帐户,则可以使用 GitHub personal access token 代替密码。
此注册表类型会与 url
选项中提供的路径进行前缀匹配。 这表示可以向同一主机提供多个凭据,用于访问不同的路径。 不过,如果同一主机上没有多个注册表,建议省略 url
中的路径,以便注册表的所有路径都会收到凭据。
registries: python-example: type: python-index url: https://example.com/_packaging/my-feed/pypi/example username: octocat password: ${{secrets.MY_BASIC_AUTH_PASSWORD}} replaces-base: true
registries:
python-example:
type: python-index
url: https://example.com/_packaging/my-feed/pypi/example
username: octocat
password: ${{secrets.MY_BASIC_AUTH_PASSWORD}}
replaces-base: true
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}} replaces-base: true
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}}
replaces-base: true
rubygems-server
rubygems-server
类型支持用户名和密码或者令牌。 如果帐户是 GitHub 帐户,则可以使用 GitHub personal access token 代替密码。
此注册表类型会与 url
选项中提供的路径进行前缀匹配。 这表示可以向同一主机提供多个凭据,用于访问不同的路径。 不过,如果同一主机上没有多个注册表,建议省略 url
中的路径,以便注册表的所有路径都会收到凭据。
registries: ruby-example: type: rubygems-server url: https://rubygems.example.com username: octocat@example.com password: ${{secrets.MY_RUBYGEMS_PASSWORD}} replaces-base: true
registries:
ruby-example:
type: rubygems-server
url: https://rubygems.example.com
username: octocat@example.com
password: ${{secrets.MY_RUBYGEMS_PASSWORD}}
replaces-base: true
registries: ruby-github: type: rubygems-server url: https://rubygems.pkg.github.com/octocat/github_api token: ${{secrets.MY_GITHUB_PERSONAL_TOKEN}} replaces-base: true
registries:
ruby-github:
type: rubygems-server
url: https://rubygems.pkg.github.com/octocat/github_api
token: ${{secrets.MY_GITHUB_PERSONAL_TOKEN}}
replaces-base: true
terraform-registry
terraform-registry
类型支持令牌。
registries: terraform-example: type: terraform-registry url: https://terraform.example.com token: ${{secrets.MY_TERRAFORM_API_TOKEN}}
registries:
terraform-example:
type: terraform-registry
url: https://terraform.example.com
token: ${{secrets.MY_TERRAFORM_API_TOKEN}}