5

我们有一个自动构建系统,可以输出包,经过回归测试并打包到一个整洁的安装程序中,准备好供最终用户进行 d/l 和部署。我们通过 redmine 跟踪最终用户支持请求/错误报告。到目前为止,我们手动将包上传到相应的。redmine 项目的“文件”部分,通过 Web 界面。

我想做的是自动化这一步。我想这需要几行 Ruby 来与 redmine 的数据库交互。我对 redmine 的内部结构知之甚少。:)

基本上我想要相当于一个

mv package-x.y.z.tbz /usr/local/redmine/files/

作为一个 Ruby(或任何适合需要的语言)脚本,它创建正确的文件名并将文件注册到 redmine 的数据库中,因此它看起来好像是通过 Web 界面手动上传的。

干杯!

4

4 回答 4

3

我以前对 Redmine 对这样的事情感到沮丧。但在我走得更远之前:您为此使用“文件”部分是否有特定原因?似乎另一种工具(例如用于上传到 HTTP 可访问的地方的 SSH/SFTP)可能更适合您的需求。它也很容易编写脚本。只需将人们指向一些恒定的 URL,例如http://yourcompany.com/productname-current.zip

如果你真的需要使用 Redmine 来管理这个,你可以查看 Mechanize: http: //mechanize.rubyforge.org/。他们也应该有一个 RESTful API,但我从未使用过它。

于 2010-07-01T02:39:27.763 回答
2

找到了这个帖子,希望对你有帮助

自动化包装和 RedMine

于 2011-11-27T07:00:52.623 回答
0

如前所述,您可以为此使用 Mechanize。

有一个由 Gert van Dijk 编写的 Python 脚本:https ://github.com/gertvdijk/redmine-file-uploader

要使用它,您必须先安装 Python Mechanize 包:

easy_install mechanize

如果你更喜欢 Ruby,你可以使用:

require 'mechanize'

# Replaces \ with / and removes "
ARGV.map!{|a|a.gsub('\\','/').gsub(/^"(.+)"$/,'\\1')}

filename    = ARGV[0] || abort('Filename must be specified')
puts "File:              #{filename}"
url         = ARGV[1] || abort('Redmine URL must be specified')
puts "Redmine URL:       #{url}"
username    = ARGV[2] || abort('Redmine username must be specified')
puts "Username:          #{username}"
password    = ARGV[3] || abort('Redmine password must be specified')
puts "Password:          #{'*' * password.length}"
project     = ARGV[4] || abort('Redmine project must be specified')
puts "Project:           #{project}"

login_page_path = '/login'
files_page_path = '/projects/' + project + '/files'

agent = Mechanize.new

# No certificate verification (I had to use this hack because our server is bound to custom port)
# agent.agent.http.verify_mode = OpenSSL::SSL::VERIFY_NONE

agent.get(URI.join(url, login_page_path)) do |login_page|
  login_page.form_with(:action => login_page_path) do |login_form|
    login_form.username = username
    login_form.password = password
  end.submit
end

agent.get(URI.join(url, files_page_path + '/new')) do |upload_page|
  upload_page.form_with(:action => files_page_path) do |upload_form|
    upload_form.file_uploads.first.file_name = filename
  end.submit
end

并且不要忘记先安装 gem:

gem install mechanize
于 2013-06-27T13:45:09.900 回答
0

我有点晚了,但是我用 Perl 写了一个 Redmine 上传工具,使用 WWW::Mechanize 模块。请在http://github.com/subogero/redgit上找到它

于 2013-05-24T16:02:20.840 回答