Dieser Artikel ist bereits über 3 Jahre alt. Die Inhalte sind wahrscheinlich bereits überholt und nicht mehr aktuell.

Auch wenn der Titel seltsam klingen mag: mit der für Open-Source-Software kostenfreien Continuous Integration (CI) Anwendung Drone.io lassen sich Go-Anwendungen sehr einfach Cross-Kompilieren.

Vorgehensweise

Fügen Sie einfach ein neues Go-Projekt hinzu oder öffnen Sie die Einstellungen (Build & Test) eines bestehenden Projekts. Nun müssen drei Textfelder mit folgenden Daten ersetzt werden:

Environment Variables

GOX_OSARCH="darwin/386 darwin/amd64 linux/386 linux/amd64 linux/arm windows/386 windows/amd64"

Wenn Sie die Anwendung nicht für einige Architekturen / Betriebssysteme kompilieren möchten, entfernen Sie einfach die jeweilige Angabe aus dem String in der letzten Zeile.

Commands

go get
go build
go test -short

rm -rf /usr/local/go/*
curl -L https://storage.googleapis.com/golang/go1.5.linux-amd64.tar.gz | tar -C /usr/local -xzf -

go get github.com/mitchellh/gox
gox --osarch="$GOX_OSARCH" --output="dist/{{.OS}}_{{.Arch}}/{{.Dir}}" ./...

Hier wird zunächst ganz normal der Quellcode der Anwendung heruntergeladen, kompiliert und getestet. Insofern hier keine Fehler aufgetreten sind, wird die Go-Installation der Drone.io-Test-Instanz gelöscht und das Skript lädt die (zurzeit) aktuelle Go-Version 1.5 (hier nach Updates suchen) herunter. Anschließend wird der eigene Quellcode für die entsprechenden Architekturen mit der frisch heruntergeladenen Go-Versionen kompiliert und im angegebenen Verzeichnis abgelegt.

Damit diese Dateien auch von Drone.io abgespeichert werden, müssen Sie nun noch in die Einstellungen (Artifacts) wechseln und dort folgendes eintragen:

Artifacts

dist/*/*

Anschließend können Sie sofort einen Build starten und nach einer kurzen Wartezeit (das Kompilieren von Go benötigt ebenfalls einige Zeit) finden Sie die gewünschten Dateien im Downloads-Tab vor:

Drone.io Downloads

Fazit und Einschränkungen

Seit dem Release von Go 1.5 - welches einfaches und schnelles Cross-Kompilieren mitgebracht hat - ist dies die einfachste Möglichkeit, um ohne viel Aufwand Cross-Kompilate anzufertigen. Drone.io bietet jedoch nur die Möglichkeit, bis zu 5 Dateien zu archivieren, die nicht mehr als 10 MB Speicherplatz belegen dürfen. Hier muss man also Abstriche machen, die Dateien zu einem anderen Speicherdienst übertragen (z.B. GitHub Releases) oder eine eigene Drone.io Installation verwenden.

Skript frei nach diesem Gist angepasst.