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,
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,
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
Code auf .gitlab-ci.yml
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:
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).
In Ihrem /etc/gitlab-runner/config.toml
%Vor%Sie definieren
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
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 wurdeHier 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.
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
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.
Tags und Links node.js amazon-web-services ubuntu gitlab gitlab-ci