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
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.)
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.
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
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'