So richten Sie Buildbot unter FreeBSD ein

Der Autor hat Open Internet / Free Speech Fund ausgewählt, um eine Spende im Rahmen von https://do.co/w4do-cta zu erhalten [Write for DOnations] program.

Einführung

Buildbot ist ein Job-Scheduling-System, das üblicherweise zum Zweck der kontinuierlichen Integration (CI) verwendet wird. CI ist eine Softwareentwicklungspraxis, die in der Regel das automatische Erstellen und Testen Ihrer Software in regelmäßigen Abständen und bei jeder Änderung umfasst. Buildbot wird zwar häufig als CI-Plattform verwendet, kann jedoch auch für alle automatisierten Aufgaben verwendet werden, die auf einem Computer ausgeführt werden. Die Taskausführungskonfiguration von Buildbot umfasst vier Komponenten:

  • * Änderungsquellen *: Diese erkennen Änderungen - wie die in einem Git-Repository - und benachrichtigen Scheduler darüber

  • * Scheduler *: Scheduler lösen Builder entsprechend eingehender Änderungen aus

  • * Builder *: Diese enthalten die eigentlichen Build-Schritte, z. B. das Kompilieren eines Softwareprojekts

  • * Reporter *: Reporter verwenden die Build-Ergebnisse, um Fehler-E-Mails oder andere Benachrichtigungen zu senden

Buildbot funktioniert über mindestens einen Buildbot-Master, der alle Build-Konfigurationen und sonstigen Einstellungen ausführt und prüft und die tatsächlichen Builds an seine Worker verteilt. Darüber hinaus bietet der Master eine browserbasierte Unterkomponente für die Benutzeroberfläche, die, sofern aktiviert, zum Auslösen oder Anzeigen von Builds sowie zum Überprüfen von Statusberichten und anderen Einstellungen verwendet wird. Es gibt auch einen oder mehrere Buildbot-Worker, die sich mit dem Master verbinden und Befehle empfangen, um Builds auszuführen.

In diesem Handbuch verwenden Sie FreeBSD-Jails, um jede Buildbot-Komponente in einer separaten, isolierten Umgebung zu installieren und auszuführen. Anschließend bedienen Sie Buildbot über den Nginx-Webserver und greifen über einen Webbrowser auf Ihrem lokalen Computer auf dessen Weboberfläche zu. Nachdem Sie dieses Handbuch ausgefüllt haben, verfügen Sie über ein funktionsfähiges Setup mit einem Beispielprojekt, das für Ihr eigenes CI oder andere Anwendungsfälle erweitert werden kann.

Voraussetzungen

Bevor Sie mit diesem Handbuch beginnen, benötigen Sie:

Wenn Sie die Buildbot-Weboberfläche mit sicherem HTTPS hosten möchten, benötigen Sie außerdem Folgendes:

  • Ein registrierter Domainname, den Sie besitzen und kontrollieren. Wenn Sie noch keinen registrierten Domainnamen haben, können Sie einen bei einem der vielen Domainnamen-Registrare registrieren (z. Namecheap, GoDaddy usw.).

  • Ein DNS * A Record *, der Ihre Domain auf die öffentliche IP-Adresse Ihres Servers verweist. Dies ist erforderlich, da Let’s Encrypt überprüft, ob Sie Eigentümer der Domain sind, für die ein Zertifikat ausgestellt wird. Wenn Sie beispielsweise ein Zertifikat für "+ example.com " erhalten möchten, muss diese Domain auf Ihren Server aufgelöst werden, damit der Überprüfungsprozess funktioniert. Weitere Informationen zum Hinzufügen dieser Informationen finden Sie unter https://www.digitalocean.com/docs/networking/dns/quickstart/[dieser DNS-Kurzanleitung]. In diesem Tutorial verwenden wir " example.com +" als Beispiel für einen Domainnamen.

  • Ein SSL / TLS-Zertifikat für Ihre Domain. Folgen Sie So sichern Sie Nginx mit Let’s Encrypt unter FreeBSD, um dies einzurichten.

Schritt 1 - Einrichten von Jails für den Buildbot-Master und -Arbeiter

Da Buildbot es externen Mitarbeitern ermöglicht, Code auf Ihrem System auszuführen, wird empfohlen, die verschiedenen Komponenten zu isolieren, um zu verhindern, dass willkürlicher oder böswilliger Code die Ressourcen Ihres Servers beansprucht. In diesem Tutorial verwenden Sie dazu FreeBSD-Jails.

Ähnlich wie LXC, Docker und andere Container-Mechanismen bieten FreeBSD-Jails eine leichte Isolierung vom Host-System. Prozesse, die in einem Gefängnis ausgeführt werden, können nur auf die Ressourcen zugreifen, auf die das Gefängnis bereits Zugriff hat. Ansonsten verhalten sie sich wie jede andere FreeBSD-Umgebung. Jails haben denselben Kernel, werden jedoch normalerweise auf einem Dateisystem ausgeführt, das eine Kopie des FreeBSD-Basissystems enthält, bei dem es sich möglicherweise um eine beliebige Version von FreeBSD handelt, die mit dem Host-Kernel kompatibel ist. Bei den meisten Workloads sind Leistungsunterschiede zwischen dem Ausführen einer Aufgabe auf dem Host und dem Ausführen in einem Jail nicht erkennbar.

Es gibt mehrere externe Softwarepakete, die bei der Erstellung und Verwaltung von FreeBSD-Jails helfen. Da keiner von ihnen de facto der Standard ist, verwenden wir den integrierten jail configuration mechanism des Betriebssystems.

Zunächst möchten wir eine separate Netzwerkschnittstelle für die Jails des Systems erstellen. In Jails schreibt der Kernel Netzwerkverbindungen an die erste IPv4 / IPv6-Adresse, die dem Jail zugewiesen wurde. Wenn zum Beispiel die erste zugewiesene IP-Adresse öffentlich ist und ein Dienst im Gefängnis auf "127.0.0.1: 1234 +" lauscht, ist der Port " 1234 " öffentlich zugänglich. Die empfohlene Vorgehensweise für https://www.freebsd.org/doc/handbook/jails-ezjail.html] besteht darin, eine separate Netzwerkschnittstelle für Gefängnisse bereitzustellen. Wir werden dieser Empfehlung des Klonens der primären Loopback-Schnittstelle (` lo0 `) in eine separate Schnittstelle (` lo1 `) folgen. Wir werden das Netzwerk " 10.0.0.0 / 24 +" verwenden, aber jedes andere nicht überlappende Netzwerk wird auch funktionieren.

