我正在使用 Azure DevOps 管道构建我的 python 包,然后将生成的工件上传到源。一切工作正常,但是,我不喜欢这样的事实:我的存储库中有一个包含上传凭据的 .pypirc
文件。
基本上,我使用以下方式上传工件:
- script: 'twine upload -r imglib --config-file .pypirc dist/imglib-*.tar.gz'
是否有其他方法来存储凭据,最好不要存储在任何人都可以编辑的文件中?我读过一些有关将凭据存储在 key 保管库中的内容,但我不知道如何更改管道(yml 文件)来执行此操作。
提前致谢。
编辑:
Shaykis 的回答似乎是正确的方法,但是,我无法使用 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:
这三个星号只是一个占位符。正如编辑2中提到的,它与$PYPI_CRED_MAPPED
一起使用。由于另一个原因,构建过程失败了。我还使用答案中提供的 powershell 命令进行了尝试,效果也很好。所以感谢您的帮助。
最佳答案
您可以将变量存储为 secret 变量,在 .pypirc
文件中放置一个占位符,然后在管道中添加一个用变量替换占位符的脚本。
1) 在 .yaml
编辑器中,单击右上角“保存/运行”按钮附近的 3 个点,然后单击“变量”。
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
文件。
关于python - 存储用于工件上传的凭据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56269529/