source_credentials.json¶
警告
此功能是实验性的,可能会发生重大更改。有关更多信息,请参阅 Conan 稳定性 部分。
当 conanfile.py
配方通过 download()
或 get()
辅助函数从其他服务器下载源代码时,例如
def source(self):
# Immutable source .zip
download(self, f"https://server/that/need/credentials/files/tarballname-{self.version}.zip", "downloaded.zip")
# Also the ``get()`` function, as it internally calls ``download()``
这些下载对于互联网上的开源第三方库来说通常是匿名的,但私有组织中的专有代码或供应商提供的代码也可能需要某种形式的身份验证。
为此,可以在 Conan 缓存中提供 source_credentials.json
文件。此文件具有以下格式,其中每个 credentials
条目都应具有一个 url
,用于定义应与配方 URL 匹配的 URL。如果配方 URL 以凭据文件中给定的 URL 开头,则将注入凭据。如果文件为多个 URL 提供多个凭据,则它们将按顺序评估,直到第一次匹配发生。如果未找到匹配项,则不会注入任何凭据。自定义的 身份验证插件 也可以用于直接从您自己的密钥管理器中检索凭据。
需要注意的是,source_credentials
仅适用于使用 tools.files
中的 download()
和 get()
辅助函数下载的文件,但在其他情况下不会使用。要为 Conan 仓库提供凭据,应改用 credentials.json
文件,请参阅 credentials.json。
{
"credentials": [
{
"url": "https://server/that/need/credentials",
"token": "mytoken"
}
]
}
使用 token
字段将添加一个 Authorization = Bearer {token}
头。这将是首选的身份验证方式,因为它通常比使用用户名/密码更安全。
如果出于某种原因需要使用用户名/密码进行 HTTP 基本身份验证,可以通过 user
和 password
字段提供。
{
"credentials": [
{
"url": "https://server/that/need/credentials",
"user": "myuser",
"password": "mypassword"
}
]
}
一般来说,强烈不建议在文件中硬编码密码等秘密信息。为避免这种情况,source_credentials.json
文件始终作为 Jinja 模板呈现,因此它可以执行诸如获取环境变量 os.getenv()
等操作,从而允许在系统或 CI 级别配置秘密信息。
{% set mytk = os.getenv('mytoken') %}
{
"credentials": [
{
"url": "https://server/that/need/credentials",
"token": "{{mytk}}"
}
]
}
注意
最佳实践
避免在
conanfile.py
配方中使用编码令牌或用户名/密码身份验证的 URL。这些 URL 很容易泄露到日志中,并且在凭据更改时更难修复(这也适用于 Git 仓库的 URL 和克隆,最好使用其他 Git 身份验证机制,如 SSH 密钥)。
另请参阅