Dane konfiguracyjne części usługowej ÜberDeployera trzymane są w plikach XML: ApplicationConfiguration.xml
, EnvironmentInfo_XYZ.xml
oraz ProjectInfos.xml
.
Po zmianie konfiguracji konieczne jest wdrożenie usługi agenta ÜberDeployera. Niestety na tę chwilę nie da się wdrażać agenta ÜberDeployera ÜberDeployerem,
więc trzeba to robić ręcznie. W zasadzie wystarczy tylko podmieniać zmodyfikowane pliki konfiguracyjne (z podkatalogu Data), natomiast trzeba pamiętać
o zrestartowaniu usługi NT o nazwie UberDeployer.Agent.NtService
.
W kontekście ÜberDeployera rozróźniamy 5 rodzajów aplikacji/projektów: usługi NT, aplikacje webowe, aplikacje harmonogramu zadań, aplikacje terminalowe, projekty bazodanowe. Za chwilę po kolei omówimy sposób ich konfiguracji, wpierw jednak przyjrzyjmy się kilku elementom wspólnym w konfiguracji projektów.
Każdy projekt opisany jest przez element XML o nazwie ProjectInfoXml
, który wymaga podania dwóch atrybutów:
xsi:Type
— typ projektu; dopuszczalne wartości:NtServiceProjectInfoXml
,WebAppProjectInfoXml
,SchedulerAppProjectInfoXml
,TerminalAppProjectInfoXml
,DbProjectInfoXml
.allowedEnvironments
— lista nazw środowisk, na których dopuszczalne jest wdrożenie danego projektu, np.:"dev1,dev2,test,prod"
.
W konfiguracji każdego projektu, niezależnie od typu, występują 3 elementy XML:
Name
— nazwa projektu; arbitralna — pojawia się na liście w aplikacji webowej ÜberDeployera.ArtifactsRepositoryName
— nazwa projektu, jaka używana jest w repozytorium artefaktów (czyli w TeamCity).ArtifactsRepositoryDirName
— nazwa katalogu w archiwum ZIP (pobieranym z repozytorium artefaktów), w którym znajdują się binarki danego projektu (używane w sytuacji, gdy w artefaktach jednego projektu jest więcej, niezależnie wdrażanych, podprojektów).
Przykładowa konfiguracja:
<ProjectInfoXml xsi:type="NtServiceProjectInfoXml" allowedEnvironments="dev1,dev2,test,prod">
<Name>UberDeployer.SampleNtService</Name>
<ArtifactsRepositoryName>UberDeployerSamples</ArtifactsRepositoryName>
<ArtifactsRepositoryDirName>SampleNtService</ArtifactsRepositoryDirName>
<NtServiceName>UberDeployer.SampleNtService</NtServiceName>
<NtServiceDirName>UberDeployer.SampleNtService</NtServiceDirName>
<NtServiceDisplayName>UberDeployer.SampleNtService</NtServiceDisplayName>
<NtServiceExeName>UberDeployerSamples.SampleNtService.exe</NtServiceExeName>
<NtServiceUserId>Sample.User</NtServiceUserId>
</ProjectInfoXml>
Omówienie elementów specyficznych dla usług NT:
NtServiceName
— nazwa usługi, jaka będzie zarejestrowana w systemie Windows.NtServiceDirName
— nazwa podkatalogu na docelowym serwerze, w którym zostaną umieszczone binarki.NtServiceDisplayName
— nazwa usługi NT na potrzeby wyświetlania na liście usług w systemie Windows.NtServiceExeName
— nazwa pliku wykonywalnego usługi NT.NtServiceUserId
— identyfikator użytkownika, na którym ma działać usługa NT. Jest to identyfikator wewnętrzny — używany tylko w obrębie ÜberDeployera.
Uwagi:
- Dokładna ścieżka do binarek na docelowym serwerze zależy od środowiska, na które projekt jest wdrażany — patrz sekcja "Konfiguracja środowisk".
- Jeśli środowisko, na które chcemy wdrożyć usługę NT, jest sklastrowane, w konfiguracji tego środowiska musi znajdować się element
określający, jak nazywa się grupa klastrowa danej usługi — patrz sekcja "Konfiguracja środowisk", element
ProjectToFailoverClusterGroupMappings
. - Mapowanie identyfikatorów użytkowników na nazwy użytkowników domenowych definiuje się per środowisko — patrz sekcja "Konfiguracja środowisk".
Przykładowa konfiguracja:
<ProjectInfoXml xsi:type="WebAppProjectInfoXml" allowedEnvironments="dev1,dev2,test,prod">
<Name>UberDeployer.SampleWebApp</Name>
<ArtifactsRepositoryName>UberDeployerSamples</ArtifactsRepositoryName>
<ArtifactsRepositoryDirName>SampleWebApp</ArtifactsRepositoryDirName>
<AppPoolId>ASP.NET v4.0</AppPoolId>
<WebSiteName>Default Web Site</WebSiteName>
<WebAppDirName>UberDeployer.SampleWebApp</WebAppDirName>
<WebAppName>UberDeployer.SampleWebApp</WebAppName>
</ProjectInfoXml>
Omówienie elementów specyficznych dla aplikacji webowych:
AppPoolId
— wewnętrzny identyfikator puli aplikacji IIS, z której ma korzystać dana aplikacja. Patrz również elementAppPoolInfos
.WebSiteName
— nazwa witryny IIS, pod którą ma być podpięta dana aplikacja.WebAppDirName
— nazwa katalogu na docelowym serwerze, w którym umieszczona będzie aplikacja. Uwaga: w tej chwili nieużywane — docelowy katalog dla aplikacji webowych zależy od konfiguracji witryny w IIS, pod którą dana aplikacja jest podpięta. -WebAppName
— nazwa, pod którą aplikacja będzie widniała w IIS.
Każdy z tych elementów można nadpisać dla konkretnego środowiska — patrz element WebAppProjectConfigurationOverride
w sekcji "Konfiguracja środowisk".
Przykładowa konfiguracja:
<ProjectInfoXml xsi:type="SchedulerAppProjectInfoXml" allowedEnvironments="dev1,dev2,test,prod">
<Name>UberDeployer.SampleSchedulerApp</Name>
<ArtifactsRepositoryName>UberDeployerSamples</ArtifactsRepositoryName>
<ArtifactsRepositoryDirName>SampleSchedulerApp</ArtifactsRepositoryDirName>
<SchedulerAppDirName>SampleSchedulerApp</SchedulerAppDirName>
<SchedulerAppExeName>UberDeployerSamples.SampleSchedulerApp.exe</SchedulerAppExeName>
<SchedulerAppTasks>
<SchedulerAppTaskXml>
<Name>SampleSchedulerApp</Name>
<ExecutableName>SampleSchedulerApp</ExecutableName>
<UserId>Sample.User</UserId>
<ScheduledHour>12</ScheduledHour>
<ScheduledMinute>0</ScheduledMinute>
<ExecutionTimeLimitInMinutes>1</ExecutionTimeLimitInMinutes>
<Repetition>
<Enabled>true</Enabled>
<Interval>00:15:00</Interval>
<Duration>1.00:00:00</Duration>
<StopAtDurationEnd>true</StopAtDurationEnd>
</Repetition>
</SchedulerAppTaskXml>
</SchedulerAppTasks>
</ProjectInfoXml>
Omówienie elementów specyficznych dla aplikacji harmonogramu zadań:
-
SchedulerAppDirName
— nazwa podkatalogu na docelowym serwerze, w którym zostaną umieszczone binarki. -
SchedulerAppExeName
— nazwa pliku wykonywalnego aplikacji — używana tylko na potrzeby sprawdzania przez UberDeployera wersji wdrożonego komponentu; konfiguracja pliku wykonywalnego, który rzeczywiście będzie uruchamiany z harmonogramu zadań, znajduje się w elemencie konkretnego zadania. -
SchedulerAppTasks
- lista zadań harmonogramu zadań.Opis elementów:
Name
— nazwa zadania na potrzeby wyświetlania na liście w harmonogramie zadań w systemie Windows.UserId
— identyfikator użytkownika, na którym ma działać zadanie. Jest to identyfikator wewnętrzny — używany tylko w obrębie ÜberDeployera.ExecutableName
— nazwa pliku wykonywalnego.ScheduledHour
— o której godzinie zadanie ma się uruchamiać.ScheduledMinute
— w której minucie (podanej wyżej godziny) zadanie ma się uruchamiać.ExecutionTimeLimitInMinutes
— limit na czas jednorazowego działania zadania (0 oznacza brak limitu).Repetition
— konfiguracja powtarzania danego zadania.Enabled
— czy powtarzanie ma być włączone.Interval
— częstotliwość powtarzania.Duration
— przez jaki okres powtarzać zadanie.StopAtDurationEnd
— czy zadanie ma być zatrzymane, gdy upłynie okres powtarzania.
Uwagi:
- Dokładna ścieżka do binarek na docelowym serwerze zależy od środowiska, na które projekt jest wdrażany — patrz sekcja "Konfiguracja środowisk".
- Mapowanie identyfikatorów użytkowników na nazwy użytkowników domenowych definiuje się per środowisko — patrz sekcja "Konfiguracja środowisk".
Przykładowa konfiguracja:
<ProjectInfoXml xsi:type="TerminalAppProjectInfoXml" allowedEnvironments="dev1,dev2,test,prod">
<Name>UberDeployer.SampleTerminalApp</Name>
<ArtifactsRepositoryName>UberDeployerSamples</ArtifactsRepositoryName>
<ArtifactsRepositoryDirName>SampleTerminalApp</ArtifactsRepositoryDirName>
<TerminalAppName>UberDeployer.SampleTerminalApp</TerminalAppName>
<TerminalAppDirName>UberDeployer.SampleTerminalApp</TerminalAppDirName>
<TerminalAppExeName>UberDeployer.SampleTerminalApp.exe</TerminalAppExeName>
</ProjectInfoXml>
Omówienie elementów specyficznych dla aplikacji terminalowych:
TerminalAppName
— nazwa aplikacji terminalowej (nieużywane).TerminalAppDirName
— nazwa podkatalogu na docelowym serwerze, w którym zostaną umieszczone binarki.TerminalAppExeName
— nazwa pliku wykonywalnego aplikacji.
Uwagi:
- Dokładna ścieżka do binarek na docelowym serwerze zależy od środowiska, na które projekt jest wdrażany — patrz sekcja "Konfiguracja środowisk".
- Mapowanie identyfikatorów użytkowników na nazwy użytkowników domenowych definiuje się per środowisko — patrz sekcja "Konfiguracja środowisk".
Przykładowa konfiguracja:
<ProjectInfoXml xsi:type="DbProjectInfoXml" allowedEnvironments="dev1,dev2,test,prod">
<Name>UberDeployer.SampleDb</Name>
<ArtifactsRepositoryName>UberDeployerSamples</ArtifactsRepositoryName>
<ArtifactsRepositoryDirName>DbScripts</ArtifactsRepositoryDirName>
<ArtifactsAreNotEnvironmentSpecific>true</ArtifactsAreNotEnvironmentSpecific>
<DbName>UberDeployerSample</DbName>
<DatabaseServerId>Default</DatabaseServerId>
</ProjectInfoXml>
Omówienie elementów specyficznych dla projektów bazodanowych:
ArtifactsAreNotEnvironmentSpecific
— informacja dla ÜberDeployera, że artefakty tego projektu nie są zależne od środowiska, na które projekt ma być wdrożony.DbName
— nazwa bazy danych na docelowym serwerze.DatabaseServerId
— identyfikator wewnętrzny serwera bazodanowego. Patrz również elementDatabaseServers
.
Każdy z tych elementów można nadpisać dla konkretnego środowiska — patrz element DbProjectConfigurationOverride
w sekcji "Konfiguracja środowisk".
Każde środowisko opisane jest przez element XML o nazwie EnvironmentInfoXml
. Poniżej znajduje się omówienie wszystkich elementów
konfiguracyjnych:
-
Name
— nazwa środowiska; arbitralna — pojawia się na liście w aplikacji webowej ÜberDeployera. -
ConfigurationTemplateName
— nazwa podkatalogu (w archiwum ZIP z artefaktami), w którym znajdują się binarki specyficzne dla danego środowiska. -
AppServerMachineName
— nazwa serwera aplikacji; na ten serwer wdrażane są aplikacje harmonogramu zadań. Dodatkowo, jeśli klastrowanie na danym środowisku jest wyłączone (patrz elementEnableFailoverClusteringForNtServices
), to na ten serwer wdrażane są również usługi NT. -
FailoverClusterMachineName
— nazwa serwera zarządzającego klastrem. Używane tylko, gdy klastrowanie na danym środowisku jest włączone (patrz elementEnableFailoverClusteringForNtServices
). -
WebServerMachineNames
— lista nazw serwerów webowych — na te serwery wdrażane są aplikacje webowe. Przykład:<WebServerMachineNames> <string>REMOTE</string> </WebServerMachineNames>
-
TerminalServerMachineName
— nazwa serwera terminalowego — na ten serwer wdrażane są aplikacje terminalowe. -
SchedulerServerTasksMachineNames
— lista nazw serwerów aplikacji harmonogramu zadań — na tych serwerach konfigurowane są aplikacje harmonogramu zadań. Przykład:<SchedulerServerTasksMachineNames> <string>REMOTE</string> </SchedulerServerTasksMachineNames>
-
SchedulerServerBinariesMachineNames
— lista nazw serwerów aplikacji harmonogramu zadań — na te serwery wdrażane są aplikacje harmonogramu zadań. Przykład:<SchedulerServerBinariesMachineNames> <string>REMOTE</string> </SchedulerServerBinariesMachineNames>
-
NtServicesBaseDirPath
— bezwględna ścieżka do katalogu na docelowym serwerze, w którym będą umieszczane binarki usług NT. -
WebAppsBaseDirPath
— bezwględna ścieżka do katalogu na docelowym serwerze, w którym będą umieszczane binarki aplikacji webowych. Uwaga: w tej chwili nieużywane — docelowy katalog dla aplikacji webowych zależy od konfiguracji witryny w IIS. -
SchedulerAppsBaseDirPath
— bezwględna ścieżka do katalogu na docelowym serwerze, w którym będą umieszczane binarki aplikacji harmonogramu zadań. -
TerminalAppsBaseDirPath
— bezwględna ścieżka do katalogu na docelowym serwerze, w którym będą umieszczane binarki aplikacji terminalowych. -
TerminalAppsShortcutFolder
— bezwględna ścieżka do katalogu na docelowym serwerze, w którym będą umieszczane skróty do aplikacji terminalowych (zazwyczaj będzie to ścieżka katalogu reprezentującego pulpit wszystkich użytkowników serwera terminalowego). -
EnableFailoverClusteringForNtServices
— informuje ÜberDeployera o tym, czy dane środowisko jest sklastrowane — od tego będzie zależeć sposób wdrażania usług NT. -
ManualDeploymentPackageDirPath
— domyślna ścieżka do katalogu, do którego zapisywane będą paczki wdrożeniowe w przypadku ręcznego wdrożenia. Obsługiwane są następujące zmienne:${current.date}
— data ,${order.number}
— numer porządkowy (zwiększany automatycznie w sytuacji, gdy paczka wdrożeniowa już istnieje we wskazanym katalogu),${project.name}
— nazwa projektu (wewnętrzna, czyli ta używana w obrębie ÜberDeployera).
-
EnvironmentUsers
— definiuje mapowanie wewnętrznych identyfikatorów użytkowników na nazwy użytkowników domenowych. Używane dla projektów, które wymagają podania użytkownika, w kontekście którego dana aplikacja ma działać (usługi NT, aplikacje harmonogramu zadań). Przykład:<EnvironmentUsers> <EnvironmentUserXml> <Id>Sample.User</Id> <UserName>UberDeployer</UserName> </EnvironmentUserXml> </EnvironmentUsers>
Opis elementów:
Id
— wewnętrzny identyfikator użytkownika.UserName
— nazwa domenowa użytkownika.
-
AppPoolInfos
— lista pul aplikacji IIS, z którymi mogą być skojarzone aplikacje webowe. Przykład:<AppPoolInfos> <AppPoolInfoXml> <Id>ASP.NET v4.0</Id> <Name>ASP.NET v4.0</Name> <Version>V4_0</Version> <Mode>Integrated</Mode> </AppPoolInfoXml> </AppPoolInfos>
Opis elementów:
Id
— wewnętrzny identyfikator puli aplikacji IIS. Patrz również elementWebAppProjectConfigurations
.Name
— nazwa puli aplikacji w IIS.Version
— wersja frameworka .NET używanego przez pulę aplikacji IIS.Mode
— Tryb działania puli aplikacji IIS.
-
DatabaseServers
— definiuje mapowanie wewnętrznych identyfikatorów serwerów bazodanowych na właściwe nazwy tychże serwerów. Przykład:<DatabaseServers> <DatabaseServerXml> <Id>Default</Id> <MachineName>REMOTE</MachineName> </DatabaseServerXml> </DatabaseServers>
Opis elementów:
Id
— wewnętrzny identyfikator serwera bazodanowego.MachineName
— nazwa serwera bazodanowego.
-
ProjectToFailoverClusterGroupMappings
— definiuje mapowanie projektów typu usługa NT na nazwy grup klastrowych. Używane, gdy na danym środowisku włączone jest klastrowanie (patrz elementEnableFailoverClusteringForNtServices
). Przykład:<ProjectToFailoverClusterGroupMappingXml> <ProjectName>UberDeployer.SampleNtService</ProjectName> <ClusterGroupName>UD_SAMPLE</ClusterGroupName> </ProjectToFailoverClusterGroupMappingXml>
Opis elementów:
ProjectName
— nazwa projektu (wewnętrzna, czyli ta używana w obrębie ÜberDeployera).ClusterGroupName
— nazwa grupy klastrowej.
-
WebAppProjectConfigurationOverrides
— lista opcjonalnych elementów konfiguracyjnych poszczególnych aplikacji webowych specyficznych dla danego środowiska. Przykład:<WebAppProjectConfigurationOverrides> <WebAppProjectConfigurationOverrideXml projectName="UberDeployer.SampleWebApp"> <AppPoolId>ASP.NET v4.0</AppPoolId> <WebSiteName>Default Web Site</WebSiteName> <WebAppDirName>UberDeployer.SampleWebApp</WebAppDirName> <WebAppName>UberDeployer.SampleWebApp</WebAppName> </WebAppProjectConfigurationOverrideXml> </WebAppProjectConfigurationOverrides>
Opis elementów:
AppPoolId
— wewnętrzny identyfikator puli aplikacji IIS, z której ma korzystać dana aplikacja. Patrz również elementAppPoolInfos
.WebSiteName
— nazwa witryny IIS, pod którą ma być podpięta dana aplikacja.WebAppDirName
— nazwa katalogu na docelowym serwerze, w którym umieszczona będzie aplikacja. Uwaga: w tej chwili nieużywane — docelowy katalog dla aplikacji webowych zależy od konfiguracji witryny w IIS, pod którą dana aplikacja jest podpięta.WebAppName
— nazwa, pod którą aplikacja będzie widniała w IIS.
-
DbProjectConfigurationOverrides
— lista opcjonalnych elementów konfiguracyjnych poszczególnych projektów bazodanowych specyficznych dla danego środowiska. Przykład:<DbProjectConfigurationOverrideXml projectName="UberDeployer.SampleDb"> <DatabaseServerId>Default</DatabaseServerId> </DbProjectConfigurationOverrideXml>
Opis atrybutów i elementów:
projectName
— nazwa projektu (wewnętrzna, czyli ta używana w obrębie ÜberDeployera).DatabaseServerId
— identyfikator wewnętrzny serwera bazodanowego. Patrz również elementDatabaseServers
.
Przykładowa konfiguracja (w pliku Web.config
):
<appSettings>
<add key="VisibleEnvironments" value="^dev.*;^test$" />
<add key="DeployableEnvironments" value="^test$" />
<add key="AllowedProjectConfigurations" value="Test;Production" />
<add key="CanDeployRole" value="UberDeployer_Deploy" />
<add key="OnlyDeployableCheckedByDefault" value="true" />
</appSettings>
Opis:
VisibleEnvironments
— lista nazw środowisk (oddzielonych średnikiem), które będą widoczne na liście w aplikacji UberDeployer.WebApp. Każda nazwa może być wyrażeniem regularnym.DeployableEnvironments
— lista nazw środowisk (oddzielonych średnikiem), na które możliwe będzie wdrażanie. Każda nazwa może być wyrażeniem regularnym.AllowedProjectConfigurations
— lista nazw konfiguracji projektów, które będzę można wdrażać. Każda nazwa może być wyrażeniem regularnym.CanDeployRole
— nazwa grupy domenowej, do której musi należeć użytkownik, aby mógł on inicjować wdrożenia.OnlyDeployableCheckedByDefault
— domyślna wartość checkboxa, który decyduje o tym, czy aplikacja ma wyświetlać tylko projekty wdrażalne na aktualnie wybrane środowisko.