Konfigurieren Sie zunächst eine geklonte Schnittstelle, die beim Booten erstellt werden soll. Dieser Befehl "+ sysrc " schreibt eine Regel in die Datei " / etc / rc.conf +", erstellt jedoch nicht die Schnittstelle selbst:

sudo sysrc cloned_interfaces+=lo1

Erstellen Sie als Nächstes die Netzwerkschnittstelle mit dem folgenden Befehl:

sudo service netif cloneup

Sie können den Schnittstellenstatus und die IP überprüfen mit:

ifconfig lo1
Outputlo1: flags=8008<,MULTICAST> metric 0 mtu 16384
   options=600003<RXCSUM,TXCSUM,RXCSUM_IPV6,TXCSUM_IPV6>
   nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
   groups: lo

Die Ausgabe zeigt, dass die Schnittstelle vorhanden ist, aber noch keine IP-Adressen aufgeführt und zugeordnet sind. Das Flag "+ LOOPBACK +" bedeutet, dass diese Schnittstelle nur lokal verfügbar ist und kein tatsächliches Hardwaregerät darstellt.

Öffnen Sie als Nächstes mit Ihrem bevorzugten Editor eine neue Konfigurationsdatei für das Master-Gefängnis. Hier verwenden wir "+ ee +":

sudo ee /etc/jail.buildbot-master.conf

Fügen Sie dann den folgenden Inhalt zur Datei hinzu, die ein Master-Gefängnis mit dem Namen "+ buildbot-master +" konfiguriert:

/etc/jail.buildbot-master.conf

buildbot-master {
   host.hostname = buildbot-master.localdomain;
   ip4.addr = "lo1|10.0.0.2/24";
   path = "/usr/jails/buildbot-master";
   exec.start = "/bin/sh /etc/rc";
   exec.stop = "/bin/sh /etc/rc.shutdown";
   mount.devfs; # need /dev/*random for Python
   persist;
}

