Hallo allerseits!
Ich arbeite als Android-Entwickler und vor nicht allzu langer Zeit sind wir auf einige Routineaufgaben in unserem Projekt gestoßen, die wir automatisieren möchten. Zum Beispiel haben wir 5 verschiedene Geschmacksrichtungen, für die wir jeweils unseren Build auf Stoff hochladen müssen, manchmal für verschiedene Wagen mehrmals am Tag. Ja, diese Aufgabe kann auch mit der Gradle-Aufgabe ausgeführt werden, aber ich möchte diesen Prozess nicht auf dem Computer des Entwicklers starten, sondern irgendwie zentral ausführen. Oder laden Sie beispielsweise den Build in Google Play automatisch in die Beta hoch. Nun, ich wollte nur das CI-System auswählen. Was daraus wurde und wie wir es eingerichtet haben, warum gibt es Docker später in diesem Artikel.

Nach meinem Verständnis war die gesamte Aufgabe in ungefähr zwei Phasen unterteilt:
- Installieren und konfigurieren Sie Jenkins selbst mit dem Android SDK
- Richten Sie Aufgaben bereits in Jenkins ein
In diesem Artikel möchte ich auf den ersten Punkt eingehen. Wenn es für jemanden interessant sein wird, werde ich im nächsten Artikel den Prozess des Einrichtens von Montageaufgaben in Jenkins selbst beschreiben.
Der erste Punkt ist also die Installation und Konfiguration des Jenkins-Systems
Habré hat bereits einen wunderbaren Artikel zu diesem Thema, aber sie ist bereits ein paar Jahre alt, und einige Dinge darin sind etwas veraltet (zum Beispiel sdkmanager), obwohl sie mir sehr geholfen hat, herauszufinden, was ich in der Anfangsphase tun soll.Wenn Sie sich die offizielle
Dokumentation zur Installation von Jenkins ansehen, sehen Sie drei verschiedene Möglichkeiten, um dies zu tun: Starten Sie ein vorgefertigtes Docker-Image, laden Sie eine War-Datei herunter und führen Sie sie aus. Die erste Option ist die richtigste, da sie keine unnötigen Einstellungen und Abhängigkeiten zu unserem Hostsystem enthält. Selbst wenn etwas schief geht, ist es jederzeit einfach, alles zu löschen und erneut zu starten. Das Standard-Docker-Image für Jenkins enthält jedoch einige der Daten, die wir nicht benötigen (z. B. das Blueocean-Plugin), und nicht das, was wir definitiv benötigen (z. B. Android SDK). Es wurde beschlossen, ein eigenes Docker-Image zu erstellen, in dem die War-Datei heruntergeladen und ausgeführt, Android SDK heruntergeladen und installiert sowie alle anderen erforderlichen Einstellungen konfiguriert werden. Um es später zu starten, benötigen wir ein Hostsystem mit installiertem Docker. Ich schlage hier vor, das Rad nicht neu zu erfinden und DigitalOcean zu verwenden.
Erstellen und konfigurieren Sie eine virtuelle Maschine
Wenn jemand anderes dort nicht registriert ist, schlage ich zunächst vor, sich zu
registrieren (hier gab es zum Zeitpunkt des Schreibens des Artikels einen Empfehlungslink, aber nachdem ich die Regeln gelesen hatte, habe ich ihn verworfen). Nach der Registrierung können Sie den einen oder anderen Aktionscode im Internet googeln und erhalten ungefähr 10 Dollar für den Start.
Nachdem wir ein neues Tröpfchen bekommen müssen. Wählen Sie den Punkt Droplets und dann
Create Droplet .

Das Hostsystem ist Ubuntu 18.04. Sie können ein Image auswählen, bei dem Docker bereits installiert und konfiguriert ist, aber wir werden alles selbst erledigen. Da die Zusammenstellung von Android-Builds immer noch ressourcenintensiv ist, müssen wir eine Konfiguration für mindestens 20 Dollar auswählen, damit die Builds normal und relativ schnell erfasst werden.

Wir wählen einen näheren Ort (zum Beispiel in Deutschland). Dann gibt es zwei Möglichkeiten, wie wir uns mit unserem virtuellen Server verbinden. Wir können einen SSH-Schlüssel hinzufügen oder darauf verzichten. Wenn wir an dieser Stelle nicht angeben, welcher Schlüssel verwendet werden soll, wird das Kennwort für den Root-Benutzer an unsere E-Mail gesendet.

Hier können wir den Servernamen ändern und die Erstellung abschließen, indem wir auf die Schaltfläche Erstellen klicken.

Jetzt gehen wir in das erstellte Droplet und kopieren die IP-Adresse für uns selbst, um die Verbindung und Konfiguration fortzusetzen.

Wir brauchen einen SSH-Client. Wenn Sie unter einer Mohnblume arbeiten, können Sie das Standardterminal verwenden. Wenn Sie unter Windows arbeiten, können Sie mit Putty
arbeiten oder
das Linux-Subsystem verwenden (nur für Windows 10). Ich persönlich benutze die letztere Option und sie passt perfekt zu mir.
Stellen Sie mit dem folgenden Befehl eine Verbindung zu unserem Server her
ssh root@YOUR_IP_ADDRESS
Die Konsole bietet Ihnen die Möglichkeit, den Schlüssel zu speichern. Wir sind damit einverstanden. Nach dem Verbinden erstellen wir einen neuen Benutzer für uns selbst, fügen ihn den Superusern hinzu (und geben ihm die Möglichkeit, sudo ohne Passwort zu verwenden), kopieren ihm den Schlüssel für den Zugriff über ssh und sagen, dass er der Eigentümer dieser Dateien ist (andernfalls funktioniert es nicht). Der
Benutzername wird in einen für Sie geeigneten Namen geändert.
useradd -m -s /bin/bash username \ && echo 'username ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers \ && mkdir /home/username/.ssh \ && cp /root/.ssh/authorized_keys /home/username/.ssh/authorized_keys \ && chown username:username -R /home/username/.ssh
Trennen Sie die Verbindung mit dem Befehl von root
exit
Und wir werden uns bereits mit Hilfe des neu erstellten Benutzers wieder verbinden
ssh username@YOUR_IP_ADDRESS
Nachdem wir das System aktualisiert und unseren Server neu gestartet haben (wenn Sie während des Aktualisierungsvorgangs vom System gefragt werden, reicht es in diesem Fall aus, immer die Standardwerte auszuwählen).
sudo apt update && sudo apt full-upgrade -y && sudo apt autoremove -y && sudo reboot
Die Grundeinstellung ist abgeschlossen. Aus Sicht des Kampfsystems ist es nicht sehr sicher, aber im Rahmen dieses Artikels ist es völlig geeignet.
Installieren Sie Docker.
Um Docker in unserem System zu installieren, verwenden wir die
offizielle Dokumentation . Da wir ein neu installiertes System haben, überspringen wir diesen Punkt. Wenn Sie ein System haben, auf dem schon lange etwas läuft, löschen Sie auf Empfehlung der Mitarbeiter von Docker mögliche alte Versionen
sudo apt-get remove docker docker-engine docker.io containerd runc
Vergessen Sie nicht, zuerst über ssh eine Verbindung zu unserem Server herzustellen. Die Installation von Docker selbst wird in der Dokumentation ausführlich beschrieben. Ich werde allgemeine Befehle geben, um es Ihnen einfacher zu machen. Was sie tun, kann dort gelesen werden. Fügen Sie zuerst das Repository hinzu.
sudo apt update \ && sudo apt install -y apt-transport-https ca-certificates \ curl gnupg-agent software-properties-common \ && curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - \ && sudo apt-key fingerprint 0EBFCD88 \ && sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
Und dann installieren Sie Docker selbst:
sudo apt update && sudo apt install -y docker-ce docker-ce-cli containerd.io
Damit wir in Zukunft Docker-Befehle ohne das Präfix sudo aufrufen können, führen Sie den folgenden Befehl aus (der auch in den
Anweisungen sorgfältig beschrieben wird).
sudo usermod -aG docker username
Danach müssen Sie sich erneut anmelden (mit dem Befehl exit und erneut eine Verbindung zum Server herstellen), damit dies funktioniert.
Docker selbst ist installiert, was wir mit dem Befehl überprüfen können
docker run hello-world
Sie lädt das Testbild herunter und führt es im Container aus. Der Container druckt nach dem Start eine Informationsnachricht und wird beendet.
Herzlichen Glückwunsch, wir haben die Phase der Vorbereitung des Servers für die Arbeit abgeschlossen!
Erstellen Ihres Docker-Images
Wir erstellen das Docker-Image, indem wir unsere eigene Docker-Datei schreiben. Beispiele, wie man dies im Internet richtig macht, ein Wagen und ein kleiner Wagen, ich werde
meine fertige Version zeigen und ich werde versuchen, sie so oft wie möglich zu kommentieren. Es gibt auch eine
Bedienungsanleitung von Docker selbst mit Beispielen zur korrekten und kanonischen Schreibweise von Docker-Datei.
Erstellen Sie Ihre Docker-Datei und öffnen Sie sie zur Bearbeitung
touch Dockerfile && nano Dockerfile
Darin werden wir beispielsweise den Inhalt meiner Docker-Datei ablegen
Meine gesamte Docker-Datei mit Kommentaren Einige Klarstellungen:
- Am Anfang bestand der Wunsch, anstelle von Ubuntu ein leichteres Alpin zu verwenden, das jedoch keine Unterstützung für ia32-libs bietet, die für die Erstellung von Projekten mit dem Android SDK erforderlich ist.
- Wir installieren openjdk-8-jdk, nicht das leichtere openjdk-8-jdk-headless, da einige Jenkins-Funktionen ein komplettes System benötigen (z. B. Anzeigen von Unit-Testergebnissen).
- Es ist notwendig, Gebietsschemas zu installieren, da bei einigen Projekten ohne diese die Gradle-Assembly ohne eindeutige Fehler und Protokolle abstürzt und ich mehrere Tage damit verbracht habe, diesem Grund auf den Grund zu gehen (auf regulären Ubuntu, die nicht im Docker enthalten sind, sind alle Gebietsschemas standardmäßig gefüllt). .
- Wir müssen sofort alle Lizenzen für das Android SDK akzeptieren, damit Jenkins während des Erstellungsprozesses die benötigten Komponenten unabhängig installieren kann (z. B. die SDKs, die für verschiedene Versionen der API benötigt werden). Falls erforderlich, können Sie das SDK in Zukunft im Docker-Container mit sdkmanager verwalten. Mit sdkmanager
sdkmanager --list
können sdkmanager --list
beispielsweise alle verfügbaren und alle installierten Komponenten sdkmanager --install "platforms;android-26"
, und sdkmanager --install "platforms;android-26"
installiert das SDK für Version 26 der API. - Im Allgemeinen war es möglich, die Benutzer-Jenkins nicht zu starten und beim Root-Benutzer zu bleiben, aber irgendwie ist es nicht ganz richtig, Sie konnten ihm auch keine Superuser-Rechte geben, aber dies wurde aus praktischen Gründen durchgeführt, wenn etwas installiert werden muss in der Setup- und Debug-Phase.
- Die Grundgröße des Bildes erwies sich als ziemlich groß (fast 800 MB), aber insgesamt kam ich zu dem Schluss, dass dies für mich nicht sehr kritisch ist und es für mich einfacher ist, es in dieser Form herunterzuladen, als Zeit damit zu verbringen, nicht benötigte Pakete zu suchen und zu entfernen.
Nach dem Schreiben von Dockerfile müssen wir daraus ein fertiges Image für Docker machen, auf dessen Grundlage Container erstellt werden. Dies geschieht einfach durch ein Team
docker build -t jenkins-image
Dabei ist der Parameter
-t jenkins-image
für den Namen Ihres Bildes verantwortlich, und der Punkt am Ende des Befehls gibt an, dass Sie in diesem Verzeichnis nach der Docker-Datei für die Assembly suchen müssen. Der Montageprozess selbst dauert einige Zeit, und nach der Montage sollte sich so etwas in der Konsole befinden.
9fd8f5545c27 erfolgreich gebaut
Erfolgreich getaggt jenkins-image: aktuell
Dies zeigt uns, dass unser Image erfolgreich zusammengestellt wurde und wir mit dem nächsten Schritt fortfahren können, nämlich dem Start unseres Containers
Docker Hub und fertige Bilder
Ja, natürlich können wir unser fertiges Image zum Starten des Containers verwenden. Wenn wir dies jedoch auf mehr als mehreren Geräten tun müssen, ist es nicht sehr praktisch, jedes Mal eine Docker-Datei zu erstellen und daraus ein fertiges Image zu erstellen. Und wenn wir auch den Inhalt unserer Docker-Datei aktualisieren, ist es überhaupt nicht bequem, die Änderungen auf alle Knoten zu übertragen. Zu diesem Zweck gibt es ein öffentliches Repository für
Docker Hub- Images. Sie können nicht jedes Mal ein Bild auf jedem Knoten erfassen, sondern es einfach aus dem öffentlichen Repository in sich selbst herunterladen und auf allen Computern gleichermaßen verwenden. Das Bild, das als Beispiel für diesen Artikel diente, ist beispielsweise im Repository mit dem Namen
osipovaleks / docker-jenkins-android verfügbar. Später in diesem Artikel werden wir damit arbeiten.
Dieser Artikel impliziert keine detaillierte Untersuchung des Docker Hub. Wir werden nicht verstehen, wie wir unsere Bilder dort hochladen (obwohl dies nicht sehr schwierig ist) und was mit ihnen dort gemacht werden kann. Wir werden nicht verstehen, dass es möglicherweise noch Ihre eigenen öffentlichen oder privaten Repositories gibt. Dabei kann bei Bedarf alles unabhängig aussortiert werden.
Containerstart
Es gibt zwei Möglichkeiten, einen Container zu starten.
- Der erste Weg, einfach mit dem
docker run
, ermöglicht es Ihnen, dies einfach und schnell auf folgende Weise zu tun
docker run --name jenkins -d -it -v jenkins-data:/var/lib/jenkins -v jenkins-home:/home/jenkins -p 8080:8080 --restart unless-stopped osipovaleks/docker-jenkins-android
Dabei hat der Befehl run
die folgenden Parameter
--name jenkins
- Name des zukünftigen Containers-d
- Container im Hintergrund starten-it
- Flags für die Arbeit mit STDIN und tty-v jenkins-data:/var/lib/jenkins
und -v jenkins-home:/home/jenkins
- Erstellen (falls nicht erstellt) und Zuordnen spezieller Volumendateien zu den internen Abschnitten des Containers, damit wir unsere konfigurierten Jenkins auch nach der Rekonstruktion speichern können Behälter-p 8080:8080
- Ordnen Sie den Host-Port dem Container-Port zu, damit wir Zugriff auf die Weboberfläche haben (ja, dies ist der Port, den wir in der Docker-Datei angegeben haben).--restart unless-stopped
- Die Option bestimmt die Autorun-Richtlinie für Container nach dem Neustart des Hosts (in diesem Fall Autostart, wenn der Container nicht manuell deaktiviert wurde).osipovaleks/docker-jenkins-android
- Bild für die Bereitstellung.
Am Ausgang der Docker-Konsole sollten wir die ID des erstellten Containers abrufen und Informationen darüber anzeigen, wie das Image in das System geladen wird (natürlich, falls es noch nicht geladen ist)
Bild 'osipovaleks / docker-jenkins-android: aktuell' kann lokal nicht gefunden werden
spätestens: Ziehen von Osipovaleks / Docker-Jenkins-Android
6cf436f81810: Fertig ziehen
987088a85b96: Fertig ziehen
b4624b3efe06: Fertig ziehen
d42beb8ded59: Fertig ziehen
b3896048bb8c: Vollständig ziehen
8eeace4c3d64: Fertig ziehen
d9b74624442c: Vollständig ziehen
36bb3b7da419: Vollständig ziehen
31361bd508cb: Fertig ziehen
cee49ae4c825: komplett ziehen
868ddf54d4c1: Fertig ziehen
361bd7573dd0: Vollständig ziehen
bb7b15e36ae8: Vollständig ziehen
97f19daace79: Vollständig ziehen
1f5eb3850f3e: Fertig ziehen
651e7bbedad2: Fertig ziehen
a52705a2ded7: Fertig ziehen
Digest: sha256: 321453e2f2142e433817cc9559443387e9f680bb091d6369bbcbc1e0201be1c5
Status: Neuere Bilder für osipovaleks / docker-jenkins-android heruntergeladen: neueste
ef9e5512581da66d66103d9f6ea6ccd74e5bdb3776747441ce6a88a98a12b5a4
- Der zweite Weg besteht darin, eine spezielle Compose-Datei zu schreiben, in der der Befehl run einfach mit der YAML- Sprache beschrieben und mit Docker Compose gestartet wird.
Dazu müssen wir es installieren:
sudo apt update && sudo apt install -y docker-compose
Erstellen Sie als Nächstes ein Verzeichnis für das Projekt (dies ist wichtig, wenn Sie sich darum kümmern, wie die automatisch erstellten Volumes für den Container aufgerufen werden) und wechseln Sie zu diesem Verzeichnis
mkdir jenkinsProject && cd jenkinsProject
und im Inneren erstellen wir die Erstellungsdatei selbst und gehen in den Bearbeitungsmodus
touch docker-compose.yml && nano docker-compose.yml
und fügen Sie den folgenden Inhalt ein
version: '3' services: jenkins: container_name: jenkins image: osipovaleks/docker-jenkins-android ports: - "8080:8080" restart: unless-stopped volumes: - "jenkins-data:/var/lib/jenkins" - "jenkins-home:/home/jenkins" volumes: jenkins-data: jenkins-home:
Darin wirft möglicherweise nur die erste Zeile Fragen auf ( version: '3'
), die die Version der Funktionen der Erstellungsdatei angeben, sowie einen Abschnitt mit dem volumes
Block, in dem die in diesem Container verwendeten aufgeführt sind
Führen Sie Ihren Container mit dem folgenden Befehl aus:
docker-compose up -d
Dabei zeigt das Flag -d
auch an, dass der Container im Hintergrund erstellt und gestartet wird. Infolgedessen sollte Docker Folgendes anzeigen:
Erstellen des Volumes "jenkinsproject_jenkins-data" mit dem Standardtreiber
Erstellen des Volumes "jenkinsproject_jenkins-home" mit dem Standardtreiber
Jenkins ziehen (osipovaleks / docker-jenkins-android: aktuell) ...
spätestens: Ziehen von Osipovaleks / Docker-Jenkins-Android
6cf436f81810: Fertig ziehen
987088a85b96: Fertig ziehen
b4624b3efe06: Fertig ziehen
d42beb8ded59: Fertig ziehen
b3896048bb8c: Vollständig ziehen
8eeace4c3d64: Fertig ziehen
d9b74624442c: Vollständig ziehen
36bb3b7da419: Vollständig ziehen
31361bd508cb: Fertig ziehen
cee49ae4c825: komplett ziehen
868ddf54d4c1: Fertig ziehen
361bd7573dd0: Vollständig ziehen
bb7b15e36ae8: Vollständig ziehen
97f19daace79: Vollständig ziehen
1f5eb3850f3e: Fertig ziehen
651e7bbedad2: Fertig ziehen
a52705a2ded7: Fertig ziehen
Digest: sha256: 321453e2f2142e433817cc9559443387e9f680bb091d6369bbcbc1e0201be1c5
Status: Neuere Bilder für osipovaleks / docker-jenkins-android heruntergeladen: neueste
Jenkins erstellen ...
Jenkins erstellen ... fertig
Denken Sie daran, ich sagte, dass der Name der erstellten Volumes vom Namen des Projekts abhängt. Führen Sie den folgenden Befehl aus:
docker volume ls
und wir bekommen eine solche Ausgabe
DRIVER VOLUME NAME
lokale jenkinsproject_jenkins-Daten
lokales jenkinsproject_jenkins-home
wo wir sehen werden, dass trotz der Tatsache, dass der Name für Volume von jenkins-home
, in Wirklichkeit ein Präfix aus dem Projektnamen daran jenkinsproject _jenkins-home
und sich herausstellte, dass der Name volume jenkinsproject _jenkins-home
Welche Startoption soll verwendet werden? Hier können Sie selbst auswählen, dass Docker Compose eher ein Tool zum gleichzeitigen Starten mehrerer miteinander verbundener Container ist. Wenn Sie nur einen Container starten müssen, können Sie den
docker run
.
Nach diesen Unterschritten zum Starten und Konfigurieren des Servers sowie zum Starten des Containers mit Jenkins können wir nun mit der Erstkonfiguration fortfahren
Erstes Jenkins-Setup
Nehmen Sie die IP-Adresse unseres Servers, fügen Sie den von uns angegebenen Port 8080 hinzu und folgen Sie diesem Link im Browser.
http://YOUR_IP_ADDRESS:8080/
Wenn vorher alles richtig konfiguriert und gestartet wurde, sehen wir hier das folgende Bild

