Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Użycie slotu zamiast UAT #66

Open
bpelikan opened this issue Jun 5, 2019 · 7 comments
Open

Użycie slotu zamiast UAT #66

bpelikan opened this issue Jun 5, 2019 · 7 comments

Comments

@bpelikan
Copy link

bpelikan commented Jun 5, 2019

W nawiązaniu do tematu rzuconego na rg-devie dotyczącego użycia slotów zamiast UAT.
W wolnej chwili stworzyłem pipeline, który to rozwiązuje, wstępnie przetestowany u siebie:

  • ✅ => podniesienie planu *
  • stworzenie testowego slotu *
  • deploy na testowy slot
  • ✅ => zamiana slotu
  • usunięcie slotów *
  • obniżenie planu *

Pytanie do @ptrstpp950 czy dokładnie o taki pipeline chodziło?
Może masz jeszcze jakieś pomysły/sugestie?

@ptrstpp950
Copy link
Member

Widać, że wyraziłem się niejasno. Pipeline nie ma na celu wyłączenie UAT, ale zrobienie lepszego deploymentu na produkcję. Natomiast Twój opis zgadza się w 100%. Jeszcze jak by dołożyć do tego podniesienie planu bazy danych to plan zostałby zrealizowany w 200% procentach a deployment byłby super!

@bpelikan
Copy link
Author

Możliwe, że źle ująłem to w słowa. Chodziło oczywiście o przeniesienie UAT z osobnego Web App na slot testowy, tak żeby był on tworzony tuż przed deploymentem, a po przetestowaniu i przeniesieniu na produkcję go zdejmować?


Tak obecnie prezentuje się pipeline:
20190612000803
Widzę, że pobranie YAML'u jest dostępne tylko z poziomu konkretnego zadania. Jest możliwość zdefiniowania całego pipeline'u w YAML? Czy jest to dostępne tylko dla builda, a w release pozostaje tylko wyklikanie tego ręcznie?

@ptrstpp950
Copy link
Member

Dowiem się jutro - będę widzial lepszych specialistów i dam znać. Jak się nie da to poproszę cię o poszczególne kroki

@bpelikan
Copy link
Author

Może lepiej będzie najpierw opisać ten pipeline, a jeśli będzie możliwość napisania tego w YAMLu to wtedy go napisać.
Pytanie co zrobić ze skryptami PowerShellowymi?
Są dwie opcje:

  • ręczne wklepywanie ich do kolejnych tasków (Inline Script)
  • wrzucenie ich do kodu źródłowego tak żeby były dołączane do builda i wyciągać je z artefaktu (Script File Path)

Według mnie druga opcja jest lepsza.

@ptrstpp950
Copy link
Member

ptrstpp950 commented Jun 20, 2019 via email

bpelikan referenced this issue in bpelikan/dotnetomaniak Jun 21, 2019
bpelikan referenced this issue in bpelikan/dotnetomaniak Jun 21, 2019
bpelikan referenced this issue in bpelikan/dotnetomaniak Jun 21, 2019
bpelikan referenced this issue in bpelikan/dotnetomaniak Jun 21, 2019
@bpelikan
Copy link
Author

Mam nadzieję, że opis jest wystarczający 😉

Pipeline

Stage name Template name After Stage Trrigers Uwagi
Scale up Empty job Pre-deployment approvals
Create slot Empty job Scale up
DB Scale up Empty job Scale up
Deploy to slot Azure App Service deployment with slot
  • Create slot
  • DB Scale up
Wyłączony drugi task: Manage Azure App Service - Slot Swap
Swap to Production Azure App Service deployment with slot Deploy to slot
  • Pre-deployment approvals
  • Wyłączony pierwszy task: Deploy Azure App Service to Slot
Delete slots Empty job Swap to Production
Scale down Empty job Delete slots
DB scale down Empty job Delete slots

Etapy utworzone jako Empty job posiadają dwa zadania:

  • Extract files
  • Azure PowerShell