Dieser Code weist der Jail-Netzwerkschnittstelle einen festen Hostnamen und eine feste IP-Adresse zu, + 10.0.0.2 +, und gibt das Root-Dateisystem an, + / usr / jails / buildbot-master +. Die hier verwendeten Werte "+ exec.start " und " exec.stop " geben an, dass sich die Dienste " start " und " stop " des Jails wie Startvorgänge verhalten und die in " / etc." / + `Verzeichnis. Mit der Option "+ persist +" kann das Gefängnis weiter ausgeführt werden, auch wenn alle Prozesse abgeschlossen sind.

Weitere Informationen zu möglichen Einstellungen für das Master-Gefängnis finden Sie auf der Manpage jail(8).

Speichern und beenden Sie den Editor, nachdem Sie diesen Inhalt hinzugefügt haben. Wenn Sie "+ ee " verwenden, drücken Sie dazu " STRG + C ", geben Sie " exit " ein und drücken Sie " ENTER +".

Die Konfigurationsdatei für das Master-Gefängnis ist von der globalen Gefängniskonfigurationsdatei "+ / etc / jail.conf +" getrennt. Aus diesem Grund müssen Sie den Namen des Master-Gefängnisses zur Liste der bekannten Gefängnisse hinzufügen:

sudo sysrc "jail_list+=buildbot-master"

Aktivieren Sie dann alle in + jail_list + aufgelisteten Jails, um beim Booten automatisch zu starten:

sudo sysrc jail_enable=YES

Wenn Sie auf Ihrem System bereits Jails mit der globalen Datei "+ / etc / jail.conf " konfiguriert haben, aber zuvor " jail_list " nicht verwendet haben, bedeutet das Aktivieren dieser Einstellung, dass nur die Jails in " jail_list +" automatisch ausgeführt werden -Starten Sie und Sie möchten möglicherweise Ihre vorhandenen Gefängnisse zur Liste hinzufügen.

Als nächstes erstellen wir das Stammverzeichnis des Master-Jails und extrahieren das FreeBSD-System.

Stellen Sie sicher, dass das Root-Dateisystemverzeichnis des Jails vorhanden ist. Wenn Sie die ZFS-Befehle im vorherigen Hinweis ausgeführt haben, wurde dies bereits ausgeführt, und Sie können diesen Befehl überspringen:

sudo mkdir -p /usr/jails/buildbot-master

Laden Sie dann ein FreeBSD 11.2-Basissystemarchiv herunter. Wir installieren zuerst Root-Zertifikate, um dem Download-Server zu vertrauen:

sudo pkg install ca_root_nss

Dieser Befehl fordert Sie auf, die Installation des Pakets + ca_root_nss + zu genehmigen. Drücken Sie dazu + y + und dann + ENTER +.

Laden Sie als nächstes das Archiv herunter:

fetch -o /tmp/base.txz "https://download.freebsd.org/ftp/releases/amd64/11.2-RELEASE/base.txz"

Extrahieren Sie den Inhalt dieser Datei als Root-Dateisystem des Jails:

sudo tar -x -f /tmp/base.txz -C /usr/jails/buildbot-master

In diesem Handbuch wird die Installation genau eines Workers beschrieben, der sich ebenfalls in einem Gefängnis befindet. Sie konfigurieren ihn auf die gleiche Weise wie den Master und verwenden dabei das soeben heruntergeladene Basissystem. Öffnen Sie mit dem Befehl + ee + eine weitere neue Konfigurationsdatei für das Arbeitergefängnis:

sudo ee /etc/jail.buildbot-worker0.conf

Fügen Sie dieser Datei den folgenden Inhalt hinzu:

/etc/jail.buildbot-worker0.conf

buildbot-worker0 {
   host.hostname = buildbot-worker0.localdomain;
   ip4.addr = "lo1|10.0.0.3/24";
   path = "/usr/jails/buildbot-worker0";
   exec.start = "/bin/sh /etc/rc";
   exec.stop = "/bin/sh /etc/rc.shutdown";
   mount.devfs; # need /dev/*random for Python
   persist;
}

Wenn Sie sich diese Zeilen ansehen, stellen Sie fest, dass das Worker-Gefängnis einen anderen Hostnamen, eine andere IP-Adresse und ein anderes Root-Dateisystemverzeichnis als der Master hat. Speichern und schließen Sie diese Datei.

Da wir eine separate Jail-Konfigurationsdatei anstelle der globalen + / etc / jail.conf + verwenden, fügen Sie den Namen der Liste der bekannten Jails hinzu:

sudo sysrc "jail_list+=buildbot-worker0"

Extrahieren Sie das bereits heruntergeladene FreeBSD 11.2-Basissystem wie für den Master:

sudo mkdir /usr/jails/buildbot-worker0
sudo tar -x -f /tmp/base.txz -C /usr/jails/buildbot-worker0

Zu diesem Zeitpunkt sind beide Jails konfiguriert und enthalten ein FreeBSD-Basissystem, auf dem keine zusätzlichen Pakete installiert sind. Beginnen wir mit den Gefängnissen:

sudo service jail start

Überprüfen Sie, ob der Start erfolgreich war, indem Sie alle aktiven Jails auf dem System mit dem folgenden Befehl auflisten:

jls

Dadurch wird eine Ausgabe ähnlich der folgenden zurückgegeben, die die derzeit auf Ihrem Server ausgeführten Jails anzeigt:

Output   JID  IP Address      Hostname                      Path
    1  10.0.0.2        buildbot-master.localdomain   /usr/jails/buildbot-master
    2  10.0.0.3        buildbot-worker0.localdomain  /usr/jails/buildbot-worker0

Dies bestätigt, dass die Jails wie erwartet ausgeführt werden. Zu diesem Zeitpunkt haben sie jedoch keinen Zugang zum Internet, was bedeutet, dass Sie die darin enthaltenen Buildbot-Pakete nicht installieren können. Lesen Sie weiter, um dieses Problem zu beheben.

Schritt 2 - Einrichten des Internetzugangs für die Gefängnisse

Obwohl das Master- und das Worker-Gefängnis in Betrieb sind, sind beide vom Internet getrennt. Sie müssen für das Internet geöffnet werden, da sie Pakete installieren und miteinander kommunizieren können müssen.

Um dies zu beheben, kopieren Sie die DNS-Resolver-Konfiguration des Hosts in beide Jails:

sudo cp /etc/resolv.conf /usr/jails/buildbot-master/etc/resolv.conf
sudo cp /etc/resolv.conf /usr/jails/buildbot-worker0/etc/resolv.conf

Leiten Sie als Nächstes den ausgehenden Internetverkehr aus dem Gefängnis. Verwenden Sie dazu IPFW - die in FreeBSD integrierte Firewall -, um NAT-Netzwerkregeln (Network Address Translation) einzurichten. Wenn Sie diesen Schritt ausführen, wird der aus dem Jail-Netzwerk ausgehende Datenverkehr in die öffentliche IP-Adresse Ihres Hosts übersetzt.

Wenn Sie unter den Voraussetzungen der Let’s Encrypt Tutorial gefolgt sind, ist die Firewall bereits so konfiguriert, dass Sie auf Ihre zugreifen können Webserver. In diesem Fall sind einige der folgenden Schritte überflüssig, es schadet jedoch nicht, sie erneut durchzuarbeiten.

Fügen Sie mit dem folgenden Befehl die vordefinierten Firewall-Regeln für "+ Workstation " in Ihre " rc.conf " -Datei ein. Die " Workstation +" - Regeln schützen den Server, ermöglichen aber dennoch grundlegende Dienste wie das Pingen des Hosts oder das Dynamic Host Configuration Protocol:

sudo sysrc firewall_type="workstation"

Ermöglichen Sie als Nächstes den Zugriff auf die Webserver-Ports von außen. Der folgende Befehl ermöglicht den Datenverkehr über den Port "+ 22 " für SSH. Port ` 80 `, mit dem Buildbot über HTTP bedient werden kann; und Port ` 443 `, wodurch Buildbot über HTTPS bedient werden kann. Wenn Sie Ihren Server mit Let’s Encrypt gesichert haben, sind alle drei Ports erforderlich. Wenn Sie dies jedoch nicht vorhaben, können Sie den Port " 443 +" ausschließen:

sudo sysrc firewall_myservices="22/tcp 80/tcp 443/tcp"

Ermöglichen Sie den Zugriff von jeder IP-Adresse auf die in der Direktive "+ firewall_myservices +" angegebenen Ports:

sudo sysrc firewall_allowservices="any"

Konfigurieren Sie die Firewall so, dass sie beim Booten startet:

sudo sysrc firewall_enable=YES

Starten Sie dann die Firewall mit den Grundregeln. Der folgende Befehl "+ nohup " verhindert die Unterbrechung des Firewall-Starts und leitet außerdem " stderr " und " stdout +" in eine temporäre Protokolldatei um. Dies ist wichtig, um die Firewall-Regeln nicht in einem inkonsistenten Zustand zu belassen. Dies kann dazu führen, dass auf Ihren Remote-Host über SSH nicht mehr zugegriffen werden kann:

sudo nohup service ipfw start >/tmp/ipfw.log 2>&1

Wenn Sie die Shells "+ csh " oder " tcsh " verwenden, wird bei dieser Umleitung " Ambiguous Output Redirect. " In Ihrer Ausgabe angezeigt. Wenn Sie eine dieser Shells verwenden, führen Sie stattdessen " sudo nohup service ipfw start> & / tmp / ipfw.log " aus, um " ipfw +" zu starten:

Zu diesem Zeitpunkt wird der Firewall-Dienst gestartet und der Host wird vor Verbindungen zu ungesicherten Ports geschützt.

Als Nächstes müssen Sie die Netzwerkschnittstelle des Hosts ermitteln, der eine Verbindung zum Internet herstellt. Finden Sie dies, indem Sie Folgendes ausführen:

ifconfig

Dieser Befehl kann verschiedene Schnittstellen ausgeben. Die vom Host für die Verbindung zum Internet verwendete Adresse enthält die öffentliche IP-Adresse Ihres Servers. Zur Veranschaulichung zeigt die folgende Beispielausgabe, dass "+ vtnet0 +" die vom Host verwendete Netzwerkschnittstelle ist:

Outputvtnet0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
   options=6c07bb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,TSO4,TSO6,LRO,VLAN_HWTSO,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6>
   ether 9a:3e:fa:2a:5f:56
   hwaddr 9a:3e:fa:2a:5f:56
   inet6 fe80::983e:faff:fe2a:5f56%vtnet0 prefixlen 64 scopeid 0x1
   inet  netmask 0xffffffc0 broadcast
   inet 10.10.0.23 netmask 0xffff0000 broadcast 10.10.255.255
   nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
   media: Ethernet 10Gbase-T <full-duplex>
   status: active
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
   options=600003<RXCSUM,TXCSUM,RXCSUM_IPV6,TXCSUM_IPV6>
   inet6 ::1 prefixlen 128
   inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2
   inet 127.0.0.1 netmask 0xff000000
   nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
   groups: lo
lo1: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
   options=600003<RXCSUM,TXCSUM,RXCSUM_IPV6,TXCSUM_IPV6>
   inet 10.0.0.2 netmask 0xffffff00
   inet 10.0.0.3 netmask 0xffffff00
   inet6 fe80::1%lo1 prefixlen 64 scopeid 0x3
   nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
   groups: lo

Notieren Sie sich diese Schnittstelle und konfigurieren Sie ihren Namen global:

sudo sysrc firewall_nat_interface=

Öffnen Sie die neue Firewall-Konfigurationsskriptdatei:

sudo ee /usr/local/etc/ipfw.rules

Fügen Sie der Datei dann den folgenden Inhalt hinzu, indem Sie die Firewall-Regeln für IPFW definieren:

/usr/local/etc/ipfw.rules

#!/bin/sh
set -e

# Add basic rules as defined by firewall_type, firewall_myservices, etc.
. /etc/rc.firewall

# External network interface
ext_if="$firewall_nat_interface"

# The interface we chose for communication between jails
jail_if="lo1"

for interface in "$ext_if" "$jail_if"; do
   if [ -z "$interface" ]; then
       >&2 echo "Missing network interface"
       exit 1
   fi
   if ! ifconfig $interface >/dev/null 2>&1; then
       >2 echo "No such network interface: $interface"
       exit 1
   fi
done

ipfw nat 123 config if $ext_if
ipfw add 1 allow all from any to any via $jail_if
ipfw add 2 nat 123 ip4 from any to any in via $ext_if
ipfw add 501 skipto 20000 udp from any to any 53 out via $ext_if keep-state
ipfw add 502 skipto 20000 udp from any to any 67 out via $ext_if keep-state
ipfw add 503 skipto 20000 tcp from any to any out via $ext_if setup keep-state
ipfw add 504 skipto 20000 icmp from any to any out via $ext_if keep-state
ipfw add 19999 deny all from any to any
ipfw add 20000 nat 123 ip4 from any to any out via $ext_if
ipfw add 20001 allow ip from any to any

Die einzelnen Teile des Skripts haben folgende Aufgaben:

  • +. In / etc / rc.firewall + `ist das vordefinierte IPFW-Regelskript des Systems enthalten, das grundlegende Regeln entsprechend Ihrer Konfiguration der Variablen + firewall _ * + in + / etc / rc.conf + `hinzufügt.

  • Der nächste Block prüft, ob alle konfigurierten Schnittstellen vorhanden sind. Dies dient Ihrer Sicherheit und beendet das Skript vorzeitig, wenn eine Fehlkonfiguration vorliegt.

  • Die Direktiven, die mit "+ ipfw " beginnen, fügen die tatsächliche Firewall-Konfiguration und -Regeln hinzu. Jede Regel - hinzugefügt in den Zeilen, die mit ` ipfw add +` beginnen - hat eine Nummer. Die Firewall verwendet diese Zahlen, um die Regeln nacheinander auszuwerten.

  • + ipfw nat 123 config if $ ext_if + erstellt eine kernelinterne NAT-Funktion mit der ID "123", um Datenverkehr über die öffentlich zugängliche Netzwerkschnittstelle zu übersetzen.

  • + ipfw add 1 allow all von any zu any via $ jail_if + erlaubt den gesamten Datenverkehr zwischen den Jails. Beachten Sie, dass die Regelverarbeitung angehalten wird und das Paket passieren darf, wenn eine + + -Regel übereinstimmt.

  • + ipfw add 2 nat 123 ip4 von any zu any in via $ ext_if + übersetzt alle eingehenden IPv4-Pakete auf der externen Schnittstelle. Dies wird als Gegenstück zur Übersetzung ausgehender Pakete benötigt, wie in der Erläuterung von "+ ipfw add 20000 …​ +" beschrieben.

  • + ipfw füge 501 skipto 20000 udp von any zu any hinzu 53 out via $ ext_if keep-state + und die folgenden + skipto + Regeln definieren, welcher ausgehende Verkehr erlaubt und für die Netzwerkadressübersetzung berücksichtigt werden soll. Wenn eine Übereinstimmung vorliegt, wird die Verarbeitung fortgesetzt, indem zur Regel "+ 20000 " gesprungen wird, die NAT ausführt. Die Regelnummer " 501 " kommt absichtlich nach den Standard-Loopback-Regeln, die den Datenverkehr von lokalen Netzwerken (" 127.0.0.0 / 8 " und " :: 1 ") verweigern, z. B. "+00300 deny ip" von 127.0.0.0/8 bis zu einem beliebigen + `. Führen Sie " sudo ipfw list +" aus, um die derzeit aktiven Firewall-Regeln anzuzeigen (beachten Sie jedoch, dass wir die obigen Änderungen noch nicht angewendet haben).

  • Mit Ausnahme der "+ skipto " - Regeln gibt es eine absichtliche Lücke zwischen den Regeln " 2 " und " 19999 ", in die das " / etc / rc.firewall " - Skript bestimmte Grundregeln einfügt. Wenn keine der oben genannten " skipto " - Regeln übereinstimmt, sorgen die Grundregeln dafür, dass verschiedene Arten von Datenverkehr zugelassen werden, einschließlich Loopback, eingehender ICMP-Ping-Nachrichten und der durch " firewall_myservices +" angegebenen Ports.

  • + ipfw add 19999 deny all from any to any + ergibt sich nach allen Grundregeln und sichert das Ende der Verarbeitung von Nicht-NAT-Regeln, wodurch im Wesentlichen der gesamte Datenverkehr gesperrt wird, der nicht mit einer vorherigen "+ allow +" - Regel übereinstimmt.

  • + ipfw add 20000 nat 123 ip4 von any zu any out via $ ext_if + übersetzt die Adresse aller ausgehenden IPv4-Pakete, die auf der externen Schnittstelle verbleiben. Sie benötigen hier nur IPv4, da den Jails in diesem Lernprogramm ausschließlich IPv4-Adressen zugewiesen werden.

  • "+ ipfw add 20001 allow ip from any to any " ist nur erforderlich, wenn Sie den One-Pass-Modus für " nat " -Regeln deaktiviert haben. In diesem Fall wird die Verarbeitung fortgesetzt, nachdem Sie die Regel " 20000 " durchlaufen haben um diese Pakete explizit mit einer separaten Regel durchzulassen. Im Standard-One-Pass-Modus stoppt die Firewall die Verarbeitung nach der Regel " nat " und ignoriert daher die Regel " 20001 +".

