jenkinslamps 2.0

Jag har i en tidigare artikel beskrivit hur bygger ut sin Jenkins-server med lampor och denna artikel är en uppföljare.

Grön LED="Jätttefint"

Lamporna är en uppskattad finess i projektet jag jobbar i just nu. En dag fick vi plötsligt problem med våra lampor – ibland tändes både den röda och den gröna samtidigt och ibland släcktes båda. Detta sammanföll med att jenkinsservern hade minnesproblem och drog den, som det visade sig felaktiga, slutsatsen att detta var orsaken.

Vi gav oss på att förbättra felhanteringen så olika sorters fel från jenkinsservern hanterades utan att lamporna betedde sig konstigt. Kanske någon sorts filter?

När jag och kollegan Robert Nützman började riva i koden så passade vi på att förbättra applikationen på ett länge efterlängtat vis – vi tog bort den hårda kopplingen mellan röd/grön lampa och jenkins-jobb ok/fel och istället blev det en design med en lösare koppling mellan lampa och jenkins-jobb så att lampor utan förutbestämd betydelse kan konfigureras att kopplas mot ett eller flera jenkins-jobb. På så vis kan man också supporta flera lampor för flera brancher eller helt andra projekt som kör på samma CI-server och som håller till inom Tellstickens räckvidd.

Vi har just nu valt att ha lampor med följande funktion:

  • Grön LED som är tänd när alla jobb indikerar ok
  • Röd LED som tänds när commit-steget (unit-test) indikerar fel
  • Röd lava som indikerar att något av integrationstestjobben indikerar fel
  • Grön lava som indikerar att vår applikation är uppe i testmiljön

Konfigureringen ser nu ut så här:

<jenkinsUrl>http://your_jenkins_server/api/xml</jenkinsUrl>

URL till jenkins-serverns REST-api i XML-smak

<pollTimeMsec>10000</pollTimeMsec>

hur ofta jenkins-serverns status skall kontrolleras och alltså hur ofta lamporna ska uppdateras.

<turnOn>09:00</turnOn>
<turnOff>17:00</turnOff>
<activeHolidays>false</activeHolidays>

här kan man konfigurera lamporna att vara släckta på icke-kontorstid vilket är bra om man har Lava-lampor som drar en del energi jämfört med LEDs.

Därefter kommer sektionen där man deklarerar sina lampor och kopplar ihop dem med jenkinsjobb. Här konfigureras två lampor som ges namnen myFirstLava och mySecondLava och kommandona för att tända och släcka dem.

    <lamps>
        <lamp>
            <name>myFirstLava</name>
            <description>All jobs ok</description>
            <onCommand>"C:\\Program Files (x86)\\Telldus\\tdtool.exe" --on 1</onCommand>
            <offCommand>"C:\\Program Files (x86)\\Telldus\\tdtool.exe" --off 1</offCommand>
            <jobs>
                <job>unit-test</job>
                <job>integration-test</job>
            </jobs>
            <actions>
                <whenAllJobsOk>on</whenAllJobsOk>
                <whenAnyJobFails>off</whenAnyJobFails>
                <whenAnyJobUndefined>off</whenAnyJobUndefined>
            </actions>
        </lamp>
        <lamp>
            <name>mySecondLava</name>
            <description>Some job has failed</description>
            <onCommand>"C:\\Program Files (x86)\\Telldus\\tdtool.exe" --on 2</onCommand>
            <offCommand>"C:\\Program Files (x86)\\Telldus\\tdtool.exe" --off 2</offCommand>
            <jobs>
                <job>unit-test</job>
                <job>integration-test</job>
            </jobs>
            <actions>
                <whenAllJobsOk>off</whenAllJobsOk>
                <whenAnyJobFails>on</whenAnyJobFails>
                <whenAnyJobUndefined>on</whenAnyJobUndefined>
            </actions>
        </lamp>
    </lamps>

Som framgår av konfigurationen kan man välja att slå på eller av lampan när en eller flera händelser inträffar:

  • whenAllJobsOk är sann när alla jenkins-jobb är ok
  • whenAnyJobFails är sann när något jenkins-jobb indikerar fel
  • whenAnyJobUndefined är sann när läget på något jenkins-jobb är okänt, pga kommunikationsfel eller att jenkins inte indikerar ok eller fail

I samband med testerna av den nya funktionen upptäcke vi att lamporna på oförklarligt sätt styrdes av och på även sedan vi stoppat applikationen jenkinslamps och dessutom stod med den strömlösa Telldus-adaptern i handen. Det visade sig att grannprojektet också hade kört igång jenkinslamps och hade samma IDn (1 och 2) på lamporna!

Lava-lamporna är visserligen charmiga och deras tröghet har en poäng, men den gröna syns för dåligt medan den röda är mycket vacker, vilket innebär att projektmedlemmar med dragningar åt det estetiska hållet kan misstänkas tappa en del av den där riktiga drivkraften att tända den trista gröna lampan istället för den spektakulärt vackra röda lampan. En grön LED lyser tydligt och vackert grönt och har dessutom längre livstid och en grönare miljöprofil.

Programkoden och instruktionerna uppdaterade:

  • Ladda ned den färdigbyggda zipen för jenkinslamps från bitbucket (eller bygg från source) och extrahera den i en folder, t.ex. C:\jenkinslamps-2.0
  • Anpassa config.xml
  • Starta med jenkinslamps.bat (lägg den förslagsvis i autostart)

IT Consultant at CAG Edge. Cloud and Continuous Delivery specialist, software developer and architect, Node.js, Java.

Publicerad i Continuous Delivery, Java, Test

Kategorier

WP to LinkedIn Auto Publish Powered By : XYZScripts.com