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
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.
CircleCI 2.0 Capistrano 3.14.1 Ruby 2.6.5 Rails 6.0.0
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.
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
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".
Dann wird der öffentliche Schlüssel übergeben, also ssh Verbindung vom Terminal.
#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.
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