Speichern Sie die Datei und beenden Sie den Editor.

Da wir die vordefinierten, grundlegenden Firewall-Regeln durch die im Skript "+ ipfw.rules " definierten Regeln ändern möchten, müssen wir in der Datei " rc.conf +" auf dieses Skript verweisen. Mit dem folgenden Befehl wird das Skript so konfiguriert, dass es bei jedem Start der Firewall ausgeführt wird:

sudo sysrc firewall_script="/usr/local/etc/ipfw.rules"

Dieses Setup verwendet die kernelinterne NAT-Unterstützung von IPFW, sodass Sie das System anweisen müssen, das entsprechende Kernelmodul beim Booten zu laden. Laden Sie das Modul außerdem sofort, ohne dass ein Neustart erforderlich ist:

sudo sysrc -f /boot/loader.conf ipfw_nat_load=YES
sudo kldload ipfw_nat

Starten Sie die Firewall neu, um das Skript für erweiterte Firewallregeln zu aktivieren:

sudo nohup service ipfw restart >/tmp/ipfw.log 2>&1

Wenn Sie die "+ csh " - Shell oder eines ihrer Derivate (wie " tcsh ") verwenden, führen Sie " sudo nohup service ipfw restart> & / tmp / ipfw.lo +" anstelle des vorherigen Befehls zum Neustart aus die Firewall:

Überprüfen Sie, ob die Firewall-Regeln korrekt geladen wurden:

cat /tmp/ipfw.log

Hier sind die Firewall-Regeln aufgeführt, gefolgt von einer Erfolgsmeldung:

OutputFlushed all rules.
00100 allow ip from any to any via lo0
[...]
65500 deny ip from any to any
Firewall rules loaded.

Sie können installierte Firewall-Regeln auch jederzeit anzeigen, indem Sie Folgendes verwenden:

sudo ipfw list
Output00001 allow ip from any to any via lo1
00002 nat 123 ip from any to any in via em0
[...]
65535 deny ip from any to any

Wenn alle Firewall-Regeln vorhanden sind, können Ihre Gefängnisse jetzt auf das Internet zugreifen. Sie können dies überprüfen, indem Sie versuchen, eine Webseite aus einem Gefängnis herunterzuladen:

sudo jexec buildbot-master fetch -q -o- http://example.com/
Output<!doctype html>
<html>
<head>
   <title>Example Domain</title>
[...]

Damit haben Sie beide Jails erfolgreich auf die Ausführung als normales Betriebssystem vorbereitet, für jedes Jail einen Internetzugang eingerichtet und beide gestartet. In den nächsten beiden Schritten in diesem Lernprogramm werden Sie durch die Installation der Master- und der Arbeiterkomponente geführt und anschließend als Dienste ausgeführt.

Schritt 3 - Installieren und Ausführen des Buildbot-Masters

Die Buildbot-Komponenten sind in mehrere Pakete aufgeteilt. Sie müssen nur das Paket "+ py36-buildbot " installieren, um die Masterkomponente auszuführen. In diesem Handbuch wird jedoch auch erläutert, wie das Webinterface-Paket " py36-buildbot-www +" installiert wird.

Da wir Jails verwenden, um die verschiedenen Komponenten zu segmentieren, öffnen Sie zunächst eine * root * -Shell im Master-Jail:

sudo jexec buildbot-master csh

Bitte beachten Sie, dass in diesem Handbuch Shell-Befehlsblöcke mit einer anderen Farbe gekennzeichnet sind, wenn sie in einer Jail-Shell ausgeführt werden müssen. Darüber hinaus gibt die Eingabeaufforderung an, unter welchem ​​der Benutzerprofile des Jails - entweder als * root * oder als * buildbot-master * - die Befehle ausgeführt werden müssen.

Installieren Sie die Pakete:

pkg install py36-buildbot py36-buildbot-www

Wenn Sie den Paketmanager "+ pkg " in diesem Gefängnis noch nicht installiert oder verwendet haben, werden Sie aufgefordert, zu bestätigen, dass Sie ihm erlauben, sich selbst zu booten. Drücken Sie dazu ` y ` und dann ` ENTER `. Genehmigen Sie dann die Installation der Buildbot-Pakete, indem Sie erneut " y +" eingeben.

Erstellen Sie als Nächstes einen regulären, nicht privilegierten Benutzer, um den Master-Service auszuführen. Mit dem folgenden Befehl wird diesem Benutzer ein zufälliges Kennwort zugewiesen, das Sie sich jedoch nicht merken müssen, da der Benutzer * root * des Hosts (außerhalb des Gefängnisses) es ändern oder jeder Benutzer innerhalb des Gefängnisses ohne Kennwort werden kann:

pw useradd -n buildbot-master -m -w random

Erstellen Sie anschließend das Hauptverzeichnis, in dem Sie die Konfiguration speichern möchten:

mkdir /var/buildbot-master

Und geben Sie dem Service-Benutzer den Besitz:

chown buildbot-master:buildbot-master /var/buildbot-master

Ab diesem Zeitpunkt sollten alle master-bezogenen Setups und Änderungen als nichtprivilegierter Benutzer ausgeführt werden, da dies dazu beiträgt, den Besitz und die Berechtigungen konsistent zu halten.

Wechseln Sie zu dem nicht privilegierten Benutzer:

su -l buildbot-master

Verwenden Sie dann das integrierte Hilfsprogramm "+ buildbot +", um ein Verzeichnis und eine Konfigurationsstruktur im angegebenen Verzeichnis zu erstellen:

buildbot-3.6 create-master /var/buildbot-master

Im Gegensatz zu anderen CI-Programmen wie Jenkins wird das Verhalten von Buildbot direkt in der Konfigurationsdatei definiert, die mit Python interpretiert wird. Dies ermöglicht eine optimierte Versionierung Ihrer Konfiguration, während die Verwendung einer Skriptsprache die Möglichkeit bietet, benutzerdefinierte Build-Konfigurationen zu erstellen und vorhandene Buildbot-Funktionen zu erweitern.

Das Buildbot-Paket enthält eine Muster-Master-Konfigurationsdatei, die Sie als Vorlage für Ihre eigene Konfiguration verwenden können. Kopieren Sie die Beispielkonfiguration und nennen Sie sie + master.cfg +:

cp /var/buildbot-master/master.cfg.sample /var/buildbot-master/master.cfg

Öffnen Sie dann die Basiskonfigurationsdatei mit Ihrem bevorzugten Texteditor. Hier verwenden wir "+ ee +":

ee /var/buildbot-master/master.cfg

Die Konfigurationsdatei enthält ein Kennwort, das die Mitarbeiter benötigen, um eine Verbindung zum Master herzustellen. Ersetzen Sie das Standardkennwort "+ pass " durch ein sicheres Kennwort Ihrer Wahl. Außerdem lautet der Name unseres Arbeitnehmers " worker0 ". Ersetzen Sie daher " example-worker " in den Abschnitten " WORKERS " und " BUILDERS " durch " worker0 +".

