Das Erstellen von Unity3D basiert auf Jenkins unter Mac OS X. Teil 1

Hintergrund


Es gibt ein Projekt auf der Unity3D . Es gibt bereits mehrere Jahre (geboren im Februar 2012). Sechs Monate später fing ich an, als Programmierer daran zu arbeiten, und nach zwei Jahren hatte ich kein Glück mehr und wurde verantwortlich für das Bauen von Gebäuden. Ich habe MacMini mit dem installierten Jenkins- Builder geerbt , ein Minimum an Dokumentation und das Fehlen eines adäquaten Builds für iOS .

Ich möchte endlich eine adäquate Anleitung schreiben - seit einigen Wochen wurden bei der Ersteinrichtung und bei der Übertragung auf iMac meine alten Entwicklungen bereits überholt. Also ...

Technische Aufgabe


  1. Das Projekt wird auf der Unity3D- Engine entwickelt . Da die Entwicklung lange Zeit andauerte, konnte die Version der Engine von 3.5.6 auf 4.6.6 geändert werden (zum Zeitpunkt des Schreibens des Artikels, der Version 5 unterstützt, ist dies noch nicht geplant). Jede Version hat ihre eigenen Probleme, einige Versionen enthalten wichtige Änderungen für eine Plattform und töten gleichzeitig die Assembly auf einer anderen. Zum Beispiel - in den neuesten Versionen wurde die 64b-Unterstützung für iOS hinzugefügt , in den frühen 4.x-Versionen gab es eine Assembly für das Google Chrome- und Flash- Plugin , das empfohlene Android SDK ändert sich von Version zu Version . Du musst alles haben.
  2. Das Projekt befindet sich auf dem SVN- Server. Insbesondere - subversion.assembla.com . Wir benötigen Unterstützung beim Zusammenbau aus verschiedenen Branchen, verschiedenen Teilprojekten sowie Projekten, die Teile anderer Projekte enthalten.
  3. Die Montage sollte für Android ( Google Play , Amazon App Store , Yandex Store ...), iOS , Windows , Mac OS , Linux (alle mit der Möglichkeit der Veröffentlichung auf Steam ) durchgeführt werden. Einige Teile sind so zusammengestellt, dass sie in einem Browser ausgeführt werden können. Hier betrachten wir nur die Merkmale der Baugruppe für jede Konfiguration.
  4. Sie benötigen Zugriff auf Builds über das lokale Netzwerk, damit der Tester sie herunterladen, installieren und testen kann.
  5. Autonome Montage, Autostart nach einem Ausfall (Ausschalten)

Eisen


Warum sammeln wir Apfelprodukte? Weil Sie iOS- Anwendungen sammeln und an den AppStore senden müssen . Einen Hackintosh oder eine virtuelle Maschine zu haben, bedeutet Probleme zu haben.

Es gibt also einen alten MacMini im Büro und den neuesten iMac zu Hause. Beide machen ihre Arbeit, es gibt Unterschiede in Produktivität und Herangehensweise - zum einen gibt es keine Garantie und es ist nicht schade (der Wunsch, ihn auf dem Tisch zu töten, entsteht jede Woche), zum anderen wird er liebevoll mit einem Tuch abgewischt und geschützt.

Also, für diejenigen, die sich mit der Montage und Demontage des ersten Gerätes vertraut machen möchten - herzlich willkommen hier . Die Notwendigkeit zur Montage entstand nach dem Tod der alten Scheibe. Dank der Anleitung wurde ein neues 1-TB-Laufwerk erfolgreich geöffnet und eingelegt.

Hier lohnt es sich, einen Exkurs zu machen - ich bevorzuge eine Festplatte mit mehreren Partitionen und möglicherweise sogar mit mehreren Betriebssystemen. Wenn der Laufwerkstyp jedoch Fusion Drive ist , können Sie dies nicht tun (mein iMac verfügt über maximal zwei Partitionen auf dem Laufwerk und die zweite verwendet Windows ). Wenn das Laufwerk normal ist, gibt es keine Probleme. Sie können alle wichtigen Daten in einem Abschnitt speichern (und mit Time Machine sichern ) und umfangreiche Kopien des Projekts in einem anderen Abschnitt speichern.

Systeminstallation


