Wcześniej nie pisałem nigdy o naszym produkcie, który nazywa się Visual Studio Team Services. Nie będę się teraz o nim bardzo rozpisywał, bo nie o tym jest ten post, ale kilka zdań wprowadzenia postanowiłem napisać – szczególnie jeżeli nie miałeś styczność wcześniej.
Jeżeli wiesz co to jest VSTS /TFS przejdź od razu do sekcji MySQL.
VSTS / TFS
Visual Studio Team Services (VSTS) jest usługą chmurową, która wspomaga pełny proces zarządzania cyklem życia aplikacji – Application Lifecycle Management (ALM), w tym wspomaga proces dostarczenia praktyk DevOps.
Jest też analogiczny produkt, który można wdrożyć w lokalnej infrastrukturze Team Foundation Server (TFS).
Chcesz wiedzieć więcej o VSTS / TFS? Zapraszam na stronę produktową oraz do dokumentacji.
Agent
Niezależnie czy używasz VSTS czy TFS, cała siła wykonawcza narzędzia bazuje na agentach. Agent to nic innego jak maszyna wirtualna (lub fizyczna) z zainstalowanym zestawem narzędzi, które mają wykonać określone zadanie w procesie Build oraz Release.
Agent może być oparty o system Windows lub Linux, z czego dla platformy chmurowej VSTS można używać dzierżawionych maszyn (Hosted pool) tylko na proces wykonywania zadań. Hostowany agent oparty jest o system Windows i ma już zainstalowany pewien zestaw narzędzi (spacyfikacja w dokumentacji). Na dzień dzisiejszy są też hostowane agenty oparte o system Linux, lecz ich status jest na razie Preview.
Definicje Build / Release
Zadania, które ma wykonać agent opisane są w definicjach Build oraz Release. Sam VSTS / TFS ma wbudowaną kolekcję najróżniejszych zadań (Tasks), ale oczywiście to co jest out-of-box nie sprosta wymaganiom całego świata, dlatego VSTS / TFS można rozszerzać za po mocą dodatków, które publikowane są w Visual Studio Marketplace. Jest też opcja pisania własnych dodatków bez publikacji publicznej.

Jak pisać rozszerzenia VSTS / TFS? Zapraszam do dokumentacji.
MySQL Server
No to przejdźmy do właściwej części tego wpisu… Pracując z jednym partnerem, który wytwarza własne oprogramowanie i hostuje je na Microsoft Azure, podczas warsztatów z optymalizacji architektury wyszło, że jednym z elementów jest serwer baz danych MySQL. Celem na koniec dnia po za optymalizacją architektury było dostarczanie rozwiązania w ramach praktyk DevOps w tym zmian do struktury bazy danych MySQL.
VSTS nie posiada wbudowanych Tasks dla serwera MySQL. Rozwiązanie problemu w takim przypadku jest bardzo proste – agent musi zawierać zestaw narzędzi, które mogą być użyte w definicjach Build lub Release i pod zadanie należy podstawić własny skrypt, który to narzędzie użyje. Scenariusz ten jest bardzo popularny, natomiast wymaga w takiej sytuacji utrzymywania własnego agenta.
Partner jednak nie chciał utrzymywać własnych agentów dla VSTS, a korzystać z dzierżawionych w ramach chmury Microsoft Azure. Jak wspomniałem hostowane agenty (produkcyjne, nie Preview) oparte są o systemu Windows z określonym zestawem narzędzi, a w nim jest brak narzędzi dla serwera MySQL.
Korzystając z biblioteki MySQL Connector/Net, napisałem skrypt PowerShell, który wczytuje bibliotekę MySQL.Data.dll, a następnie już z poziomu PowerShell wykonywane są zapytania lub całe skrypty w bazie danych MySQL. Działa i na tym można by zakończyć temat, ale…
… ale idąc dalej, postanowiłem napisać rozszerzenie do VSTS / TFS, które wspomaga wykonywanie komend ad-hoc lub skryptów MySQL z poziomu hostowanych jak i prywatnych agentów opartych o system Windows.
Rozszerzenie zawiera 3 zadania, które są dostępne w Task catalog, w sekcji Utility.

- Run MySQL command – zadanie to wykonuje zapytania ad-hoc.
- Run MySQL script – zadanie wczytuje zawartość skryptu .sql i wykonuje je po stronie serwera.
- Run MySQL scripts – zadanie wczytuje po kolei wszystkie skrypty .sql, które znajdują się w podanym katalogu i wykonuje je po stronie serwera.

Rozszerzenie MySQL Toolkit for Windows możesz zainstalować bezpośrednio w VSTS za pomocą Visual Studio Marketplace (aka.ms/vstsmysqlwin) lub ściągnąć plik .vsix i wgrać go do swojego serwera TFS.
Cały projekt udostępniony jest w postaci kodu źródłowego na GitHub pod adresem aka.ms/vstsmysqlwinsrc.
Komentarze, błędy, pomysły na rozwój mile widziane 🙂 – najlepiej zgłaszaj je za pośrednictwem GitHub Issue Tracker.