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

如何通过Azure Release API获取发布关联的提交消息?

解决方案:自动化获取Azure发布关联的提交消息

不需要手动操作,通过修正现有脚本即可实现完整的自动化需求,以下是关键问题修正和完整脚本:

原脚本的核心问题

  1. 发布详情API调用错误:get_release_details函数硬编码了definitionId=2,且URL格式错误,应该根据传入的release_id获取单个发布的详细信息,而非按发布定义ID批量获取。
  2. Artifact遍历逻辑错误:单个发布详情的artifact数据在release_details['artifacts']字段,而非release_details['value']。
  3. 缺少日期范围过滤:未筛选2024年1月1日至6月1日的发布。
  4. Build ID获取错误:原脚本从错误的字段提取build ID,导致提交API调用失败。

修正后的完整脚本

import requests
from requests.auth import HTTPBasicAuth
import pandas as pd
from datetime import datetime

# 替换为你的组织信息和PAT令牌
organization = 'NAME_OF_ORGANIZATION'
pat = 'PAT_TOKEN'
base_url = f'https://dev.azure.com/{organization}'
# 定义日期范围
start_date = datetime(2024, 1, 1)
end_date = datetime(2024, 6, 1)

# 获取项目列表
def get_projects():
    url = f'{base_url}/_apis/projects?api-version=6.0'
    response = requests.get(url, auth=HTTPBasicAuth('', pat))
    response.raise_for_status()
    return response.json()

# 获取项目下的发布列表(带日期范围过滤)
def get_releases(project_name):
    # 添加minCreatedDate和maxCreatedDate参数过滤发布日期
    url = (f'https://vsrm.dev.azure.com/{organization}/{project_name}/_apis/release/releases'
           f'?minCreatedDate={start_date.isoformat()}&maxCreatedDate={end_date.isoformat()}'
           f'&api-version=7.1-preview.8')
    response = requests.get(url, auth=HTTPBasicAuth('', pat))
    response.raise_for_status()
    return response.json()

# 获取单个发布的详细信息
def get_release_details(project_name, release_id):
    url = f'https://vsrm.dev.azure.com/{organization}/{project_name}/_apis/release/releases/{release_id}?api-version=7.1-preview.8'
    response = requests.get(url, auth=HTTPBasicAuth('', pat))
    response.raise_for_status()
    return response.json()

# 获取Build关联的提交消息
def get_build_commits(project_name, build_id):
    url = f'{base_url}/{project_name}/_apis/build/builds/{build_id}/commits?api-version=6.0'
    response = requests.get(url, auth=HTTPBasicAuth('', pat))
    try:
        response.raise_for_status()
        commits_data = response.json()
        return [commit['comment'] for commit in commits_data.get('value', [])]
    except requests.exceptions.HTTPError:
        return []

# 主逻辑
release_data = []
projects = get_projects()

for project in projects['value']:
    project_name = project['name']
    releases = get_releases(project_name)
    
    for release in releases.get('value', []):
        release_id = release['id']
        release_name = release['name']
        release_date_str = release['createdOn']
        # 转换日期格式用于展示
        release_date = datetime.fromisoformat(release_date_str.replace('Z', '+00:00')).strftime('%Y-%m-%d %H:%M:%S')
        
        # 获取发布详情,提取关联的Build ID
        release_details = get_release_details(project_name, release_id)
        commits = []
        
        for artifact in release_details.get('artifacts', []):
            # 判断artifact是否为Build类型
            if artifact['type'] == 'Build':
                build_id = artifact['definitionReference']['version']['id']
                build_commits = get_build_commits(project_name, build_id)
                commits.extend(build_commits)
        
        # 去重提交消息(避免同一提交在多个artifact中重复)
        unique_commits = list(set(commits))
        commit_messages = ', '.join(unique_commits) if unique_commits else '无关联提交'
        
        release_data.append({
            '项目名称': project_name,
            '发布名称': release_name,
            '发布日期': release_date,
            '发布提交消息': commit_messages
        })

# 生成CSV报告
df = pd.DataFrame(release_data)
df.to_csv('azure_releases_report_20240101_20240601.csv', index=False, encoding='utf-8-sig')
print('报告已生成,保存为azure_releases_report_20240101_20240601.csv')

关键修改说明

  1. 日期过滤:调用发布API时添加minCreatedDate和maxCreatedDate参数,直接筛选目标时间范围内的发布,减少不必要的数据处理。
  2. 修正发布详情API:根据release_id获取单个发布的完整信息,确保能正确提取关联的Build artifact。
  3. Build提交获取逻辑:仅处理类型为Build的artifact,从definitionReference中正确提取Build ID,调用Build Commits API获取关联提交消息,并去重避免重复。
  4. 错误处理:添加response.raise_for_status()捕获API调用错误,同时处理Build不存在关联提交的情况。

内容的提问来源于stack exchange,提问作者Loai amer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 11:24:55