Verdient einen eigenen Artikel. Kurz gesagt:

  1. Auf den neuesten Mohnblumen gibt es eine Internetinstallation. Andernfalls benötigen Sie ein Laufwerk oder ein Flash-Laufwerk mit einem System-Image. Geben Sie Setup - Menü Cmd + das R .
  2. Wir nennen alle Laufwerke und Partitionen mit Anzeigenamen. Partitionen mit System- und Betriebsdaten müssen in Mac OS Extended (Journaled) formatiert sein . Obligatorisch - nicht Groß- / Kleinschreibung .
  3. Zur Installation der Software benötigen Sie die Apple-ID . Es ist wünschenswert, dass diese Apple-ID dem Apple- Entwicklerkonto entspricht , das beim Erstellen und Füllen von Builds verwendet wird.
  4. Zusätzlich zum Administratorkonto benötigen Sie ein Konto mit regulären Rechten. Nennen wir es Jenkins , Passwort auch.
  5. Wenn jemand Remotezugriff über Chrome Remote Desktop benötigt , müssen Sie dem Konto Administratorrechte erteilen.
  6. Wir setzen nach Belieben einen normalen Browser und nützliche Software ein.
  7. Wenn Sie Probleme beim Anzeigen von Seiten haben - Steam Community , YouTube und andere -, schauen wir ein- und zweimal nach .

Xcode-Installation


  1. Die neueste Version wird normalerweise aus dem Laden geliefert.
  2. Bei der Installation mehrerer Versionen ist es ratsam, einen separaten Ordner auszuwählen und dort abzulegen. In / Applications / Xcode befinden sich beispielsweise Xcode_5_1_1.app und Xcode_6_1_1.app .
  3. Alte Versionen finden Sie hier .

Installieren Sie Unity3D


Die Engine kann in der Offsite- Version ( Mac- Version erforderlich ) oder auf Ihrem bevorzugten Tracker heruntergeladen werden . Wir registrieren uns vor Ort und erwerben die erforderliche Lizenz , abhängig von den Anforderungen des Projekts.

Standardmäßig befinden sich MonoDevelop.app und die Dokumentation nach der Installation von Unity.app unter / Applications / Unity . Wenn Sie mehrere Versionen installieren müssen, benennen Sie zuerst den alten Installationsordner um, zum Beispiel / Applications / Unity_4_6_6_f2 . Erst danach installieren wir die neue Version und benennen auch den Installationsort um. Alle Versionen und Patches finden Sie hier .

MonodevelopEs reicht aus, den neuesten Stand zu belassen und den Pfad in den Einstellungen der einzelnen Einheiten festzulegen . Im Ordner / Users / Shared finden Sie das Standard- Unity- Projekt - es kann abgerissen werden.

Für Benutzer- Jenkins müssen Sie Berechtigungen festlegen, um alle Dateien auszuführen. Bei Bedarf - und bei allen Inhalten .app .

Deaktivieren Sie außerdem in den Einstellungen das automatische Öffnen des letzten Projekts und registrieren Sie jede Kopie.

Installieren Sie Java, JDK, Android SDK


JDK und JRE können extern heruntergeladen werden . Android SDK geschwungen weg . Nach der Installation: Aktualisieren Sie das SDK , geben Sie den Pfad in jeder Unity an und überprüfen Sie die Testassembly. Ein Beispiel für eine funktionierende Konfiguration:
  • OS X 10.10.5
  • Einheit 4.6.6f2
  • jdk-8u60-macosx-x64
  • Android SDK: Tools 24.3.4
  • Android SDK: Plattform-Tools 23.0.1
  • Android SDK: Build-Tools 23.0.1
  • Android SDK: SDK-Plattform-API 23

Die Konfiguration wird nur empirisch ausgewählt. Es gibt keine Garantie dafür, dass beim Upgrade einer dieser Komponenten der Buildbuild nicht abfällt ...

Installieren Sie SVN


Nach dieser - eine Subversion ist mit dem System gebündelt. Um eine bestimmte Version zu installieren - ich empfehle Homebrew zu verwenden , suchen wir hier nach mehr .

