niedziela, 21 grudnia 2014

Jenkins and gradle - cooperation with sonar

This is my first english content on this blog. My native language is Polish.
I know, that my english is not perfect, so thank you for your understanding.
Initially this blog was created as English-language. Unfortunately I afraid of my grammar mistake, so I decided to return to my native language.


But end of year is good opportunity to new provisions relating to change content on foregin language.


Ok, let's start :)



Goal for today is Integration Continuous Integration and Continuous Inspection for Gradle applications.

First we should set proper setting in gradle script. This is quite easy :
I create script as above because this is very convienient way to potencial reuse it in next project configurations.
Fine, is seems to easy integration Jenkins and Sonar, but in practice I've found some complication.
Plugin delivered with Jenkins for me not work properly with sonar.
For me, it is appropriate to rely on the power and flexibility of Gradle.
It seems to me that this solution is quite obvious.
Gradle integrate very well with Sonar even if we say about applications based on Java 8.
This solution allow to run process invoke gradle command as : gradle sonarrunner.
If we click on http://localhost:9000/  URL, we will see Sonar dashboard.
You can immediately take a look at this and find out your project analysis.












Now, let's we go on to Jenkins settings. I expect, that project should be look like below.












This is pretty simple to do again.
For one thing, you must install plugin sidebar. This is very useful plugin,
that allows to define some url link and set associated with him icon. Then you will see result as picture above.











Now, what you should do is define gradle task as below.

















When you start building before configuration Jenkins task, you’ll see something like below :

As you can see Jenkins launch sonar task, then sonar have done a good job and analized your source code. If you go to Jenkins dashboard and click on new created URL you’ll see a analysis what you need.

That all.






poniedziałek, 15 grudnia 2014

Problem&Solution Property-placeholder + @Configuration + @Value = conversion problem

Problem wygląda następująco :
przy próbie wstrzelenia właściwości -> użycie @Value dostaję wyjątki świadczące o złej konwersji Stringa na Integera lub IllegalArgumentException przy próbie wstrzelenia wartości logiczej boolean.

Opis i rozwiązanie poniżej. Problem jest prosty ale czasem może się przytrafić.

Czas rozwiązania : 5 min (tylko ja wiedziałem czego szukać i czego brakuje, ale może komuś to pomoże)




Plik z właściwościami wygląda tak:

Klasa korzystająca z tych właściwości wygląda tak :
Ale podczas testu dostaję wyjątek :
oraz jak wartość  hbm2ddlAuto zamienie na Stringa :

Dzieje się tak ponieważ Spring nie ma załadowanego PropertyPlaceHolderConfigurera.
PropertyPlaceHolderConfigurer pozwala na externalizacje właściwości , dzięki czemu możesz oddzielić plik z właściowościami z konfiguracją projektu, zarówno w XML jak i w JavaConfig. Podczas działania programu PropertyPlaceholderConfigurer pobiera metadane i podmienia wartości dla ${someValue} w pliku xml czy w JavaConfig przy użyciu @Value.
Co może być jeszcze ważne PropertyPlaceholderConfigurer spodziewa się znaleźć dany plik na Twoim classpath, jeśli znajduje się gdzieś indziej można użyć :


Dzięki, któremu potrafi w locie np kowertować String -> Boolean , String -> Integter , etc

Rozwiązanie :
Dodać :

lub w przypadku JavaConfig :
Wtedy wszystko wraca do normy.
Dokładniejsze informacje znajdziesz w tym poście.

piątek, 12 grudnia 2014

Jenkins & play deploy on netty server

Problem :
Odpalanie i uruchomienie aplikacji Play pod osłoną Netty z wykorzystaniem Jenkinsa.

Rozwiązanie : Bazując na skryptach bash'a jest to proste do zrobienia.

Czas : 8 godz (google + stackoverflow research)





1. Odpalamy proces wytwórczy play'a

2. Usuwamy żyjące procesy o nazwie 'playApp' (application name)

3. Opalamy aplikację w osłonie Netty w tle (& na końcu)  + nohup (jako daemon niezwiązany z żadnym terminalem)

Ten punkt czasem nie działa, jest różnica pomiędzy nowym a starym Jenkinsem
wtedy użyj coś na kształt :

czasem potrzebne będzie usunięcie pliku  :RUNNING_PID

rm -f /home/jenkins/.jenkins/workspace/OGW_BEtarget/universal/stage/RUNNING_PID

BUILD_ID=runInBackGround nohup ./target/universal/stage/bin/playApp &
zamiast :

nohup ./target/universal/state/bin/playApp &


Tyle.


czwartek, 4 grudnia 2014

DB-Engines Ranking

W top ten baz danych wpadły trzy bazy typu NoSQL :
   - MongoDB - 5miejsce
   - Cassandra - 9 miejsce
   - Redis - 10 miejsce
 

Ranking silników baz badanych : http://db-engines.com/en/ranking

Na tej podstawie obliczano miejsce rankingowe : http://db-engines.com/en/ranking_definition

Warto spojrzyć na tę stronę ponieważ fajnie są skatalogowane bazy pod względem zastosowania i rodzaju, a obliczanie punktów rankingowych zrobiono w bardzo fajny sposób