Instalacja SonarQube na Windows i MS SQL oraz analiza projektów .Net, .Net Core 2.0 i JavaScript

Instalacja SonarQube na Windows i MS SQL oraz analiza projektów .Net, .Net Core 2.0 i JavaScript

W dniu dzisiejszym zajmiemy się instalacją SonarQube na Windows i MS SQL oraz pierwszą analizą projektów .Net, .Net Core 2.0 i JavaScript. Informacje ogólne o SonarQube przedstawiłem w poprzedniej części – SonarQube, statyczna analiza i wysoka jakość kodu, tutaj znajdziesz jedynie informacje czysto techniczne dotyczące instalacji oraz konfiguracji.

Ponieważ post wyszedł dość obszerny postanowiłem zamieścić krótki spis treści:

  1. Instalacja SonarQube – informacje ogólne
  2. Instalacja bazy danych
  3. Instalacja serwera
  4. Uruchomienie SonarQube – problemy
  5. Uruchomienie Sonar Qube jako usługi Windows
  6. Pierwsza statyczna analiza kodu przy użyciu SonarQube
  7. Pierwsza analiza projektu .Net
  8. Pierwsza analiza projektu .Net Core 2.0
  9. Pierwsza analiza projektu JavaScript
  10. Podsumowanie

Zaczynajmy!

1. Instalacja SonarQube – informacje ogólne

SonarQube możemy uruchomić w dwóch trybach:

  1. Bez instalacji serwera – wystarczy podążać za tą instrukcją. Wszystko co trzeba zrobić to pobrać pliki SonarQube i odpalić odpowiedni program. Opcję tą trzeba traktować jako wersję “demonstracyjną”.
  2. Z instalacją serwera – o tym szerzej w niniejszym poście.

Instalację na maszynie lokalnej wykonałem posługując się instrukcją z dokumentacji SonarQube. Napotkałem jednak na parę problemów, które między innymi tutaj opiszę.

W momencie pisania tego artykułu instalacja SonarQube jest podzielona na dwie główne części: instalację bazy danych oraz instalację serwera. Podczas instalacji należy opierać się głównie na załączonej wyżej dokumentacji, gdyż można mieć pewność, że dopóki SonarQube będzie rozwijany dopóty ta dokumentacja będzie aktualna.

Niniejsze opisane przez mnie kroki można traktować jako uszczegółowienie oraz uzupełnienie. Znajdziesz tutaj również parę rozwiązań problemów, na które można wpaść podczas instalacji, a które nie są opisane w dokumentacji SonarQube. Przejdźmy zatem do rzeczy.

2. Instalacja bazy danych

1. Tworzymy pustą bazę danych o nazwie “sonar” w MS SQL.

2. SonarQube wymaga, aby baza danych była case-sensitive (CS) i accent-sensitive (AS), sprawdźmy zatem, czy spełniamy to wymaganie. Na nowo powstałej bazie wykonujemy zapytanie:

Mój wynik to wartość “Polish_CI_AS” dla “collation_name”. Jak widać nie zgadza się to z wymaganiami. Możemy dokonać korekty poprzez prosty skrypt SQL. Zamieniamy tylko niepasującą frazę CI (case-insensitive) na CS, reszta jest prawidłowa:

Po wykonaniu skryptu możemy wykonać jeszcze raz SELECT, aby upewnić się, czy zmiany zostały poprawnie naniesione.

3. Dodajemy uprawnienia do bazy danych. SonarQube może zostać skonfigurowany w dwóch trybach – SQL Authentication lub Integrated Security. Osobiście wybrałem SQL Authentication.

Aby umożliwić SonarQube zalogowanie się do bazy danych przy użyciu SQL Authentication należy utworzyć nowego użytkownika bazy danych. Wykorzystując MS SQL Management Studio możemy to zrobić w następującym miejscu:

Wypełniamy formularz podając “Login name”: “sonar_user”, zaznaczając SQL Server Authentication oraz wypełniając hasło.

