mirror of
https://github.com/YunoHost-Apps/jenkins_ynh.git
synced 2024-09-03 19:26:18 +02:00
149 lines
6.9 KiB
Bash
149 lines
6.9 KiB
Bash
#!/bin/bash
|
|
|
|
source .fonctions # Charge les fonctions génériques habituellement utilisées dans le script
|
|
|
|
CLEAN_SETUP () {
|
|
# Nettoyage des résidus d'installation non pris en charge par le script remove.
|
|
# Pas de nettoyage supplémentaire nécessaire ici...
|
|
echo ""
|
|
}
|
|
TRAP_ON # Active trap pour arrêter le script si une erreur est détectée.
|
|
|
|
# Retrieve arguments
|
|
domain=$YNH_APP_ARG_DOMAIN
|
|
path=$YNH_APP_ARG_PATH
|
|
is_public=$YNH_APP_ARG_IS_PUBLIC
|
|
|
|
app=$YNH_APP_INSTANCE_NAME
|
|
|
|
# Source app helpers
|
|
source /usr/share/yunohost/helpers
|
|
|
|
# Vérifie que les variables ne sont pas vides.
|
|
CHECK_VAR "$app" "app name not set"
|
|
|
|
|
|
CHECK_PATH # Vérifie et corrige la syntaxe du path.
|
|
CHECK_DOMAINPATH # Vérifie la disponibilité du path et du domaine.
|
|
|
|
# Vérifie que le dossier de destination n'est pas déjà utilisé.
|
|
final_path=/var/lib/$app
|
|
if [ -e "$final_path" ]
|
|
then
|
|
echo "This path already contains a folder" >&2
|
|
false
|
|
fi
|
|
|
|
|
|
FIND_PORT 8080 # Cherche un port libre.
|
|
|
|
|
|
# Enregistre les infos dans la config YunoHost
|
|
sudo yunohost app setting $app domain -v $domain
|
|
sudo yunohost app setting $app path -v $path
|
|
sudo yunohost app setting $app is_public -v $is_public
|
|
sudo yunohost app setting $app port -v $port
|
|
sudo yunohost app setting $app final_path -v $final_path
|
|
|
|
|
|
echo "Install dependencies..."
|
|
wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
|
|
sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
|
|
|
|
sudo apt-get update
|
|
sudo apt-get install default-jre-headless -y
|
|
sudo apt-get install jenkins -y
|
|
|
|
# Renseigne le port
|
|
sudo sed -i "s/^HTTP_PORT=.*/HTTP_PORT=$port/g" /etc/default/jenkins
|
|
# Ignore le Setup Wizard
|
|
sudo sed -i "s/-Djava.awt.headless=true/& -Djenkins.install.runSetupWizard=false/g" /etc/default/jenkins
|
|
|
|
if [ "$path" != "/" ];
|
|
then # Ajoute le path en cas d'installation en sous-dossier dans les options de démarrage de Jenkins
|
|
sudo sed -i "$ s@--httpPort=\$HTTP_PORT@& --prefix=$path@g" /etc/default/jenkins
|
|
fi
|
|
|
|
sudo service $app restart # Redémarre jenkins pour prendre en compte les modifications
|
|
tempfile="$(mktemp)"
|
|
tail -f -n1 /var/log/$app/$app.log > "$tempfile" & # Suit le démarrage dans le log
|
|
PID_TAIL=$! # Récupère le PID de la commande tail, qui est passée en arrière plan.
|
|
|
|
# Copie le fichier de config nginx
|
|
sudo cp ../conf/nginx.conf /etc/nginx/conf.d/$domain.d/$app.conf
|
|
# Et modifie les variables dans le fichier de configuration nginx
|
|
sudo sed -i "s@__PATH__@$path@g" /etc/nginx/conf.d/$domain.d/$app.conf
|
|
sudo sed -i "s@__DOMAIN__@$domain@g" /etc/nginx/conf.d/$domain.d/$app.conf
|
|
sudo sed -i "s@__PORT__@$port@g" /etc/nginx/conf.d/$domain.d/$app.conf
|
|
|
|
# Jenkins est public par défaut, au moins pour le téléchargement de jenkins-cli.jar
|
|
sudo yunohost app setting $app unprotected_uris -v "/"
|
|
|
|
sudo service nginx reload
|
|
sudo yunohost app ssowatconf
|
|
|
|
# Ajoute le service au monitoring de Yunohost.
|
|
sudo yunohost service add $app -l /var/log/$app/$app.log
|
|
|
|
# Surveille le démarrage du service.
|
|
config_OK=0
|
|
for i in `seq 1 60`
|
|
do # La boucle attend le démarrage de jenkins Ou 60 secondes.
|
|
if grep -q "INFOS: Jenkins is fully up and running" "$tempfile" && [ "$config_OK" -eq 0 ]; then
|
|
# Si le log annonce une première fois le démarrage de jenkins. Fait sauter la sécurité de la première connexion de l'admin. Qui bloque curl et demande une identification inexistante une fois sur deux...
|
|
sudo wget -nv --no-check-certificate https://$domain$path/jnlpJars/jenkins-cli.jar -O /var/lib/jenkins/jenkins-cli.jar
|
|
for i in `seq 1 60`
|
|
do # La boucle attend la mise à jour des dépôts de plugins. Ou 60 secondes.
|
|
if test -e /var/lib/jenkins/updates/default.json; then
|
|
break;
|
|
else
|
|
echo -n "." >&2
|
|
sleep 1
|
|
fi
|
|
done
|
|
java -jar /var/lib/jenkins/jenkins-cli.jar -s https://$domain$path install-plugin reverse-proxy-auth-plugin
|
|
|
|
# Installation des plugins recommandés (Lors de l'install avec le Setup Wizard)
|
|
java -jar /var/lib/jenkins/jenkins-cli.jar -s https://$domain$path install-plugin cloudbees-folder # Folders Plugin
|
|
java -jar /var/lib/jenkins/jenkins-cli.jar -s https://$domain$path install-plugin antisamy-markup-formatter # OWASP Markup Formatter Plugin
|
|
java -jar /var/lib/jenkins/jenkins-cli.jar -s https://$domain$path install-plugin pam-auth # PAM Authentication plugin
|
|
java -jar /var/lib/jenkins/jenkins-cli.jar -s https://$domain$path install-plugin mailer # Mailer Plugin
|
|
java -jar /var/lib/jenkins/jenkins-cli.jar -s https://$domain$path install-plugin ldap # LDAP Plugin
|
|
java -jar /var/lib/jenkins/jenkins-cli.jar -s https://$domain$path install-plugin matrix-auth # Matrix Authorization Strategy Plugin
|
|
java -jar /var/lib/jenkins/jenkins-cli.jar -s https://$domain$path install-plugin build-timeout # Build timeout plugin
|
|
java -jar /var/lib/jenkins/jenkins-cli.jar -s https://$domain$path install-plugin credentials-binding # Credentials Binding Plugin
|
|
java -jar /var/lib/jenkins/jenkins-cli.jar -s https://$domain$path install-plugin timestamper # Timestamper
|
|
java -jar /var/lib/jenkins/jenkins-cli.jar -s https://$domain$path install-plugin ws-cleanup # Workspace Cleanup Plugin
|
|
java -jar /var/lib/jenkins/jenkins-cli.jar -s https://$domain$path install-plugin ant # Ant Plugin
|
|
java -jar /var/lib/jenkins/jenkins-cli.jar -s https://$domain$path install-plugin gradle # Gradle Plugin
|
|
java -jar /var/lib/jenkins/jenkins-cli.jar -s https://$domain$path install-plugin workflow-aggregator # Pipeline
|
|
java -jar /var/lib/jenkins/jenkins-cli.jar -s https://$domain$path install-plugin pipeline-stage-view # Pipeline: Stage View Plugin
|
|
java -jar /var/lib/jenkins/jenkins-cli.jar -s https://$domain$path install-plugin git # Git plugin
|
|
java -jar /var/lib/jenkins/jenkins-cli.jar -s https://$domain$path install-plugin github-organization-folder # GitHub Organization Folder Plugin
|
|
java -jar /var/lib/jenkins/jenkins-cli.jar -s https://$domain$path install-plugin subversion # Subversion Plug-in
|
|
java -jar /var/lib/jenkins/jenkins-cli.jar -s https://$domain$path install-plugin email-ext # Email Extension Plugin
|
|
java -jar /var/lib/jenkins/jenkins-cli.jar -s https://$domain$path install-plugin ssh-slaves # SSH Slaves plugin
|
|
|
|
# Configure la sécurité globale avec ldap par défaut.
|
|
sudo cp ../conf/config.xml /var/lib/jenkins/
|
|
sudo chown jenkins: /var/lib/jenkins/config.xml
|
|
|
|
sudo service $app restart # Puis redémarre à nouveau le service.
|
|
cat /dev/null > "$tempfile" # Purge le log de suivi du démarrage.
|
|
config_OK=1
|
|
i=1;
|
|
fi
|
|
if grep -q "INFOS: Jenkins is fully up and running" "$tempfile" && [ "$config_OK" -eq 1 ]; then
|
|
break # Si le log annonce une deuxième fois le démarrage de jenkins, sort de la boucle.
|
|
fi
|
|
echo -n "." >&2
|
|
sleep 1
|
|
done
|
|
kill -s 15 $PID_TAIL > /dev/null # Arrête l'exécution de tail.
|
|
sudo rm "$tempfile"
|
|
|
|
# Si Jenkins est privé, retire l'autorisation publique.
|
|
if [ "$is_public" = "No" ];
|
|
then # Retire l'accès public
|
|
sudo yunohost app setting $app unprotected_uris -d
|
|
fi
|