我正在尝试将我的新应用程序与JIRA集成,以管理我们客户的支持票证。我所设想的系统是在一个before_filter中从JIRA中收集用户的帐户,从中我可以拉出一个帐户列表,如果他们没有帐户,那么我们将根据他们在Rails应用程序中的详细信息创建一个帐户。问题是,我在做一些事情时遇到了很大的问题,比如从jira-users组中删除用户,然后将他们添加到我为客户准备的一个单独的组中,称为customer-support。这是我目前拥有的代码:
def current_jira_user
# Fetch the current user in JIRA, if we don't exist, create it!
user_try = @jira.request :get_user do |soap|
soap.body = { :token => @token, :username => "#{current_user.username}" }
end
if user_try.to_hash[:get_user_response][:get_user_return][:href].nil?
# We need to create the user
@jira.request :create_user do |soap|
soap.body = {
:token => @token,
:username => "#{current_user.username}",
:password => UUID.new.to_s,
:fullName => current_user.full_name,
:email => "noreply@XXXXX.XXX" #this is such a hack to get around JIRA's "you've got an account" email
}
end
new_user = RemoteUser.find(current_user.username)
@jira.request :remove_user_from_group do |soap|
soap.body = { :token => @token, :group => RemoteGroup.find('jira-users'), :ruser => new_user }
end
@jira.request :add_user_to_group do |soap|
soap.body = { :token => @token, :group => RemoteGroup.find('customer-support'), :ruser => new_user }
end
new_user[:email] = current_user.email
@jira.request :update_user do |soap| # change their email to the valid one
soap.body = { :token => @token, :ruser => new_user }
end
new_user
else
user_try.to_hash[:get_user_response][:get_user_return]
end
end
def verify_jira_connection
# Verify that we can reach the JIRA instance
@jira = Savon::Client.new do
wsdl.document = JIRA_SOAP_URI
end
@jira.http.read_timeout = 300
@jira.http.auth.ssl.verify_mode = :none
@auth = @jira.request :login do |soap|
soap.body = { :username => JIRA_LOGIN, :password => JIRA_PASSWORD }
end
@token = @auth.to_hash[:login_response][:login_return]
end
## REMOTE CLASSES
class RemoteUser
include Savon::Model
client do
http.headers["Pragma"] = "no-cache"
http.auth.ssl.verify_mode = :none
end
namespace "http://beans.soap.rpc.jira.atlassian.com"
endpoint JIRA_SOAP_URI
basic_auth JIRA_LOGIN, JIRA_PASSWORD
actions :get_user
def self.find(username)
get_user(:username => username).to_hash
end
end
class RemoteGroup
include Savon::Model
client do
http.headers["Pragma"] = "no-cache"
http.auth.ssl.verify_mode = :none
end
namespace "http://beans.soap.rpc.jira.atlassian.com"
endpoint JIRA_SOAP_URI
basic_auth JIRA_LOGIN, JIRA_PASSWORD
actions :get_group
def self.find(group)
get_group(:groupName => group).to_hash
end
end可以很好地创建用户,但是当我调用removeUserFromGroup时,我得到的是(soapenv:Server.userException) com.atlassian.jira.rpc.exception.RemoteValidationException: group name cannot be null, needs a value。使用Ruby是因为我们使用了Jira4R 1.9.2。任何帮助都是非常感谢的。谢谢!
发布于 2011-08-29 07:36:43
也许您需要显式地发送名称?
:group => RemoteGroup.find('jira-users').name而不是这个
:group => RemoteGroup.find('jira-users')如果您愿意进行一些重写,您可以尝试使用Ruby 1.9-compatible fork of jira4r
https://stackoverflow.com/questions/7222660
复制相似问题