Wie kann ich allen meinen AWS EC2-Instanzen mitteilen, dass sie von git / codecommit ziehen sollen?

8

Ich verwende AWS CodeCommit, das wie eine abgespeckte Version von git aussieht.

Wenn alle diese EC2-Instanzen das gleiche Rollen-Tag haben, wie bewerkstellige ich das?

Ich möchte nichts Besonderes machen, ich möchte nur ein Tag angeben, auf eine Schaltfläche klicken und alle EC2-Instanzen mit diesem Tag für CodeCommit abrufen. Ich möchte dies von meinem lokalen Rechner aus tun.

Ich weiß, dass ich die SSH-Schlüssel verwenden muss, um CodeCommit auf jedem meiner EC2-Server zu öffnen und git auf jedem von ihnen zu installieren (ich backe dies in einem AMI). Ich bin nur nicht sicher, wie man jede der EC2-Maschinen "triggert", um einen git pull zu machen? Gibt es einen AWS-Befehl?

Ich bin kein Entwickler und kenne nur Linux und PHP.

    
Hard worker 15.08.2015, 20:30
quelle

2 Antworten

12

Bei EC2-Instanzen, die mit einer IAM-Rolle gestartet werden, müssen Sie nicht einmal in SSH-Schlüsseln backen. Git kann CodeCommit-Anmeldeinformationen von den Metadaten der EC2-Instanz abrufen. Bake ein Linux-basiertes AMI mit dem neuesten AWS CLI-Paket und den folgenden Zeilen in ~ / .gitconfig:

%Vor%

Starten Sie die Instanz, an die eine IAM-Rolle angehängt ist. Anschließend können Sie den CodeCommit-Repo ohne weitere Einrichtung klonen.

Vielleicht möchten Sie in Capistrano und schauen Capify-EC2 , wenn Sie git-Befehle in einer ganzen Reihe von EC2-Instanzen basierend auf Tags ausführen möchten.

Aktualisiert: Wenn Sie AWS OpsWorks für die Bereitstellung über CodeCommit verwenden möchten, gibt es eine aktuellen Blog-Artikel darüber, wie man das macht. Sie können OpsWorks auch zu Ausführen beliebiger Befehle über Instanzen mit Capistrano.

    
Clare Liguori 04.09.2015, 22:57
quelle
4

Am ehesten erreichen Sie mit den verwalteten Diensten von AWS CodeDeploy . Damit können Sie die Bereitstellung in EC2 -Instanzen über die Befehlszeile oder die Webkonsole koordinieren. Aber CodeDeploy zieht bisher nur Artefakte von S3 oder GitHub . Inzwischen scheint CodeCommit vollständig von anderen verwandten Amazon-Diensten isoliert zu sein, wie CodePipeline und < em> CodeDeploy , also scheint es keine gute Wahl zu sein. Aber, natürlich, Amazon Roadmap ist es, alle sie zu integrieren (nicht tun, wäre dies sinnlos). Also, jetzt wäre es besser, GitHub als CodeCommit zu verwenden.

Wenn Sie jedoch nicht GitHub verwenden, benötigen Sie eine CI (kontinuierliche Integration) -Lösung zwischen Ihrem Repository und CodeDeploy , die Sie ziehen Code aus der Quelle, möglicherweise Tests erstellen oder ausführen, schieben Sie es auf S3 und sagen CodeDeploy darüber. Es gibt zum Beispiel CodeShip , das dies ermöglicht und in viele externe Dienste integriert werden kann. Oder du könntest sogar deinen eigenen CI Server haben, wie Jenkins , der das macht "kleben" Rolle für Sie. (Jenkins wird wahrscheinlich das flexibelste sein, weil es Open-Source ist und Plugins für alles haben kann.)

Wenn Sie also ein wenig aufschlüsseln, wäre Ihr Arbeitsablauf ungefähr so:

  • Push-Code an Ihr Repository;
  • Wenn es ein Ereignis gibt (ein Commit in einem Zweig oder ein neues Tag, sollte es konfigurierbar sein), Ihr CI zieht es, führt alles aus, was Sie wollen oder brauchen (baut, testet, packt es) ), und schiebt es zu S3 (normalerweise als Tarball-Datei);
  • Je nachdem, wie Sie die Dinge eingerichtet haben, teilt Ihr CI Code Deploy mit, es sofort auf Ihren EC2 -Instanzen bereitzustellen gibt an, dass eine neue Version verfügbar ist und Sie die Bereitstellung manuell über CLI auf der Webkonsole auslösen können, wann immer Sie möchten.

( CodeDeploy setzt den Code eigentlich nicht in EC2 -Instanzen um. Stattdessen muss jede EC2 -Instanz einen Agenten ausführen, der regelmäßig em> CodeDeploy -Server, um zu wissen, ob lokal etwas neu zu installieren ist. CodeDeploy koordiniert und erhält Feedback von den Agenten, so dass es so funktioniert, als wäre es zu 100% aktiv auf CodeDeploy Seite und 100% passiv auf der Seite der Instanzen.)

Die "sauberste" AWS-Lösung wäre CodeCommit - & gt; CodePipeline - & gt; CodeDeploy oder nur CodeCommit - & gt; CodeDeploy , aber diese Dienste sind noch nicht vollständig integriert.

In Ihrem Fall wäre die einfachste und praktikabelste Lösung jetzt Github - & gt; CodeDeploy Alles andere erfordert einige Zwischenschritte, wie die Beispiele, die ich zur Verfügung gestellt habe ( CodeShip , Jenkins , usw.).

    
Edson Marquezani Filho 16.08.2015 16:54
quelle