Należy również odznaczyć opcje Enforce password expiration oraz User must change passord at next login, aby nie wystąpiły żadne problemy podczas próby połączenia SonarQube z bazą danych.

4. Następnie dodajemy nowo utworzonego użytkownika do bazy “sonar”:

Wybieramy opcję “SQL user with login” i w polu “User name” oraz “Login name” podajemy “sonar_user”. Użytkownik “sonar_user” powinien zostać dodany do drzewka z użytkownikami w bazie danych “sonar”.

5. Gdy mamy dodanego użytkownika do naszej bazy “sonar” musimy nadać mu uprawnienia “db_owner”. W tym celu klikamy ppm na nowo dodanego użytkownika i wybieramy opcję “properties”. Następnie przechodzimy do zakładki “Membership” i zaznaczamy checkbox obok wartości db_owner.

5. Ostatnia rzecz, jaką należy wykonać to upewnienie się, czy tryb logowania SQL Authentication jest włączony. Wchodzimy we właściwości serwera bazy danych:

i sprawdzamy, czy w zakładce “Security” mamy wybraną opcję “SQL Server and Windows Authentication mode”:

3. Instalacja serwera

1. Zaczynamy od oczywiście pobrania plików SonarQube ze głównej strony.

2. Otwieramy plik konfiguracyjny <install_directory>/conf/sonar.properties (install_directory to folder, który otrzymujemy po rozpakowaniu paczki pobranej ze strony SonarQube. Początkowo paczkę możemy rozpakować w dowolnym miejscu – folder pobrane, czy nawet pulpit).

3. Ponieważ wybraliśmy tryb SQL Authentication to odkomentowujemy następującą linie:

4. Następnie wyszukujemy, odkomentowujemy i ustawiamy “username” oraz “password”:

nazwę użytkownika oraz hasło podajemy oczywiście zgodnie z tym co podaliśmy tworząc użytkownika w bazie danych.

5. Tyle jeżeli chodzi o główne ustawienia konfiguracyjne SonarQube. Możemy spróbować odpalić program. Przechodzimy do folderu <install_directory>/bin/windows-x86-64 (lub windows-x86-32 jeżeli masz wersję 32 bitową systemu) i odpalamy StartSonar.bat. Jeżeli po dłuższej chwili zauważysz coś podobnego do:

to znaczy, że wszystko jest w porządku. Możesz przejść do dashboardu znajdującego się domyślnie pod adresem localhost:9000 i przeskoczyć do kolejnej, piątej sekcji niniejszego postu 🙂

Jeżeli jednak SonarQube nie odpala się prawidłowo (u mnie niestety tak było) sprawdź poniższe kroki, które wykonałem, aby wszystko uruchomić. Mam nadzieję, że to wystarczy, aby SonarQube ruszył również u Ciebie.

4. Uruchomienie SonarQube – problemy

Wykonując wszystkie wskazane kroki w dokumentacji SonarQube niestety nie udało mi się odpalić programu we właściwy sposób. Problem, który się u mnie pojawił to błąd połączenia z bazą danych (informacje o błędach można znaleźć w logach znajdujących się w <install_directory>/logs/web.txt – polecam Tobie również tam zajrzeć).

Zapis w logach był następujący: “The TCP/IP connection to the host localhost, port 1433 has failed”. Oto co zrobiłem, aby uporać się z problemem:

1. Po pierwsze sprawdziłem, czy firewall nie blokuje nam połączenia. Aby szybko zweryfikować, czy w tym tkwi problem możemy wyłączyć osłony i ponowić próbę odpalenia SonarQube. Niestety nie rozwiązało to problemu.

2. SonarQube łączy się z bazą danych przy pomocy protokołu TCP/IP. Kolejny krok to upewnienie się, czy mamy w naszym MS SQL Server tą opcję na pewno włączoną. Aby dokonać tego wystarczy podążać za tą instrukcją. Niestety to również nie rozwiązało problemu.

