2017-07-28 17 views
1

Ich habe ein komplexes LaTeX-Set von Projekten, die aus den folgenden Verzeichnissen bestehen.Gitlab multi project CI

PACKAGE/ 
SCRIPTS/ 
AUX/ 
PROJ1/ 
PROJ2/ 
... 

Jedes PROJ1, PROJ2, ... ist ein Buch. Um beispielsweise PROJ1/zu erstellen, habe ich eine Reihe von Skripten im Ordner SCRIPT. Diese Skripte kopieren einige Dateien im AUX/Ordner in jeden PROJ1/Ordner. Der Ordner PACKAGE/sollte vorhanden sein, um das Buch zu kompilieren. Daher sind für die Dateien in PACAKGE /, SCRIPTS/und AUX/für jedes Buch (PROJ1, PROJ2, ...) gemeinsam, aber unabhängig von ihnen. Daher denke ich, dass ich jeden Ordner in einem separaten Git-Repository aufbewahren muss.

Jetzt möchte ich die gitlab-ci Einrichtung verwenden, um jedes PROJ */zu bauen. Ich weiß, dass ich einen Docker-Runner einrichten muss, aber mein Problem ist, wie ich es mit mehreren Repositories machen soll. Ich würde gerne die Bücher bauen, nicht nur wenn ich mich zu PORJ * verpflichte, sondern auch, wenn ich mich zu AUX oder PACKAGE begehe. Wie sollte ich Multiprojekt-CI einrichten?

HINWEIS: Wenn ich eine bestimmte PROJ/codiere, habe ich Änderungen an PACKAGE und AUX vorgenommen, die andere Bücher beschädigen könnten. Ich dachte, dass ich jedes PROJ1, PROJ2, auf PAKETE und AUX beziehen kann, PACKAGE und AUX als Submodule von PROJ konfigurierend (es versteht sich, dass ich auf diese Weise jedes Buch mit einer bestimmten Version von AUX und PACKAGE verknüpfe). Wird die Verwendung von Submodulen die Einrichtung von Multiprojekt-Ci vereinfachen? Ist es eine gute Idee, die Submodule auf diese Weise zu verwenden? (Ich bin mir bewusst, dass es bei Submodulen leicht ist, Fehler zu machen).

Antwort

1

Ihre Frage ist eigentlich zwei Teile. Zuerst, wie man mehrere Git-Repositories erstellt und einen (den gemeinsamen Code) in anderen (den Büchern) benutzt. Zweitens, wie gitlab CI verwendet wird, um Build im Falle einer Änderung an einem der Repos auszulösen.

Der erste Teil ist einfach, Sie benötigen ein Repository, das gemeinsamen Code (SCRIPTS, AUX, ...) und für jedes Buch ein Repo enthält, das Buchdaten UND gemeinsame Repo als Submodul enthält. Siehe git submodules, wenn Sie nicht wissen, was sie sind.

Bisher haben Sie die Hälfte des Problems gelöst. Bei Gitlab benötigt das CI spezifische Einstellungen, wenn für die Setup-Anweisungen die Git-Submodule see here verwendet werden. Auf diese Weise kann jedes Buch Repo gebaut werden. Der letzte Schritt besteht darin, den freigegebenen Repo einzurichten, um den Build für alle Buchrepositionen auszulösen. Dies kann mithilfe von Trigger-URLs wie described here erfolgen.