Twórz raz i wdrażaj w wielu środowiskach z msdeploy & Visual Studio 2012

Praca nad centralizacją konfiguracji, ustawień aplikacji i ciągów połączeń dla wielu rozwiązań, a także przełączanie się na korzystanie z msdeploy z wiersza poleceń do wdrażania aplikacji internetowych. Najlepiej byłoby zbudować Pakiety raz i uzyskać aktualne konfiguracje, gdy pakiety są wdrażane do każdego środowiska. Potrzebuję rady co do najlepszego podejścia.

  1. Użyj Parametrów.xml i Setparametry.plik xml do dynamicznej wymiany ustawień i ciągów połączeń. Zobacz http://vishaljoshi.blogspot.com/2010/07/web-deploy-parameterization-in-action.html
  2. Użyj maszyny.Config lub serwer poziomu www.pliki konfiguracyjne do przechowywania typowych ustawień aplikacji i ciągów połączeń.
  3. Użyj pakietu packageweb z https://github.com/sayedihashimi/package-web który umożliwia korzystanie z sieci.config przekształca się za pomocą msdeploy.
  4. Użyj atrybutów file lub configSource wraz z Setparametrami, aby wskazać różne pliki konfiguracyjne, ale muszą być względne z katalogu głównego.
  5. Użyj publikuj profile. Zobacz też wdrażanie istniejącego pakietu przy użyciu profili publikowania

Thanks

Author: Community, 2012-11-01

4 answers

Używamy opcji # 1 i działa wystarczająco dobrze. Wdrażamy do około 30-40 witryn i aplikacji przy użyciu tego podejścia.

Myślę, że opcja # 2 spowoduje bóle głowy dla Ciebie lub deweloperów. Musisz albo upewnić się, że sekcje z ustawieniami zostaną usunięte z konfiguracji podczas wdrażania, albo zablokować je na serwerze, aby lokalna konfiguracja nie mogła ich dodać.

Dla opcji # 3 będziesz musiał wykonać kilka kompilacji, aby uzyskać przekształcone pliki konfiguracyjne. To również nie jest bardzo wykonalne, jeśli masz dużą liczbę witryn do wdrożenia.

Opcja # 4 może działać, ale możesz napotkać ograniczenia tutaj. Albo cała sekcja jest w osobnym pliku, albo wszystko jest w głównym pliku, więc nie ma między nimi.

Opcja #5 wygląda ciekawie, ale nie korzystałem z niej, więc niewiele mogę o niej powiedzieć.

 7
Author: Ted Elliott,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-06 19:47:20

Mogę rozwinąć trochę opcje #1/#3 i porównać je. Poprzednia odpowiedź nie była dokładna w stwierdzeniu, że trzeba budować kilka razy z PackageWeb, trzeba budować tylko raz.

Opcja 1: Parametry.xml i Setparametry.xml

W tym podejściu utworzysz parametr.plik xml w Twoim projekcie WWW, który zadeklaruje dodatkowe parametry Web Deploy.

Podczas budowania pakietu webowego parametry zadeklarowane w parametrach.XML są tworzone w paczka. Gdy ten Web wdrożyć pakiet jest tworzony w sieci.plik konfiguracyjny zostanie przekształcony w oparciu o konfigurację kompilacji (oraz teraz potencjalnie również transformację specyficzną dla profilu ).

Możesz użyć tego pakietu i setparameters.xml do publikowania pakietu określającego wartości parametrów Web Deploy. Można tworzyć różne setparametry.plików xml i używać go wraz z tym samym pakietem do publikowania w wielu miejscach docelowych. Aby opublikować za pomocą tej techniki możesz użyć albo / align = "left" / cmd, który VS generuje lub wywołuje msdeploy.exe z poprawnym zestawem parametrów.

Opcja 3: PackageWeb

PackageWeb rozszerza proces tworzenia pakietu tak, że po utworzeniu pakietu webowego web.Config transforms są zawarte w pakiecie, jak również montaż, który może wykonać transformacje.

