2015-08-15 6 views
8

Ich verwende AWS CodeCommit, die wie eine abgespeckte Version von Git zu sein scheint.Wie kann ich allen meinen AWS EC2-Instanzen mitteilen, dass sie von git/codecommit ziehen sollen?

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

Ich möchte nichts Besonderes machen, alles was ich will, ist ein Tag zu bestimmen, klicken Sie auf eine Schaltfläche und alle EC2-Instanzen mit diesem Tag ziehen für CodeCommit. Ich möchte dies von meinem lokalen Rechner aus tun.

Ich weiß, ich muss die SSH-Schlüssel setzen, um CodeCommit auf jedem meiner EC2-Server zugreifen und Git auf jedem von ihnen installieren (ich werde dies in einem AMI backen). 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.

Antwort

12

Für 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. Backen Sie einen Linux-basierten AMI mit dem neuesten AWS CLI-Paket und die folgenden Zeilen in ~/.gitconfig:

[credential] 
    helper = !aws --profile default codecommit credential-helper [email protected] 
    UseHttpPath = true 

Starten Sie die Instanz mit einer IAM-Rolle befestigt, und dann können Sie klonen Ihre CodeCommit Repo ohne weitere Einrichtung .

Sie möchten möglicherweise in Capistrano und Capify-EC2 suchen, 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 von CodeCommit verwenden möchten, finden Sie unter recent blog article eine Anleitung dazu.Sie können OpsWorks auch für Instanzen mit Capistrano über run arbitrary commands verwenden.

+0

Ich wünschte, ich hätte diese Antwort zurück, als ich die Frage stellte. Am Ende habe ich Fabric verwendet, um Git Clone-Befehle in meiner EC2-Flotte auszuführen. –

+1

Wenn jemand dies versucht und Probleme mit "Profil-Standard nicht gefunden" hat, versuchen Sie '' '', um ein leeres Profil anzugeben. Ihr Profil kann/sollte in der Umgebungsvariablen '$ AWS_DEFAULT_PROFILE' auf der EC2-Instanz gespeichert werden. –

+2

@RobbieAverill Sie können das '-Profile default' Bit ganz weglassen (und wie Sie sagen, funktioniert es nicht, wenn Sie kein Standardprofil haben) –

4

Die nächstgelegene Sie es mit AWS bekommen Managed Services ist CodeDeploy. Damit können Sie die Bereitstellung in Instanzen über die Befehlszeile oder die Webkonsole in den Instanzen EC2 orchestrieren. Aber CodeDeploy zieht nur Artefakte von S3 oder GitHub, so weit. Inzwischen CodeCommit scheint völlig von anderen verwandten Amazon Service isoliert werden, wie CodePipeline und CodeDeploy, so scheint es nicht eine 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, Sie verwenden GitHub als CodeCommit.

Aber Sie erwägen, nicht mit GitHub, dann benötigen Sie eine CI (Continuous Integration) Lösung zwischen Ihnen Repository und CodeDeploy, Code aus der Quelle ziehen, möglicherweise Tests Bau oder Laufen, es zu drängen S3 und erzählen CodeDeploy darüber. Zum Beispiel gibt es CodeShip, die das können und in viele externe Dienste integrieren. Oder Sie könnten sogar Ihre eigenen CI Server, wie Jenkins, diese "Kleber" Rolle für Sie tun. (Jenkins wird wahrscheinlich der flexibelste sein, weil es Open Source ist und Plugins für alles haben kann.

)

So brechen ein wenig, Sie Workflow etwas wie das sein würde:

  • Push-Code Repository;
  • Immer wenn es ein Ereignis gibt (ein Commit in einem Zweig oder ein neues Tag, sollte es konfigurierbar sein), CI zieht es, führen Sie, was Sie wollen oder brauchen (baut, testet, packt es), und schiebt es zu S3 (als eine Tarball-Datei, normalerweise);
  • je nachdem, wie Sie die Dinge festgelegt haben, Ihre CI sagt -Code bereitstellen es auf Ihrem EC2 Recht Instanzen weg zu implementieren, oder es sagt nur, es ist da eine neue Version verfügbar, und können Sie die deploy auslösen manuell über CLI auf der Webkonsole, wann immer Sie möchten.

(Eigentlich CodeDeploy nicht schieben Code EC2 Instanzen. Stattdessen jede EC2 Instanz muss einen Agenten ausgeführt werden, welche Pools regelmäßig CodeDeploy Server, um zu wissen, ob es etwas Neues wie dem auch sei CodeDeploy Koordinaten werden lokal angewendet., und das Feedback von den Agenten bekommen, so dass es funktioniert nur, als ob es zu 100% auf CodeDeploy aktiv waren Seite und 100% passiv auf der Instanzen Seite.)

Die "saubere" AWS Lösung wäre CodeCommit ->CodePipeline ->CodeDeploy, oder einfach nur CodeCommit ->CodeDeploy, aber diese Dienste sind nicht vollständig integriert inzwischen.

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

Verwandte Themen