存储证书以用于缠绕人工制品

时间:2019-05-23 06:50:26

标签: python azure-devops azure-pipelines pypi twine

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

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

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

是否存在另一种存储凭据的方法,最好不要存储在任何人都可以编辑的文件中?我读了一些有关将凭据存储在密钥库中的信息,但是我看不到如何更改管道(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:

这三个星号只是一个占位符。如 EDIT 2 中所述,它与$PYPI_CRED_MAPPED一起使用。由于另一个原因,构建过程失败。我还使用答案中提供的powershell命令进行了尝试,并且效果很好。因此,谢谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您可以将变量存储为秘密变量,在.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文件。