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

5
我们有一个自动构建系统,能够生成经过回归测试的软件包,并将其打包成一个整洁的安装程序,准备供最终用户下载和部署。我们通过redmine跟踪最终用户支持请求/错误报告。迄今为止,我们通过Web界面手动将软件包上传到相应的redmine项目的“文件”部分。
我想要做的是自动化这个步骤。我认为这需要几行Ruby代码来与redmine的数据库进行交互。我对redmine的内部完全不了解。 :)
基本上,我想要一个类似于…的东西。
mv package-x.y.z.tbz /usr/local/redmine/files/

作为一个 Ruby(或任何适合需要的语言)脚本,它可以创建正确的文件名,并在 redmine 的数据库中注册该文件,以便它显示出来,就好像是通过 Web 接口手动上传的一样。
祝福!

@Zoredache:为什么是ServerFault?我的意思是,显然它不属于SO或SU,但是... - dmckee --- ex-moderator kitten
4个回答

3
我以前也曾因此类问题对Redmine感到沮丧。但在我深入探究之前,请问您是否有使用“文件”部分的特定原因?似乎其他工具(例如SSH / SFTP用于上传到可访问HTTP的某个位置)可能更适合您的需求。它还可以轻松地进行脚本化。只需将人们指向某个常量URL,如http://yourcompany.com/productname-current.zip
如果您确实需要使用Redmine来管理此内容,则可以尝试Mechanize:http://mechanize.rubyforge.org/。他们应该也有RESTful API,但我从未使用过。

唯一的原因就是我希望把所有东西都放在一个地方。谢谢提供Mechanize链接,我会去查看的。 - the Ritz

2

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

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接