Создание VSTS PBI через Azure DevOps Python API - PullRequest
0 голосов
/ 03 марта 2020

Создание программы, которая будет автоматически создавать PBI в AzureDevOps для моей организации. Я не могу понять, как сделать ссылку на скрипт API-интерфейсом, созданным AzureDevOps. Я просто хочу, чтобы программа взяла мой токен и создала рабочий элемент в vsts и присвоила его себе с настраиваемым заголовком. Я установил azure CLI и скачал файлы azure -devops- python -samples, но для меня это не хороший способ указать путь к create_work_item. Я предполагаю, что мне нужно руководство о том, как взять файлы github и просто указать другую программу для создания PBI. Я довольно новичок во всем этом, поэтому кому-то, кто может объяснить, как это сделать, было бы очень полезно!

TLDR: Точка A - Сохранить заголовок и user_assignment как переменные в другом файле. Точка B - Справочник эти переменные и составляют PBI для моей организации.

Я полагаю, было бы полезно иметь мой код в этом вопросе:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import base64
import json
import requests
#from bugcrowdapipull.py import xbug_title


pat = 'PAT HERE'
authorization = str(base64.b64encode(bytes(':'+pat, 'ascii')), 'ascii')

headers = {
    'Accept': 'application/json',
    'Authorization': 'Basic '+authorization
}
url="https://PROJECT.visualstudio.com/_apis/projects?api-version=5.1"

response = requests.get(url, headers=headers)

print(response)


def create_work_item(self, document, project, type='Bug', validate_only=None, bypass_rules=None, suppress_notifications=None, expand=None):
        """CreateWorkItem.
        [Preview API] Creates a single work item.
        :param :class:`<[JsonPatchOperation]> <azure.devops.v6_0.work_item_tracking.models.[JsonPatchOperation]>` document: The JSON Patch document representing the work item
        :param str project: Project ID or project name
        :param str type: The work item type of the work item to create
        :param bool validate_only: Indicate if you only want to validate the changes without saving the work item
        :param bool bypass_rules: Do not enforce the work item type rules on this update
        :param bool suppress_notifications: Do not fire any notifications for this change
        :param str expand: The expand parameters for work item attributes. Possible options are { None, Relations, Fields, Links, All }.
        :rtype: :class:`<WorkItem> <azure.devops.v6_0.work_item_tracking.models.WorkItem>`
        """
        route_values = {}
        if project is not None:
            route_values['project'] = self._serialize.url('project', project, 'str')
        if type is not None:
            route_values['type'] = self._serialize.url('type', type, 'str')
        query_parameters = {}
        if validate_only is not None:
            query_parameters['validateOnly'] = self._serialize.query('validate_only', validate_only, 'bool')
        if bypass_rules is not None:
            query_parameters['bypassRules'] = self._serialize.query('bypass_rules', bypass_rules, 'bool')
        if suppress_notifications is not None:
            query_parameters['suppressNotifications'] = self._serialize.query('suppress_notifications', suppress_notifications, 'bool')
        if expand is not None:
            query_parameters['$expand'] = self._serialize.query('expand', expand, 'str')
        content = self._serialize.body(document, '[JsonPatchOperation]')
        response = self._send(http_method='POST',
                              location_id='62d3d110-0047-428c-ad3c-4fe872c91c74',
                              version='6.0-preview.3',
                              route_values=route_values,
                              query_parameters=query_parameters,
                              content=content,
                              media_type='application/json-patch+json')
        return self._deserialize('WorkItem', response)


print('\n\n')

1 Ответ

1 голос
/ 04 марта 2020

Вы можете использовать как python клиентская библиотека API , так и Restful API для создания рабочих элементов. Пожалуйста, проверьте следующие примеры:

1, используйте python клиентскую библиотеку API. Пожалуйста, проверьте create_work_item метод для получения дополнительной информации.

from azure.devops.connection import Connection
from msrest.authentication import BasicAuthentication
from azure.devops.v5_1.py_pi_api import JsonPatchOperation

token = 'PAT'
team_instance = 'https://dev.azure.com/{OrganizationName}'
credentials = BasicAuthentication("", token)
connection = Connection(base_url=team_instance, creds=credentials)

wit_client = connection.clients.get_work_item_tracking_client()

def createworkitem():
    documents = []

    # add title field
    documents.append(JsonPatchOperation(from_=None,op='add',path="/fields/System.Title",value="i am created by python client"))
    # add assignTo field
    documents.append(JsonPatchOperation(from_=None,op='add',path="/fields/System.AssignedTo",value="User DisplayName"))

    result = wit_client.create_work_item(documents, "{ProjectName}", 'Product Backlog Item', validate_only=None, bypass_rules=None, suppress_notifications=None, expand=None)
    print(result)


if __name__ == "__main__":
   createworkitem()

2, Используйте Restful API, Рабочий элемент - Создать

import requests
import base64

if __name__ == "__main__":

    pat = '{PAT}'
    authorization = str(base64.b64encode(bytes(':'+pat, 'ascii')), 'ascii')

    headers = {
    'Content-Type': 'application/json-patch+json', #specify the content-type
    'Authorization': 'Basic '+authorization
    } 

    url="https://dev.azure.com/{OrganizationName}/{ProjectName}/_apis/wit/workitems/$Product Backlog Item?api-version=5.1"

    body = [{
    "op": "add",
    "path": "/fields/System.Title",
     "value": "Sample from python api"
    },
    {
    "op": "add",
    "path": "/fields/System.AssignedTo",
     "value": "User Name"
    }]

    response = requests.post(url, json = body, headers=headers)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...