2010-06-30 41 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 
相關問題