背景

因工作需要,现需要将jira切换到微软的TFS(Team Foundation Server),并自动化创建TFS的任务(即 Work Item)。根据该需求,我首先使用了它的REST API进行尝试,但发现有些麻烦,后面找到了一个python库dohq-tfs,该库文档友好,操作简单方便,很适合快速的开发相应的脚本。

条件准备

1. 安装库

使用pip安装dohq-tfs库,如下:

pip install dohq-tfs

2. 获取Token

登录到TFS系统,点击个人头像,找到安全性选项,在安全性选项下添加一个“个人访问令牌”,即个人token,复制该token信息,后续脚本中要用到。(经测试通过dohq-tfs库创建Work Item时直接使用用户和密码无法成功,而使用token却是可以的)

操作TFS

我们知道创建Work Item肯定是在TFS的某个项目下进行创建的。这里需要说明的是,无论是通过脚本创建work item还是获取work item,首先需要知道work item里面有哪些字段信息。我这里获取Work Item的字段信息方法是: 先手动在TFS上创建一个Work Item,然后获取该Work Item的API即可知道Work Item有哪些字段信息。例如:我在TFS系统(网址为https://tfshost.com.cn/tfs/)的名为XB的项目下创建了一个任务项(Work Item),该任务项的id为233,则该Work Item的api一般为:“https://tfshost.com.cn/tfs/XB/_apis/wit/workitems/233?api-version=1.0&api-version=1.0” (TFS官网也有Work Item的api组成介绍)。该api网址返回的是一些json格式的数据信息,具体如下:

{"id":233,
"rev":5,
"fields":{"System.AreaPath":"XB",
"System.TeamProject":"XB",
"System.IterationPath":"XB",
"System.WorkItemType":"Task",
"System.State":"New",
"System.Reason":"New",
"System.AssignedTo":"张三",
"System.CreatedDate":"2020-03-09T02:16:28.847Z",
"System.CreatedBy":"张三",
"System.ChangedDate":"2020-03-09T07:01:45.317Z",
"System.ChangedBy":"张三",
"System.Title":"自动创建的任务",
"Microsoft.VSTS.Common.StateChangeDate":"2020-03-09T02:16:28.847Z",
"Microsoft.VSTS.Common.Priority":2,
"Microsoft.VSTS.Scheduling.FinishDate":"2020-03-25T16:00:00Z",
"Microsoft.VSTS.Scheduling.OriginalEstimate":20.0,
"Microsoft.VSTS.Scheduling.CompletedWork":20222.0,
"System.Description":"这是一个使用脚本自动创建tfs的任务",
"System.Tags":"测试"
},
...
}

上面只列出了一部分,通过上面信息我们知道,一个工作项中,状态信息对应的字段是:System.State,指派人对应的字段是:System.AssignedTo,标题对应的字段是:System.Title等等等等。知道了这些,我们就能得心应手的使用python库操作TFS了。
下面是对操作TFS的Work Item的一些总结,我只对一些常用功能进行了封装。(运行环境python3.6或以上)

from tfs import TFSAPI, TFSClientError# 声明在哪个项目下操作Work Item
project = 'XB'
# token信息
token = '64ugrjrfxwweazg5yd2cn3ulwm4tuqebdxkldyctabwihpqbnmpo'client = TFSAPI('https://tfshost.com.cn/tfs/', project=project, pat=token)# 获取某个work item 的信息
def get_tfs_fields(work_id: int):""":param work_id::return:"""workitem = client.get_workitem(work_id)# 获取workitem id# print(workitem.data['id'])field_names = workitem.field_names# print(workitem.revisions)for field_name in field_names:print(f'{field_name}:{workitem.get(field_name)}')def create_tfs_task(fields: dict, work_type: str = 'Task') -> int:"""创建一个work item:param work_type: 任务类型:param fields: {'System.Title': '自动创建任务','System.Description': '这是一个使用脚本自动创建tfs的任务','System.AssignedTo': '张三',}:return:"""try:workitem = client.create_workitem(work_type, fields)except TFSClientError as e:print(f'error:{e}')return 0else:# print(workitem.get('AssignedTo'))# print(workitem.id)return int(workitem.id)def add_child_task(parent_id: int, child_id: int):"""给父任务添加子任务:param parent_id: 父任务ID:param child_id: 子任务ID:return:"""try:parent_workitem = client.get_workitem(parent_id)child_workitem = client.get_workitem(child_id)parent_link_raw = [{"rel": "System.LinkTypes.Hierarchy-Reverse","url": parent_workitem.url,"attributes": {"isLocked": False}}]child_workitem.add_relations_raw(relations_raw=parent_link_raw)except TFSClientError as e:print(f'error:{e}')return Falseelse:return Truedef update_tfs_task(work_id: int, data: dict):"""更新work item 信息:param work_id::param data:{"System.State": "进行中"}:return:"""try:workitem = client.get_workitem(work_id)# workitem['System.State'] = "进行中"for key, value in data.items():workitem[key] = valueexcept TFSClientError as e:print(f'error:{e}')def search_tfs_task(title: str, work_type: str = 'Task'):"""根据条件查询work item 信息,查询语句可根据自己需求定制,这里只是列了根据标题和任务类型查询:param work_type::param title::return:"""query = f"""SELECT [System.Id],[System.WorkItemType]FROM workitemsWHERE[System.WorkItemType] = '{work_type}' AND [System.Title] = '{title}'ORDER BY[System.ChangedDate]"""try:wiql = client.run_wiql(query)ids = list(wiql.workitem_ids) or []# print(f"Found WI with ids={ids}")# # raw = wiql.result# workitems = wiql.workitems# print(workitems[0]['Title'])except Exception as e:print(f'error:{e}')return Falseelse:return ids

更多操作方法请查看官网

python使用dohq-tfs操作TFS(Team Foundation Server)的Work Item相关推荐

  1. 您的用户账户没有连接到http://192.168.0.112:8080/tfs上的team foundation server的权限

    此问题由权限控制引起,若链接tfs时,出现此错误,可详细检查一下几点权限是否正确: 1.是否将该用户加入到域用户中,一般由公司运维人员负责,将新员工的计算机加入到域用户中: 2.服务器上已经把用户加入 ...

  2. TFS(Team Foundation Server)介绍和入门

    在本文的两个部分中,我将介绍Team Foundation Server的一些核心特征,重点介绍在本产品的日常应用中是如何将这些特性结合在一起使用的. 作为一名软件开发人员,在我的职业生涯中,我经常会 ...

  3. TFS(Team Foundation Server)敏捷使用教程

    一.引言 1 中国式软件过程的坏味道  RUP,CMM/CMMI到了中国就变了味...... 2 Team Foundation Server  TFS是软件开发的协作平台,它要解决的首要问题是团队成 ...

  4. 让Team Foundation Server/TFS自动记住用户名密码解决方案

    在使用Team Foundation Server(以下简称TFS) 的时候,在每次打开Visual Studio TFS时候,需要输入用户名和秘密,比较麻烦. 现提供一种方法可以解决这个问题: 依次 ...

  5. TFS - Team Foundation Server 的安装记录

    因为要准备全面进入DotNET开发,所以首先就要构建一个环境. 微软推出的 Team Foundation Server 用于支持团队开发,自然纳入学习范围之中. 安装之前,查看了一些资料表明,安装它 ...

  6. 好东西,将你的英文版TFS变为中文版?:Visual Studio 2005 Team Foundation Server 语言更改包...

    Visual Studio 2005 Team Foundation Server 语言更改包 快速描述 该语言更改包为国际客户提供了必要的说明和工具,以便他们将现有的 Visual Studio 2 ...

  7. Team Foundation Server的回滚操作

    VSTF Rollback 操作 最近遇到要把有些项目需要做回滚操作,发现TFS的UI上没有回滚的操作. 经过百度,查到一个CSDN上的博主发了一种方法,经过验证,那种方法是错误的: 他通过先获取指定 ...

  8. 安装python报错0x80072ee7_tfs2018官方版下载-team foundation server 2018 v2018.1 官方最新版 - 安下载...

    tfs2018(team foundation server 2018)是一款可以为小型团队以及企业提供支持开发和持续部署软件的服务和工具,新版本支持TFS代理中的GVFS缓存,TFS代理可用作Git ...

  9. Team Foundation Server Beta3 安装指南

    Team Foundation Server Beta3 安装指南 发布日期: 11/11/2005 | 更新日期: 12/15/2005 本页内容 1.概述 2.安装的安全 3.单服务器的安装过程 ...

最新文章

  1. 父域与子域之的信任关系
  2. 设置IE安全并打开自动仿冒网站筛选器和IE安全设置
  3. 数学--数论--HDU1222 狼和兔子(最大公约数)
  4. 世界上最诡异的画,到底为何让无数人闻风丧胆?
  5. lambda函数,函数符_为什么您永远不应该在Lambda函数中使用print()
  6. linux mysql提交_MySQL 事务提交过程
  7. IntelliJ IDEA编码设置
  8. java http连接es_连接es
  9. hdfs复制文件夹_Hadoop框架:HDFS简介与Shell管理命令
  10. 十六进制数用int吗_你真的精通C语言吗?来解这十道C语言迷题试试吧!
  11. birt脚本for循环语句_Python入门第7课,循环结构学习,for语句range函数的3种用法
  12. python运维之路
  13. 使用wordPress搭建个人博客
  14. Acer4745G笔记本蓝牙驱动安装
  15. MyBatis Generator生成代码的几种方式
  16. python ADF单位根检验,序列平稳性检验
  17. pppd详解_pppd拨号脚本说明文档
  18. React + Springboot + Quartz,从0实现Excel报表自动化
  19. [Python中pandas实现独热编码][pd.get_dummies()函数]
  20. java通过电话号码获取归属地,区号,邮编

热门文章

  1. 在线代码对比/匹配 代码对比 在线文本比较
  2. 一文掌握SPFA算法
  3. 单片机c语言中io取反,单片机小白学步(21) IO口:基本的LED和按键操作
  4. MATLAB基础(一):MATLAB概述
  5. 南邮 | 汇编实验 3.17:用户键入“通行字”,显示欢迎界面
  6. php详情页模板怎么做,WordPress自定义文章详情页模板
  7. 一、CentOS7启动U盘制作
  8. snb格式电子书制作教程
  9. 微信小程序图片空白问题处理
  10. ssm+Vue计算机毕业设计学生在线请假管理系统(程序+LW文档)