2010-06-30 8 views
5

Nous avons un système de compilation automatique qui crache les paquets, testés par régression & enveloppés dans un installateur soigné, prêts pour les utilisateurs finaux à déployer &. Nous effectuons le suivi des demandes de support de l'utilisateur final et des rapports de bug via redmine. Jusqu'à présent, nous avons téléchargé les paquets manuellement à la resp. Section 'Fichiers' du projet redmine, via l'interface web.Ajout de fichiers à redmine via la ligne de commande

Ce que je voudrais faire est d'automatiser cette étape. J'imagine que cela nécessiterait quelques lignes de Ruby pour s'interfacer avec le db de redmine. Je n'ai aucune connaissance des internes de redmine. :)

Fondamentalement, je veux l'équivalent d'un

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

comme Ruby (ou quelle langue convient la nécessité) script qui crée le droit nom de fichier et enregistre le fichier dans le db de Redmine il apparaît comme si il a été téléchargé via l'interface Web, manuellement.

À la votre!

+0

appartient à serverfault – Zoredache

+0

@Zoredache: pourquoi serverfault? Je veux dire, c'est clair que ça n'a pas sa place sur SO ou SU, mais ... – dmckee

Répondre

3

J'ai été frustré avec Redmine à propos de choses comme ça avant. Mais avant d'aller plus loin: y a-t-il une raison spécifique pour laquelle vous utilisez la section Fichiers pour cela? Il semble qu'un autre outil (tel que SSH/SFTP pour le téléchargement vers un endroit accessible à HTTP) soit mieux adapté à vos besoins. Ce serait aussi facilement scriptable. Il suffit de diriger les gens vers une URL constante comme http://yourcompany.com/productname-current.zip.

Si vous avez vraiment besoin d'utiliser Redmine pour gérer cela, vous pouvez consulter Mechanize: http://mechanize.rubyforge.org/. Ils devraient aussi avoir une API RESTful, mais je ne l'ai jamais utilisée.

+0

La seule raison est vraiment que je veux tout en un seul endroit. Merci pour le lien Mechanize, je le vérifie –

0

Je suis un peu en retard, mais j'ai écrit un outil de téléchargement Redmine en Perl, en utilisant le WWW :: Module mécaniser. S'il vous plaît le trouver sur http://github.com/subogero/redgit

0

Comme déjà indiqué, vous pouvez utiliser Mechanize pour cela.

Il y a un script Python écrit par Gert van Dijk: https://github.com/gertvdijk/redmine-file-uploader

Pour l'utiliser, vous devez installer le paquet Python Mechanize premier:

easy_install mechanize 

Si vous préférez Ruby, vous pouvez utiliser:

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 

Et ne pas oublier d'installer bijou d'abord:

gem install mechanize