Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 存储用于上载工件的凭据_Python_Azure Devops_Azure Pipelines_Pypi_Twine - Fatal编程技术网

Python 存储用于上载工件的凭据

Python 存储用于上载工件的凭据,python,azure-devops,azure-pipelines,pypi,twine,Python,Azure Devops,Azure Pipelines,Pypi,Twine,我正在使用Azure DevOps管道构建python包,然后将生成的工件上载到提要。一切正常,但是,我不喜欢存储库中有一个.pypirc文件,其中包含上载凭据 基本上,我使用以下方式上传工件: - script: 'twine upload -r imglib --config-file .pypirc dist/imglib-*.tar.gz' 是否有其他方法存储凭据,最好不要存储在任何人都可以编辑的文件中?我读了一些关于将凭证存储在密钥库中的内容,但我不知道如何更改管道(yml文件)来实

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

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

- script: 'twine upload -r imglib --config-file .pypirc dist/imglib-*.tar.gz'
是否有其他方法存储凭据,最好不要存储在任何人都可以编辑的文件中?我读了一些关于将凭证存储在密钥库中的内容,但我不知道如何更改管道(yml文件)来实现这一点

提前谢谢

编辑:

Shaykis Answare似乎是正确的方法,但是,我无法使用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的构建任务期间显示)。是否有更简单的方法调试构建程序?:

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

编辑2:

我还尝试使用
$env:PYPI\u CRED\u MAPPED
,但在这种情况下,只有$env被零替换,剩下的就是
:PYPI\u CRED\u MAPPED
。此外,我查看了,他们直接使用变量(例如,
$PYPI\u CRED\u MAPPED
,请参见页面底部)

编辑3:


这三个星号只是一个占位符。它使用了
$PYPI\u CRED\u MAPPED
,如编辑2中所述。由于另一个原因,生成过程失败。我还使用答案中提供的powershell命令进行了尝试,效果也很好。因此,感谢您的帮助。

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

1) 在
.yaml
编辑器中,单击右上角保存/运行按钮附近的3个点,然后单击“变量”

2) 使用密码添加一个新变量(
pythonCred
fore-example),然后单击锁图标将其设置为机密

3) 转到您的
.pypirc
文件,并将密码替换为
\uuuuu password\uuuu

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
文件。

谢谢,我会尽快尝试。不过,我将把它重写为一个bash任务。好主意,这不是一个复杂的任务:)我只是更新了这个问题以包含您的答案。关于bash命令,您能帮助我吗?在
sed
-中,使用
$env:variable
- 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