Oprócz tego podczas tworzenia pakietu Web deploy generowany jest plik publish-interactive. ps1. Możesz użyć tego pliku do opublikowania pakietu. Będzie prompt you for; the web.Config transform to be applied, the Web deploy parameter values, and the web deploy endpoint info itself. Po uruchomieniu publish podane wartości są zapisywane do publish-configuration.ps1.readme. Możesz usunąć .readme i publish-interactive. ps1 użyje wartości z tego pliku do automatyzacji publikowania. Możesz także określić plik, który będzie używany do ustawień .

Jeśli utworzyłeś parametr.plik xml gdy web deploy package jest tworzony przez VS to spowoduje web parametry wdrożenia zawarte w pakiecie. PackageWeb odbierze te i poprosi cię również o te.

Więc jakie są różnice między tymi podejściami?

Z opcją # 1 The web.config, który dostaje się do pakietu jest już przekształcany. Nie będziesz miał możliwości ponownego przekształcenia pliku. W obu podejściach można jednak określić wartości parametrów wdrożenia sieci web, aby mogły one odpowiadać Twoim potrzebom. Jeśli modyfikujesz duże fragmenty XML z jednego env do inne niż sieć.transformacje config mogą być korzystne. Więc PackageWeb może być lepszym wyborem.

Z opcją # 1 należy ręcznie utworzyć Setparametry.plik xml. Z PackageWeb można uruchomić proces za pomocą opcji WhatIf. Zostaniesz poproszony o podanie wartości i utworzy dla ciebie plik ustawień.

Można łatwo zautomatyzować oba podejścia. PackageWeb zasadniczo opiera się na parametrach.XML / setparameters.techniki xml i oferuje super-zestaw funkcjonalność.

Jeśli chcesz, aby wszystko było jak najprostsze z najmniej # ruchomych części, polecam opcję # 1, ponieważ możesz bezpośrednio wywołać msdeploy.exe w razie potrzeby.

Jeśli chcesz uprościć automatyzację publikowania i wolisz PowerShell niż standardowy wiersz polecenia, wypróbuj PackageWeb.

Mam 5 minutowy filmik na PackageWeb w http://sedodream.com/2012/03/14/PackageWebUpdatedAndVideoBelow.aspx . jeśli publikujesz Web deploy Pakiety zachęcam Was do wypróbowania. Jeśli nie spełnia Twoich potrzeb, daj mi znać, ponieważ możemy wykorzystać to, czego uczymy się w PackageWeb później w bardziej formalny sposób.

 19
Author: Sayed Ibrahim Hashimi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-12 07:29:58

Używamy #5 i działa bardzo dobrze. Korzystanie z MSBuild do publikowania profili zapewnia dużą elastyczność (elementy są szczególnie przydatne).

W naszym potoku wdrażania, Tylko pakiet strony internetowej, build/before targets i publish profile są dostępne dla etapów wdrażania. Kod źródłowy, w tym pliki projektu, są wykorzystywane tylko na etapie budowania/testowania.

Dla twojej wiadomości, zdecydowaliśmy się na publikowanie profili, ponieważ szybko napotkasz problem utrzymania środowiska szczegółowe dane / poświadczenia serwera, klauzule pomijania i wartości parametrów razem. Profile WPP / Publish śledzą wszystkie te rzeczy w pliku pubxml, a funkcje MSBuild pozwalają na kilka ładnych "helperów" dla typowych, ale"hałaśliwych" zadań.

 5
Author: Richard Szalay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-11 23:14:04

Zakończyłem rozwiązywanie tego problemu za pomocą kombinacji msbuild działającej na TeamCity, aby utworzyć pakiety NuGet, które mogą być zużyte przez OctopusDeploy .

Octopus pozwala na przepchnięcie aplikacji spakowanej do pakietu nuget (zbudowanej raz) przez wiele środowisk. Config może być przekształcony w zależności od środowiska lub nawet na maszynę przy użyciu standardowych przekształceń ms. Linki do odpowiednich dokumentów Octopus poniżej.

Opakowanie dla Octopus

Konfigurowanie Config transforms

 2
Author: Dav Evans,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-15 23:16:01