我们有一个自动构建系统,可以发送包,回归测试和包装成一个整洁的安装程序,为最终用户准备d / l&部署。 我们通过redmine跟踪最终用户支持请求/错误报告。到目前为止,我们手动将包上传到resp。 redmine项目的“文件”部分,通过Web界面。
我想做的是自动执行此步骤。 我想这需要几行Ruby来与redmine的db连接。我对redmine的内部知识一无所知。 :)
基本上我想要相当于
mv package-x.y.z.tbz /usr/local/redmine/files/
作为Ruby(或任何适合需要的语言)脚本,它创建正确的文件名并在redmine的数据库中注册该文件,因此它显示为好像是通过Web界面手动上传的。
干杯!
答案 0 :(得分:3)
我之前对Redmine感到很沮丧。但在我走得更远之前:有没有具体的原因为什么你使用文件部分呢?似乎另一个工具(例如用于上传到HTTP可访问的某个地方的SSH / SFTP)可能更适合您的需求。它也很容易编写脚本。只需将人们指向http://yourcompany.com/productname-current.zip等常量网址即可。
如果您真的需要使用Redmine进行管理,可以查看Mechanize:http://mechanize.rubyforge.org/。他们也应该有一个RESTful API,但我从来没有使用它。
答案 1 :(得分:2)
我发现这篇文章,希望它可以帮到你
答案 2 :(得分:0)
我有点晚了,但是我在Perl中使用WWW :: Mechanize模块编写了一个Redmine上传工具。 请在http://github.com/subogero/redgit
上找到答案 3 :(得分: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