[Quicktip] Wie man go get und Atlasssian Stash bzw. Gitlab zusammen bringt

In meiner Tätigkeit als Jenkins Admin hat mir das Thema „go get“ und Stash viel Kopfzerbrechen bereitet. Letztendlich ist „go get“ eine Art Alias für git pull, jedoch wird da einige Magic angewendet. Im Normalfall – also mit github und auch plain git Repos funktioniert das ganze wunderbar, sobald man aber Software wie Gitlab oder Stash verwendet, wird es etwas problematisch. Zum einen ist das „.git“, welches sowohl Gitlab als auch Stash an jedes Repo hängen ein Problem, zum anderen aber auch SSH über alternative Ports.

Zum Problem der „.git“ Endung: hängt einfach ein weiteres „.git“ an euren „go get“ Command. Also:

go get git.mydomain.com/foo/bar.git.git

Etwas kniffliger ist die Verwendung eines alternativen Ports und ssh. Stash macht nämlich genau das – der ssh Port ist 7999 in der Default Config. Aber auch hierfür gibt es eine Lösung. Dazu müsst ihr die Datei „.gitconfig“ in eurem Home Folder editieren bzw. anlegen. Die Datei muss dann so aussehen:

[url "ssh://git@stash.yourdomain.com:7999/"]
insteadOf = https://stash.yourdomain.de/

Sobald ihr nun einen Checkout auf

https://stash.yourdomain.de/foo/bar.git 

macht, biegt Git diesen Request auf

ssh://git@stash.yourdomain.com:7999/foo/bar.git

um. Somit könnt ihr auf andere Ports gehen, komplett auf andere Domains umschreiben usw.

[Quicktip] Vagrant up kann die Netzwerkinterfaces nicht starten

Wenn ihr mit

vagrant up

eine virtuelle Maschine starten wollt und während des Hochfahrens die Fehlermeldung kommt, dass das Interface eth1 (oder eth2 usw.) nicht hochgefahren werden konnte, dann probiert folgendes:

  • Virtualbox öffnen
  • die laufende Vagrant Maschine im Virtualbox beenden und anschließend dort auch wieder starten, damit ihr diese direkt steuern könnt
  • anschließend mittels User „vagrant“ und Passwort „vagrant“ einloggen
  • mittels “sudo su“ zu root wechseln
  • “/etc/network/interfaces“ mit vi aufrufen und alle Zeilen löschen, die nichts mit eth0 zu tun haben. In der Regel sollte über diesen Zeilen „# VAGRANT START“ stehen
  • Anschließend noch den Ordner “/etc/udev/rules.d/70-persistent-net.rules“ mittels “rm -rf“ löschen
  • die Maschine herunterfahren und Virtualbox beenden
  • nun mittels „vagrant up“ die Maschine wieder starten, sie sollte nun erfolgreich booten
  • sollte die Provisionierung nicht starten, dann führt anschließend noch ein „vagrant provision“ durch

[Quicktip] Globalen SSH Key in Atlassian Stash hinterlegen

Wenn ihr in Stash viele Repositories habt und ein CI Tool wie Jenkins oder Teamcity nutzt, dann möchtet ihr sicher nicht bei jedem einzelnen Repo den SSH Key des Tools hinterlegen. Da ich lange nach der entsprechenden Stelle in Stash gesucht habe und in den Settings nichts dazu zu finden ist, hier eine mögliche Lösung für das Problem:

Die eine globale Stelle für das Problem gibt es nicht, ABER ihr könnt pro Projekt Zugriffsschlüssel hinterlegen. Ruft dazu einfach das Projekt auf, geht dann in die Einstellungen und dort auf Zugriffsschlüssel. Alle hier hinterlegten Keys können nur lesend oder auch lesend und schreibend für ALLE Repositories dieses Projektes freigeschalten werden. So lange ihr also nicht über allzu viele Projekte verfügt, ist die Einrichtung schnell erledigt 😉

[Quicktip] Wie bekomme ich einen Page Access Token als Facebook Entwickler im Graph API Explorer?

Die Facebook API ist ziemlich gut dokumentiert und es gibt auch allerhand Tools, um das ganze auch gleich direkt testen zu können. Im konkreten Beispiel wollte ich etwas von einer Facebook Fanpage auslesen – und ich bekam immer wieder die Fehlermeldung

