Ein Fehlermemorandum, das beim Erstellen einer CI / CD-Umgebung aufgetreten ist [Rails + CircleCI + Capistrano + AWS]

Einführung

Da ich in der erstellten Rails-App die automatische Bereitstellung (für EC2 von AWS) implementieren konnte, wollte ich den Test von Circle CI bis zur Bereitstellung (CI / CD-Umgebung) automatisieren und habe ihn daher implementiert.

Die Implementierung selbst erfolgte unter Bezugnahme auf den Artikel des Vorgängers. [Circle CI] Rails5.2 / Capistrano / Automatische Bereitstellung in AWS durch CICD-Umgebung

Ich habe versucht, die automatische Bereitstellung mit CircleCI + Capistrano + AWS (EC2) + Rails durchzuführen

Der obige Artikel enthält eine gute Erklärung, einschließlich des Codes. Daher werde ich hier ein Memorandum über den Fehler hinterlassen, in den ich mich persönlich verliebt habe.

Umgebung

CircleCI 2.0 Capistrano 3.14.1 Ruby 2.6.5 Rails 6.0.0

① Es wird gesagt, dass es keinen rspec_junit_formatter gibt

Fehler beim Ausführen des Tests

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

Fügen Sie abschließend rspec_junit_formatter zur gemfile hinzu.

Gemfile


group :test do
  gem 'rspec_junit_formatter'  #hinzufügen
end

Nach Angaben des Beamten

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 Offizielle Referenz

Anscheinend sammelt CircleCI Testergebnisse aus XML-Dateien. Es wird jedoch nicht automatisch erfasst, aber es scheint, dass es durch Einfügen dieser JUnit-Formatierer automatisch gesaugt wird.

(2) Zum Zeitpunkt der Bereitstellung kann sich ssh nicht bei ec2 anmelden.

Fehler beim Ausführen der Bereitstellung der Bundle Exec Cap-Produktion

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@××××××××××

Ich habe zwei Möglichkeiten aufgelistet

  1. ** Der in Circle CI festgelegte SSH-Schlüssel ist falsch **
  2. ** Der bei der Bereitstellung mit Capistrano verwendete Schlüssel ist falsch angegeben **

Um 1 zu überprüfen, versuchen Sie, mit ssh eine Verbindung zu CircleCI herzustellen, und prüfen Sie, ob Sie sich innerhalb des Containers bei EC2 anmelden können. (Siehe hier. So stellen Sie eine SSH-Verbindung zur Circle CI-Testumgebung her)

Wenn Sie auf dem Erstellungsbildschirm auf Umschalten von Wiederholen klicken, wird dies wie in der Abbildung unten gezeigt angezeigt. Drücken Sie daher auf "Job mit SSH erneut ausführen". Screen Shot 2020-11-07 at 15.19.48.png

Dann wird der öffentliche Schlüssel übergeben, also ssh Verbindung vom Terminal.

Screen Shot 2020-11-07 at 15.30.17.png

#SSH-Verbindung zum Kreis ci ok
circleci@××××××××××:~$

#SSH-Verbindung zu ec2
circleci@××××××××××:~$ ssh -i <keypair> ec2-user@<IP address>

#SSH-Verbindung ok mit dem im Kreis ci auf ec2 eingestellten Schlüssel
[ec2-user@ip-×××××××××× ~]$

Die Tatsache, dass ich eine Verbindung zu ec2 herstellen konnte, bedeutet, dass zumindest der von mir festgelegte Schlüssel korrekt ist. Derzeit scheint "** Der in Circle CI festgelegte SSH-Schlüssel ist falsch **" in Ordnung zu sein.

Stellen Sie als Nächstes sicher, dass Sie den falschen Schlüssel angegeben haben, der bei der Bereitstellung mit ** Capistrano in 2 ** verwendet werden soll. Als allererstes Überprüfen Sie die Spezifikation auf der Capistrano-Seite.

deploy.rb


set :ssh_options, auth_methods: ['publickey'],keys:['~/.ssh/id_rsa']          

Überprüfen Sie als Nächstes, unter welchem Namen der in Circle CI festgelegte SSH-Schlüssel gespeichert ist.

#SSH-Verbindung zum Kreis ci
circleci@××××××××××:~$ cd .ssh
circleci@××××××××××:~/.ssh$ ls
config  id_rsa  id_rsa_××××××××××  known_hosts

#Oberer, höher(id_rsa_××××××××××)In den Cirleci-Einstellungen hinzugefügt

Es scheint, dass der registrierte SSH-Schlüssel derjenige ist, dem ein Fingerabdruck hinzugefügt wurde. Immerhin wurde es durch die falsche Angabe des Schlüssels verursacht, der bei der Bereitstellung mit ** Capistrano ** von 2 verwendet wurde.

deploy.rb


#Vorher ändern
set :ssh_options, auth_methods: ['publickey'],keys:['~/.ssh/id_rsa'] 

#Nach der veränderung(Fingerabdruck ist ":Was weggelassen wird)
set :ssh_options, auth_methods: ['publickey'],keys:['~/.ssh/id_rsa_×××××××××']          

Damit war der Build erfolgreich und die Bereitstellung wurde abgeschlossen.

Screen Shot 2020-11-07 at 16.04.37.png

Nachtrag

Wenn es um Sicherheitsprobleme wie Fingerabdrücke und öffentliche Schlüssel geht, wird es immer noch unordentlich. Es scheint, dass eine Slack-Benachrichtigung nach der Bereitstellung erfolgen kann, also denke ich, dass ich es versuchen werde.

Recommended Posts

Ein Fehlermemorandum, das beim Erstellen einer CI / CD-Umgebung aufgetreten ist [Rails + CircleCI + Capistrano + AWS]
[Nicht autorisierter Vorgang] Ein Memorandum, da beim Erstellen einer EC2-Instanz ein Fehler aufgetreten ist.
Überprüfungswertfehler, der in der Clusterumgebung aufgetreten ist
[Rails] Fehler, der bei der automatischen Bereitstellung durch Capistrano aufgetreten ist (schwerwiegend: kein gültiger Objektname: master)
Einstellungen, die beim Betrieb einer Produktionsumgebung mit Rails vorgenommen werden sollten
Zusammenfassung der Fehler beim Erstellen der Minecraft MOD-Entwicklungsumgebung
[Review] Beim Erstellen einer Webanwendung mit Rails, Syntaxfehler, unerwartetes ')', Erwartung => ...]}% ","% # {params [: content]}% "]) ...
Erstellen Sie eine Ruby on Rails-Entwicklungsumgebung in AWS Cloud9
Ein Memorandum beim Erstellen eines REST-Service mit Spring Boot
Erstellen einer kompakten Java-Umgebung, die unter Docker ausgeführt wird
Informationen zu dem Fehler, der beim Hinzufügen eines Spaltennamens in Rails aufgetreten ist (Rails DB: Migrieren, Rails DB: Rollback, Hinzufügen).