Skip to content

Latest commit

 

History

History
398 lines (303 loc) · 19.9 KB

Configuration Guide PL.md

File metadata and controls

398 lines (303 loc) · 19.9 KB

Konfiguracja ÜberDeployera

Konfiguracja serwisu WCF UberDeployer.Agent.NtService

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.

Konfiguracja projektów — elementy wspólne

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).

Konfiguracja usług NT

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".

Konfiguracja aplikacji webowych

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ż element AppPoolInfos.
  • 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".

Konfiguracja aplikacji harmonogramu zadań

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".

Konfiguracja aplikacji terminalowych

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".

Konfiguracja projektów bazodanowych

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ż element DatabaseServers.

Każdy z tych elementów można nadpisać dla konkretnego środowiska — patrz element DbProjectConfigurationOverride w sekcji "Konfiguracja środowisk".

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 element EnableFailoverClusteringForNtServices), 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 element EnableFailoverClusteringForNtServices).

  • 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ż element WebAppProjectConfigurations.
    • 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 element EnableFailoverClusteringForNtServices). 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ż element AppPoolInfos.
    • 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ż element DatabaseServers.

Konfiguracja aplikacji webowej UberDeployer.WebApp

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.