Wenn Sie fertig sind, sehen die Teile der Datei, die Sie bearbeiten müssen, folgendermaßen aus:

/var/buildbot-master/master.cfg

####### WORKERS

# ...
c['workers'] = [worker.Worker("", "")]
# ...

####### BUILDERS

# ...
c['builders'] = []
c['builders'].append(
   util.BuilderConfig(name="runtests",
     workernames=[""],
     factory=factory))
# ...

Speichern und schließen Sie diese Datei, und führen Sie dann den Befehl + exit + aus, um zum Benutzer * root * im Gefängnis zurückzukehren:

exit

Da die Beispielkonfiguration das Git-Repository + git: // github.com / buildbot / hello-world.git + als Änderungsquelle überwacht, müssen Sie auch Git installieren:

pkg install git-lite

Damit haben Sie die Hauptverzeichnisstruktur und -konfiguration erstellt, der Dienst wird jedoch noch nicht ausgeführt. Um Buildbot manuell auszuführen, könnte man den Befehl "+ buildbot start " aus dem Masterverzeichnis " / var / buildbot-master " ausführen. Dies kümmert sich jedoch nicht um den Start beim Systemstart oder eine andere systemweite Konfiguration. Stattdessen verwenden wir _rc scripts_, die Standardmethode von FreeBSD zum Ausführen von Diensten. Insbesondere verwenden wir dazu das Dienstprogramm " service".

In diesem Lernprogramm soll der Dienst bei jedem Start ausgeführt werden. Im Falle von Gefängnissen ist dies das Startereignis des Gefängnisses. Verwenden Sie den folgenden Befehl, um den Speicherort des Masterverzeichnisses zu definieren:

sysrc buildbot_basedir=/var/buildbot-master

Geben Sie dann an, dass der Dienst unter dem Benutzer * buildbot-master * ausgeführt werden soll:

sysrc buildbot_user=buildbot-master

Aktivieren Sie als Nächstes den Dienst, der beim Start des Jails ausgeführt werden soll:

sysrc buildbot_enable=YES

Zum Zeitpunkt des Schreibens weist das Paket + py36-buildbot + einen Fehler auf, der das Starten des Dienstes verhindert (siehe this bug report). . Bis dies behoben ist, müssen Sie das Startskript manuell patchen, indem Sie den folgenden Befehl in Ihrem BuildBot-Master-Jail ausführen:

sed -i '' 's|command="/usr/local/bin/buildbot"|command="/usr/local/bin/buildbot-3.6"|' /usr/local/etc/rc.d/buildbot

Starten Sie dann den Dienst:

service buildbot start

Der Dienst sollte ohne Fehler starten. Sie können den Erfolg überprüfen, indem Sie den Inhalt der Protokolldatei anzeigen:

tail /var/buildbot-master/twistd.log
Output2018-06-08 15:14:52+0000 [-] Starting BuildMaster -- buildbot.version: 0.9.11
2018-06-08 15:14:52+0000 [-] Loading configuration from '/var/buildbot-master/master.cfg'
[...]
2018-06-08 15:14:52+0000 [-] BuildMaster is running

Um zur Host-Shell zurückzukehren, führen Sie in der Jail-Shell "+ exit +" aus:

exit

Sie haben den Buildbot-Master-Service erfolgreich konfiguriert und gestartet. Die zweite Komponente, der Worker, ist erforderlich, um Builds tatsächlich auszuführen. Sie werden einen Worker im nächsten Abschnitt in einem zweiten Gefängnis installieren und dann seine Verbindung zum Master-Service konfigurieren.

Schritt 4 - Installieren und Ausführen des Buildbot Worker

Obwohl der Buildbot-Master ausgeführt wird, können keine Builds ausgeführt werden, da mindestens ein Worker ausgeführt werden muss. Dieser Schritt ähnelt dem vorherigen, indem wir zuerst ein separates Gefängnis einrichten und dann den Dienst installieren. Diesmal stellt die Buildbot-Arbeiterkomponente jedoch eine Verbindung zum Master her, um auf Befehle zu warten und Ergebnisse zurückzumelden.

Die Anweisungen in diesem Schritt sind fast identisch mit dem Master-Setup, außer dass die Worker-Komponente Teil eines anderen Pakets ist und Sie lediglich Details zum Verbinden mit dem Master und einige Anzeigeinformationen zum Worker selbst hinzufügen müssen.

Stellen Sie sicher, dass Sie sich in der Host-Shell befinden und nicht in einem Gefängnis. Dann öffne eine * root * Shell im Arbeitergefängnis:

sudo jexec buildbot-worker0 csh

Beachten Sie, dass in diesem Handbuch Befehlsblöcke mit einer anderen Farbe gekennzeichnet sind, wenn sie in einer Jail-Shell ausgeführt werden müssen und die Befehlsaufforderungen das Benutzerprofil widerspiegeln, unter dem die Befehle ausgeführt werden sollen.

Installieren Sie das Buildbot-Arbeitspaket mit dem folgenden Befehl:

pkg install py36-buildbot-worker

Wenn dieser Befehl ausgeführt wird, werden Sie aufgefordert, zu bestätigen, ob Sie das Paketverwaltungsdienstprogramm "+ pkg " booten möchten. Geben Sie dazu " y " ein. Außerdem werden Sie aufgefordert, zu bestätigen, dass Sie die Installation der Pakete genehmigen. Geben Sie also " y +" erneut ein, wenn Sie dazu aufgefordert werden.

Erstellen Sie als Nächstes einen regulären, nicht privilegierten Benutzer, um den Worker-Service auszuführen:

pw useradd -n buildbot-worker -m -w random

Erstellen Sie dann das Arbeiterverzeichnis. Dies ist der Ort, an dem die Konfiguration, Anzeigeinformationen und Erstellungsverzeichnisse des Workers gespeichert werden:

mkdir /var/buildbot-worker

Geben Sie dem Dienstbenutzer den Besitz:

chown buildbot-worker:buildbot-worker /var/buildbot-worker

Ab diesem Zeitpunkt sollten alle arbeiterbezogenen Einstellungen und Änderungen als nichtprivilegierter Benutzer ausgeführt werden. Wechseln Sie zu diesem Zweck zu dem Benutzer "+ buildbot-worker +":

su -l buildbot-worker

