Utilisation d'un runner auto-hebergé pour la CI¶
Contexte : CI de github
Machine existante¶
La machine debian@193.70.41.142 a déjà une dizaine de runner configurés et actif. Ce sont les runner0 à runner9 qu'on peut voir sur la page runners mgX
Installation de nouveaux runners¶
Pré-requis¶
On part du principe qu'on est sur une Debian et que c'est l'utilisateur courant qui va executer les runner :
- curl (
apt install curl) - docker (suivre l'installation par repository depuis https://docs.docker.com/engine/install/debian/)
tl;nr Docker:¶
sudo apt-get update
sudo apt-get install \
ca-certificates \
curl \
gnupg
sudo mkdir -m 0755 -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo docker run hello-world
Il faut rajouter l'utilisateur courant au groupe docker : sudo usermod -aG docker $USER
Quitter le shell et se reconnecter pour activer l'appartenance au groupe.
Installation du Runner¶
Globalement, il faut suivre https://github.com/Efalia/mgx/settings/actions/runners/new
mkdir actions-runner0 && cd actions-runner0
# Récuperer la derniere version depuis l'url ci-dessus
curl -o actions-runner-linux-x64-2.303.0.tar.gz -L https://github.com/actions/runner/releases/download/v2.303.0/actions-runner-linux-x64-2.303.0.tar.gz
# Optional: Validate the hash (pareil, on récupere les infos depuis l'url
$ echo "e4a9fb7269c1a156eb5d5369232d0cd62e06bec2fd2b321600e85ac914a9cc73 actions-runner-linux-x64-2.303.0.tar.gz" | shasum -a 256 -c
# Extract the installer
tar xzf ./actions-runner-linux-x64-2.303.0.tar.gz
#On peut supprimer l'archive
rm ./actions-runner-linux-x64-2.303.0.tar.gz
cd ..
# A répéter autant de fois qu'on veut de runner (en remplaçant le X par des entiers consécutifs
cp -R action-runner0 action-runnerX
Ensuite, en allant dans chaque répertoire créés :
# Create the runner and start the configuration experience
# Bien penser à donner un nom différent à chaque runner.
./config.sh --url https://github.com/Efalia/mgx --token A_RÉCUPERER_SUR_L_URL_RUNNERS_NEW_INDIQUÉE_AU_DÉBUT_DE_LA_SECTION
# Last step, run it! (juste pour vérifier que ça fonctionne. On peut killer le process juste après)
./run.sh
Lancement automatique des runner¶
On utilise supervisor pour lancer les runner et les maintenir en vie.
Créer un ficher /etc/supervisor/conf.d/github.conf et le remplir comme suit (remplacer le 10 par le nombre de répertoire créés :
[program:github-runner]
command=/home/debian/runner%(process_num)s/run.sh
process_name=%(program_name)s%(process_num)s
user=debian
numprocs=10
Un saut sur la page https://github.com/Efalia/mgx/settings/actions/runners devrait indiquer les nouveaux runners en Idle.
Utilisation des runners :¶
À l'intérieur des fichiers .github/workflows/*.yml remplacer dans les sections jobs les lignes runs-on: 'ubuntu-latest' par runs-on: self-hosted