“(#210) A page access token is required to request this resource.”

Der Trick ist nun folgender: man holt sich einen ganz normalen Access Token, der unter anderem die Berechtigungen für „manage_pages“ enthält. Dann ruft man die Ressource 

“me/accounts“

auf. Derzeit lautet die komplette URL also:

„https://graph.facebook.com/v2.2/me/accounts”

Nun bekommt man die Infos zu seinen Pages geliefert – inkl. des Page Access Tokens 😉

[Quicktip] Jenkins zeigt keine Trend Grafiken für Checkstyle, phpmd usw. an

Wenn ihr im Jenkins einen Job auswählt, der eigentlich die Ergebnisse von Checkstyle, phpmd usw. auswerten und anzeigen sollte – ihr aber keine tollen Diagramme sondern nur irgendwelche „headless“ Fehlermeldungen seht:

Installiert mittels

sudo apt-get install ttf-dejavu

die Font ttf-dejavu.

Nachdem die Schriftart installiert ist und Jenkins neu gestartet wurde, sollte Jenkins die Verlaufsdiagramme korrekt generieren und anzeigen.

Wie baue ich eine Vagrant Box mit OSX Yosemite?

Vagrant ist aus dem heutigen Entwickler Alltag nicht mehr weg zu denken. Wird es hauptsächlich für Linux Distributionen verwendet, so ist es doch auch mal ganz reizvoll, eine Box mit einem OSX drin zu betreiben – sprich, Mac OSX Yosemite zu virtualisieren. Und das geht so:

Zieht euch das Repository: https://github.com/box-cutter/osx-vm

Anschließend ladet ihr euch über den App-Store den OSX Yosemite Installer herunter – aktuell ist in diesem OSX Yosemite 10.10.1 enthalten. Wenn der Download abgeschlossen ist, ruft ihr folgendes im ausgecheckten osx-vm Order auf:

mkdir dmg
prepare_iso/prepare_iso.sh /Applications/Install\ OS\ X\ Yosemite.app ./dmg

Anschließend wird das im Installer enthaltene ISO zu einem beschreibbaren DMG umgewandelt und ein paar Patches angewendet. Wenn das Script durchgelaufen ist, dann könnt ihr mittels (xcode Command Line Tools vorausgesetzt)

make virtualbox/osx1010-desktop

die Vagrant Instanz für eine Yosemite Desktop Variante in Virtual Box bauen lassen. Das “virtualbox” kann man durch “vmware” ersetzen, und wenn man das “-desktop” weg lässt, dann bekommt man eine Consolen Variante von OSX.

Ihr werdet hier einen Fehler erhalten, dass der Installer das DMG nicht finden kann. In meinem Fall sollte die Datei “OSX_InstallESD_10.10_14A389.dmg“ heißen. Also benennt ihr einfach die vorhandene DMG Datei im Ordner DMG in den euch angezeigten Namen um. Anschließen führt ihr den oberen Befehl erneut durch und wartet einfach ab. Ihr werdet zuerst ein paar mal die Shell sehen, bis sich dann irgendwann der Yosemite Installer öffnet und das System automatisch installiert.

1416523902_thumb.png

Es wird automatisch der User Vagrant erzeugt, der das Passwort “vagrant” hat. Loggt euch aber nicht direkt ein, sobald die Login Maske erscheint, sondern beobachtet eure Console. Dort werdet ihr sehen, dass Vagrant erstmal die neuesten Updates einspielt und Software installiert. Also erstmal machen lassen 😉

Und ehe man sich versieht, hat man ein OSX in der Virtual Box am laufen:

Bildschirmfoto 2014-11-21 um 00.10.37
Wichtig: brecht auf keinen Fall den Installer ab! Wenn ihr das Script vorzeitig beendet, dann wird die komplette Box gelöscht. Dass ihr die GUI seht ist erstmal etwas verwirrend – letztlich wird die Box nur vorbereit, um dann nach Abschluss aller Installationen als „echte“ Vagrant Box hinterlegt zu werden. Diese Box wiederrum könnt ihr dann als Vagrant Box verwenden, um verschiedene Instanzen davon laufen zu lassen.

Die erstellte Box wird ca. 6GB groß sein.

Wie schreibe ich eigene / custom Funktionen in einem Makefile?

Mittels selbst definierter Funktionen kann man so ein Makefile deutlich effizienter und übersichtlicher gestalten.

Definiert wird eine Funktion wie folgt:

define name-meiner-funktion
	@ [hier steht dein shellcode] \
	[mehrzeiliger Code muss pro Zeile mit \ abgeschlossen werden] \
	[Variablen werden mit $1, $2, usw. angesprochen]
endef


Aufgerufen wird die Funktion dann mittels:

$(call name-meiner-funktion,parameter1,parameter2,...)

Wichtig ist hier, dass zwischen den Kommas KEIN Leerzeichen sein darf, sonst kommt es zu Fehlermeldungen!

Apples neue Programmiersprache Swift

Es ist mir kaum möglich, die Begeisterung über Apples neue Programmiersprache Swift in Worte zu fassen – natürlich neben den vielen anderen großartigen Neuerungen, die am Montag auf der WWDC angekündigt wurden.

Objective C war für mich schon immer ein Problem – als php, Java und c# Entwickler wirkte es einfach nur furchtbar kryptisch und umständlich. Alleine so Dinge wie C-Headerfiles waren für mich einfach nur 80er. Mit Swift wurde nun so viel richtig gemacht – allem voran die ziemlich einfache und sofort verständliche Syntax. Und natürlich die massive Einsparung von Code.

Bereits kleine Testapps sind schnell zusammengebaut und gehen deutlich einfacher von der Hand als mit Objective C. Ich bin sehr gespannt, wie sich das ganze bei umfangreicheren Programmen verhält. Apple hat hier auf jeden Fall den richtigen Weg eingeschlagen.

[Quicktip] Virtualbox / Vagrant funktioniert nach OSX Mavericks Update nicht mehr

Du hast Mavericks installiert und nun spinnt deine Virtualbox Installation und somit auch Vagrant? Eine Neu-Installation bringt auch keine Lösung, denn nach einem Neustart tritt der Fehler wieder auf? Dann ist das hier die Lösung:

Lad dir die neueste Virtual Box Version herunter, öffne das DMG und führe zunächst das Uninstall Script aus, welches sich darin befindet. Erst dann installierst du Virtual Box neu. Anschließend funktioniert Virtual Box auch nach einem Neustart.

Der Fehler wird scheinbar durch die virtuallen Netzwerkkarten für das Host Only Netzwerk verursacht.