Avouez-le : ce titre de blog est super racoleur. J’avais aussi pensé à un autre titre comme « il découvre comment isoler son toit pour 1 euro avec Github Actions » ou encore « vous payez trop d’impôts ? Pensez à Github Actions« . J’en profite d’ailleurs pour vous informer que ce post n’est pas et ne sera jamais sponsorisé par Github, ou les sociétés d’isolation à un euro.
Dis Nicolas, c’est quoi Github Actions ? Et bien c’est un système proposé par Github, qui permet d’exécuter des scripts lorsque tu commites du code code, que tu merges une branche, ou d’autres activités sur ton repo Github.
A quoi cela sert-t-il ? Et bien en premier lieu, à automatiser certaines tâches et à ajouter des processus d’intégration continue. Vous pouvez par exemple déclencher une batterie de tests unitaires, de tests fonctionnels, lancer une migration, préparer un packaging pour Docker, mettre à jour une doc, bref tout un tas de Workflow intéressant.
Vous pouvez donc faire de l’intégration continue ET du déploiement continu. Github Actions est gratuit pour les repos publiques jusqu’à 2000 actions par mois. C’est un service payant pour les repositories privés, intégré cependant à votre souscription. Sincèrement, c’est largement moins cher qu’un Jenkins d’entreprise partagé par 30 personnes, et qui est au bout de sa vie.
Prenez un projet Java + Maven par exemple. Il suffit d’ajouter un fichier yaml dans le répertoire .github/workflows et de créer une action comme celle-ci :
name: Java CI
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps: - uses: actions/checkout@v2 - name: Set up JDK 1.8 uses: actions/setup-java@v1 with: java-version: 1.8 - name: Build with Maven run: mvn --batch-mode --update-snapshots verify
A titre d’exemple un peu plus musclé, voici le workflow que nous utilisions sur un projet interne avec Quarkus.
# Build the Quarkus part of Timekeeper name: Quarkus CI on develop on: workflow_dispatch: push: branches: [ develop ] pull_request: branches: [ develop ] jobs: build-and-test-backend: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2.3.3 - name: Set up JDK 11 uses: actions/setup-java@v1 with: java-version: 11 - name: Build with Maven in batch mode run: ./mvnw -B compile test --file pom.xml - name: Sonar quality run: ./mvnw -B -P sonar -Dsonar.login=$SONAR_TOKEN --file pom.xml clean verify sonar:sonar env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - name: Build failed Notification if: failure() uses: rtCamp/action-slack-notify@v2.1.0 env: SLACK_TITLE: ERROR Github Msg SLACK_COLOR: '#ee0000' SLACK_CHANNEL: fr-timekeeper SLACK_WEBHOOK: ${{ secrets.slack }}
Ce build fait plusieurs choses intéressantes :
- installation du JDK 11
- exécution de Maven avec les tests
- exécution de Sonar et envoi sur sonarcloud.io du résultat du build. Ceci permet de voir la « qualité » de chaque PR avant même qu’elle ne soit mergée sur main. Il faut installer l’application SonarCloud sur votre organisation Github. Et il faudra aussi un abonnement SonarCloud.io
- Notification Slack sur le channel « fr-timekeeper ». Pour cela il faudra installer l’application Slack pour Github
Sur ce même projet, nous avions un 2ème workflow pour compiler uniquement la partie React. Les fichiers sont placés dans le sous-répertoire /frontend. Ainsi, ce Workflow ne se réveille que lorsqu’il y a une activité sur ce sous-répertoire.
# This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node name: Frontend CI on: push: branches: [ develop ] paths: - 'frontend/**' pull_request: branches: [ develop ] paths: - 'frontend/**' jobs: build-and-test-frontend: runs-on: ubuntu-latest name: Build and test frontend steps: - uses: actions/checkout@v2.3.3 - uses: bahmutov/npm-install@HEAD with: working-directory: ./frontend useLockFile: false - run: CI=true npm test working-directory: ./frontend
Vous pouvez par exemple publier automatiquement une image Docker sur Github Container Registery.
Comment tester les workflows Github Actions ?
Le seul « bémol » lorsque vous mettez au point vos workflows : comment les tester ? On se retrouve à faire un commit avec un espace pour lancer le build… Hmmm c’est pourri ton isolation de toit tu sais ?
Et là, petite découverte de mes collègues de Lunatech (Manuel Dupont et Maude Cahuet) : y’a le projet Act qui te permet de lancer en local les scripts, afin de vérifier si tout fonctionne. Je leur dis merci car c’est supra-ultra pratique. Act se base sur Docker et permet d’exécuter les workflows localement sur une image Docker. A l’heure où j’écris ces lignes, cela ne marche pas sur ARM si vous avez les derniers Apple M1 qui déboitent. Mais bon c’est une histoire de semaines je pense.
A noter que l’option workflow_disptach
vous permettra aussi de déclencher à la demande un workflow. Cela ajoute un bouton « Run Workflow » dans l’interface Web de Github. Pratique pour des workflows manuels et exceptionnels.
En conclusion, et pour voir si vous avez bien compris
Ce matin je vous sens en PLS donc on va faire un contrôle de connaissances.
GitHub Actions permet :
- de vérifier qu’une PR compile
- de lancer des tests unitaires sur une PR, et de bloquer le merge si un test échoue
- de packager une image Docker, de la pousser sur la registery de Github
- de publier un message de succès sur Slack
- les réponses de 1 à 4
Bref vous l’aurez compris : ce serait dommage de ne pas isoler votre code et de passer à côté de ce superbe produit, surtout si votre repo est publique !
Bonne semaine !
Commentaires récents