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

如何通过GitHub Action将Python包上传至Azure Artifacts私有源

可以在GitHub Actions中配置twine凭证实现发布

完全可以通过GitHub Actions结合twine实现自动发布Python包到Azure Artifacts私有源,不需要依赖artifacts-keyring或者Azure Pipelines,以下是具体实现方案:

1. 准备Azure Artifacts凭证

  • 在Azure DevOps中创建个人访问令牌(PAT),权限需勾选Packaging下的「读取、写入、管理」权限
  • 将该PAT存储到GitHub仓库的Secrets中,命名为AZURE_ARTIFACTS_PAT;同时可以把Azure组织名、私有源名存为仓库变量(比如AZURE_ORG_NAME、AZURE_FEED_NAME),方便后续维护

2. 编写GitHub Actions Workflow

以下是完整的Workflow YAML示例,包含代码检出、Python环境配置、包构建、twine发布全流程:

name: Publish to Azure Artifacts
on:
  push:
    tags:
      - 'v*' # 仅当推送版本标签时触发发布
  workflow_dispatch: # 支持手动触发

jobs:
  publish:
    runs-on: ubuntu-latest
    steps:
      - name: 检出代码
        uses: actions/checkout@v4

      - name: 设置Python环境
        uses: actions/setup-python@v5
        with:
          python-version: '3.x' # 指定你的包兼容的Python版本

      - name: 安装构建和发布依赖
        run: |
          python -m pip install --upgrade pip
          pip install setuptools wheel twine build

      - name: 构建Python包
        run: python -m build # 生成sdist和bdist_wheel格式的包

      - name: 发布到Azure Artifacts私有源
        env:
          TWINE_USERNAME: azureuser # Azure Artifacts要求用户名非空,可任意填写
          TWINE_PASSWORD: ${{ secrets.AZURE_ARTIFACTS_PAT }}
          TWINE_REPOSITORY_URL: https://pkgs.dev.azure.com/${{ vars.AZURE_ORG_NAME }}/_packaging/${{ vars.AZURE_FEED_NAME }}/pypi/upload/
        run: twine upload dist/*

关键细节说明

  • 凭证配置:Azure Artifacts对twine的用户名无实际验证要求,只需填写非空字符串即可,密码直接使用之前创建的PAT
  • 源URL格式:确保URL末尾包含/upload/,否则twine会请求错误的端点
  • 触发条件:示例中仅在推送版本标签时触发,你可以根据需求修改为push: branches: [main]等其他触发规则
  • 包构建:使用python -m build是官方推荐的现代构建方式,替代传统的setup.py命令

可选:使用.pypirc文件配置

如果你更习惯用.pypirc管理仓库配置,可以在Workflow中动态生成该文件:

# 在发布步骤前添加以下步骤
- name: 创建.pypirc配置文件
  run: |
    echo "[distutils]" >> ~/.pypirc
    echo "index-servers =" >> ~/.pypirc
    echo "  azure-artifacts" >> ~/.pypirc
    echo "" >> ~/.pypirc
    echo "[azure-artifacts]" >> ~/.pypirc
    echo "repository = https://pkgs.dev.azure.com/${{ vars.AZURE_ORG_NAME }}/_packaging/${{ vars.AZURE_FEED_NAME }}/pypi/upload/" >> ~/.pypirc
    echo "username = azureuser" >> ~/.pypirc
    echo "password = ${{ secrets.AZURE_ARTIFACTS_PAT }}" >> ~/.pypirc

# 发布步骤改为:
- name: 发布到Azure Artifacts私有源
  run: twine upload --repository azure-artifacts dist/*

内容的提问来源于stack exchange,提问作者Freddy L.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 18:40:39