Capistrano & Bash: commande ignorer statut de sortie
Je suis en utilisant Capistrano exécuter une tâche à distance. Ma tâche ressemble à ceci:
task :my_task do
run "my_command"
end
Mon problème est que si my_command
a une sortie de statut != 0, alors Capistrano estime qu'il a échoué et les sorties. Comment puis-je faire capistrano continuer quand la sortie lorsque le statut de sortie n'est pas à 0? J'ai changé my_command
à my_command;echo
et cela fonctionne, mais il se sent comme un hack.
Vous devez vous connecter pour publier un commentaire.
La façon la plus simple est de simplement ajouter vrai à la fin de votre commande.
Devient
Pour Capistrano 3, vous pouvez (comme l'a suggéré ici) utiliser les éléments suivants:
Le +grep+ commande ferme de non-zéro, selon ce qu'il trouve. Dans le cas où vous vous souciez de la sortie, mais ne me dérange pas si elle est vide, vous allez jeter la sortie de l'état en silence:
Normalement, je pense que la première solution est tout simplement parfait -- je voudrais faire du document lui-même tho:
Vous aurez besoin de patcher le Capistrano code si vous souhaitez faire des choses différentes avec les codes de sortie, c'est codé en dur pour lever une exception si le statut de sortie n'est pas nulle.
Voici la partie pertinente de lib/capistrano/commande.rb. La ligne qui commence avec
if (failed
... est le plus important. Fondamentalement, il dit si il y a toute différente de zéro les valeurs de retour, générer une erreur.J'ai trouver la solution la plus simple pour ce faire:
Avis:
:
est l'avis d'intention de commande de sorte que le code de sortie seront tout simplement ignorées.Je viens de rediriger STDERR et STDOUT vers /dev/null, votre
devient
cela fonctionne pour les outils unix standards assez bien, où, disons, cp ou ln peuvent échouer, mais vous ne voulez pas arrêter le déploiement sur un tel échec.
Je ne savez pas quelle version ils ont ajouté ce code, mais j'ai comme de la manipulation de ce problème à l'aide de
raise_on_non_zero_exit
C'est là que la fonctionnalité est implémentée dans la pierre.
https://github.com/capistrano/sshkit/blob/4cfddde6a643520986ed0f66f21d1357e0cd458b/lib/sshkit/command.rb#L94