11

Releasing vor Azure:Azure Web Rollenkonfigurationseinstellungen für Umgebungen

Vor Azure verwenden, würden wir nur haben, schreibgeschützte Dateien config in den verschiedenen Umgebungen (Test, Staging und Produktion, etc.) sitzen. Während einer Veröffentlichung wurden alle Anwendungsdateien (keine Konfigurationsdateien) in der betreffenden Umgebung bereitgestellt. Die Anwendungsdateien würden dann die Konfigurationsdatei der Umgebung für Verbindungszeichenfolgen und andere umgebungsspezifische Details lesen. Ich nehme an, dass dies ein ziemlich Standard-Setup ist?

Loslassen nach Azure:

Nun bewegen wir unsere Web-Anwendungen zu Azure Web Rollen. Webrollen verwenden ServiceConfiguration.Cloud.cscfg und ServiceConfiguration.Local.cscfg Dateien.

Bei der Veröffentlichung in einem Cloud-Dienst müssen die Verbindungszeichenfolgen bekannt sein. Wenn wir in einem Test-Cloud-Service veröffentlichen möchten, muss ServiceConfiguration.Cloud.cscfg entsprechend bearbeitet werden. Wenn wir in einem Staging- oder Produktiv-Cloud-Dienst veröffentlichen möchten, muss ServiceConfiguration.Cloud.cscfg weiter geändert werden.

Ich würde viel lieber die Entwickler AWAY von Verbindungszeichenfolgen abstrahieren, wenn sie ihre Bereitstellungen machen. Dies verhindert den Fehler, auf falsche Umgebungen zu zeigen (was große Auswirkungen haben könnte). Wie kann das gemacht werden?

Ich verstehe, dass diese Konfigurationseinstellungen im Azure Management Portal geändert werden können. Um diesen Schritt in den Freigabevorgang aufzunehmen, müssten Entwickler jedoch Zugriff auf das Verwaltungsportal haben, was keine ideale Situation darstellt Es gibt immer noch einen Spielraum für Fehler (plus "offenen" Zugriff auf Management Portal).

Update:

Ich fand, dass Sie Ihre Service-Konfigurationsdateien von mehr hinzugefügt (und Umbenennung) verwalten können:

enter image description here

Und dann durch den richtigen Cloud-Service (schwarz) wählen und die richtige Service-Konfiguration (roter Pfeil) zusammen, müssen die Entwickler die Konfigurationsdetails nicht kennen:

enter image description here

Es ist nach wie vor das Problem eines Entwicklers in der falsche Service-Konfiguration wählen, wenn an einen Cloud-Service-Bereitstellung (aber vielleicht in ein Skript automatisiert werden könnte, dies zu verhindern?)

Mein Haupt IRK ist der Umwelt-Typ (blauer Pfeil). Das nützt mir jetzt nichts.

+1

müsste ich überprüfen aber ich denke, das ist nur erlaubt Ihnen, die Konfiguration und nicht die Service-Definition zu wählen. Es kann also zu Problemen kommen, wenn Sie unterschiedliche Endpunkte (http vs. https), unterschiedliche Vm-Größen oder andere Umgebungen wünschen. Die Lösung auf meiner Antwortseite führt dies aus. –

+0

@Eoin: Oh ja, guter Punkt in Bezug auf die Service-Definition. Dies wäre ein Problem. Letzte Frage: Können Sie Ihren Code versionieren, ohne ein "Bereitstellungspaket" zu haben? Das Veröffentlichen direkt aus Visual Studio ist ein wenig beängstigend, da Sie nicht sicher wissen werden, ob sich der Code geändert hat oder nicht. – davenewza

+1

Nun, in unserem Fall ist unser Quellcode auf GitHub gespeichert, das wir für die Quellcodeverwaltung verwenden, also haben wir unsere eigenen Prozesse, um einen Zweig zu machen, den Release-Inhalt zu sperren und dann mit der Entwicklung auf dem Master fortzufahren. Wenn es an der Zeit ist, eine Production-Version zu veröffentlichen, stellen wir sie einfach aus der Zweigstelle bereit, bei der wir uns angemeldet haben. –

Antwort

4

Am besten erstellen Sie mehrere Cloud Deployment-Projekte, eines für jede Umgebung, sodass jede von ihnen eine andere ServiceConfiguration hat.

In meiner Anwendung habe ich 3 Anwendungsprojekte (1 WebRole und 2 Worker-Rolle)

Wir als 6 Cloud-Bereitstellung Projekte haben, eine für jede Zielumgebung. Jedes Bereitstellungsprojekt enthält die gleiche Webrolle & Worker Roles, hat jedoch eine andere cscfg & csdef Datei.

Solution Organisation

auf Anwendungsebene, app.config & web.config-Dateien durch Transformationen mit SlowCheetah Konfiguration behandelt werden. Grundsätzlich haben Sie im Konfigurationsmanager für jede Bereitstellung eine andere Build-Konfiguration. so anstatt nur Debug und Release, ich habe Debug, QA, Uat, Test, SAndbox, Production

+0

Danke für die Post. Mit getrennten Projekten ist definitiv eine Lösung. Bitte überprüfen Sie meine Post für ein Update (eine andere mögliche Lösung). Was machen Sie jetzt mit den Produktions-/Staging-Umgebungen, die in Cloud-Services integriert sind? – davenewza

+1

Produktion vs. Staging ist der interne Pre-Production-Knoten von Azure. Sie können also die VIP-Swapping-Option nutzen. Wenn Sie jedoch für jede Umgebung völlig unterschiedliche Umgebungen haben, können Sie sie wahrscheinlich immer nur an den "Produktion" -Halter Ihrer relevanten Umgebung verteilen. –