#!/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}