Verwenden Sie das integrierte Hilfsprogramm "+ buildbot-worker ", um ein Verzeichnis und eine Konfigurationsstruktur im Verzeichnis " / var / buildbot-worker " zu erstellen. Geben Sie die IP-Adresse des Master-Jails an - " 10.0.0.2 ", die wir im vorherigen Schritt ausgewählt haben -, damit der Worker eine Verbindung herstellen und " pass +" durch das in der Master-Konfigurationsdatei definierte Passwort ersetzen kann:

buildbot-worker-3.6 create-worker /var/buildbot-worker 10.0.0.2 worker0 ''

Geben Sie zum Abschließen des Setups einige Details zum Systemadministrator und zum Zweck des Mitarbeiters ein:

echo ' <>' >/var/buildbot-worker/info/admin
echo '' >/var/buildbot-worker/info/host

Führen Sie anschließend den Befehl + exit + aus, um zum Benutzer * root * im Gefängnis zurückzukehren:

exit

Da die Beispielkonfiguration das Git-Repository "+ git: // github.com / buildbot / hello-world.git " klont, um das Beispielprojekt zu erstellen, müssen Sie Git auch in diesem Jail installieren. Beachten Sie, dass der Buildbot-Master auch Git benötigt, da Änderungsquellen auf dem Master ausgeführt werden. Darüber hinaus verwendet der Builder einen Test-Runner mit dem Namen " trial ", der Teil des Pakets " py27-twisted " ist. Installieren Sie ihn also zusammen mit " git-lite +":

pkg install git-lite py27-twisted

Der eingebaute Mechanismus zum Ausführen eines Workers ist "+ buildbot-worker start", der aus dem Worker-Verzeichnis "+ / var / buildbot-worker" ausgeführt werden sollte. Dies kümmert sich jedoch nicht um den Start während des Startvorgangs und stellt nicht sicher, dass er unter dem richtigen Benutzer ausgeführt wird. Verwenden Sie wie beim Master das gepackte Skript "+ rc " mit dem Dienstprogramm " service +", um den Dienst zu verwalten.

Verwenden Sie die folgenden Befehle, um das Arbeitsverzeichnis sowie den Benutzer und die Gruppe zu definieren, unter denen der Dienst ausgeführt werden soll:

sysrc buildbot_worker_basedir=/var/buildbot-worker
sysrc buildbot_worker_uid=buildbot-worker
sysrc buildbot_worker_gid=buildbot-worker

Aktivieren Sie als Nächstes den Dienst, der beim Start des Jails ausgeführt werden soll:

sysrc buildbot_worker_enable=YES

Zum Zeitpunkt des Schreibens weist das Paket + py36-buildbot-worker + einen Fehler auf, der das Starten des Dienstes verhindert (siehe this bug report) ). Bis dies behoben ist, müssen Sie das Startskript manuell patchen, indem Sie den folgenden Befehl in Ihrem + buildbot-worker0 + - Gefängnis ausführen:

sed -i '' 's|command="/usr/local/bin/twistd"|command="/usr/local/bin/twistd-3.6"|' /usr/local/etc/rc.d/buildbot-worker

Starten Sie abschließend die Worker-Komponente:

service buildbot-worker start

Der Dienst sollte ohne Fehler starten. Sie können den Erfolg überprüfen, indem Sie die neuesten Einträge in der Protokolldatei anzeigen:

tail /var/buildbot-worker/twistd.log

