6 x b2run

Zum 6. Mal war ich dieses Jahr beim b2run dabei. 2011 und 2012 einfach nur so. 2013 und 2014 dann zur Abwechslung mal in Kostümen:

b2run 2013 - Zieleinlauf Huckepack newkids2014

2015 habe ich dann mal Gas gegeben und die Qualizeit unterboten, sodass ich dieses Jahr aus dem vordersten Block starten konnte :)

…und es lief gut, obwohl ich für diese kurzen Strecken (6,1km) eigentlich nie trainiere. Aber noch mal zum Start: Die Organisation der ganzen Veranstaltung wurde dieses Jahr etwas umgestellt und jeder bekam eine Startzeit und nur kurz vor dieser durfte er in den Startblock. Eine sehr sinnvolle Änderung nach dem Gedrängel der letzten Jahre. Leider haben die Veranstalter allerdings nicht daran gedacht, dass sich v.a. die schnelleren Läufer durchaus warmlaufen, schließlich möchte man eine Verletzung vermeiden. Da Block A und B die gleiche Startzeit hatten, Block A allerdings nur durch B zugänglich war, hatte man also die Wahl: Entweder man versucht sich nach dem Warmlaufen durch den kompletten Block B zu kämpfen oder es bleiben 20mx50m für ein paar Aufwärmübungen. Endlich in Block A angekommen, bin ich also wie ein Tiger im Käfig auf und ab gelaufen. Kurz vor dem Start wurde dann auch noch der hintere Block geöffnet, was für reichlich Gedrängel sorgte. Nun gut, so bleibt etwas Potential für nächstes Jahr ;)
Nach dem Startschuss ging alles ganz fix. Nach 1-2-3 Kurven hatte sich das Feld schon deutlich auseinander gezogen und das berüchtigte Slalom-Laufen blieb aus. Die ersten 3km liefen wirklich sehr gut, nur bei KM 4 (Anstieg) und anschließend bei KM 5 musste ich etwas durchatmen. KM 6 und der Zielsprint waren dann zwar noch mal eine Herausforderung, mit dem Zähne zusammenbeißen kenne ich mich aber mittlerweile ganz gut aus :mrgreen:
Im Ziel nach 6,1km stand dann eine 22:01,1min auf der Uhr (Platz 90) und somit eine neue PB und auch die Quali für nächstes Jahr ist sicher :)

DSC_1253
Teamwertung Platz 8 :)

Übrigens, wenn Du über meine neuen Posts benachrichtigt werden möchtest, einfach rechts Deine Emailadresse eintragen und/oder meine Facebook-Seite liken :)

Clean the slaves

In my current project we’re generating jobs for each branch of each project with the help of the Jenkins Job DSL. Branches are created for each feature and bugfix – hotfixes are branched from release branches but these are treated a little differently. Anyway, as you can imagine we tend to have a lot of branches even though we delete them once they’re merged back into the master. Since we also have a lot of different jobs for building/testing/deploying, the amount of jobs explodes quite quickly ;)
Also, to have acceptable job execution times and fast feedback for the developers, we’re using multiple slaves.

Problem

When deleting a job, e.g. because the branch is removed, its workspace on the slave is not deleted. This is a little annoying since it’s wasting a lot of space on the slaves’ disks and in the past required some manual effort to clean them up. Luckily, Jenkins provides some nice APIs :)

Solution

We created a job which is executing a “system groovy script” (important!) and must be run on the Jenkins master. It simply runs through all slaves, checks if their workspace contains a folder which is orphaned and deletes it. And yes, it is as simple as it sounds. Just a few lines of code which are run after the job generation and all orphaned workspaces are removed :mrgreen:

import hudson.model.*
import hudson.node_monitors.*
import jenkins.model.*

for (node in Jenkins.instance.nodes) {
    computer = node.toComputer()
    if (computer.getChannel() == null) {
        continue
    }

    def rootPath = node.getWorkspaceRoot()
    def space = DiskSpaceMonitor.DESCRIPTOR.get(computer)

    println "Checking node ${node.name}..."
    println "Got path ${rootPath} and remaining space ${space}"

    rootPath.list().sort().each { dir ->
        if (!Jenkins.instance.getItem(dir.name)) {
            println "${dir} orphaned. Deleting..."
            dir.deleteRecursive()
        } else {
            println "${dir} still in use. Skipping."
        }
    }
}