web-dev-qa-db-fra.com

Passer des paramètres à Capistrano

Je cherche la possibilité d'utiliser Capistrano comme solution de déploiement générique. Par "générique", j'entends non-Rails. Je ne suis pas satisfait de la qualité de la documentation que je trouve, bien que, certes, je ne regarde pas ceux qui présument que vous déployez Rails. Je vais donc essayer de modifier quelque chose à partir de quelques exemples, mais je suis confronté à quelques problèmes dès le début.

Mon problème est que cap deploy n'a pas assez d'informations pour faire quoi que ce soit. Il est important de noter que la balise correspondant à la version que je souhaite déployer manque et que doit être transmis à la ligne de commande.

L'autre problème est de savoir comment je spécifie mon référentiel git. SSH accède à notre serveur git sur le compte de l'utilisateur, mais je ne sais pas comment changer deploy.rb pour utiliser l'identifiant de l'utilisateur dans l'URL de 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 référentiel git comme r2s1. En outre, supposons que l'utilisateur "johndoe" se charge de déployer le système. Pour accéder au référentiel, il doit utiliser l'URL [email protected]:app. L'URL distante du référentiel dépend donc de l'ID utilisateur.

Les lignes de commande pour obtenir les fichiers souhaités seraient les suivantes:

git clone [email protected]:app
cd app
git checkout r2s1
30
Daniel C. Sobral

Mise à jour: Pour Capistrano 3, voir réponse de scieslak ci-dessous .


Comme l'a dit jarrad, capistrano-ash est un bon ensemble de base de modules d'assistance permettant de déployer d'autres types de projets, bien que cela ne soit pas nécessaire à la fin de la journée. C'est juste un langage de script et la plupart des tâches sont effectuées avec les commandes système et finissent par ressembler à un script Shell.

Pour transmettre des paramètres, vous pouvez définir l'indicateur -s lors de l'exécution de cap afin de vous donner une paire clé-valeur. Commencez par créer une tâche comme celle-ci.

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

Puis commencez votre tâche comme ça.

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

Pour la dernière partie. Je vous recommande de configurer un accès sans mot de passe à l'aide de clés ssh sur votre serveur. Mais si vous voulez le prendre à partir de l'utilisateur actuellement connecté. Vous pouvez faire quelque chose comme ça.

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

UPDATE: Édité pour fonctionner avec les dernières versions de Capistrano. Le tableau de configuration n'est plus disponible.

Paramètres globaux: voir les commentaires Utilisez set: branch, fetch (: branch, 'a-default-value') pour utiliser les paramètres globalement. (Et passez-les avec -S à la place.)

47
Jamie Sutherland

Je suggérerais d'utiliser des variables ENV.

Des choses comme ça (commande):

$ GIT_REPO="[email protected]: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 jetez un coup d'œil au https://github.com/capistrano/capistrano/wiki/2.x-Multistage- Extension , cette approche vous sera peut-être utile.

9
deadrunk

Comme Jamie l'a déjà montré, vous pouvez transmettre des paramètres aux tâches avec l'indicateur -s. Je veux vous montrer comment vous pouvez également utiliser une valeur par défaut.

Si vous souhaitez utiliser les valeurs par défaut, vous devez utiliser fetch au lieu de ||= ou rechercher 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
tbuehl

Recherchez capistrano-ash pour une bibliothèque facilitant le déploiement non-Rails. Je l'utilise pour déployer une application PyroCMS et cela fonctionne très bien.

Voici un extrait de mon Capfile pour ce projet:

# deploy from git repo
set :repository, "[email protected]: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. Fournir plus de détails et je serais heureux d'aider.

EDIT après l'exemple donné:

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

Ensuite, chaque personne ayant des privilèges de déploiement peut ajouter les éléments suivants à son fichier local ~/.caprc:

set :scm_user, 'someuser'
0
jarrad