存储用于上传工件的凭据

Store credentials for twine upload of artifacts

我正在使用 Azure DevOps 管道构建我的 python 程序包,然后将生成的工件上传到提要。一切正常,但是,我不喜欢我的存储库中有一个包含上传凭据的 .pypirc 文件。

基本上我使用以下方式上传工件:

- script: 'twine upload -r imglib --config-file .pypirc dist/imglib-*.tar.gz'

是否有另一种存储凭据的方法,最好不要存储在任何人都可以编辑的文件中?我阅读了一些有关将凭据存储在密钥保管库中的内容,但我看不到如何更改管道(yml 文件)来执行此操作。

提前致谢。

编辑:

Shaykis answere 似乎是正确的方法,但是,我无法使用 bash 命令替换 .pypirc 文件中的占位符。当我在替换后打印 .pypirc 的内容时,我得到的只是三个星号。对于我使用的替换:

- script: 'sed -i "s/__password__/$PYPI_CRED_MAPPED/g" .pypirc'
  displayName: 'Setting PyPI credentials'
  env:
    PYPI_CRED_MAPPED: $(pypi_cred)

.pypirs 的内容是(在构建任务期间使用 bash cat .pypirc 显示。是否有更简单的调试构建过程的方法?):

[distutils]
Index-servers =
  pypi
  imglib

[imglib]
Repository = https://pkgs.dev.azure.com/XXX/_packaging/imglib/pypi/upload
username = imglib
password = ***

有人知道那里发生了什么吗?

编辑 2:

我也尝试过使用 $env:PYPI_CRED_MAPPED,但在那种情况下,只有 $env 没有被替换,我只剩下 :PYPI_CRED_MAPPED。另外,我查看了 docs,他们直接使用变量(例如 $PYPI_CRED_MAPPED,见页面底部)。

编辑 3:

三个星号只是一个占位符。如 EDIT 2 中所述,它与 $PYPI_CRED_MAPPED 一起工作。由于另一个原因,构建过程失败了。我还使用答案中提供的 powershell 命令进行了尝试,它也能正常工作。所以谢谢你的帮助。

您可以将变量存储为秘密变量,在 .pypirc 文件中放置一个占位符,然后在管道中添加一个脚本,用变量替换占位符。

1) 在.yaml编辑器中点击右上角Save/Run按钮附近的3个点,然后点击"Variables"。

2) 添加一个带有密码的新变量(例如pythonCred),然后单击锁定图标将其设置为秘密。

3) 转到您的 .pypirc 文件并将密码替换为 __password__

4) 在您的管道中添加一个 PowerShell 任务来放置密码:

- powershell: |
    (Get-Content path/to/pypirc) -replace "__password__" , "$env:CredPython" | Set-Content -Path path/to/pypirc
  env: CredPython: $(pythonCred) # you must to map the variable because is a secret variable

您也可以通过这种方式使用 Azure Key Vault,使用 Azure Key Vault 任务从那里下载密码并替换更新 .pypirc 文件。