Installieren Sie Jenkins


  1. Alle Operationen werden unter den Benutzer- Jenkins ausgeführt
  2. Laden Sie das Installationsprogramm von außerhalb herunter . Wir platzieren den Transfer an einen geeigneten Ort, zum Beispiel in /Users/jenkins/WORK/JENKINS_WAR/jenkins.war
  3. Wir gehen zum Terminal und führen den Collector-Startbefehl aus:

    java -jar /Users/jenkins/WORK/JENKINS_WAR/jenkins.war
    

  4. Wir überprüfen im Browser - 127.0.0.1:8080 die Anwesenheit des Sammlers. Nachdem wir das Terminal geschlossen haben (der Kollektor ist ausgeschaltet)
  5. Erstellen Sie einen Ordner für temporäre Dateien. Zum Beispiel - / Users / jenkins / WORK / JENKINS_TMP
  6. Erstellen Sie einen Ordner für den Collector. Zum Beispiel - / Users / jenkins / WORK / JENKINS_HOME . Wir kopieren den Inhalt des Ordners /Users/jenkins/.jenkins in diesen Ordner und löschen den Ordner selbst.
  7. Wir gehen in das Terminal und melden uns als Administrator an:

    login dimamatik
    

  8. Löschen Sie die alte Konfigurationsdatei:

    sudo rm /Library/Preferences/org.jenkins-ci.plist
    

  9. Geben Sie die folgenden Parameter ein (Sie können sie bei Bedarf ändern):

    pp="/Library/Preferences/org.jenkins-ci.plist"
    sudo defaults write $pp JENKINS_HOME "/Users/jenkins/WORK/JENKINS_HOME"
    sudo defaults write $pp tmpdir "/Users/jenkins/WORK/JENKINS_TMP"
    sudo defaults write $pp war "/Users/jenkins/WORK/JENKINS_WAR/jenkins.war"
    sudo defaults write $pp httpPort 4242
    

  10. Wir prüfen:

    defaults read $pp
    

  11. Wir setzen die Rechte:

    sudo chown root:wheel $pp
    sudo chmod 644 $pp
    

  12. Entlade den Jenkins-Dämon mit dem folgenden Befehl:

    sudo launchctl unload /Library/LaunchDaemons/org.jenkins-ci.plist
    

  13. Löschen Sie den Daemon:

    sudo rm /Library/LaunchDaemons/org.jenkins-ci.plist
    

  14. Wir verlassen das Administratorkonto:

    logout
    

  15. Wir starten den Kollektor erneut über das Terminal (die Seite ist jetzt 127.0.0.1-00-00242 ). Alles sollte funktionieren .

Erfahren Sie hier und hier mehr .

Start, Neustart, Tod


Das Problem des Todes und der Wiederbelebung des Sammlers wird durch die Verwendung eines Mac und der Assembly on Unity verschärft . Wir schreiben und speichern Skripte:

  • Das Startskript für jenkins-runner.sh :

    #!/bin/sh
    "/Library/Application Support/Jenkins/jenkins-runner.sh" &
    

  • Jenkins-killer.sh Collector Kill Script :

    #!/bin/sh
    ps xa | grep jenkins.war | grep -v grep | awk '{print $1}' | xargs kill -9
    

  • Jenkins-restart.sh- Neustart- Skript :

    #!/bin/bash
    (sh ~jenkins/jenkins-killer.sh) && (sh ~jenkins/jenkins-runner.sh)
    


Um den Collector automatisch zu starten, erstellen wir mit Automator eine spezielle Anwendung . Wählen Sie die AppleScript Run- Vorlage aus und erstellen Sie jenkins-restart.app in demselben Ordner, in dem die anderen Skripte gespeichert wurden. Programmcode unten:

    on run {input, parameters}
    tell application "Terminal"
            activate
            if (the (count of the window) = 0) or (the busy of window 1 = true) then
                tell application "System Events"
                    keystroke "n" using command down
                end tell
            end if
            do script "sh ~jenkins/jenkins-restart.sh"
        end tell
    return input
    end run


Wenn sich die Skripte nicht im Basisordner befinden, bearbeiten Sie die Pfade entsprechend.

In den Benutzereinstellungen stellen Jenkins den automatischen Start der geschriebenen Anwendung ein. Falls gewünscht, kann es manuell verwendet werden. Wir stellen den Benutzer selbst auf ein automatisches Login, wenn das System gestartet wird (wenn es sich um einen Bürobauer handelt und wir zu faul sind, um es früh zu starten).

Lesen Sie mehr über den Dämon - schauen Sie im Wiki oder in der allgemeinen Hilfe nach . Im Allgemeinen ist es möglich, Automator nicht zu verwenden , sondern diesen Mechanismus zu verlassen, indem den Skripten das Entladen und Laden des Dämons hinzugefügt wird. Plugin-Shutdown- und Neustart-Plugins funktionieren jedoch möglicherweise nicht richtig.

Was haben wir?


Im Moment sollte das System funktionieren . Der (leere) Kollektor startet automatisch, wenn das System gestartet wird. Jedes Projekt auf Unity sollte ordnungsgemäß (von Hand) von unter Jenkins Benutzer zusammengestellt werden . Wenn Fehler auftreten, schauen wir uns die Berechtigungen an, installieren Komponenten, bezahlen die Schulden für die Lizenz. Die interessanteste Sache zu kommen ...

Der zweite Teil gefunden werden kann hier .

Aktualisierungen 10/06/15

  1. Ein Absatz über den Jenkins- Daemon wurde hinzugefügt , Anweisungen zum Deaktivieren wurden behoben.
  2. In dem Abschnitt über das Herunterladen und Installieren des Collectors wurde ein Link zu Offsite hinzugefügt.
  3. Kommentar für Skript und Anwendung neu starten.

Update 10.13.15

  1. Link zum zweiten Teil hinzugefügt.
  2. Tutorial Plate hinzugefügt.

Jetzt auch beliebt: