2014-12-09 21:00:17 +01:00
#!/bin/bash
2016-11-30 17:45:05 +01:00
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.
2016-11-30 17:52:00 +01:00
if test -n "$PID_TAIL"
then
kill -s 15 $PID_TAIL > /dev/null # Arrête l'exécution de tail.
sudo rm -f "$tempfile"
fi
2016-11-30 17:52:46 +01:00
# Clean hosts
sudo sed -i '/#jenkins/d' /etc/hosts
2016-11-30 17:45:05 +01:00
echo ""
}
TRAP_ON # Active trap pour arrêter le script si une erreur est détectée.
2014-12-09 21:00:17 +01:00
# Retrieve arguments
2016-11-30 17:45:05 +01:00
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"
2014-12-09 21:00:17 +01:00
2016-11-30 17:45:05 +01:00
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
2014-12-09 21:00:17 +01:00
fi
2016-11-30 17:45:05 +01:00
FIND_PORT 8080 # Cherche un port libre.
# Enregistre les infos dans la config YunoHost
2016-11-30 17:55:46 +01:00
ynh_app_setting_set $app domain $domain
ynh_app_setting_set $app path $path
ynh_app_setting_set $app is_public $is_public
ynh_app_setting_set $app port $port
ynh_app_setting_set $app final_path $final_path
2016-11-30 17:45:05 +01:00
2014-12-09 21:00:17 +01:00
echo "Install dependencies..."
2016-11-30 17:41:41 +01:00
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'
2014-12-09 21:00:17 +01:00
sudo apt-get update
2016-11-30 17:51:05 +01:00
sudo apt-get install default-jre-headless -y
2014-12-09 21:00:17 +01:00
sudo apt-get install jenkins -y
2014-12-16 08:14:48 +01:00
2016-11-30 17:45:05 +01:00
# Renseigne le port
2016-11-30 17:43:02 +01:00
sudo sed -i "s/^HTTP_PORT=.*/HTTP_PORT=$port/g" /etc/default/jenkins
2016-11-30 17:45:05 +01:00
# Ignore le Setup Wizard
sudo sed -i "s/-Djava.awt.headless=true/& -Djenkins.install.runSetupWizard=false/g" /etc/default/jenkins
2016-11-30 17:43:02 +01:00
2016-11-30 17:45:05 +01:00
if [ "$path" != "/" ];
then # Ajoute le path en cas d'installation en sous-dossier dans les options de démarrage de Jenkins
2016-11-30 17:43:02 +01:00
sudo sed -i "$ s@--httpPort=\$HTTP_PORT@& --prefix=$path@g" /etc/default/jenkins
2014-12-16 08:14:48 +01:00
fi
2016-11-30 17:45:05 +01:00
sudo service $app restart # Redémarre jenkins pour prendre en compte les modifications
2016-11-30 17:41:41 +01:00
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.
2014-12-09 21:00:17 +01:00
2016-11-30 17:45:05 +01:00
# 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
2016-11-30 17:41:41 +01:00
2016-11-30 17:45:05 +01:00
# Jenkins est public par défaut, au moins pour le téléchargement de jenkins-cli.jar
2016-11-30 17:55:46 +01:00
ynh_app_setting_set $app unprotected_uris "/"
2014-12-16 00:14:01 +01:00
2014-12-09 21:00:17 +01:00
sudo service nginx reload
sudo yunohost app ssowatconf
2016-11-30 17:41:41 +01:00
2016-11-30 17:45:05 +01:00
# Ajoute le service au monitoring de Yunohost.
2016-11-30 17:49:37 +01:00
sudo yunohost service add $app -l /var/log/$app/$app.log
2016-11-30 17:45:05 +01:00
2016-11-30 17:41:41 +01:00
# Surveille le démarrage du service.
config_OK=0
2016-11-30 17:52:46 +01:00
echo "127.0.0.1 $domain #jenkins" | sudo tee -a /etc/hosts # Renseigne le domain dans le host, pour prévenir d'un dns pas encore propagé.
2016-12-17 19:52:21 +01:00
for i in `seq 1 120`
do # La boucle attend le démarrage de jenkins Ou 2 minutes.
2016-11-30 17:41:41 +01:00
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`
2016-11-30 17:45:05 +01:00
do # La boucle attend la mise à jour des dépôts de plugins. Ou 60 secondes.
2016-11-30 17:41:41 +01:00
if test -e /var/lib/jenkins/updates/default.json; then
break;
else
echo -n "." >&2
sleep 1
fi
done
2016-11-30 17:52:00 +01:00
2016-12-01 17:43:29 +01:00
# Installation du plugin pour l'authentification ldap et http auth
2016-11-30 17:41:41 +01:00
java -jar /var/lib/jenkins/jenkins-cli.jar -s https://$domain$path install-plugin reverse-proxy-auth-plugin
2016-11-30 17:49:37 +01:00
# 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
2016-12-01 17:43:29 +01:00
# Installation de plugins supplémentaires pour le confort
java -jar /var/lib/jenkins/jenkins-cli.jar -s https://$domain$path install-plugin ansicolor # Prise en charge des couleurs pour la sortie console. Améliore la lisibilité de la console (par contre les couleurs ne passent pas...)
java -jar /var/lib/jenkins/jenkins-cli.jar -s https://$domain$path install-plugin fstrigger # Monitoring sur le système de fichier local. Pour surveiller des dossiers de code et builder sur les changements.
2016-11-30 17:45:05 +01:00
# Configure la sécurité globale avec ldap par défaut.
2016-11-30 17:41:41 +01:00
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
2016-12-17 19:52:21 +01:00
echo "Le service $app a démarré correctement." >&2
2016-11-30 17:45:05 +01:00
break # Si le log annonce une deuxième fois le démarrage de jenkins, sort de la boucle.
2016-11-30 17:41:41 +01:00
fi
echo -n "." >&2
sleep 1
done
kill -s 15 $PID_TAIL > /dev/null # Arrête l'exécution de tail.
sudo rm "$tempfile"
2016-12-17 19:52:21 +01:00
if [ "$i" -ge 120 ]; then
echo "Le service $app n'a pas démarré dans le temps imparti." >&2; false
fi
2016-11-30 17:45:05 +01:00
# Si Jenkins est privé, retire l'autorisation publique.
if [ "$is_public" = "No" ];
then # Retire l'accès public
2016-11-30 17:55:46 +01:00
ynh_app_setting_delete $app unprotected_uris
2016-12-01 17:43:29 +01:00
ynh_app_setting_set $app skipped_uris "/github-webhook" # /path/github-webhook doit rester accessible pour les webhooks de github.
2016-11-30 17:45:05 +01:00
fi
2016-11-30 17:52:46 +01:00
# Clean hosts
sudo sed -i '/#jenkins/d' /etc/hosts