3. Następny krok to sprawdzenie właściwości protokołu TCP/IP. Wchodzimy w to samo miejsce, gdzie w powyższym kroku zmienialiśmy status na “Enabled”. Tym razem jednak wchodzimy we właściwości:Następnie na zakładce IP Addresses usuwamy wszystkim adresom wartości w TCP Dynamic Ports oraz ustawiamy wartość TCP Port na 1433.

Po tym zabiegu należy zrestartować SQL Server w ten sam sposób jak w kroku poprzednim.

4. Upewniłem się, że usługa SQL Server Browser jest włączona. W tym celu należy wejść w “usługi lokalne”, znaleźć na liście SQL Server Browser i jeżeli usługa nie jest włączona należy ją uruchomić.

Po wykonaniu powyższych kroków ostatecznie udało mi się uruchomić SonarQube. W tym momencie można przywrócić osłony firewalla i upewnić się, czy problem nie powróci. W moim przypadku okazało się, że firewall w niczym nie przeszkadza. Gdyby jednak wystąpił ponownie problem należy najprawdopodobniej utworzyć nową regułę przychodzącą dla portu 1433 i/lub włączyć opcję Allow an app or feature through Windows Firewall.

5. Uruchomienie Sonar Qube jako usługi Windows

Chodzi oczywiście o wyeliminowanie konieczności uruchamiania za każdym razem ręcznie SonarQube. Aby uruchomić SonarQube jako usługę systemu Windows wystarczy wykonać dwa proste kroki zgodnie z dokumentacją.

Od tego momentu SonarQube będzie działał na bieżąco w tle.

6. Pierwsza statyczna analiza kodu przy użyciu SonarQube

Aby móc dokonać analizy projektów w poszczególnych językach należy wykorzystać w tym celu pluginy. Dla każdego języka, który jest wspierany przez SonarQube istnieje dedykowany plugin. Listę wszystkich pluginów znajdziemy tutaj. Jak widać na samej górze jest sekcja “Code Analyzers” – to właśnie te wtyczki, które umożliwiają przeprowadzenie analizy dla poszczególnych języków.

Dodatkowo należy zainstalować odpowiedni tzw. skaner w zależności od narzędzi, których używamy do budowania naszego projektu. W przypadku .Net mamy dedykowany skaner dla MsBuild’a, natomiast w przypadku JavaScript, gdzie nie budujemy kodu SonarQube dostarcza ogólny “SonarQube scaner”.

7. Pierwsza analiza projektu .Net

Wykonujemy kroki opisane w tej sekcji dokumentacji SonarQube:

1. Zaczniemy od tego czego nie trzeba robić, a mianowicie nie trzeba instalować Code Analyzer’a SonarC# ponieważ jest on zawarty domyślnie w SonarQube. Także to już mamy gotowe.

2. Logujemy się do dashboardu SonarQube (localhost:9000) przy użyciu danych admin/admin.

3. Ponieważ to nasze pierwsze logowanie, na wstępie wyświetli nam się tutorial dotyczący założenia pierwszego projektu. Zostaniemy poproszeni o podanie nazwy dla tokena. Podajemy przykładowo nazwę “Example”, a następnie zostanie wygenerowany dla nas token, który należy zachować na później.

4. W kroku drugim wybieramy język, dla którego chcemy przeprowadzić analizę projektu. W przypadku .Net to oczywiście C#. Podajemy również nazwę projektu np. “CSharp”.

2. Jak można zauważyć po prawej stronie pokazały się informacje prezentujące w jaki sposób możemy wykonać analizę projektu. Zgodnie z zamieszczonymi tam krokami pobieramy skaner z tej strony (paczka do pobrania znajduje się na samej górze strony).

3. Rozpakowujemy pobrane pliki i wrzucamy w jakieś stałe miejsce (będziemy dodawać to miejsce do zmiennej środowiskowej dlatego musi być stałe) np. c:/sonar_csharp.

4. Dodajemy ścieżkę do skanera (c:/sonar_csharp) do zmiennej środowiskowej PATH.

