2017-03-17 2 views
0

In Pivotal Cloud Foundry gibt es eine Möglichkeit, eine Manifest.yml zu haben, die verschiedene Umgebungsvariablen für verschiedene Umgebungen hat. Zum Beispiel haben wir eine Entwicklungs-/Test-/Produktionsumgebung. Im System möchte ich eine Umgebungsvariable "service = development.pcf.domain.com" haben und im Test sollte es "service = test.pcf.domain.com" sein.Wie setze ich Pivotal Cloud Foundry-Umgebungsvariablen für verschiedene Umgebungen in einer Manifestdatei?

Ich möchte eine Datei verwalten und alle Umgebungsvariablen in einem Manifest haben, anstatt sich zu erinnern, welche Manifestdatei für jede Umgebung übergeben werden muss.

Mit anderen Worten: Ich mag nicht 3 Dateien müssen haben:

manifest_development.yml 
-env: url=development.pcf.domain.com 
manifest_test.yml 
-env: url=test.pcf.domain.com 
manifest_production.yml 
-env: url=production.pcf.domain.com 

Ich würde lieber 1-Datei, die definiert alle Umgebungsvariablen und die richtigen sollte die App auf der Grundlage der Umgebung aufgenommen werden soll, Einsatz auf:

manifest.yml: 
env-development: 
-url=development.pcf.domain.com 
env-test: 
-url=test.pcf.domain.com 
env-production: 
-url=production.pcf.domain.com 

Antwort

0

Was ich gefunden habe, war ein cleverer Kerl hatte bereits spring_active_profiles festgelegt mit env spezifischen Einstellungen, so dass ich nur Anwendung-System erstellen musste.Eigenschaften und verwenden Federprofile

0

Werfen Sie einen Blick auf "Multiple Manifest mit Vererbung" Teil von https://docs.cloudfoundry.org/devguide/deploy-apps/manifest.html#multi-manifests, zB

--- 
inherit: base-manifest.yml 
... 

Wenn möglich ist besser, alle abhängigen Dienste der Applikation über CF Dienste vorgestellt haben/cups und die Anwendung zu erhalten umgebungsabhängigen Konfiguration von VCAP_SERVICES Umgebungsvariablen Parsen Vermeidung pro Umgebung Anwendungskonfigurationsdateien.

+0

Danke wird es auschecken. Unsere Organisation beginnt gerade mit dem PCF und der Art, wie es mir erklärt wurde, gibt es einige Arbeit, die sie tun müssen, damit wir unsere Dienste registrieren können. Wenn das passiert, stimme ich zu, dass der Dienst lieber als Serviceparameter übergeben wird. Es wird leider andere Fälle geben, in denen ich außerhalb von pcf nach Legacy-Diensten anrufen muss, die noch nicht konvertiert wurden. – George

+0

Ich könnte eine Sache falsch verstehen. Es sieht so aus, als müsste ich für jede Umgebung einen anderen Anwendungsnamen verwenden? Das scheint eine schlechte Idee zu sein, denn jede andere App, die meinen Mikroservice anruft, muss wissen, was der Servicename für ihre aktuelle Umgebung ist. – George

+0

Hi @George Nein, Sie müssen verschiedene Anwendungsmanifestdateien mit den Umgebungseinstellungen in Ihrem Szenario bereitstellen (siehe push -f). Ihr Anwendungsname und alle allgemeinen Einstellungen können in der Datei "basis-manifest.yml" beibehalten werden, die in allen Umgebungen vorhanden ist und in Umgebungsmanifesten vererbt wird. Ich hoffe, das hilft. –

0

Der Weg, den ich in der Vergangenheit getan habe, ist die Flexibilität der Pipelines zu nutzen.

Ich habe Jenkins und Concourse verwendet.

Technisch sollten Sie nur in der Entwicklungsumgebung bereitstellen. Alle nachfolgenden Bereitstellungen sollten von einer Pipeline ausgeführt werden.

Was ich tun würde, ist eine generische Manifestdatei (generic-manifest.yml) mit Platzhaltern darin. Ich würde eine Kopie der Datei erstellen (manifest-local.yml). Und das würde nur für Entwicklungsumgebung verwendet werden.

In meiner Pipeline, mit einigen Shell-Skripting, erzeuge ich die manifest.yml mit richtigen Umgebungsdetails (Integration, UAT, prod usw.).

Ich müsste nur eine Datei pflegen - generic-manifest.yml. Und jedes Mal, wenn ich Änderungen daran vornahm, erstellte ich in der Regel die lokale Manifestdatei neu.

Schließlich können Sie eine Pipeline für Ihre Entwicklungsumgebung haben. In diesem Fall benötigen Sie keine lokale Manifestdatei mehr.

Ich würde einen Schritt weiter gehen und sagen, jedes Mal, wenn ich einen neuen Microservice entwickeln muss, würde ich zuerst eine Shell-Klasse entwickeln, es Testklasse, und die nächste wäre, eine Pipeline für diesen Mikroservice zu entwickeln. So muss ich mir keine Sorgen mehr machen, meinen Microservice in die Cloud Foundry zu schieben.

Das erste Mal, wenn Sie es tun, wird es etwas Arbeit sein. Aber sobald Sie sich angewöhnt haben, wird es nahtlos.

Probieren Sie es aus.

+0

[Concourse] (concourse.ci) ist kostenlos und Sie können es in wenigen Minuten einrichten. Concourse anfangs könnte verwirrend sein. Aber wenn du erst einmal damit fertig bist, wirst du anfangen, es für alles zu benutzen. Wir verwenden für alles Pipelines. PCF von Grund auf neu erstellen, PCF-Kacheln aktualisieren, Code bereitstellen, alles. –

Verwandte Themen