Sommaire
- Présentation
- 1) Prérequis
- 2) Installation de mariadb
- 3) Sécurisation de mariadb
- 4) Création base de données semaphore
- 5) Création du contexte d’exécution
- 6) Installation de Semaphore UI
- 7) Création d’un service pour Semaphore
- 8) Création d’un projet dans Semaphore
- 9) Informations d’authentification
- 10) Dépôt git dans Semaphore
- 11) Inventaire dans Semaphore
- 12) Tâches dans Semaphore
- 13) Problèmes et erreurs rencontrés avec Semaphore
Présentation
Dans ce tutoriel, nous allons installer et configurer Semaphore UI pour gérer l’exécution de tâches. Ces tâches peuvent être des playbooks Ansible, Terraform, des scripts Bash et bien d’autres.
Ce tutoriel est prévu pour Debian 12 et Ubuntu Server 24.04.
Dans ce tutoriel, Semaphore UI est installé sur un serveur virtuel Proxmox VE (PVE) mais il est également possible de l’installer sur un Serveur Privé Virtuel (VPS).
1) Prérequis
- Ansible doit être installé (Suivez le Tutoriel d’installation Ansible)
- Un dépôt git contenant votre projet ansible
- Voir notre tutoriel d’installation de GitLab
- Le paquet sudo doivent être installés
2) Installation de mariadb
2.1) Mettre à jour le cache apt
1 |
sudo apt update -y |
2.2) Installer le paquet mariadb
1 |
sudo apt install -y mariadb-server |
3) Sécurisation de mariadb
3.1) Se connecter au serveur de base de données mariadb
1 |
sudo mysql |
3.2) Définir un mot de passe pour l’utilisateur « root »
1 |
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('ChangeThisPassword'); |
Remarque : Il s’agit de l’utilisateur root du serveur de base de données et non du système.
Attention : Remplacez ChangeThisPassword par le mot de passe que vous aurez choisi pour l’utilisateur semaphore.
3.3) Autoriser « root » uniquement en local
1 |
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1'); |
3.4) Supprimer l’accès anonyme et les bases de test
1 2 |
DELETE FROM mysql.user WHERE User=''; DELETE FROM mysql.db WHERE Db='test' OR Db='test_%'; |
3.5) Recharger les privilèges et se déconnecter
1 2 |
FLUSH PRIVILEGES; exit |
4) Création base de données semaphore
Nous allons créer une base de données semaphore et d’un utilisateur ayant le même nom.
L’utilisateur semaphore aura tous les droits sur la base de données du même nom.
4.1) Se connecter au serveur de base de données mariadb
1 |
sudo mysql |
4.2) Créer un utilisateur de base de données semaphore
1 |
CREATE USER 'semaphore'@'localhost' IDENTIFIED BY 'ChangeThisPassword'; |
Attention : Remplacez ChangeThisPassword par le mot de passe que vous aurez choisi pour l’utilisateur semaphore.
4.3) Créer une base de données semaphore
1 2 3 4 |
CREATE DATABASE semaphore; GRANT ALL PRIVILEGES ON semaphore.* TO "semaphore"@"localhost"; FLUSH PRIVILEGES; exit |
5) Création du contexte d’exécution
Nous allons créer un utilisateur semaphore non-admin pour exécuter le service semaphore.
Ensuite, nous créerons un répertoire qui contiendra le fichier de configuration de semaphore.
5.1) Créer un utilisateur linux semaphore
1 |
sudo adduser semaphore |
Attention : Cet utilisateur n’a pas besoin de privilèges élevés.
5.2) Créer le répertoire de configuration semaphore
1 |
sudo mkdir /etc/semaphore |
6) Installation de Semaphore UI
6.1) Installer les prérequis
1 |
sudo apt install -y curl git |
6.2) Télécharger la dernière version de Semaphore UI
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# Récupération de l'url effective de "latest" BASE_URL="https://github.com/semaphoreui/semaphore/releases/latest" LATEST_URL=$(curl -sL -o /dev/null -w %{url_effective} $BASE_URL) # Récupération de la dernière version LATEST_VERSION=$(echo "$LATEST_URL" | sed 's/.*\/tag\/v//') # Construction du nom de fichier LATEST_FILENAME="semaphore_${LATEST_VERSION}_linux_amd64.deb" # Url de téléchargement racine LATEST_DL_BASE_URL=$(echo $LATEST_URL| sed "s/\/tag\//\/download\//") # Construction de l'url de téléchargement de la dernière version LATEST_DL_FULL_URL="${LATEST_DL_BASE_URL}/${LATEST_FILENAME}" # Téléchargement de la dernière version # Ex : https://github.com/semaphoreui/semaphore/releases/download/v2.10.22/semaphore_2.10.22_linux_amd64.deb wget $LATEST_DL_FULL_URL |
6.3) Installer Semaphore UI
1 2 |
# Ex : sudo dpkg -i semaphore_2.10.22_linux_amd64.deb sudo dpkg -i $LATEST_FILENAME |
6.4) Configurer Semaphore UI
1 |
semaphore setup |
6.5) Déplacer le fichier de configuration dans /etc/semaphore
1 |
sudo mv config.json /etc/semaphore |
7) Création d’un service pour Semaphore
7.1) Configuration du service semaphore
1 |
sudo nano /etc/systemd/system/semaphore.service |
Contenu :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
[Unit] Description=Semaphore Ansible Documentation=https://github.com/semaphoreui/semaphore Wants=network-online.target After=network-online.target [Service] Type=simple ExecReload=/bin/kill -HUP $MAINPID ExecStart=/usr/bin/semaphore server --config=/etc/semaphore/config.json SyslogIdentifier=semaphore Restart=always RestartSec=10s User=semaphore Group=semaphore [Install] WantedBy=multi-user.target |
7.2) Recharger la configuration de systemd
1 |
sudo systemctl daemon-reload |
7.3) Activer le service au démarrage du système
1 |
sudo systemctl enable semaphore |
7.4) Démarrer le service semaphore
1 |
sudo systemctl start semaphore |
7.5) Vérifier le status du service semaphore
1 |
sudo systemctl status semaphore |
8) Création d’un projet dans Semaphore
8.1) Se connecter à l’interface web de semaphore
Par défaut, semaphore écoute sur le port réseau 3000.
Il faut donc se rendre à l’url suivant : http://192.168.1.101:3000
Remarque : Remplacer 192.168.1.101 par l’adresse IP de votre serveur.
Renseigner identifiant et mot de passe qui ont été défini lors de la configuration de semaphore.
8.2) Créer un premier projet
9) Informations d’authentification
Nous allons créer des informations d’authentification pour permettre à Semaphore d’accéder aux différentes ressources à savoir :
- Clé privée pour se connecter via SSH aux machines de l’inventaire
- Mot de passe sudo pour les actions nécessitant une élévation de privilège
- Clé d’API du dépôt git (si ce dernier n’est pas public)
9.1) Se rendre dans « Key Store »
Cliquer sur « NEW KEY ».
9.2) Informations de connexion ssh
Renseigner la clé privée permettant de se connecter aux machines de l’inventaire. Évidemment, la clé publique doit être renseignée sur les machines cibles.
Si vous avez suivi le tutoriel Ansible – Installation et configuration, il faudra copier la clé privée de l’utilisateur ansible normalement stockée à cet endroit : /home/ansible/.ssh/id_rsa
.
Attention : La clé privée doit être conservée précieusement et ne doit pas être partagée.
9.3) Mot de passe sudo
Attention : Laisser le champ « Login » vide. Dans le cas contraire, vous pourriez rencontrer une erreur lors de l’exécution du playbook au moment de l’élévation de privilège.
9.4) Authentification git
Password : Dans mon cas, il s’agit du Token d’authentification git.
Remarque : Si le dépôt git est public, vous pouvez ignorer cette étape.
10) Dépôt git dans Semaphore
10.1) Se rendre dans « Repositories »
Cliquer sur « NEW REPOSITORY ».
10.2) Configurer un dépôt git
11) Inventaire dans Semaphore
11.1) Se rendre dans « Inventory »
11.2) Configurer un inventaire
L’inventaire ansible est directement disponible dans le projet sur le dépôt git (voir tutoriel ansible).
Path to Inventory file : Chemin vers l’inventaire ansible. Dans mon cas, l’inventaire est contenu dans un répertoire « inventory » à la racine du projet.
Repository : Dépôt sur lequel se trouve l’inventaire.
12) Tâches dans Semaphore
12.1) Se rendre dans « Task Templates »
12.2) Configurer une tâche
Playbook Filename : Chemin vers le fichier playbook à exécuter. Dans mon cas, il s’agit du fichier « playbook_upgrade_all_packages.yml » stocké à la racine du projet git.
12.3) Exécuter une tâche
Cliquer sur « RUN »
Certaines options sont disponibles comme :
Dry Run qui permet de simuler l’exécution du playbook et sans altérer les machines cibles.
Résultat d’exécution du playbook
Remarque : SI vous rencontrez des problèmes à cette étape, rendez-vous à la partie suivante.
13) Problèmes et erreurs rencontrés avec Semaphore
13.1) Désactiver la vérification SSL dans git
Uniquement si le dépôt git est auto-hébergé avec un certificat auto-signé.
Erreur : SSL: certificate subject name (*.mydomain.com) does not match target host name 'myserver.mydomain2.com'
Solution :
1 |
sudo -u semaphore git config --global http.sslverify false |
Cette commande permet de désactiver la vérification SSL dans git pour l’utilisateur semaphore en modifiant le fichier /home/semaphore/.gitconfig
.
Remarque : L’idéal serait de mettre en place un certificat valide.
13.2) Désactiver la vérification de l’empreinte de la clé ssh
Problème : Si vous utilisez l’authentification par clé, l’exécution du playbook dans semaphore peut être bloquée ici :
Solution :
Modifier le fichier de configuration ansible.
1 |
sudo nano /etc/ansible/ansible.cfg |
Contenu :
1 2 |
[defaults] host_key_checking = false |
Cette configuration va désactiver la vérification de l’empreinte ssh qui nécessite une action utilisateur lors de la toute 1ere connexion à un serveur.
Remarque : Il est possible de configurer ce comportement directement dans les variables de l’inventaire : ansible_ssh_common_args: '-o StrictHostKeyChecking=no'
Voilà ! C’est terminé !
Vous pouvez maintenant automatiser des tâches grâce à Semaphore UI.
Il ne reste plus qu’à :
- Exécuter votre playbook ansible depuis Semaphore UI.
- Utiliser la section commentaires pour me faire part de vos remarques ou problèmes rencontrés.
- Visiter la page de la documentation officielle pour aller encore plus loin.
- Faire un don pour soutenir notre travail.
En savoir plus sur Jj World
Subscribe to get the latest posts sent to your email.
Laisser un commentaire