Gibt es eine Möglichkeit, den Build lokal auszuführen, wenn ein GitLab-Projekt auf GitLab CI konfiguriert ist?
Ich möchte meinen Laptop nicht in einen Build "Runner" verwandeln, sondern nur Docker nutzen und .gitlab-ci.yml
Tests lokal ausführen (dh alles ist vorkonfiguriert). Ein weiterer Vorteil davon ist, dass ich sicher bin, dass ich lokal und auf CI dieselbe Umgebung verwende.
Hier ist ein Beispiel für die lokale Ausführung von Travis-Builds mit Docker . Ich suche nach etwas Ähnlichem mit GitLab.
Antworten:
Seit einigen Monaten ist dies möglich mit
gitlab-runner
:Beachten Sie, dass Sie sowohl Docker als auch
gitlab-runner
auf Ihrem Computer installiert benötigen , damit dies funktioniert.Sie benötigen auch den
image
in Ihrer.gitlab-ci.yml
Datei definierten Schlüssel . Sonst funktioniert es nicht.Hier ist die Zeile, die ich derzeit zum lokalen Testen verwende
gitlab-runner
:Aufgrund der Verwirrung in den Kommentaren
gitlab-runner --help
füge ich hier das Ergebnis ein, damit Sie sehen können, dass Gitlab-Runner Builds lokal erstellen kann:Wie Sie sehen können,
exec
lautet der Befehl zuexecute a build locally
.Obwohl es ein Problem gab, das aktuelle
gitlab-runner exec
Verhalten zu verwerfen , wurde es erneut überdacht und eine neue Version mit größeren Funktionen ersetzt die aktuelle Exec-Funktionalität.quelle
gitlab-ci.yml
ist wie ein vorkonfigurierter Docker-Container. Wie ich in meiner Frage betonte, ist es mit Travis möglich und es funktioniert gut: github.com/jolicode/JoliCigitlab-runner
können, wie Builds lokal ausgeführt werden können.gitlab-runner exec
wird nach GitLab 10.0 veraltet , stimmen Sie gitlab.com/gitlab-org/gitlab-runner/issues/2797 ab , um einen Ersatz zu unterstützen, bevor dies geschiehtWenn Sie Gitlab mit dem Docker-Image dort ausführen: https://hub.docker.com/r/gitlab/gitlab-ce , können Sie Pipelines ausführen, indem Sie das lokale
docker.sock
mit einer Volume-Option verfügbar machen :-v /var/run/docker.sock:/var/run/docker.sock
. Durch Hinzufügen dieser Option zum Gitlab-Container können Ihre Mitarbeiter auf die Docker-Instanz auf dem Host zugreifen.quelle
.gitlab-ci.yml
Datei in meinem Projekt auf einem Runner auszuführen, der als Docker-Container bereitgestellt wird. Muss ich den src-Code meines Projekts in den Runner einbinden, damit er die Aufgabe findet / ausführt? Oder ist dies irgendwie möglich mit dem, was Sie in Ihrer Antwort gesagt haben, dh dem Verbinden des Remote-Clients wie in Docker-Maschine 'eval "$ (Docker-Maschine env default)"'?Ich arbeite derzeit daran, einen Gitlab-Läufer zu entwickeln, der lokal funktioniert. Noch in den frühen Phasen, aber irgendwann wird es sehr relevant. Es scheint nicht so, als ob Gitlab Zeit haben möchte / hat, dies zu tun, also los geht's. https://github.com/firecow/gitlab-runner-local
quelle
Ein anderer Ansatz besteht darin, ein lokales Build-Tool zu haben, das gleichzeitig auf Ihrem PC und Ihrem Server installiert ist. Grundsätzlich wird Ihre .gitlab-ci.yml Ihr bevorzugtes Build-Tool aufrufen.
Hier ein Beispiel .gitlab-ci.yml, das ich mit nuke.build verwende:
Und in nuke.build habe ich 3 Ziele definiert, die wie die 3 Stufen benannt sind (Build, Test, Pack).
Auf diese Weise haben Sie ein reproduzierbares Setup (alle anderen Dinge werden mit Ihrem Build-Tool konfiguriert) und können die verschiedenen Ziele Ihres Build-Tools direkt testen.
(Ich kann. \ build.ps1 ,. \ build.ps1 Test und. \ build.ps1 Pack aufrufen, wenn ich möchte)
quelle
Der GitLab-Runner scheint unter Windows noch nicht zu funktionieren, und es gibt ein offenes Problem, um dieses Problem zu beheben .
In der Zwischenzeit verschiebe ich meinen Skriptcode in ein Bash-Skript, das ich problemlos einem lokal ausgeführten Docker-Container zuordnen und ausführen kann.
In diesem Fall möchte ich in meinem Job einen Docker-Container erstellen, also erstelle ich ein Skript 'build':
In meiner .gitlab-ci.yaml führe ich das Skript aus:
Um das Skript lokal mit Powershell auszuführen, kann ich das erforderliche Image starten und das Volume den Quelldateien zuordnen:
Bash installieren, falls nicht vorhanden:
Festlegen von Berechtigungen für das Bash-Skript:
Führen Sie das Skript aus:
Dann stoppen Sie den Container:
Und zum Schluss den Behälter aufräumen:
quelle
Die Idee ist, Prüfbefehle außerhalb von zu halten
.gitlab-ci.yml
. Ich verwendeMakefile
so etwas wiemake check
und ich.gitlab-ci.yml
führe dieselbenmake
Befehle aus, die ich lokal verwende, um verschiedene Dinge vor dem Festschreiben zu überprüfen.Auf diese Weise haben Sie einen Platz mit allen / den meisten Ihrer Befehle (
Makefile
) und.gitlab-ci.yml
nur CI-bezogene Inhalte.quelle
Ich bin unter Windows und verwende VSCode mit WSL
Ich wollte meinen Arbeits-PC nicht als Läufer registrieren, sondern führe stattdessen meine Yaml-Stufen lokal aus, um sie zu testen, bevor ich sie hochlade
Yaml
quelle