Einstellung von GitLab CI für die NodeJS-Bereitstellung in AWS Ubuntu-Instanz

8

Ich habe eine AWS Ubuntu-Instanz, in der GitLab CE konfiguriert ist. Jetzt möchte ich GitLab CI konfigurieren, um meine NodeJS-Anwendung nach jedem Commit zu implementieren. Ich habe keine geeignete Schritt-für-Schritt-Lösung dafür.

Meine NodeJS-App wird in /var/www/mean/my-app auf http://myapp.mydomain.com ausgeführt und das Hosting wird vom Apache-Proxy übernommen,

%Vor%

Und die App wird mit dem Modul forever

gestartet %Vor%

Der gitlab config check sudo -u git -H bundle exec rake gitlab:check RAILS_ENV=production gibt,

%Vor%

Ich habe mich mit SSH von meinem System aus bei der Instanz angemeldet,

%Vor%

Erstellter Schlüssel mit Befehl

%Vor%

Runner config auf /etc/gitlab-runner/config.toml

%Vor%

Code auf .gitlab-ci.yml

%Vor%

Wegen meiner schlechten Konfiguration gibt der Runner einen Fehler,

%Vor%

Meine Verwirrungen sind:

Was sollte der Inhalt von .gitlab-ci.yml file sein, um den festgeschriebenen Code für den Speicherort der Anwendung bereitzustellen?

Und wie konfiguriert man einen Läufer dafür? Wenn ich einen ssh runner verwenden muss, wie lauten die Konfigurationen dort?

Aktualisierung:

Nachdem Sie .pem file als identity_file bereitgestellt haben, wird der folgende Fehler angezeigt:

%Vor%

Jetzt gibt es ein Problem, Git-Klon mit http funktioniert nicht, aber SSH-Klonen funktioniert.

Hinweis: Sowohl gitlab als auch die Build-Umgebung sind derselbe Host (gleiche aws-Instanz)

Fehler wurde ebenfalls in GitLab gemeldet (http-Klonproblem).

    
devo 09.11.2016, 17:57
quelle

1 Antwort

4

In Ihrem /etc/gitlab-runner/config.toml

%Vor%

Sie definieren

  • host
  • Benutzer
  • und Identitätsdatei

host sollte Ihre Build host IP sein (mit anderen Worten, wo Sie Ihren Build ausführen werden)
Benutzer sollte Ihr Benutzer auf Host erstellen sein. Nicht auf gitlab-Host .

Sie können testen, wie Ihr Passwort weniger ssh funktioniert von

  1. Melden Sie sich bei gitlab als root an
  2. ssh -i /home/ubuntu/.ssh/id_rsa ubuntu @ ip-XXX-XX-XX-XXX

Wenn das funktioniert und Sie nicht nach einem Passwort fragen - alles ist gut.
Wenn das bricht - bedeutet das, dass Sie das Passwort nicht weniger korrekt eingerichtet haben.

Der einfachste Weg zur Einrichtung eines Kennworts ohne öffentlichen Schlüssel ist die Verwendung des Befehls

%Vor%

Zum Beispiel möchte ich ein Passwort weniger ssh auth zwischen meinem gitlab und meinem Build-Host einrichten.
Meine Build-Host-IP ist 192.168.0.42 und der Hostname ist build.home Ich habe bereits meine id_rsa und id_rsa.pub unter /home/ubuntu/.ssh auf Gitlab Host generiert.

Lasst uns nun unseren öffentlichen Schlüssel vom Gitlab-Host zu unserem Build-Host schieben. Beim ersten Mal werden Sie nach einem Passwort gefragt.

%Vor%

Beachten Sie, dass ich im obigen Beispiel den öffentlichen Schlüssel zum entfernten Host geschoben habe.

Aber wenn ich jetzt eine Verbindung zu diesem Remote-Host aufbauen will, werde ich meinen privaten Schlüssel angeben.

%Vor%

Versuchen Sie, Ihre öffentliche Schlüsselauth zwischen Gitlab-Host und Remote-Host zu testen, und aktualisieren Sie Ihre Frage.