Extract files

  • Parametry:
    Archive file patterns : $(System.DefaultWorkingDirectory)/*.zip
    Destination folder : $(System.DefaultWorkingDirectory)/artifactContent

Azure PowerShell

Stage Script Path Script Arguments
Scale up $(System.DefaultWorkingDirectory)/$(PathToScript)/ScaleAppServicePlan.ps1 -ResourceGroupName $(ResourceGroupName) -ServicePlanName $(ServicePlanName) -Tier $(Tier)
Create slot $(System.DefaultWorkingDirectory)/$(PathToScript)/CreateSlot.ps1 -ResourceGroupName $(ResourceGroupName) -ServicePlanName $(ServicePlanName) -WebAppServiceName $(WebAppServiceName) -SlotName $(SlotName)
DB Scale up $(System.DefaultWorkingDirectory)/$(PathToScript)/ScaleDatabasePricingTier.ps1 -ServicePrincipalApplicationID $(ServicePrincipalApplicationID) -ServicePrincipalPass $(ServicePrincipalPass) -ServicePrincipalTenantID $(ServicePrincipalTenantID) -ResourceGroupName $(ResourceGroupName) -SQLServerName $(SQLServerName) -SQLDBName $(SQLDBName) -DBTier $(DBTier) -DBCapacity $(DBCapacity) -DBMaxSize $(DBMaxSize)
Delete slots $(System.DefaultWorkingDirectory)/$(PathToScript)/RemoveAllSlots.ps1 -ResourceGroupName $(ResourceGroupName) -WebAppServiceName $(WebAppServiceName)
Scale down $(System.DefaultWorkingDirectory)/$(PathToScript)/ScaleAppServicePlan.ps1 -ResourceGroupName $(ResourceGroupName) -ServicePlanName $(ServicePlanName) -Tier $(Tier)
DB scale down $(System.DefaultWorkingDirectory)/$(PathToScript)/ScaleDatabasePricingTier.ps1 -ServicePrincipalApplicationID $(ServicePrincipalApplicationID) -ServicePrincipalPass $(ServicePrincipalPass) -ServicePrincipalTenantID $(ServicePrincipalTenantID) -ResourceGroupName $(ResourceGroupName) -SQLServerName $(SQLServerName) -SQLDBName $(SQLDBName) -DBTier $(DBTier) -DBCapacity $(DBCapacity) -DBMaxSize $(DBMaxSize)

Fail on Standard Error : True
Azure PowerShell Version : Latest installed version

Nie wiedzieć dlaczego akurat w skrypcie ScaleDatabasePricingTier konieczne było logowanie bezpośrednio z poziomu skryptu.

Azure App Service deployment with slot

Stage App Service name Resource group Source Slot
Deploy to slot $(WebAppServiceName) $(ResourceGroupName) $(SlotName)
Swap to Production $(WebAppServiceName) $(ResourceGroupName) $(SlotName)

Zmienne:

PathToScript : artifactContent/Content/D_C/a/1/s/v3.0/Source/Web/obj/Release/Package/PackageTmp/bin/DeploymentScripts - ścieżka do plików ze skryptami
DBCapacity: DTU bazy danych (DB Scale up, DB scale down)
DBMaxSize Maksymalna pojemność bazy (DB Scale up, DB scale down)
DBTier Tier dla bazy (DB Scale up, DB scale down)
ResourceGroupName: Nazwa grupy zasobów
ServicePlanName: Nazwa service planu Web App
WebAppServiceName: Nazwa Web App
SlotName: Nazwa testowego slotu
SQLDBName: Nazwa bazy danych
SQLServerName: Nazwa serwera bazy danych
Tier: Tier dla Web App (Scale up, Scale down)

ServicePrincipalApplicationID, ServicePrincipalPass, ServicePrincipalTenantID : parametry do zalogowania się do Azure CLI za pomocą service principal (LINK).

@bpelikan
Copy link
Author

bpelikan commented Jun 21, 2019

Próbowałem jeszcze poszukać informacji, czy da się przeskoczyć etap Swap to Production w przypadku jego odrzucenia, żeby plany dla Web Appa i bazy danych się zmniejszyły ale nic nie znalazłem, więc pozostaje ręczny deploy etapu Delete slots po odrzuceniu Swap to Production.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants