Aller au contenu

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    
On peut vérifier l'installation de docker avec un 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.

sudo apt install supervisor

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
Attention pour le nombre de procs : les repertoires commencent à 0, donc si on va jusqu'à action-runner9, on a un numprocs à 10

sudo service supervisor restart

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