Ressourcen:

  • Ссылка

    PS: Ich werde meine Arbeitsumgebung-Konfiguration ein bisschen später heute veröffentlichen, wenn ich nach Hause komme.

Bearbeiten 1:

Hier ist meine Konfiguration.
Mein gitlab-Host heißt gitlab.home 192.168.0.41
Und ich habe eine andere VM namens sshbuild.home 192.168.0.43

Unten ist, wie ich ssh Runner hinzugefügt habe

Schritt 1. Installieren Sie auf meinem gitlab.home yum install gitlab-ci-multi-runner und registriere meine remote sshbuild.home VM als ssh runner

Ich muss auch sicherstellen, dass das Passwort weniger Auth zwischen meinem gitlab.home und sshbuild.home funktioniert, also

%Vor%

Dann habe ich meinen anderen Runner (Shell Runner) deaktiviert und ein neues SSH-Runner-Projekt gemacht, nur um sicherzustellen, dass ich, wenn ich es begehe, es auf dem SSH-Runner ausführen wird.

Und ich bete und voila - wir haben unseren erfolgreichen Test, der auf sshbuild.home Host

ausgeführt wurde

Hier sind einige Links, die zum besseren Verständnis dieses Themas beitragen können.

P.S: Und hier ist meine /etc/gitlab-runner/config.toml Datei

%Vor%

PS: Ich habe einen ähnlichen Fehler wie Sie, wenn ich HTTP für mein Repo unter Einstellungen in der Weboberfläche deaktiviere. Der Fehler ist jedoch nicht 500 sondern 403.

Bearbeiten 2:

Nun werde ich .gitlab-ci.yml basierend auf einem einfachen HelloWorld-Projekt behandeln In meinem HelloWorld habe ich eine Datei namens server.js, die, wenn sie vom Knoten ausgeführt wird, einfach einen Web-Server erzeugt, der auf Port 3000 läuft und mit "Hello World" auf GET-Anfragen antwortet.

%Vor%

Mein Ziel ist es, einen Testfall dagegen laufen zu lassen. In diesem Fall werde ich einfach

ausführen %Vor%

Aber ich muss es in ein separates Skript setzen, das den Exit-Status 0 bei Erfolg und nicht Null bei Fehler

haben wird %Vor%

Lassen Sie uns nun meine .gitlab-ci.yml

behandeln %Vor%

Ich habe einen einzelnen Job mit dem Namen test.
In before_script wird das Skript cleanup.sh ausgeführt, das den PID-Port 3000 einfach ausl \ u00f6st, falls dieser gefunden wird.

%Vor%

Und unter Script: Es läuft Knoten mit meinem server.js, gibt es 3 Sekunden zum Starten und führt dann einen Test dagegen aus.
Dieser Test wird auch dafür sorgen, die Knoten-PID nach dem Test zu beenden.

>

Also lass uns den Status des Builds bestätigen und überprüfen

Und nun wollen wir unsere server.js so ändern, dass sie nicht "Hello World", sondern "HelloWorld" ausgibt, also ist kein Platz dazwischen. Ich erwarte, dass mein Testfall scheitern wird, da er buchstäblich "Hello World" erwartet. Und es scheitert.

Dies ist der einfachste CI-Anwendungsfall, den ich mir vorstellen konnte.
Wenn Sie jetzt basierend auf dem Status des Testfalls Code in einer anderen Umgebung bereitstellen möchten, müssen Sie

verwenden
  • Stufen und
  • Umgebung

Also würde sich Ihre .gitlab-ci.yml in etwa so verwandeln (echtes Arbeitsbeispiel)

%Vor%

Was bei git push gelingen wird.
In Zeile 21 habe ich einfach echo ausgeführt, aber dies könnte durch ein Skript ersetzt werden, das an die Remote-Staging- oder Produktionsumgebung gesendet wird.

    
Dmitry Zayats 18.11.2016, 21:13
quelle