如何使用API向Azure DevOps构建上传工件
使用Azure DevOps API上传构建工件
核心流程
上传工件分为两步:先创建工件元数据注册到ADO构建,再将文件上传到返回的Blob存储地址。
1. 准备身份验证
使用个人访问令牌(PAT)进行身份验证,需授予Build Artifacts (Read & Write) 或Build (Read & Execute) 权限。请求时在Header中添加:
Authorization: Basic <base64编码的PAT>
编码方式:在终端执行 echo -n ":你的PAT内容" | base64,冒号是必须的前缀。
2. 创建工件元数据
调用Build Artifacts Create API注册工件基本信息,获取文件上传的Blob地址。
- 请求方式:
POST - 请求URL:
https://dev.azure.com/{组织名}/{项目名}/_apis/build/builds/{构建ID}/artifacts?api-version=7.1-preview.5 - 请求Header:
Content-Type: application/json+ 上述Authorization头 - 请求Body(以容器类型工件为例,适合多文件/文件夹上传):
{ "name": "自定义工件名称", "artifactType": "container", "resource": { "type": "container", "data": "#/Artifacts/自定义工件名称", "properties": {} } }
- 响应中提取
resource.url字段,这是用于上传文件的SAS授权Blob地址。
3. 上传文件到Blob存储
使用PUT请求将本地文件上传到上述Blob地址:
单个文件上传示例:
- 请求方式:
PUT - 请求URL:
{resource.url}/目标文件名(比如{resource.url}/package.zip) - 请求Header:
Content-Type: application/octet-stream - 请求体:文件的二进制内容
- 请求方式:
多文件/文件夹上传:遍历本地文件,保持相对路径结构,每个文件发起一次PUT请求,比如本地
dist/index.html对应URL{resource.url}/dist/index.html。
完整curl脚本示例
# 配置参数 ORG="你的组织名" PROJECT="你的项目名" BUILD_ID="目标构建ID" PAT="你的PAT令牌" ARTIFACT_NAME="MyCustomArtifact" LOCAL_FILE="/本地文件路径/package.zip" TARGET_FILENAME="package.zip" # 编码PAT ENCODED_PAT=$(echo -n ":$PAT" | base64) # 第一步:创建工件元数据 RESPONSE=$(curl -X POST "https://dev.azure.com/$ORG/$PROJECT/_apis/build/builds/$BUILD_ID/artifacts?api-version=7.1-preview.5" \ -H "Authorization: Basic $ENCODED_PAT" \ -H "Content-Type: application/json" \ -d '{ "name": "'"$ARTIFACT_NAME"'", "artifactType": "container", "resource": { "type": "container", "data": "#/Artifacts/'"$ARTIFACT_NAME"'", "properties": {} } }') # 提取Blob上传地址(需安装jq工具解析JSON) BLOB_URL=$(echo $RESPONSE | jq -r '.resource.url') # 第二步:上传文件 curl -X PUT "$BLOB_URL/$TARGET_FILENAME" \ -H "Content-Type: application/octet-stream" \ --data-binary @"$LOCAL_FILE"
注意事项
- 确保PAT权限足够,否则会返回403错误。
- 若上传大文件,需采用分块上传机制。
- API版本建议使用最新的预览版或正式版,避免兼容性问题。
内容的提问来源于stack exchange,提问作者huntantr
相关产品推荐
相关产品推荐

