7

在我的公司,我们最近开始使用Rally作为我们的项目管理工具。最初,我们团队外部的某个人投入了大量时间,使用与我们团队现有方案不相符的命名约定手动创建迭代。我不想让这个可怜的灵魂一个一个地手动删除这些空迭代,我想使用 Rally 的 REST API 自动化这个过程。简而言之,我们需要删除这 100 多个空迭代,这些迭代跨越 3 个不同的项目(它们都共享一个共同的父项目)。

我花了一些时间研究rally-rest-api ruby​​ gem,虽然我有一些有限的 Ruby 经验,但 API 的Query接口仍然让我感到困惑,而且我在理解它时遇到了一些麻烦。我知道我的正则表达式想要什么,但我只是不知道如何将它提供给查询。

这是我到目前为止所拥有的:

require 'rubygems'
require 'rally_rest_api'

rally = RallyRestAPI.new(:username => "myuser", 
                         :password => "mypass")
regex = /ET-VT-100/    
# get all names that match criteria
iterations  = rally.find(:iteration) { "query using above regex?" }
# delete all the matching iterations
iterations.each do |iteration|
  iteration.delete    
end

任何指向正确方向的指针都将不胜感激。我觉得我快到了。

4

2 回答 2

8

几个月前,当我想重命名一大组迭代时,我不得不做类似的事情。

首先,确保与您进行身份验证的用户至少在您要从中删除迭代的所有项目中分配了“编辑”角色。此外,如果您的工作区中有任何您没有读取权限的项目,您将必须首先提供一个项目元素以供查询开始。(您甚至可能不知道它们,您组织中的其他人可能已经创建了它们)。

以下获取对项目的引用,然后使用指定的正则表达式循环遍历迭代:

require 'rubygems'
require 'rally_rest_api'

rally = RallyRestAPI.new(:username => "myuser", 
                         :password => "mypass")

# Assumes all projects contain "FooBar" in name
projects  = rally.find(:project) { contains :name, "FooBar"}
projects.each do |project|
  project.iterations.each do |iteration|
    if iteration.name =~ /ET-VT-100/
      iteration.delete
    end  
  end
end
于 2011-02-08T01:41:43.297 回答
4

尝试:

iterations = rally.find(:iteration) { contains :name, "ET-VT-100" }

这假设迭代的名称中有 ET-VT-100,您可能需要查询其他字段。REST api 不支持正则表达式,afaict。

于 2011-02-08T01:13:09.503 回答