我正在try 使用Azure管道将一个Python包发布到Artiact的提要. 我可以在我的本地机器上这样做,并使用Twin上传包,但我有一个正在进行的身份验证问题.

trigger:
- main

pool:
  vmImage: ubuntu-22.04
variables:
  pip_cache_dir: '$(Pipeline.Workspace)/.pip_cache'

steps:
- task: UsePythonVersion@0
  inputs:
    versionSpec: '3.10'
    addToPath: true

- bash: |
    python -m venv worker_venv
    source worker_venv/bin/activate
    pip install --upgrade pip
    pip install pipenv
    pipenv requirements > requirements.txt
    pipenv requirements --dev > requirements-dev.txt
    pip install --cache-dir $(pip_cache_dir) -r ./requirements.txt
    pip install --target="./.python_packages/lib/site-packages" --cache-dir $(pip_cache_dir) -r ./requirements.txt
  displayName: 'Install tools'

- script: |
    source worker_venv/bin/activate
    python setup.py sdist bdist_wheel
  displayName: 'Build package'

- task: TwineAuthenticate@1
  inputs:
    artifactFeed: sample-feed-01

- script: |
    source worker_venv/bin/activate
    python -m twine upload --verbose --config-file $(PYPIRC_PATH) --repository-url https://pkgs.dev.azure.com/**company**/Platform/_packaging/sample-feed-01/pypi/upload/ dist/*
  env:
    TWINE_USERNAME: "azure"
    TWINE_PASSWORD: $(PYPI_TOKEN)
  displayName: 'Upload package to Azure Artifacts'

我try 了所有方法,包括GPT-4,但解决方案似乎是错误的或过时的. 这就是错误:

/usr/bin/bash --noprofile --norc /home/vsts/work/_temp/75d0c60b-0c2a-44e9-be0f-29d838a3b86e.sh
Uploading distributions to 
https://pkgs.dev.azure.com/**company**/Platform/_packaging/sample-feed-01/pypi/up
load/
INFO     dist/**package**.whl (2.6 KB)                 
INFO     dist/**package**.tar.gz (2.6 KB)                           
INFO     username set by command options                                        
INFO     password set by command options                                        
INFO     username: azure                                                        
INFO     password: <hidden>                                                     
Uploading **package**.whl
25l
  0% ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0.0/5.7 kB • --:-- • ?
100% ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.7/5.7 kB • 00:00 • ?
100% ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.7/5.7 kB • 00:00 • ?
25hINFO     Response from                                                          
         https://pkgs.dev.azure.com/**company**/Platform/_packaging/sample-feed-0
         1/pypi/upload/:                                                        
         401 Unauthorized                                                       
INFO     {"$id":"1","innerException":null,"message":"TF400813: The user        
         'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa' is not authorized to access this
         resource.","typeName":"Microsoft.TeamFoundation.Framework.Server.Unauth
         orizedRequestException,                                                
         Microsoft.TeamFoundation.Framework.Server","typeKey":"UnauthorizedReque
         stException","errorCode":0,"eventId":3000}                             
ERROR    HTTPError: 401 Unauthorized from                                       
         https://pkgs.dev.azure.com/**company**/Platform/_packaging/sample-feed-0
         1/pypi/upload/                                                         
         Unauthorized                                       

我对'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa'作为用户名有一些怀疑,我没有混淆它,这就是我在管道中看到的. 如有任何帮助,我们将不胜感激

推荐答案

转到您要将Python包发布到的Azure人工制品提要,然后导航到Feed Settings>;Permissions页面以判断并确保以下身份已被分配至少100个角色.

  • 100
  • 100

enter image description here

更多详细信息,请参见"Job access tokens".


在配置权限角色后,在管道中,您可以构建并发布Python包,如下所示.

steps:
- Some steps to install dependences and build the package.

- task: TwineAuthenticate@1
  displayName: 'Twine Authenticate '
  inputs:
    artifactFeed: {feed_name}

- bash: 'twine upload -r {feed_name} --config-file "$(PYPIRC_PATH)" dist/*.whl'
  displayName: 'Publish to Artifacts feed'

通过这种方式,您不需要提供PAT/密码进行身份验证.

更多详细信息,请参见"Publish Python packages with Azure Pipelines".


EDIT:

默认情况下,管道将使用以下构建标识之一(也如上所述)来访问当前组织内的Azure构件提要和其他资源:

  • 100:默认可以跨当前组织内的项目访问全部/部分权限的资源.

  • 100:默认情况下只能访问当前项目内具有完全/部分权限的资源.

Organization Settings(和Project Settings)上,有两个选项:

  • 100
  • 100

enter image description here

如果启用了这些选项,则管道使用标识"100".如果选项被禁用,则使用标识"101".

任务100将使用上述构建身份之一来生成缠绕凭证,并将该凭证设置为环境变量101.

由于默认情况下,身份可能不具有提要的完全访问权限,要将所需的权限角色分配给身份,您需要单击"100"按钮,然后在弹出窗口中,搜索并添加具有所需角色的身份.

enter image description here


Python相关问答推荐

我对打乒乓球有问题

Pandas 修改原始excel

如何随着收件箱的增加动态添加到HTML表的右下角?

单击Cookie横幅错误并在Selenium中启用搜索栏

当变量也可以是无或真时,判断是否为假

自动编码器和极坐标

在Python中根据id填写年份系列

如何在Python中按组应用简单的线性回归?

将从Python接收的原始字节图像数据转换为C++ Qt QIcon以显示在QStandardProject中

实现的差异取决于计算出的表达是直接返回还是首先存储在变量中然后返回

如何销毁框架并使其在tkinter中看起来像以前的样子?

在matplotlib动画gif中更改配色方案

从包含数字和单词的文件中读取和获取数据集

Python中MongoDB的BSON时间戳

根据条件将新值添加到下面的行或下面新创建的行中

比较2 PD.数组的令人惊讶的结果

标题:如何在Python中使用嵌套饼图可视化分层数据?

通过pandas向每个非空单元格添加子字符串

在两极中过滤

Pandas:计算中间时间条目的总时间增量