Soll das Bereitstellungsskript ein Artefakt des Builds sein?

13

Dies ist ein in Java geschriebenes Webprojekt.

Also schreibe ich das Build- und das Deploy-Skript. Um den Build zu erstellen, habe ich ant verwendet. Der kontinuierliche Aufbau erfolgt mit Jenkins.

Der Build generiert 3 verschiedene Artefakte:

  1. Die Kriegsakte
  2. Ein Reißverschluss mit Layouts
  3. Ein Reißverschluss mit Bildern

So weit, so gut, aber jetzt muss ich das Bereitstellungsskript schreiben, das sollte:

  • Stellen Sie den War (Artefakt 1) auf dem Tomcat bereit, der auf Server 1 ausgeführt wird
  • Platzieren Sie das Artefakt 2 auf Server 1 in einem bestimmten Verzeichnis
  • Platzieren Sie das Artefakt 3 auf Server 2 in einem bestimmten Verzeichnis

Ich sprach mit meinem Kollegen und er sagte, dass wir auch ein Artefakt (möglicherweise deploy.xml ) generieren sollten , das diese Artefakte bereitstellt , wenn sie auf dem richtigen Server platziert werden.

Es würde also ein anderes Skript geben, das:

  • Laden Sie die Jenkins-Artefakte herunter
  • scp auf jeden Server und platziere die deploy.xml dort
  • Rufen Sie die Datei deploy.xml remote auf

Was mich ein wenig unangenehm macht, ist der Vorgang, die deploy.xml als Build-Artefakt zu haben. Die Motivation dahinter wäre, ein Deployment durchführen zu können, ohne auf die VCS-Repositorys zugreifen zu müssen, sodass ein Build in sich geschlossen wäre, dh, jeder Build könnte nur mit dem, was von Jenkins generiert wurde, in Produktion gehen.

Wo sollen die Bereitstellungsskripte abgelegt werden? Sollten sie nur im VCS sein oder sollten sie auch Artefakte bauen?

Edison Gustavo Muenz
quelle
diese frage ist gut / es bringt uns dazu, plus eins zu wollen / ich wünschte, ich könnte antworten
amara

Antworten:

6

Meine Erfahrung ist, dass alles, was automatisiert werden kann, sein sollte. Wenn Sie es als Schritt 1, Schritt 2, ... beschreiben können, sollte es ein Skript sein. Wenn das Skript automatisch generiert werden kann, um Build-spezifische Informationen (z. B. Revisions-Tag) zu enthalten, sollten Sie dies tun. Dies geschieht nicht, um faul zu sein, sondern um vorhersehbar und reproduzierbar zu sein .

Hinweis: Sie sollten auch ein automatisch generiertes Zurücksetzungsskript haben , das von jedem im Team verwendet werden kann, falls das automatisch generierte Bereitstellungsskript verrückt wird und den Produktionsserver überflüssig macht.

Peter Rowell
quelle
3

Alles, was Peter Rowell schrieb, ist richtig, außerdem würde ich:

Für die Bereitstellungsskriptdatei

  • Wenn es von jemandem geschrieben wurde, muss es sich in der Versionskontrolle befinden.
  • Wenn es generiert wurde und erneut generiert werden kann, wird es normalerweise nicht in die Versionskontrolle einbezogen.

Für den Bereitstellungsprozess:

  • Wenn Sie möchten, dass Ihre Artefakte in sich geschlossen sind, und dies problemlos möglich ist, kann es sich bei der Datei um ein Build-Artefakt handeln. Dies bedeutet, dass sie so mit dem Build-Ergebnis gepackt ist, dass sie für die Bereitstellung verwendet werden kann.
  • Auf der anderen Seite werden Bereitstellungen immer komplexer, so dass Sie früher oder später ein dediziertes Programm (lesen Sie Code) benötigen, das die Bereitstellung ausführt, und ein Jenkins-Build-Artefakt ist nicht mehr in sich abgeschlossen.

Dies hängt vielmehr von Ihrem Prozess ab und davon, wie Sie mit Bereitstellungen umgehen möchten.

Peter Kofler
quelle