2010-06-30 38 views
5

我们有一个自动构建系统,可以将包进行回归测试&包装成一个整洁的安装程序,为最终用户准备d/l &部署。 我们通过redmine跟踪最终用户支持请求/错误报告。到目前为止,我们手动将这些软件包上传到了resp。 redmine项目的'文件'部分,通过Web界面。通过命令行将文件添加到redmine中

我想要做的是自动化这一步。 我想这将需要几行Ruby来与redmine的db接口。我对redmine的内部没有任何认识。 :)

基本上我想要的

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

相当于为红宝石(或任何语言适合需要)脚本创建正确的文件名,并登记在管理平台的数据库文件,以便它显示为如果它已通过Web界面手动上传。

干杯!

+0

属于serverfault – Zoredache 2010-06-30 21:38:12

+0

@Zoredache:为什么serverfault?我的意思是,明确它不属于SO或SU,但... – dmckee 2010-07-02 19:56:10

回答

3

我之前对Redmine感到沮丧。但在我走得更远之前:是否有一个特定的原因,为什么你使用这个文件部分?看起来另一种工具(例如上传到HTTP可访问的SSH/SFTP)可能更适合您的需求。它也很容易编写脚本。只要人们指向一些不变的URL,如http://yourcompany.com/productname-current.zip

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

+0

唯一的原因是我真的想要在一个地方的一切。感谢Mechanize链接,我检查了一下 – 2010-07-01 09:34:14

0

如前所述,您可以使用机械化。

有由作者Gert van Dijk的书面Python脚本:https://github.com/gertvdijk/redmine-file-uploader

要使用它,你必须安装Python机械化包装第一:

easy_install mechanize 

如果你喜欢红宝石,你可以使用:

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 install mechanize 
相关问题