Für das erste Setup müssen wir das Kennwort eingeben, das das System während der Installation generiert hat. Dazu müssen wir uns nur den Inhalt der Datei
/var/lib/jenkins/secrets/initialAdminPassword
. Diese Datei befindet sich jedoch in unserem laufenden Container. Um sie lesen zu können, müssen wir mit dem folgenden Befehl eine Verbindung zum Container herstellen:
docker exec -it jenkins /bin/bash
-it
Option
-it
der Ausführung von
docker run
ähnelt, ist
jenkins
der Name unseres Containers, und
/bin/bash
führt
/bin/bash
für uns im Container aus und gewährt ihm Zugriff. Danach sehen wir das ursprüngliche Passwort für Jenkins:
cat /var/lib/jenkins/secrets/initialAdminPassword
Folgendes wird in der Konsole angezeigt
91092b18d6ca4492a2759b1903241d2a
Dies ist das Passwort.
Benutzer ALexhha schlug eine einfachere Option zum Lesen dieses Kennworts vor, ohne eine Verbindung zum Container selbst herzustellen. Tatsache ist, dass zum Zeitpunkt des Starts von Jenkins selbst dieses Kennwort in den Protokollen angezeigt wird. Es stellt sich heraus, dass wir nur die Containerprotokolle lesen müssen. In unserem Fall erfolgt dies mit dem folgenden Befehl: docker logs jenkins
Dabei ist jenkins
Name unseres Containers. In den Protokollen sehen Sie Folgendes:***************************************************** ** ***********
******************************************************** ***********
******************************************************** ***********
Jenkins Ersteinrichtung ist erforderlich. Ein Administrator wurde erstellt und ein Kennwort generiert.
Bitte verwenden Sie das folgende Passwort, um mit der Installation fortzufahren:
91092b18d6ca4492a2759b1903241d2a
Dies kann auch gefunden werden unter: / var / lib / jenkins / Secrets / initialAdminPassword
***************************************************** ** ***********
******************************************************** ***********
***************************************************** ** ***********
Diese Option ist etwas einfacher und schneller.Kopieren Sie es, fügen Sie es in das Feld
Administratorkennwort in der Weboberfläche ein und klicken Sie auf
Weiter .
Wählen Sie im nächsten Bildschirm
Ausgewählte Plugins installieren und installieren Sie eine Reihe von Standard-Plugins.


