Un mémorandum d'erreur survenu lors de la création d'un environnement CI / CD [Rails + CircleCI + Capistrano + AWS]

introduction

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.

environnement

CircleCI 2.0 Capistrano 3.14.1 Ruby 2.6.5 Rails 6.0.0

① On dit qu'il n'y a pas de rspec_junit_formatter

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.

(2) Impossible de se connecter via ssh à ec2 pendant le déploiement.

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

  1. ** La clé ssh définie dans Circle CI est incorrecte **
  2. ** La clé utilisée lors du déploiement avec Capistrano n'est pas spécifiée correctement **

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". Screen Shot 2020-11-07 at 15.19.48.png

Ensuite, la clé publique sera transmise, donc connexion ssh depuis le terminal.

Screen Shot 2020-11-07 at 15.30.17.png

#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é.

Screen Shot 2020-11-07 at 16.04.37.png

Postscript

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

Un mémorandum d'erreur survenu lors de la création d'un environnement CI / CD [Rails + CircleCI + Capistrano + AWS]
[Opération non autorisée] Un mémorandum car une erreur s'est produite lors de la création d'une instance EC2.
Erreur de valeur de vérification survenue dans l'environnement de clustering
[Rails] Erreur survenue lors du déploiement automatique par Capistrano (fatal: nom d'objet non valide: maître)
Paramètres à définir lors de l'exploitation d'un environnement de production avec Rails
Résumé des erreurs lors de la création de l'environnement de développement Minecraft MOD
[Révision] Lors de la création d'une application Web avec Rails, erreur de syntaxe, inattendue ')', expecting => ...]}% ","% # {params [: content]}% "]) ...
Créer un environnement de développement Ruby on Rails sur AWS Cloud9
Un mémorandum lors de la création d'un service REST avec Spring Boot
Création d'un environnement Java léger qui s'exécute sur Docker
À propos de l'erreur survenue lors de l'ajout d'un nom de colonne dans les rails (rails db: migrate, rails db: rollback, add)