#!/usr/bin/env bash
set -euo pipefail
log() { echo "[start] $(date -Is) $*"; }
abort() { echo "[start] ERROR: $*" >&2; exit 1; }
# Defaults
: "${APP_PORT:=8080}"
: "${JENKINS_HOME:=/app/data/jenkins_home}"
log "Starting Jenkins CI/CD on port ${APP_PORT}"
# Ensure Jenkins home directory exists and is writable
mkdir -p "${JENKINS_HOME}"
chown -R cloudron:cloudron /app/data || true
# Set Jenkins environment variables
export JENKINS_HOME="${JENKINS_HOME}"
export JENKINS_OPTS="--httpPort=${APP_PORT} --httpListenAddress=0.0.0.0"
# Configure Jenkins for Cloudron with OIDC support
log "Configuring Jenkins for Cloudron environment with OIDC authentication"
# Create basic Jenkins configuration if not exists
if [[ ! -f "${JENKINS_HOME}/config.xml" ]]; then
log "Creating initial Jenkins configuration with OIDC support"
mkdir -p "${JENKINS_HOME}"
# Create OIDC configuration if environment variables are provided
if [[ -n "${CLOUDRON_OIDC_ISSUER_URL:-}" && -n "${CLOUDRON_OIDC_CLIENT_ID:-}" ]]; then
log "Configuring OIDC authentication for Jenkins"
mkdir -p "${JENKINS_HOME}/org.jenkinsci.plugins.openid_connect"
# Create OIDC security realm configuration
cat > "${JENKINS_HOME}/org.jenkinsci.plugins.openid_connect.OpenIdConnectSecurityRealm.xml" <<'OIDC_XML'
${CLOUDRON_OIDC_ISSUER_URL}
${CLOUDRON_OIDC_CLIENT_ID}
${CLOUDRON_OIDC_CLIENT_SECRET}
openid,email,profile
preferred_username
name
email
false
true
${CLOUDRON_OIDC_REDIRECT_URI}
false
admin
jenkins-escape-hatch
admin
false
20
10
OIDC_XML
fi
# Create basic config.xml for Jenkins
cat > "${JENKINS_HOME}/config.xml" <<'XML'
2.450
2
NORMAL
true
true
false
${JENKINS_HOME}/workspace/${ITEM_FULLNAME}
${JENKINS_HOME}/builds/${ITEM_FULLNAME}
all
false
false
all
50000
JNLP-connect
JNLP2-connect
XML
fi
# Start Jenkins
log "Starting Jenkins WAR file"
exec java -jar /app/pkg/jenkins.war ${JENKINS_OPTS}