2010-06-30 40 views
5

Chúng tôi có hệ thống xây dựng tự động phun ra gói, kiểm tra hồi quy & được gói gọn vào bộ cài đặt gọn gàng, sẵn sàng cho người dùng cuối d/l & triển khai. Chúng tôi theo dõi các yêu cầu hỗ trợ người dùng cuối/báo cáo lỗi qua redmine. Cho đến nay, chúng tôi đã tải các gói thủ công lên thẻ. Phần 'Tệp' của dự án redmine, thông qua giao diện web.Thêm tệp vào redmine qua dòng lệnh

Điều tôi muốn làm là tự động hóa bước này. Tôi tưởng tượng điều này sẽ đòi hỏi một vài dòng Ruby để giao tiếp với db của redmine. Tôi không có kiến ​​thức về ruột của redmine. :)

Về cơ bản tôi muốn tương đương với một

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

như một Ruby (hoặc bất kỳ ngôn ngữ phù hợp với nhu cầu) kịch bản tạo ra tên tập tin ngay và đăng ký các tập tin trong db redmine, do đó nó xuất hiện như thể nó đã được tải lên thông qua giao diện Web, theo cách thủ công.

Chúc mừng!

+0

thuộc về serverfault – Zoredache

+0

@Zoredache: why serverfault? Ý tôi là, rõ ràng nó không thuộc về SO hay SU, nhưng ... – dmckee

Trả lời

3

Tôi đã thất vọng với Redmine về những thứ như thế này trước đây. Nhưng trước khi tôi đi nhiều hơn nữa: có một lý do cụ thể tại sao bạn đang sử dụng phần Files cho điều này? Có vẻ như một công cụ khác (như SSH/SFTP để tải lên một nơi nào đó có thể truy cập vào HTTP) có thể phù hợp hơn với nhu cầu của bạn. Nó cũng có thể dễ dàng viết được. Chỉ cần trỏ mọi người đến một số URL không đổi như http://yourcompany.com/productname-current.zip.

Nếu bạn thực sự cần sử dụng Redmine để quản lý việc này, bạn có thể xem Cơ chế: http://mechanize.rubyforge.org/. Họ cũng nên có một API RESTful, nhưng tôi chưa bao giờ sử dụng nó.

+0

Lý do duy nhất thực sự là tôi muốn mọi thứ ở một nơi. Cảm ơn liên kết Mechanize, tôi kiểm tra nó –

0

Tôi hơi muộn, nhưng tôi đã viết một công cụ Redmine upload trong Perl, sử dụng WWW :: cơ giới hóa module. Vui lòng tìm thấy nó trên http://github.com/subogero/redgit

0

Như đã nêu, bạn có thể sử dụng Cơ giới cho điều đó.

Có một kịch bản Python được viết bởi Gert van Dijk của: https://github.com/gertvdijk/redmine-file-uploader

Để sử dụng nó, bạn sẽ phải cài đặt Python mechanize gói đầu tiên:

easy_install mechanize 

Nếu bạn thích Ruby, bạn có thể sử dụng:

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 

Và đừng quên để cài đặt đá quý đầu tiên:

gem install mechanize 
Các vấn đề liên quan