如何无需设备登录验证自动上传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命令正确引用该配置,无需手动处理令牌:
- 确认TwineAuthenticate任务的
artifactFeed参数格式正确(项目名/源名) - 上传命令使用任务配置的仓库别名,不要手动指定
repository-url
修改后的上传步骤:
- script: | python -m twine upload -r myapp-packages --config-file $(PYPIRC_PATH) dist/* displayName: 'Upload Package'
方式二:直接使用系统访问令牌认证
若需手动处理认证,需确保Pipeline的服务账户拥有Artifacts源的访问权限,并正确传递System.AccessToken:
- 给**Project Collection Build Service (<你的组织名>)**账户添加Artifacts源的「贡献者」权限
- 上传命令中按格式拼接令牌,用户名可任意填写(如
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
相关产品推荐
相关产品推荐

