通过命令行将文件添加到redmine

时间:2010-06-30 21:07:50

标签: ruby command-line file automation redmine

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

我想做的是自动执行此步骤。 我想这需要几行Ruby来与redmine的db连接。我对redmine的内部知识一无所知。 :)

基本上我想要相当于

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

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

干杯!

4 个答案:

答案 0 :(得分:3)

我之前对Redmine感到很沮丧。但在我走得更远之前:有没有具体的原因为什么你使用文件部分呢?似乎另一个工具(例如用于上传到HTTP可访问的某个地方的SSH / SFTP)可能更适合您的需求。它也很容易编写脚本。只需将人们指向http://yourcompany.com/productname-current.zip等常量网址即可。

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

答案 1 :(得分:2)

我发现这篇文章,希望它可以帮到你

Automating packaging and RedMine

答案 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