1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/jenkins_ynh.git synced 2024-09-03 19:26:18 +02:00

Merge pull request #5 from maniackcrudelis/master

Timeout, Fix db_user, set -eu
This commit is contained in:
Maniack Crudelis 2016-12-17 19:56:03 +01:00 committed by GitHub
commit 64e3a7b5ea
3 changed files with 24 additions and 17 deletions

View file

@ -7,11 +7,18 @@ CHECK_VAR () { # Vérifie que la variable n'est pas vide.
} }
EXIT_PROPERLY () { # Provoque l'arrêt du script en cas d'erreur. Et nettoye les résidus. EXIT_PROPERLY () { # Provoque l'arrêt du script en cas d'erreur. Et nettoye les résidus.
trap '' ERR exit_code=$?
if [ "$exit_code" -eq 0 ]; then
exit 0 # Quitte sans erreur si le script se termine correctement.
fi
trap '' EXIT
set +eu
echo -e "\e[91m \e[1m" # Shell in light red bold echo -e "\e[91m \e[1m" # Shell in light red bold
echo -e "!!\n $app install's script has encountered an error. Installation was cancelled.\n!!" >&2 echo -e "!!\n $app install's script has encountered an error. Installation was cancelled.\n!!" >&2
CLEAN_SETUP # Appel la fonction de nettoyage spécifique du script install. if type -t CLEAN_SETUP > /dev/null; then # Vérifie l'existance de la fonction avant de l'exécuter.
CLEAN_SETUP # Appel la fonction de nettoyage spécifique du script install.
fi
# Compense le bug de ssowat qui ne supprime pas l'entrée de l'app en cas d'erreur d'installation. # Compense le bug de ssowat qui ne supprime pas l'entrée de l'app en cas d'erreur d'installation.
sudo sed -i "\@\"$domain$path/\":@d" /etc/ssowat/conf.json sudo sed -i "\@\"$domain$path/\":@d" /etc/ssowat/conf.json
@ -20,14 +27,8 @@ EXIT_PROPERLY () { # Provoque l'arrêt du script en cas d'erreur. Et nettoye les
} }
TRAP_ON () { # Activate signal capture TRAP_ON () { # Activate signal capture
trap EXIT_PROPERLY ERR # Capturing exit signals on error set -eu # Exit if a command fail, and if a variable is used unset.
} trap EXIT_PROPERLY EXIT # Capturing exit signals on shell script
TRAP_OFF () { # Ignoring signal capture until TRAP_ON
# Pour une raison que j'ignore, la fonction TRAP_ON fonctionne très bien.
# Mais pas la fonction TRAP_OFF...
# Utiliser directement `trap '' ERR` dans le code pour l'utiliser, à la place de la fonction.
trap '' ERR # Ignoring exit signals
} }
CHECK_USER () { # Vérifie la validité de l'user admin CHECK_USER () { # Vérifie la validité de l'user admin
@ -60,13 +61,14 @@ CHECK_FINALPATH () { # Vérifie que le dossier de destination n'est pas déjà u
GENERATE_DB () { # Créer une base de données et un utilisateur dédié au nom de l'app. GENERATE_DB () { # Créer une base de données et un utilisateur dédié au nom de l'app.
# $1 = Nom de la base de donnée # $1 = Nom de la base de donnée
db_user=$1 db_user=$1
db_user=${db_user//-/_} # mariadb ne supporte pas les - dans les noms de base de données. Ils sont donc remplacé par des _
# Génère un mot de passe aléatoire. # Génère un mot de passe aléatoire.
# db_pwd=$(head -n20 /dev/urandom | tr -c -d 'A-Za-z0-9' | head -c20) # db_pwd=$(head -n20 /dev/urandom | tr -c -d 'A-Za-z0-9' | head -c20)
db_pwd=$(ynh_string_random) db_pwd=$(ynh_string_random)
CHECK_VAR "$db_pwd" "db_pwd empty" CHECK_VAR "$db_pwd" "db_pwd empty"
# Utilise '$app' comme nom d'utilisateur et de base de donnée # Utilise '$app' comme nom d'utilisateur et de base de donnée
# Initialise la base de donnée et stocke le mot de passe mysql. # Initialise la base de donnée et stocke le mot de passe mysql.
ynh_mysql_create_db $db_user $db_user $db_pwd ynh_mysql_create_db "$db_user" "$db_user" $db_pwd
ynh_app_setting_set $app mysqlpwd $db_pwd ynh_app_setting_set $app mysqlpwd $db_pwd
} }
@ -92,7 +94,7 @@ SETUP_SOURCE () { # Télécharge la source, décompresse et copie dans $final_pa
} }
ADD_SYS_USER () { # Créer un utilisateur système dédié à l'app ADD_SYS_USER () { # Créer un utilisateur système dédié à l'app
if ynh_system_user_exists "$app" # Test l'existence de l'utilisateur if ! ynh_system_user_exists "$app" # Test l'existence de l'utilisateur
then then
sudo useradd -d /var/www/$app --system --user-group $app --shell /usr/sbin/nologin || (echo "Unable to create $app system account" >&2 && false) sudo useradd -d /var/www/$app --system --user-group $app --shell /usr/sbin/nologin || (echo "Unable to create $app system account" >&2 && false)
fi fi
@ -165,7 +167,7 @@ REMOVE_LOGROTATE_CONF () { # Suppression de la configuration de logrotate
} }
SECURE_REMOVE () { # Suppression de dossier avec vérification des variables SECURE_REMOVE () { # Suppression de dossier avec vérification des variables
chaine="$1" chaine="$1" # L'argument doit être donné entre quotes simple '', pour éviter d'interpréter les variables.
no_var=0 no_var=0
while (echo "$chaine" | grep -q '\$') # Boucle tant qu'il y a des $ dans la chaine while (echo "$chaine" | grep -q '\$') # Boucle tant qu'il y a des $ dans la chaine
do do

View file

@ -96,8 +96,8 @@ sudo yunohost service add $app -l /var/log/$app/$app.log
# Surveille le démarrage du service. # Surveille le démarrage du service.
config_OK=0 config_OK=0
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é. 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é.
for i in `seq 1 60` for i in `seq 1 120`
do # La boucle attend le démarrage de jenkins Ou 60 secondes. do # La boucle attend le démarrage de jenkins Ou 2 minutes.
if grep -q "INFOS: Jenkins is fully up and running" "$tempfile" && [ "$config_OK" -eq 0 ]; then 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... # 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 sudo wget -nv --no-check-certificate https://$domain$path/jnlpJars/jenkins-cli.jar -O /var/lib/jenkins/jenkins-cli.jar
@ -149,6 +149,7 @@ do # La boucle attend le démarrage de jenkins Ou 60 secondes.
i=1; i=1;
fi fi
if grep -q "INFOS: Jenkins is fully up and running" "$tempfile" && [ "$config_OK" -eq 1 ]; then if grep -q "INFOS: Jenkins is fully up and running" "$tempfile" && [ "$config_OK" -eq 1 ]; then
echo "Le service $app a démarré correctement." >&2
break # Si le log annonce une deuxième fois le démarrage de jenkins, sort de la boucle. break # Si le log annonce une deuxième fois le démarrage de jenkins, sort de la boucle.
fi fi
echo -n "." >&2 echo -n "." >&2
@ -156,6 +157,9 @@ do # La boucle attend le démarrage de jenkins Ou 60 secondes.
done done
kill -s 15 $PID_TAIL > /dev/null # Arrête l'exécution de tail. kill -s 15 $PID_TAIL > /dev/null # Arrête l'exécution de tail.
sudo rm "$tempfile" sudo rm "$tempfile"
if [ "$i" -ge 120 ]; then
echo "Le service $app n'a pas démarré dans le temps imparti." >&2; false
fi
# Si Jenkins est privé, retire l'autorisation publique. # Si Jenkins est privé, retire l'autorisation publique.
if [ "$is_public" = "No" ]; if [ "$is_public" = "No" ];

View file

@ -53,9 +53,10 @@ sudo yunohost service add $app --log "/var/log/$app/$app.log"
sudo service nginx reload sudo service nginx reload
# Surveille le démarrage du service. # Surveille le démarrage du service.
for i in `seq 1 60` for i in `seq 1 120`
do # La boucle attend le démarrage de jenkins Ou 60 secondes. do # La boucle attend le démarrage de jenkins Ou 120 secondes.
if grep -q "INFOS: Jenkins is fully up and running" "$tempfile"; then if grep -q "INFOS: Jenkins is fully up and running" "$tempfile"; then
echo "Le service $app a démarré correctement." >&2
break # Si le log annonce le démarrage de jenkins, sort de la boucle. break # Si le log annonce le démarrage de jenkins, sort de la boucle.
fi fi
echo -n "." >&2 echo -n "." >&2