Comme j'ai pu implémenter le déploiement automatique (vers EC2 d'AWS) dans l'application rails en cours de création, je voulais automatiser le test et le déployer de Circle CI au déploiement (environnement CI / CD), je l'ai donc implémenté.
La mise en œuvre elle-même a été faite en se référant à l'article du prédécesseur. [Circle CI] rails5.2 / Capistrano / Déploiement automatique sur AWS par environnement CICD
J'ai essayé le déploiement automatique avec CircleCI + Capistrano + AWS (EC2) + Rails
L'article ci-dessus a une bonne explication, y compris le code, je vais donc laisser ici un mémorandum sur l'erreur dont je suis personnellement tombé amoureux.
CircleCI 2.0 Capistrano 3.14.1 Ruby 2.6.5 Rails 6.0.0
Erreur lors de l'exécution du test
Error reading historical timing data: file does not exist
Requested weighting by historical based timing, but they are not present. Falling back to weighting by name.
No examples found.
bundler: failed to load command: rspec (/home/circleci/circleci-demo-ruby-rails/vendor/bundle/ruby/2.5.0/bin/rspec)
LoadError: cannot load such file -- rspec_junit_formatter
En conclusion, ajoutez rspec_junit_formatter au gemfile.
Gemfile
group :test do
gem 'rspec_junit_formatter' #ajouter à
end
Selon le fonctionnaire
Test metadata is not automatically collected in CircleCI 2.0 until you enable the JUnit formatters. For RSpec, Minitest, and Django, add the following configuration to enable the formatters Référence officielle
Apparemment, CircleCI collecte les résultats des tests à partir de fichiers XML. Cependant, il ne collecte pas automatiquement, mais il semble qu'il sera automatiquement aspiré en insérant ces formateurs JUnit.
Erreur lors de l'exécution du déploiement de la production de la limite d'exécution du bundle
cap aborted!
SSHKit::Runner::ExecuteError: Exception while executing as ec2-user@××××××××××: Authentication failed for user ec2-user@××××××××××
Caused by:
Net::SSH::AuthenticationFailed: Authentication failed for user ec2-user@××××××××××
Il y a deux possibilités que j'ai énumérées
Pour vérifier 1, essayez de vous connecter à CircleCI avec ssh et voyez si vous pouvez vous connecter à EC2 depuis l'intérieur du conteneur. (Reportez-vous ici. Comment établir une connexion SSH avec l'environnement de test Circle CI)
Lorsque vous appuyez sur la bascule de Rerun sur l'écran de construction, il apparaîtra comme indiqué dans l'image ci-dessous, alors appuyez sur "Rerun Job with SSH".
Ensuite, la clé publique sera transmise, donc connexion ssh depuis le terminal.
#connexion ssh au cercle ci ok
circleci@××××××××××:~$
#Connexion SSH à ec2
circleci@××××××××××:~$ ssh -i <keypair> ec2-user@<IP address>
#Connexion ssh ok avec la clé définie dans le cercle ci à ec2
[ec2-user@ip-×××××××××× ~]$
Le fait que j'ai pu me connecter à ec2 signifie qu'au moins la clé que j'ai définie est correcte, donc pour le moment, "** La clé ssh définie dans Circle CI est erronée **" semble être correcte.
Ensuite, assurez-vous que vous avez spécifié la mauvaise clé à utiliser lors du déploiement avec ** Capistrano dans 2 **. Tout d'abord Vérifiez les spécifications du côté Capistrano.
deploy.rb
set :ssh_options, auth_methods: ['publickey'],keys:['~/.ssh/id_rsa']
Ensuite, vérifiez quel nom le jeu de clés ssh dans Circle CI est enregistré.
#Connexion SSH au cercle ci
circleci@××××××××××:~$ cd .ssh
circleci@××××××××××:~/.ssh$ ls
config id_rsa id_rsa_×××××××××× known_hosts
#plus haut(id_rsa_××××××××××)Ajouté dans les paramètres cirleci
Il semble que la clé ssh enregistrée soit celle avec l'empreinte digitale ajoutée. Après tout, cela a été causé par une mauvaise spécification de la clé utilisée lors du déploiement avec ** Capistrano ** sur 2.
deploy.rb
#Changer avant
set :ssh_options, auth_methods: ['publickey'],keys:['~/.ssh/id_rsa']
#Après le changement(l'empreinte digitale est ":Ce qui est omis)
set :ssh_options, auth_methods: ['publickey'],keys:['~/.ssh/id_rsa_×××××××××']
Avec cela, la construction a réussi et le déploiement a été terminé.
En ce qui concerne les problèmes de sécurité tels que les empreintes digitales et les clés publiques, cela a toujours tendance à être compliqué. Il semble que les notifications de relâchement puissent être effectuées après le déploiement, alors je pense que je vais l'essayer.
Recommended Posts