diff --git a/woodpecker-ci/Bastillefile b/woodpecker-ci/Bastillefile new file mode 100644 index 0000000..723c1ed --- /dev/null +++ b/woodpecker-ci/Bastillefile @@ -0,0 +1,46 @@ +ARG GITEA_URL=https://git.familie-berner.de +ARG ORG=Open +ARG VERSION=v3.13.0 + +# 1. Abhängigkeiten installieren +# Wir nutzen postgresql16-server (Stable). Falls 18 verfügbar ist, hier anpassen. +PKG curl postgresql16-server ca_root_nss + +# 2. Postgres aktivieren und initialisieren +SYSRC postgresql_enable=YES +SERVICE postgresql initdb +SERVICE postgresql start + +# Kurz warten, bis die DB hochgefahren ist +CMD sleep 5 + +# DB User und Datenbank anlegen +CMD su - postgres -c "createuser -w -d woodpecker" +CMD su - postgres -c "createdb -O woodpecker woodpecker" +CMD su - postgres -c "psql -c \"ALTER USER woodpecker WITH PASSWORD 'woodpecker';\"" + +# 3. Woodpecker Binaries herunterladen +CMD mkdir -p /usr/local/bin +CMD curl -fL -o /usr/local/bin/woodpecker-server ${GITEA_URL}/api/packages/${ORG}/generic/woodpecker-freebsd/${VERSION}/woodpecker-server +CMD curl -fL -o /usr/local/bin/woodpecker-agent ${GITEA_URL}/api/packages/${ORG}/generic/woodpecker-freebsd/${VERSION}/woodpecker-agent +CMD curl -fL -o /usr/local/bin/woodpecker-cli ${GITEA_URL}/api/packages/${ORG}/generic/woodpecker-freebsd/${VERSION}/woodpecker-cli +CMD chmod +x /usr/local/bin/woodpecker-server /usr/local/bin/woodpecker-agent /usr/local/bin/woodpecker-cli + +# 4. Konfiguration und RC-Skripte kopieren +# Bastille kopiert Dateien aus dem 'files/' Unterordner des Templates an die Zielposition +CMD mkdir -p /usr/local/etc/woodpecker + +# Kopiere RC-Skripte (Quelle: files/usr/local/etc/rc.d/...) +CP usr/local/etc/rc.d/woodpecker-server /usr/local/etc/rc.d/woodpecker-server +CP usr/local/etc/rc.d/woodpecker-agent /usr/local/etc/rc.d/woodpecker-agent + +# Kopiere Env-Files (Quelle: files/usr/local/etc/woodpecker/...) +CP usr/local/etc/woodpecker/server.env /usr/local/etc/woodpecker/server.env +CP usr/local/etc/woodpecker/agent.env /usr/local/etc/woodpecker/agent.env + +CMD chmod +x /usr/local/etc/rc.d/woodpecker-server +CMD chmod +x /usr/local/etc/rc.d/woodpecker-agent + +# 5. Dienste aktivieren +SYSRC woodpecker_server_enable=YES +SYSRC woodpecker_agent_enable=YES \ No newline at end of file diff --git a/woodpecker-ci/usr/local/etc/rc.d/woodpecker_agent b/woodpecker-ci/usr/local/etc/rc.d/woodpecker_agent new file mode 100644 index 0000000..7679d1c --- /dev/null +++ b/woodpecker-ci/usr/local/etc/rc.d/woodpecker_agent @@ -0,0 +1,46 @@ +#!/bin/sh + +# PROVIDE: woodpecker_agent +# REQUIRE: DAEMON NETWORKING postgresql +# KEYWORD: shutdown + +. /etc/rc.subr + +name="woodpecker_agent" +rcvar="woodpecker_agent_enable" + +load_rc_config $name + +: ${woodpecker_agent_enable:="NO"} +: ${woodpecker_agent_user:="root"} +: ${woodpecker_agent_group:="wheel"} +: ${woodpecker_agent_bin:="/usr/local/bin/woodpecker-agent"} +: ${woodpecker_agent_dir:="/usr/local/etc/woodpecker"} + +# Pfad zu deiner .env Datei (pass ihn ggf. an, wenn sie in /root liegt!) +: ${woodpecker_agent_envfile:="${woodpecker_agent_dir}/agent.env"} + +pidfile="/var/run/${name}.pid" +command="/usr/sbin/daemon" + +# Hier ist die Änderung: Wir überschreiben das Standard-Start-Kommando +start_cmd="woodpecker_agent_start" + +woodpecker_agent_start() { + echo "Starting woodpecker_agent with environment from ${woodpecker_agent_envfile}..." + + # Prüfen, ob die Datei existiert + if [ ! -f "${woodpecker_agent_envfile}" ]; then + echo "Error: .env file not found at ${woodpecker_agent_envfile}" + return 1 + fi + + # Die .env Datei laden und alle Zeilen exportieren + # Wir filtern Kommentare (#) und leere Zeilen aus + export $(grep -v '^#' "${woodpecker_agent_envfile}" | xargs) + + # Jetzt den Daemon starten + /usr/sbin/daemon -f -P ${pidfile} -r ${woodpecker_agent_bin} +} + +run_rc_command "$1" \ No newline at end of file diff --git a/woodpecker-ci/usr/local/etc/rc.d/woodpecker_server b/woodpecker-ci/usr/local/etc/rc.d/woodpecker_server new file mode 100644 index 0000000..13f447d --- /dev/null +++ b/woodpecker-ci/usr/local/etc/rc.d/woodpecker_server @@ -0,0 +1,46 @@ +#!/bin/sh + +# PROVIDE: woodpecker_server +# REQUIRE: DAEMON NETWORKING postgresql +# KEYWORD: shutdown + +. /etc/rc.subr + +name="woodpecker_server" +rcvar="woodpecker_server_enable" + +load_rc_config $name + +: ${woodpecker_server_enable:="NO"} +: ${woodpecker_server_user:="root"} +: ${woodpecker_server_group:="wheel"} +: ${woodpecker_server_bin:="/usr/local/bin/woodpecker-server"} +: ${woodpecker_server_dir:="/usr/local/etc/woodpecker"} + +# Pfad zu deiner .env Datei (pass ihn ggf. an, wenn sie in /root liegt!) +: ${woodpecker_server_envfile:="${woodpecker_server_dir}/server.env"} + +pidfile="/var/run/${name}.pid" +command="/usr/sbin/daemon" + +# Hier ist die Änderung: Wir überschreiben das Standard-Start-Kommando +start_cmd="woodpecker_server_start" + +woodpecker_server_start() { + echo "Starting woodpecker_server with environment from ${woodpecker_server_envfile}..." + + # Prüfen, ob die Datei existiert + if [ ! -f "${woodpecker_server_envfile}" ]; then + echo "Error: .env file not found at ${woodpecker_server_envfile}" + return 1 + fi + + # Die .env Datei laden und alle Zeilen exportieren + # Wir filtern Kommentare (#) und leere Zeilen aus + export $(grep -v '^#' "${woodpecker_server_envfile}" | xargs) + + # Jetzt den Daemon starten + /usr/sbin/daemon -f -P ${pidfile} -r ${woodpecker_server_bin} +} + +run_rc_command "$1" \ No newline at end of file diff --git a/woodpecker-ci/usr/local/etc/woodpecker/agent.env b/woodpecker-ci/usr/local/etc/woodpecker/agent.env new file mode 100644 index 0000000..c673682 --- /dev/null +++ b/woodpecker-ci/usr/local/etc/woodpecker/agent.env @@ -0,0 +1,14 @@ +# Die Adresse deines Woodpecker-Servers (interner Port 9000 ist Standard für gRPC) +WOODPECKER_SERVER=localhost:9000 + +# Das Secret MUSS exakt dasselbe sein wie in deiner Server-.env +WOODPECKER_AGENT_SECRET=geheimes_token_123 + +# Wichtig für FreeBSD: Explizit auf 'local' setzen +WOODPECKER_BACKEND=local + +# Optional: Wie viele Jobs gleichzeitig laufen dürfen +WOODPECKER_MAX_WORKFLOWS=2 + +# Name des Agenten (erscheint im UI) +WOODPECKER_AGENT_NAME=freebsd-jail-agent \ No newline at end of file diff --git a/woodpecker-ci/usr/local/etc/woodpecker/server.env b/woodpecker-ci/usr/local/etc/woodpecker/server.env new file mode 100644 index 0000000..cf5a50d --- /dev/null +++ b/woodpecker-ci/usr/local/etc/woodpecker/server.env @@ -0,0 +1,21 @@ +# .env +# Die URL, unter der Woodpecker im Browser aufgerufen wird +WOODPECKER_HOST=https://woodpecker.familie-berner.de + +# Ein geheimes Passwort, das Server und Agent teilen (frei wählbar) +WOODPECKER_AGENT_SECRET=geheimes_token_123 + +# Gitea Anbindung (Zwingend erforderlich für Login!) +WOODPECKER_GITEA=true +WOODPECKER_GITEA_URL=https://git.familie-berner.de +# Diese beiden Werte musst du in Gitea unter "Einstellungen -> Anwendungen" erstellen: +WOODPECKER_GITEA_CLIENT=2baedfc7-399c-4d04-aa5c-396673dbf76f +WOODPECKER_GITEA_SECRET=gto_u2lu27q5bajvku6eacl2bjznripjmoymegjgbbnkirkuoe67u3tq + +# Dein Gitea-Username als Admin +WOODPECKER_ADMIN=matthiasberner + +WOODPECKER_DATABASE_DRIVER=postgres +WOODPECKER_DATABASE_DATASOURCE="postgres://woodpecker@localhost:5432/woodpecker?sslmode=disable" + +WOODPECKER_OPEN=true