Erstellen Sie nach der Installation der Plugins einen Benutzer für uns und klicken Sie auf
Speichern und beenden
Wir stimmen dem Abschnitt Instanzkonfiguration zu, in dem wir aufgefordert werden, die URL auszufüllen, unter der Jenkins arbeiten wird (in unserem Fall lassen Sie alles so wie es ist).

Und klicken Sie im nächsten Bildschirm auf den geschätzten
Start mit Jenkins
Also haben wir Jenkins installiert und gestartet!

Es ist bereits durchaus möglich, damit zu arbeiten, aber um unsere Android-Builds zu sammeln, müssen Sie einige weitere Punkte konfigurieren. Die Lokalisierung von Jenkins hängt mit der ausgewählten Sprache Ihres Browsers zusammen, und natürlich ist die Übersetzung ins Russische noch nicht vollständig abgeschlossen, und wir erhalten eine höllische Mischung aus Russisch und Englisch. Wenn Sie genau so erfolgreich waren und es Sie wütend macht, können Sie das spezielle
Plug-In verwenden und die Standardsprache für die Benutzeroberfläche festlegen. Oder schalten Sie Ihren Browser auf die englische Oberfläche um.
Gehen Sie zu Jenkins Einstellungen und wählen Sie
Systemkonfiguration.
Wir
kreuzen die
Umgebungsumgebung an , geben den Namen
ANDROID_HOME in das Feld ein und geben im Feld
/ var / lib / android-sdk / an (wir haben diese Daten in der Docker-Datei als Ausgangsverzeichnis für das Android SDK angegeben).