5. Przechodzimy do c:/sonar_csharp i otwieramy plik SonarQube.Analysis. Odkomentowujemy dwa property:

Przy okazji uzupełniając je o właściwe wartości. Do “sonar.login” wklejamy wygenerowany wcześniej token.

6. Musimy się upewnić również, czy MsBuild jest dodany do zmiennej środowiskowej PATH (wystarczy odpalić cmd i wpisać “msbuild” – jeżeli komenda została znaleziona to na ten moment wszystko jest ok, jeżeli nie to dodajemy lokalizację właściwą dla naszej wersji Visual Studio. W przypadku VS 2017 jest to ścieżka C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin).

Wszystkie niezbędne konfiguracje zostały wykonane, możemy przystąpić do próby odpalenia analizy kodu:

1. Przechodzimy do folderu, gdzie znajduje się solucja projektu .net

2. Odpalamy konsolę cmd i wykonujemy kolejno komendy:

CSharp to nazwa projektu, którą podaliśmy dodając nowy projekt w dashboardzie SonarQube.

Uwaga – jeżeli podczas wykonywania komendy MsBuild wystąpiły problemy możliwe, że w zmiennej środowiskowej PATH mamy ścieżkę do starego MsBuild z folderu .Net frameworka. Należy to sprawdzić i zamienić na MsBuild, który jest dostarczany razem z VisualStudio (tak jak zostało to pokazane w punkcie 6).

Możemy wrócić do dashboardu (localhost:9000) i przejrzeć wygenerowany raport.

8. Pierwsza analiza projektu .Net Core 2.0

Z .Net Core niestety nie było już tak kolorowo. Ostatecznie nie udało mi się na ten moment wykonać statycznej analizy kodu projektu opartego o .Net Core 2.0. Jest to znany problem, nad którym zespół SonarQube już pracuje, więc można się spodziewać w niedługiej przyszłości wyeliminowania problemu i wsparcia projektów opartych o .Net Core 2.0.

Gdy to już nastąpi analizę projektu .Net Core 2.0 powinniśmy być w stanie wykonać analogicznie jak analizę zwykłego projektu .Net. Jedyna różnica to sposób budowania projektu – zamiast MsBuild będziemy zapewne musieli użyć komendy dotnet build.

Na ten moment – stay tuned 😉

9. Pierwsza analiza projektu JavaScript

1. Zakładamy nowy projekt na potrzeby analizy kodu JavaScript. Wchodzimy na dashboard SonarQube i w Administration -> Projects -> Management tworzymy nowy projekt. W moim przypadku utworzyłem nowy projekt o nazwie oraz kluczu “JavaScript”.

2. Aby móc wykonać analizę kodu JavaScript musimy zainstalować wspomniany wcześniej skaner. Możemy go znaleźć tutaj. Analogicznie, jak w przypadku skaner MsBuild – pobieramy, wrzucamy do jakiegoś stałego miejsca na dysku oraz dodajemy ścieżkę do folderu bin do zmiennej środowiskowej PATH (przykładowo C:\sonar_js\bin). Następnie wchodzimy do <install_directory>/conf/sonar-scanner.properties i odkomentowujemy linę:

3. Do analizy projektów JavaScript służy plugin SonarJS. SonarQube, podobnie jak w przypadku pluginu dla C#, zawiera go domyślnie także nie musimy ręcznie go instalować.

4. Przechodzimy do analizy projektu. Odpalamy konsolę cmd w folderze z naszą aplikacją JavaScript i korzystamy z komendy:

5. Po zakończonej analizie możemy przejść do dashboardu SonarQube i przejrzeć raport:

10. Podsumowanie

Pomijając parę problemów dotyczących uruchomienia SonarQube na Windows i MS SQL konfiguracja przebiegła całkiem bezproblemowo. Dodanie nowego projektu to kwestia paru minut, dlatego myślę, że taka inwestycja jest warta uwagi. Więcej informacji o SonarQube można znaleźć również w poprzedniej części – SonarQube, statyczna analiza i wysoka jakość kodu.