首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JIRA + Savon + Ruby问题

JIRA + Savon + Ruby问题
EN

Stack Overflow用户
提问于 2011-08-29 01:39:14
回答 1查看 602关注 0票数 0

我正在尝试将我的新应用程序与JIRA集成,以管理我们客户的支持票证。我所设想的系统是在一个before_filter中从JIRA中收集用户的帐户,从中我可以拉出一个帐户列表,如果他们没有帐户,那么我们将根据他们在Rails应用程序中的详细信息创建一个帐户。问题是,我在做一些事情时遇到了很大的问题,比如从jira-users组中删除用户,然后将他们添加到我为客户准备的一个单独的组中,称为customer-support。这是我目前拥有的代码:

代码语言:javascript
复制
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。任何帮助都是非常感谢的。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-29 07:36:43

也许您需要显式地发送名称?

代码语言:javascript
复制
:group => RemoteGroup.find('jira-users').name

而不是这个

代码语言:javascript
复制
:group => RemoteGroup.find('jira-users')

如果您愿意进行一些重写,您可以尝试使用Ruby 1.9-compatible fork of jira4r

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7222660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档