在Azure Devops中创建合并请求(使用REST API)不会链接工作项

hk8txs48  于 2023-05-29  发布在  其他
关注(0)|答案(3)|浏览(212)

我正在尝试自动化一些发布后的过程,用于在发布后创建Pull Request(发布分支->主)。虽然我能够自动化PR的创建,它链接提交,但它不链接工作项。
注意:我使用Python,使用来自PyPi(https://pypi.org/project/azure-devops/)的(官方支持的)azure-devops模块。它是围绕REST API的一个薄薄的 Package 器,我已经阅读了REST API文档本身,看看是否有任何其他选项(到目前为止还没有找到任何选项)。下面是我的代码:

def create_pull_request(self, repo_id, source_branch, target_branch, title, description):

    pull_request = {
        "title": title,
        "description": description,
        "sourceRefName": "refs/heads/" + source_branch,
        "targetRefName": "refs/heads/" + target_branch,
    }
    response = self._git_client.create_pull_request(pull_request, repository_id=repo_id)

下面是我连接到git客户端的函数:

def __init__(self, personal_access_token=None, organization_url=None):
    # Create a connection to the org
    credentials = BasicAuthentication('', personal_access_token)
    self._connection = azure.devops.connection.Connection(base_url=organization_url,
                                                         creds=credentials)

    # Get a client (the "core" client provides access to projects, teams, etc)
    self._git_client = self._connection.clients.get_git_client()

我还尝试过拉取单个提交,看看是否能找到与之关联的工作项,并在创建后将它们附加到拉取请求中,但这些响应返回的工作项是空的。
有没有其他方法可以做到这一点?

pdtvr36n

pdtvr36n1#

下面是一些链接工作项的方法:
首先,您的pull_request可能应该包括:

pull_request = {
        "title": title,
        "description": description,
        "sourceRefName": "refs/heads/" + source_branch,
        "targetRefName": "refs/heads/" + target_branch,
        "workItemRefs": # collection of work item refs
    }

workItemRefshttps://learn.microsoft.com/en-us/rest/api/azure/devops/git/pull%20requests/create?view=azure-devops-rest-6.0的REST API文档中进行了说明。你需要在那里放什么可能是一些实验的问题。
第二,作为替代,你的提交可以以如下形式创建:

git commit -m "My commit message #workitemid1 #workitemid2, etc."

然后,当PR被创建时,它将自动链接它在PR中找到的提交中的那些工作项。

fkvaft9z

fkvaft9z2#

我们无法通过合并请求创建API和合并请求更新API添加工作项链接。我发现了一个feature request,你可以关注门票以获得最新消息。
作为一个工作项,我们可以通过这个REST API Work Items - Update将工作项链接到拉取请求
步骤:
通过以下API获取拉取请求字段artifactId

GET https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repositoryId}/pullrequests/{pullRequestId}?api-version=6.0

将工作项链接到合并请求:
请求URL:

PATCH https://dev.azure.com/{organization}/{project}/_apis/wit/workitems/{work item ID}?api-version=5.1

请求正文:

[ {
  "op": "add", 
  "path": "/relations/-",
  "value": {
    "rel": "ArtifactLink",
    "url": "{This url is artifactId}",
    "attributes": { 
        "name": "pull request" 
    }
  }
} ]

结果:

更新1

有没有什么地方我可以找到与提交相关的工作项
我们可以列出通过提交ID关联的工作项。
请求URL:

POST https://dev.azure.com/{Org name}/_apis/wit/artifactUriQuery?api-version=5.0-preview

请求正文:

{
  "artifactUris": [
    "vstfs:///Git/Commit/{Project ID}%2F{Repo ID}%2F{Commit ID}"
  ]
}

结果:

zxlwwiss

zxlwwiss3#

有一个API ' CommitsBatch '可以返回2个分支之间的所有提交。此API有一个布尔参数'includeWorkItems',它将返回链接的工作项。您可以从该响应中提取一个唯一的Workitems列表,以在PR创建中使用。

相关问题