Prezentacja z konferencji SQLDay 2017, Wrocław 16.05.2017.
Wdrażanie kolejnych wersji projektów SSIS jest dość monotonną ręczną pracą z poziomu SQL Server Data Tools. Rebuild/Deploy/Validate/Execute. Kiedy dochodzi do tego system kontroli wersji, branch, merge, dodawanie pakietów do projektów i przełączanie się między środowiskami DEV/TEST/PROD to robi się jeszcze nudniej.
Na sesji zaprezentuję jak można przerzucić te wszystkie czynności na serwer. Zobaczysz jak wykorzystać do tego Powershell i dostępne API .NET. Dodam do tego kontrolę wersji w TFS i przekonasz się, że testowanie i dostarczanie kolejnych wersji projektów wcale nie musi być tak uciążliwe. Zobaczysz na co zwrócić uwagę projektując własne rozwiązanie, z których zasobów skorzystać, jakie są ograniczenia i ich próby obejścia.
1. Zautomatyzuj swój proces wdrażania projektów SSIS
Bartosz Ratajczyk
SQL Server Consultant, 7N
b.ratajczyk@gmail.com
2.
3. SQLDay 2017
O czym będzie?
• O ułatwianiu sobie życia, czyli jak pozbyć się nudnej pracy
• Wdrażanie projektów jednym skryptem
–lub jednym/dwoma krokami w TFS
• O tym jak przygotować sobie wszystkie konfiguracje
• O różnych opcjach i przeszkodach które nas czekają
4. SQLDay 2017
O czym nie będzie?
• O wdrażaniu pojedynczych pakietów
• O dobrych praktykach
• O DevOps jako takim
5. SQLDay 2017
Bartosz Ratajczyk
• SQL Server Consultant – 7N
• Trener – CBSG, Stacja.IT
• Prelegent na konferencjach,
spotkaniach grup PLSSUG
• MCSE, MCT
http://bartekr.net b.ratajczyk@gmail.com
6. SQLDay 2017
Z jakich kroków może się składać wdrożenie?
1. Kompilacja projektu
2. Utworzenie folderu dla projektu
3. Wdrożenie na serwer
4. Utworzenie środowiska
5. Ustawienie referencji środowisko – projekt
6. Utworzenie zmiennych środowiskowych
7. Konfiguracja projektu
8. Uruchomienie walidacji
9. Weryfikacja walidacji
10. Uruchomienie testowe
• Testowanie (NBi, LegiTest)
• Sprawdzanie zgodności ze standardami (Jamie Thomson)
7. SQLDay 2017
Podnosimy poziom trudności
• Kontrola wersji
–Gałąź DEV, TEST, PROD
• Kilka środowisk
–Serwer DEV, TEST, PREPROD, PROD
• Różne konfiguracje
–Ścieżki do katalogów na różnych serwerach
–Połączenia do różnych baz danych
• Wdrażamy na raz po kilka projektów
10. SQLDay 2017
Problemy z kompilacją
SQLDay 2017
• EncryptAllWithPassword, EncryptSensitiveWithPassword
– wymaga ręcznego podania hasła
• Potrafi się zawiesić
13. SQLDay 2017
SSISMSBuild
• Dedykowane zadania kompilacji i wdrażania
–DeploymentFileCompilerTask
–DeployProjectToCatalogTask
• Kod źródłowy do samodzielnej kompilacji
http://sqlsrvintegrationsrv.codeplex.com
24. SQLDay 2017
Configuration Manager - wykorzystanie
• Różne wartości parametrów dla różnych konfiguracji
• Przechowywanie danych w plikach .dtproj
• Można wykorzystać jako konfiguracje projektu w
środowiskach
• Brak jednolitego podglądu
35. SQLDay 2017
Co by tu jeszcze można?
• Testy NBi
• Weryfikacja zgodności z konwencją Jamie Thomsona
36. SQLDay 2017
A jak z tym TFS?
• Własny proces budowania/wdrażania w TFS
• Można rozbudować o kroki PowerShell do zarządzania
środowiskami, walidacją, …
38. SQLDay 2017
Takie to proste!
• Praca nadal jest nudna, ale to komputer ją wykonuje
• Do automatyzacji wykorzystaj
– MSBuild
– Powershell
– SMO
• Zaangażuj dodatkowe oprogramowanie do CI/CD
Notes de l'éditeur
EncryptAllWithPassword, EncryptSensitiveWithPassword wymaga ręcznego podania hasła przy kompilacji
devenv.com
Plik .ispac to po prostu .zip z innym rozszerzeniem.
Zawiera pliki pakietów, managerów połączeń, parametrów projektu – dokładnie te same co w naszym projekcie.
Dodatkowo zawiera dwa pliki – manifest i informacje o typach danych poszczególnych elementów.
Nie zawiera plików, które mamy w sekcji Miscellaneous, bo one nie są serwerowi potrzebne do szczęścia
MSBuild domyślnie nie wie co to za typ projektu i musimy mu trochę pomóc
Jak skompilować samodzielnie:
https://www.simple-talk.com/sql/ssis/deployment-automation-for-sql-server-integration-services-ssis/
https://seddryck.wordpress.com/2016/12/27/building-the-msbuild-tasks-for-ssis-2016/
Trzy / cztery elementy do napisania: Project, UsingTask, Target i opcjonalnie parametryzacja – ItemGroup, ParamGroup.
Ponieważ plik Build.proj umieszczam w tym samym katalogu co projekt SSIS podaję tylko nazwę pliku projektu – będzie pobrana jako ścieżka względna.
Tutaj wybrano ItemGroup, ale PropertyGroup też będzie dobre, może nawet lepsze, bo Property w ramach PropertyGroup ma jedną wartość, a Item w ramach ItemGroup może mieć kilka (jak tablica)
* - jest w internecie kilka zgłoszonych przypadków, kiedy wdrażanie z poziomu VS działało bez zarzutu, natomiast wdrażanie tego samego przez /Silent powodowało błedy
Tym razem zamiast ItemGroup jest PropertyGroup; ogólnie nie ma to większego znaczenie, jeśli nie chcemy nadpisywać wartościami z zewnątrz; jeśli chcemy, to PropertyGroup
Demo 01: Kompilacja za pomocą pliku Build.proj (z linii komend)
Demo 02: Wdrożenie za pomocą pliku Deploy.proj (z linii komend)
SMO
http://muxtonmumbles.blogspot.com/2013/11/ssis-project-deployment-and-visual.html
SSISBuild
https://www.nuget.org/packages/SSISBuild/
https://github.com/rtumaykin/ssis-build/
PowerShell cmdlets + cmd tools
Nie wymaga żadnych dodatkowych bibliotek czy instalacji, nie zależy od VS
PSCI
https://github.com/ObjectivityLtd/PSCI
Zależy od VS
IsDeploymentCmd
https://github.com/tkwj/ISDeploymentCmd
Jeśli nazwa projektu zawiera kropki, to podczas tworzenia pliku ispac ostatni człon nazwy po kropce jest ignorowany – zarówno w kompilacji z poziomu Visual Studio jak i przez SSISMSBuild
Podejście z SMO i PowerShell jest wrażliwe na wersję assembly, np. w moim przypadku dla SSIS 2012 bibliotekę ManagedDTS 11.0 miałem tylko w wersji 32 bit i kompilacja musiała być wykonywana w PowerShell 32bit
Żeby obejść problem z kropkami w nazwie bez konieczności dostosowywania kodu SSISMSBuild możemy dopisać krok, który zmieni nazwę wygenerowanego pliku .ispac
Przykłady – Koen Veerbeck: http://blogs.lessthandot.com/index.php/datamgmt/dbadmin/mssqlserveradmin/ssis-deployment-with-powershell-adding/
Hans Michiels – wszystko w T-SQL: https://www.hansmichiels.com/2016/11/04/how-to-automate-your-ssis-package-deployment-and-configuration-ssis-series/#step4