Klicken Sie auf die Schaltfläche
Speichern , verlassen Sie diesen Einstellungsabschnitt und wechseln Sie zum Abschnitt
Globale Tools-Konfiguration .

Richten Sie die
JDK- Partition ein (wobei die Variable JAVA_HOME auch von uns in der Docker-Datei ausgefüllt wurde und wir ihren Wert
/ usr / lib / jvm / java-8-openjdk-amd64 / hier verwenden können ).

Auch hier müssen wir noch den Abschnitt
Gradle ausfüllen. Wir wählen und installieren die Version von Gradle, die in den Projekten verwendet wird, die Sie mit diesem CI-System erstellen.
Sie können mehrere Versionen haben. Sie können die Gradle-Variable auch überhaupt nicht starten, wenn Sie beispielsweise gradlew im Repository haben und es damit erstellen können.
Damit können wir unsere erste Etappe beenden. Das Jenkins-System ist voll funktionsfähig und wir können die Build-Aufgaben selbst anpassen. Bitte beachten Sie, dass das System an unsere Bedürfnisse angepasst wurde und möglicherweise nicht das bietet, was Sie benötigen. Beispielsweise gibt es keine Android-Emulatoren zum Testen und NDK.Wenn dieser Artikel jemanden interessiert, werde ich im zweiten Teil mit einem Beispiel für ein oder zwei Probleme fortfahren und die Integration von Jenkins und Bitbucket beschreiben (er ist es, nicht Github, weil es mit kostenlosen privaten Repositories und Artikeln im Internet einfacher ist Es ist kleiner, macht aber vielleicht mehr Spaß. Ich werde Ihnen sagen, wie Sie sich mit dem SSH-Schlüssel unseres Containers mit dem Repository anfreunden können, über E-Mail-Benachrichtigungen und verschiedene andere Chips. Im Allgemeinen über alles, was wir konfiguriert haben.Ich bitte Sie, nicht viel zu treten, dies ist mein erster Artikel über Habr. Gut zu allen!