Transmettre les paramètres à Capistrano

J'étudie la possibilité d'utiliser Capistrano comme solution de déploiement Générique. Par "générique", je veux dire non-rails. Je ne suis pas content de la qualité de la documentation que je trouve, bien que, je l'admets, je ne regarde pas ceux qui présument que vous êtes en train de déployer des rails. Donc je vais juste essayer de pirater quelque chose basé sur quelques exemples, mais il y a quelques problèmes auxquels je fais face dès le début.

mon problème est que cap deploy n'a pas assez informations à faire quoi que ce soit. Fait important, il manque l'étiquette de la version que je veux déployer, et ce a à passer sur la ligne de commande.

l'autre problème est comment je spécifie mon dépôt git. Notre serveur git est accessible par SSH sur le compte de l'utilisateur, mais je ne sais pas comment changer deploy.rb pour utiliser l'id de l'utilisateur comme partie de L'URL scm.

alors, comment puis-je accomplir ces choses?

exemple

je veux déployer le résultat du premier sprint de la deuxième version. C'est étiqueté dans le dépôt git comme r2s1 . En outre, disons que l'utilisateur "johndoe" obtient la tâche de déployer le système. Pour accéder au dépôt, il doit utiliser l'URL johndoe@gitsrv.domain:app . Ainsi, L'URL distante du dépôt dépend de l'identifiant de l'utilisateur.

les lignes de commande pour obtenir les fichiers désirés seraient:

git clone johndoe@gitsrv.domain:app
cd app
git checkout r2s1
30
demandé sur Daniel C. Sobral 2012-04-18 23:46:28

5 réponses

a déclaré jarrad, capistrano-ash est un bon ensemble de base de modules d'aide pour déployer d'autres types de projet, bien qu'il ne soit pas nécessaire comme à la fin de la journée. C'est juste un langage de script et la plupart des tâches sont faites avec les commandes système et finissent par devenir presque script shell comme.

pour passer dans les paramètres, vous pouvez définir le drapeau-s lors de l'exécution de cap pour vous donner une paire de valeur clé. Créez d'abord une tâche comme celle-ci.

desc "Parameter Testing"
task :parameter do
  puts "Parameter test #{branch} #{tag}"
end

alors commencez votre tâche comme si.

cap test:parameter -s branch=master -s tag=1.0.0

Pour la dernière partie. Je recommande de configurer l'accès sans mot de passe en utilisant les clés ssh de votre serveur. Mais si vous voulez le prendre à partir de l'utilisateur courant connecté. Vous pouvez faire quelque chose comme cela.

desc "Parameter Testing"
task :parameter do
  system("whoami", user)
  puts "Parameter test #{user} #{branch} #{tag}"
end

mise à JOUR: Modifié pour fonctionner avec les dernières versions de Capistrano. Le tableau de configuration n'est plus disponible.

Paramètres Globaux: Voir les commentaires utiliser set :branch, fetch(:branch, 'a-default-value') pour utiliser les paramètres globalement. (Et de les transmettre avec-S à la place.)

46
répondu Jamie Sutherland 2013-10-15 19:08:05

je suggère d'utiliser des variables ENV.

il y a des Choses comme ça (commande):

$ GIT_REPO="johndoe@gitsrv.domain:app" GIT_BRANCH="r2s1" cap testing

Cap config:

#deploy.rb:
task :testing, :roles => :app do
  puts ENV['GIT_REPO']
  puts ENV['GIT_BRANCH']
end

et regardez le https://github.com/capistrano/capistrano/wiki/2.x-Multistage-Extension , peut-être cette approche sera utile pour vous aussi.

9
répondu deadrunk 2012-04-24 06:03:02

mise à Jour. En ce qui concerne les paramètres de passage à Capistrano 3 tâche seulement.

je sais que cette question est assez ancienne mais apparaît toujours en premier sur Google lors de la recherche de passer des paramètres à la tâche Capistrano. Malheureusement, la réponse fantastique de Jamie Sutherland n'est plus valable pour Capistrano 3. Avant de perdre votre temps à l'essayer sauf que les résultats à être comme ci-dessous:

cap test:parameter -s branch=master 
Sorties

:

cap aborted!
OptionParser::AmbiguousOption: ambiguous option: -s
OptionParser::InvalidOption: invalid option: s

et

cap test:parameter -S branch=master 

sorties:

invalid option: -S

les réponses valables pour Capistrano 3 fournies par @senz et Brad Dwyer vous pouvez trouver en cliquant sur ce lien d'or: Capistrano 3 tirant arguments de ligne de commande

pour plus de détails, consultez le code ci-dessous pour connaître les deux options que vous avez.

1ère option:

vous pouvez itérer des tâches avec la clé et la valeur comme vous le faites avec des hachages réguliers:

desc "This task accepts optional parameters"

task :task_with_params, :first_param, :second_param do |task_name, parameter|
  run_locally do
    puts "Task name: #{task_name}"
    puts "First parameter: #{parameter[:first_param]}"
    puts "Second parameter: #{parameter[:second_param]}"
  end
end

assurez-vous qu'il n'y a pas d'espace entre les paramètres lorsque vous appelez cap:

cap production task_with_params[one,two]

2e option:

pendant que vous appelez n'importe quelle tâche, vous pouvez assigner des variables environnementales et ensuite les appeler à partir du code:

set :first_param, ENV['first_env'] || 'first default'
set :second_param, ENV['second_env'] || 'second default'

desc "This task accepts optional parameters"
task :task_with_env_params do
  run_locally do
    puts "First parameter: #{fetch(:first_param)}"
    puts "Second parameter: #{fetch(:second_param)}"
  end
end

pour attribuer des variables environnementales, appel de la pac comme ci-dessous:

cap production task_with_env_params first_env=one second_env=two

espérons que cela vous fera gagner du temps.

7
répondu scieslak 2017-05-23 11:46:27

comme Jamie l'a déjà montré, vous pouvez passer des paramètres aux tâches avec le drapeau -s . Je veux vous montrer comment vous peut en outre utiliser une valeur par défaut.

si vous voulez travailler avec des valeurs par défaut, vous devez utiliser fetch au lieu de ||= ou vérifier pour nil :

namespace :logs do
  task :tail do
    file = fetch(:file, 'production') # sets 'production' as default value
    puts "I would use #{file}.log now"
  end
end

Vous pouvez soit exécuter cette tâche par (utilise la valeur par défaut production pour file )

$ cap logs:tail

(ou utilise la valeur cron pour file

$ cap logs:tail -s file=cron
3
répondu tbuehl 2014-05-06 10:38:26

Check out capistrano-ash pour une bibliothèque qui aide avec les rails de déploiement. Je l'utilise pour déployer une application PyroCMS et ça marche très bien.

voici un extrait de mon fichier Capfile pour ce projet:

# deploy from git repo
set :repository, "git@git.mygitserver.com:mygitrepo.git"
# tells cap to use git
set :scm, :git

je ne suis pas sûr de comprendre les deux dernières parties de la question. Donnez plus de détails et je serais ravi de vous aider.

modifier après exemple donné:

set :repository, "#{scm_user}@gitsrv.domain:app"

alors chaque personne avec des équipements de déploiement peut ajouter ce qui suit à leur ~/local.fichier caprc:

set :scm_user, 'someuser'
0
répondu jarrad 2012-04-24 01:28:25