Dies ist eine sehr gute Frage, da es ein gängiges Anti-Pattern ist, ci/cd
Tools mit Umgebungen zu koppeln .
Jenkins ist eine Fabrik. Als solches sollte es völlig unabhängig vom Begriff der Umwelt oder sogar der Lieferung sein.
Am besten ist es, einen Staging-Prozess und / oder eine Schnittstelle zu haben (wenn Sie es sich leisten können: eine dedizierte Bereitstellungssoftware).
Staging-Prozess
Sie sollten versuchen, für jede Umgebung eine Art Staging-Job zu erstellen, in dem Sie die Konfiguration der Umgebung definieren und das endgültige Paket damit bündeln.
Als nächstes haben Sie Lieferaufträge für jede Umgebung.
Lieferwerkzeuge
Um die Inszenierung und Lieferaufträge zu tun erstellen, können Sie sehr einfach Scripting - Tools verwenden, wie shell
, aber es gibt mehr angepasst Scripting - Tools, wie Ansible
, puppet
, chef
...
Wenn Sie sich die Kosten leisten können, können Sie in eine Bereitstellungssoftware investieren (ich werde einige erwähnen, mit denen ich im Kommentarbereich gearbeitet habe).
Beachten Sie, dass diese Software einen Staging-Prozess für die Umgebung verwaltet.
Offensichtlich ist es sehr sinnvoll, Bereitstellungssoftware und Skripte zu kombinieren.
Über die Trennung von Werkzeugen und Umgebung hinaus
Da Sie nach Best Practices gefragt haben, scheint es mir erwähnenswert, ein anderes häufig vorkommendes Anti-Pattern zu erwähnen: die Kopplung von SCM-Tools und den Bereitstellungsprozess.
Es ist eine sehr gute Praxis, die Umgebungskonfiguration (natürlich keine Passwörter oder vertraulichen Informationen) zu speichern und Live-Skripte in SCM-Tools (wie svn
oder git
...) zu erstellen. Es ist jedoch eine sehr schlechte Praxis, die Umgebungskonfiguration auszuchecken und Live-Skripte während des Go-Live zu erstellen. Es ist möglicherweise einfach nicht verfügbar, wenn Sie es benötigen.
Diese Check-out-Phase sollte Teil des zuvor erwähnten Staging-Prozesses sein.
Idem Potenz
Eine weitere bewährte Methode besteht darin, dass Ihre Skripte wie folgt lauten sollten idem-potent
: Dies bedeutet, dass Sie Ihre Skripte einmal abspielen können sollten, um die Bereitstellung und Bereitstellung durchzuführen. Dann sollten Sie in der Lage sein, sie immer wieder abzuspielen, und sie würden den Status Ihres Systems nur ändern, wenn etwas in der Konfiguration gestört ist.
Skalierung
Als letzte bewährte Methode, die ich aus direkter Erfahrung heraus teilen werde, ist das Schrecken von Jenkins: Verschiedene Teams haben unterschiedliche Bedürfnisse und Verwendungszwecke von Jenkins. Wenn sich zu viele Teams einen gemeinsamen Jenkins teilen, kann es zu Problemen mit den Ressourcen kommen. Der schlimmste Fall ist, wenn ein Team den Jenkins-Master neu starten muss, während ein anderes liefern muss.
Ideal wäre es, einen Jenkins pro Team oder pro Gruppe von Teams zu haben, die dasselbe Ziel und dieselbe Lieferplanung haben.