Wenn der Dienst erfolgreich gestartet wurde, wird eine Meldung wie "+ Verbunden mit 10.0.0.2:9989" angezeigt. Arbeiter ist bereit + `wird in der Protokolldatei angezeigt. Wenn Sie zuvor vergessen haben, ein neues Kennwort anzugeben, kann der Dienst keine Verbindung zum Master herstellen. In diesem Fall bearbeiten Sie die Datei "+ / var / buildbot-worker / buildbot.tac " und führen dann " service buildbot-worker restart +" aus, um dieses Problem zu beheben.

Sobald der Dienst ordnungsgemäß gestartet wurde, verlassen Sie die Host-Shell, indem Sie den Befehl + exit + in der Jail-Shell ausführen:

exit

Damit ist das zweite Gefängnis konfiguriert und Sie haben alle grundlegenden Komponenten für den Betrieb von Buildbot. Um für Ihre Benutzer problemlos verwendbar zu sein, wird empfohlen, dass Sie auch die webbasierte Benutzeroberfläche einrichten. Auf diese Weise können Sie Buildbot steuern und die Build-Ergebnisse bequemer anzeigen.

Schritt 5 - Einrichten der Buildbot-Weboberfläche

Buildbot verfügt über eine webbasierte Benutzeroberfläche, die Buildübersichten und -ergebnisse anzeigt und es Ihnen ermöglicht, Builds manuell auszulösen, wenn ein Force-Scheduler konfiguriert ist, wie dies in der Beispielkonfiguration der Fall ist.

In Ihrer Masterkonfiguration ist die Komponente "+ www " bereits so konfiguriert, dass HTTP über den Port " 8010 " bereitgestellt wird. In einer Produktionseinstellung würden Sie kein unverschlüsseltes HTTP bereitstellen oder den nicht standardmäßigen Port " 8010 +" nach außen öffnen, da dies Ihr System für Sicherheitslücken öffnen würde. Das Webinterface kann auch von einem beliebigen URL-Pfad aus bedient werden. Dies bedeutet, dass es nicht die einzige Anwendung in Ihrer Domain sein muss. Beispielsweise können Sie Ihren Benutzern Build-Ausgaben oder Protokolle bereitstellen. Daher werden wir die Benutzeroberfläche für Benutzer mit einem separaten Webserver - Nginx - bereitstellen, um HTTPS zu unterstützen, interne Ports zu schützen und die Möglichkeit zu erhalten, andere Inhalte neben der Buildbot-Weboberfläche bereitzustellen.

Öffnen Sie die Nginx-Konfigurationsdatei zum Bearbeiten:

sudo ee /usr/local/etc/nginx/nginx.conf

Fügen Sie die folgenden markierten "+ location n" -Blöcke in den vorhandenen "+ server" -Block der Datei ein:

/usr/local/etc/nginx/nginx.conf

. . .
http {
. . .
   server {

. . .
       location / {
           root /usr/local/www/nginx;
           index index.html index.htm;
       }



















       error_page 500 502 503 504 /50x.html;
       location = /50x.html {
           root /usr/local/www/nginx-dist;
       }

               . . .

   }
}

Diese Konfiguration leitet alle Anforderungen unter dem URL-Pfad "+ / buildbot / +" an die Webschnittstelle weiter und aktiviert die WebSocket-Unterstützung, die von der Schnittstelle verwendet wird, um Aktualisierungen zu erhalten, die angezeigt werden, z. B. die Protokollausgabe eines laufenden Builds.

Speichern und schließen Sie die Nginx-Konfigurationsdatei. Laden Sie dann den Nginx-Dienst neu:

sudo service nginx reload

Öffnen Sie Ihren bevorzugten Webbrowser auf Ihrem lokalen Computer und rufen Sie die Buildbot-Weboberfläche auf, indem Sie die folgende URL aufrufen:

https:///buildbot/

Wenn Sie keinen Domainnamen für Ihren Server eingerichtet haben, müssen Sie stattdessen die öffentliche IP-Adresse Ihres Servers eingeben: "+ http: /// buildbot / +".

Wenn Sie an der Schnittstelle ankommen, sehen Sie eine Übersicht ähnlich der folgenden:

Auf der Hauptseite wird möglicherweise eine Warnung angezeigt, dass die Buildbot-URL falsch konfiguriert ist. Dies tritt auf, wenn der in der Datei "+ nginx.conf +" angegebene Hostname nicht mit den Angaben in der Master-Buildbot-Konfiguration übereinstimmt. Da E-Mails mit Build-Ergebnissen standardmäßig Links zur Buildbot-Weboberfläche enthalten, muss der Master die richtige URL kennen, über die er erreichbar ist.

Beachten Sie, dass wir in unseren Beispielkonfigurationen diesen E-Mail-Service nicht eingerichtet haben. Wenn Sie dies konfigurieren möchten, finden Sie weitere Informationen unter Dokumentation about reporters von Buildbot:

Um die Warnung zu beheben und E-Mails mit dem richtigen Inhalt zu senden, müssen Sie die Buildbot-Masterkonfiguration so bearbeiten, dass sie auf Ihre Domain verweist.

sudo ee /usr/jails/buildbot-master/var/buildbot-master/master.cfg

Suchen Sie die Zeile, die mit "+ c [" buildbotURL "] " beginnt, und ersetzen Sie die Standardoption durch Ihren Domainnamen, gefolgt von " / buildbot / +":

/var/buildbot-master/master.cfg

####### PROJECT IDENTITY
# ...
c['buildbotURL'] = ''
# ...

Speichern und schließen Sie die Datei. Laden Sie anschließend den Dienst + buildbot + neu, um die neue Konfiguration anzuwenden:

sudo jexec buildbot-master service buildbot reload

Aktualisieren Sie die Buildbot-Weboberfläche in Ihrem Browser, und die Warnung wird ausgeblendet.

Continuous Integration-Server dienen häufig anderen Zwecken als CI. Ein CI-Server kann beispielsweise Build-Ausgaben für FreeBSD-Pakete oder -Protokolle über HTTPS liefern. Es wird daher empfohlen, den URL-Pfad "+ / buildbot / +" für das Webinterface zu reservieren. Auf diese Weise können Sie mehr Anwendungen unter verschiedenen Pfaden hosten. Im Moment erstellen wir eine einfache Homepage, die zur Weboberfläche umleitet. Sie können weitere Links hinzufügen, sobald Sie weitere Anwendungsfälle für den Webserver implementiert haben.

Führen Sie den folgenden Befehl aus, um eine Indexdatei in Ihrem Webstamm zu öffnen. Ersetzen Sie dabei "++" durch Ihre eigene Domäne, um eine automatische Umleitung zur Buildbot-Weboberfläche zu erstellen:

sudo ee /usr/local/www//html/index.html

Ersetzen Sie vorhandenen Dateiinhalt durch die folgenden Zeilen:

/usr/local/www/nginx/index.html

<html>
<body>
<a href="/buildbot/">buildbot</a>
<script>
   // Auto-redirect while only the web interface should be served
   window.location.href = "/buildbot/";
</script>
</body>
</html>

Speichern und schließen Sie diese Datei und geben Sie dann Ihren Domainnamen oder Ihre IP-Adresse in die URL-Leiste Ihres Browsers ein. Es sollte Sie automatisch zur Buildbot-Oberfläche umleiten.

Sie haben die Installation aller Buildbot-Komponenten einschließlich der webbasierten Steuerungs- und Anzeigeoberfläche abgeschlossen. Führen Sie nach alledem einen tatsächlichen Build aus, wie in der Beispielkonfiguration angegeben, die wir für den Master eingerichtet haben.

Der Builder verfügt standardmäßig über einen Force-Scheduler, mit dem Sie Ihren ersten Build auslösen können. Klicken Sie in der Webschnittstelle auf * Builds *> * Builders *> * runtests *> * force *> * Start Build * und sehen Sie, wie der Build ausgeführt wird. Wenn Fehler auftreten, überprüfen Sie die Internetverbindung des Servers und ob alle abhängigen Pakete wie zuvor beschrieben installiert wurden.

Sie finden die Artefakte aus diesem Build (und anderen), indem Sie sich den Inhalt des Build-Verzeichnisses ansehen:

ls /usr/jails/buildbot-worker0/var/buildbot-worker/runtests
Outputbuild

Sie haben erfolgreich ein permanent lauffähiges und vielseitiges CI-System konfiguriert und können nun mit der Implementierung Ihrer eigenen Builds beginnen.

Fazit

In diesem Tutorial haben Sie das Erstellen von FreeBSD-Jails geübt und einige Grundlagen des Buildbot-Automatisierungsframeworks erlernt. Das Ergebnis war eine sofort einsatzbereite Installation. Um mehr über Buildbot und seine Konfiguration zu erfahren, empfehlen wir Ihnen, die official Buildbot documentation zu lesen.

Von hier aus können Sie Ihre eigenen Continuous Integration- und Automatisierungsverfahren implementieren. Um ein sicheres, stabiles und performantes Setup für die Produktion zu erhalten, können Sie die folgenden optionalen Konfigurationsschritte ausführen:

  • Verwenden Sie nur HTTPS (wie in diesem Tutorial erklärt)

  • Im Tutorial haben Sie ein separates hostinternes Netzwerk "+ lo1 " für Ihre Gefängnisse verwendet. In diesem Handbuch haben wir ` ipfw +` für NAT-Zwecke verwendet, aber auch andere Firewalls haben diese Funktion. Lesen Sie die FreeBSD-Dokumentation zu available firewalls. Sofern Ihr Anwendungsfall nichts anderes erfordert, wird empfohlen, das Jail-Netzwerk durch NAT oder andere Mechanismen von außen nicht zugänglich zu machen.

  • Für die Weboberfläche von Buildbot ist standardmäßig keine Anmeldung oder Überprüfung der Benutzerberechtigungen erforderlich. Um diese zu implementieren, müssen Sie user authentication aktivieren.