You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何无需设备登录验证自动上传Python包至Azure Artifacts

解决Azure DevOps Pipeline自动上传Python包到Artifacts无需手动验证的问题

问题描述

我可以通过Azure DevOps Pipeline构建Python包并上传到Artifacts源,但每次都需要监控「上传包」步骤,打开设备登录页输入授权码完成身份验证才能上传。有没有办法实现自动化,无需手动操作?

原始Pipeline配置

trigger:
- master
- pipeline*

parameters:
- name: path
  type: string
  default: 'dist/*.whl'

pool:
  vmImage: ubuntu-latest

steps:
- task: UsePythonVersion@0
  inputs:
    versionSpec: '3.10'
  displayName: 'Use Python 3.10'

- script: |
    python -m pip install --upgrade pip
    pip install -r requirements.txt
    pip install twine keyring artifacts-keyring
    python -m pip install --upgrade build setuptools twine
  displayName: 'Install dependencies'

- script: |
    python -m build
  displayName: 'Build Python Package'

- task: TwineAuthenticate@1
  inputs:
    artifactFeed: 'MyApp/myapp-packages'
  displayName: 'Authenticate Twine'

- script: |
    python -m twine upload -r insite-packages --repository-url https://pkgs.dev.azure.com/kngwin/MyApp/_packaging/myapp-packages/pypi/upload/ --config-file $(PYPIRC_PATH) dist/*
  displayName: 'Upload Package'

已尝试的修改(编辑1)

按照建议尝试了在~目录创建.pypirc文件、在URL中添加令牌两种方法,但仍会触发需要用户交互的设备登录请求,要求打开页面输入授权码。修改后的配置如下:

trigger:
- master
- pipeline*

parameters:
- name: path
  type: string
  default: 'dist/*.whl'

pool:
  vmImage: ubuntu-latest

steps:
- task: UsePythonVersion@0
  inputs:
    versionSpec: '3.10'
  displayName: 'Use Python 3.10'

- script: |
    python -m pip install --upgrade pip
    pip install -r requirements.txt
    pip install twine keyring artifacts-keyring
    pip install wheel
    pip install twine
    python -m pip install --upgrade build setuptools twine
  displayName: 'Install dependencies'

- script: |
    python -m build
  displayName: 'Build Python Package'

- task: TwineAuthenticate@1
  inputs:
    artifactFeed: 'MyApp/myapp-packages'
  displayName: 'Authenticate Twine'

- script: |
    echo $(PYPIRC_PATH)
    python -m twine upload -r myapp-packages --repository-url https://myapp-packages:$(System.AccessToken)@pkgs.dev.azure.com/kngwin/MyApp/_packaging/myapp-packages/pypi/upload/ --config-file $(PYPIRC_PATH) dist/*
  displayName: 'Upload Package'

正确的自动化解决方案

方式一:利用TwineAuthenticate任务自动生成认证配置(推荐)

TwineAuthenticate任务会自动生成包含有效认证信息的.pypirc文件,并通过$(PYPIRC_PATH)变量暴露其路径。你只需确保twine命令正确引用该配置,无需手动处理令牌:

  1. 确认TwineAuthenticate任务的artifactFeed参数格式正确(项目名/源名)
  2. 上传命令使用任务配置的仓库别名,不要手动指定repository-url

修改后的上传步骤:

- script: |
    python -m twine upload -r myapp-packages --config-file $(PYPIRC_PATH) dist/*
  displayName: 'Upload Package'

方式二:直接使用系统访问令牌认证

若需手动处理认证,需确保Pipeline的服务账户拥有Artifacts源的访问权限,并正确传递System.AccessToken:

  1. 给**Project Collection Build Service (<你的组织名>)**账户添加Artifacts源的「贡献者」权限
  2. 上传命令中按格式拼接令牌,用户名可任意填写(如azuredevops)

修改后的上传步骤(可移除TwineAuthenticate任务):

- script: |
    python -m twine upload --repository-url https://azuredevops:$(System.AccessToken)@pkgs.dev.azure.com/kngwin/MyApp/_packaging/myapp-packages/pypi/upload/ dist/*
  displayName: 'Upload Package'

关键注意事项

  • 务必确认构建服务账户在Artifacts源的权限设置中拥有「贡献者」或更高权限
  • 不要同时使用TwineAuthenticate任务和手动令牌拼接,避免认证冲突
  • 确保artifacts-keyring包已正确安装,它是Azure Artifacts与twine集成的核心依赖

内容的提问来源于stack exchange,提问作者K. Ngwin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 06:50:24