2010-06-30 14 views
5

Tenemos un sistema de compilación automático que arroja paquetes, regresión-probado & envuelto en un instalador ordenado, listo para usuarios finales para implementar d/l &. Realizamos un seguimiento de las solicitudes de asistencia del usuario final/informes de errores a través de redmine. Hasta ahora hemos subido los paquetes manualmente al resp. Sección 'Archivos' del proyecto Redmine, a través de la interfaz web.Agregando archivos a redmine a través de la línea de comando

Lo que me gustaría hacer es automatizar este paso. Imagino que esto requeriría unas pocas líneas de Ruby para interactuar con el db de redmine. Tengo cero conocimiento sobre los internos de Redmine. :)

Quiero básicamente el equivalente de un

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

como Ruby (o cualquier otro idioma se adapte a la necesidad) script que crea el nombre de archivo correcto y registra el archivo en dB de Redmine por lo que aparece como si se ha cargado a través de la interfaz web, de forma manual.

¡Salud!

+0

pertenece a serverfault – Zoredache

+0

@Zoredache: ¿por qué serverfault? Quiero decir, claro que no pertenece a SO o SU, pero ... – dmckee

Respuesta

3

He estado frustrado con Redmine sobre cosas como esta antes. Pero antes de ir mucho más allá: ¿hay alguna razón específica por la que estás usando la sección Archivos para esto? Parece que otra herramienta (como SSH/SFTP para cargar en un lugar accesible para HTTP) podría ser una mejor opción para sus necesidades. También sería fácilmente secuenciable. Simplemente señale a las personas a una URL constante como http://yourcompany.com/productname-current.zip.

Si realmente necesita utilizar Redmine para gestionar esto, puede consultar Mechanize: http://mechanize.rubyforge.org/. También deberían tener una API RESTful, pero nunca la he usado.

+0

La única razón es que realmente quiero todo en un solo lugar. Gracias por el enlace de Mechanize, lo compruebo –

0

Como ya se ha indicado, puede usar Mechanize para eso.

Hay un script en Python escrito por Gert van Dijk: https://github.com/gertvdijk/redmine-file-uploader

Para usarlo usted tendrá que instalar Python Mechanize primer paquete:

easy_install mechanize 

Si prefiere Rubí, puede utilizar:

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 

Y no se olvide de instalar la gema primero:

gem install mechanize 
Cuestiones relacionadas