Le Touilleur Express

  • Accueil
  • A propos de l’auteur
  • A propos du Touilleur Express

GitHub Actions : le tueur de Jenkins ?

15 février, 2021

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 :

  1. de vérifier qu’une PR compile
  2. de lancer des tests unitaires sur une PR, et de bloquer le merge si un test échoue
  3. de packager une image Docker, de la pousser sur la registery de Github
  4. de publier un message de succès sur Slack
  5. 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 !

Articles similaires:

Default ThumbnailRiviera Dev : HOW GITHUB USES GITHUB TO BUILD GITHUB Le code source du CFP de Devoxx France est sur Github Default ThumbnailLancement de Google Buzz, le tueur de Twitter ?

Chercher

Derniers articles

  • Vis ma vie de Staff/Principal Engineer
  • Devenir Staff Engineer : comment et pourquoi ?
  • WeAreDevelopers 2022, conférence à Berlin – jour 1
  • Le chiffrement de bout en bout et la signature d’enveloppe
  • L’entretien de recrutement « System Design »

Commentaires récents

  • Nicolas Martignole dans Vis ma vie de Staff/Principal Engineer
  • Matt dans Vis ma vie de Staff/Principal Engineer
  • Sébastien dans Vis ma vie de Staff/Principal Engineer
  • BLA dans Devenir Staff Engineer : comment et pourquoi ?
  • Sébastien dans Devenir Staff Engineer : comment et pourquoi ?

Les plus lus

  • Les revenus d’un informaticien indépendant en EURL - 88 999 affichage(s)
  • Optional en Java 8 - 68 662 affichage(s)
  • Changer la batterie d’un MacBook Pro de 2011 - 64 878 affichage(s)
  • Retour sur la soirée du lundi 12 juillet chez Doctolib - 61 747 affichage(s)
  • Quelle est la différence entre volatile et synchronized ? - 60 744 affichage(s)
  • Un modèle de Product Backlog et de Sprint Backlog avec Excel - 56 053 affichage(s)
  • Redis, découverte d’un moteur clé-valeur simple et puissant - 50 229 affichage(s)
  • Comment simuler le navigateur de l'iphone avec Firefox ou Safari ? - 44 969 affichage(s)
  • serialVersionUID mythes et légendes - 41 181 affichage(s)
  • Développeur après 31 ans ? Ridé et chauve tu seras - 38 854 affichage(s)

Mots clés

agile ajax Apple architecture barcamp BarCampJavaParis ddd devoxx esb exo flex geek google grails groovy humeur humour independant iphone Java javascript jazoon jboss jboss seam jsf jug Linux mac mule paris jug parisjug pjug play playframework portlet recrutement ria Scala scrum spring Startup usi usi2010 web xebia

Derniers articles

  • Vis ma vie de Staff/Principal Engineer

    Suite de l’article précédent sur le Staff Engineer. Aujourd’hui, voyons un peu

    20 juillet, 2022
  • Inari

    Devenir Staff Engineer : comment et pourquoi ?

    Après une dizaine d’années en tant que développeur, vous serez un jour

    17 juillet, 2022
  • WeAreDevelopers 2022, conférence à Berlin – jour 1

    Il est 8h40, 19 degrés, vous êtes à Berlin. La queue dehors

    24 juin, 2022

Tweets @nmartignole

  •  @fanf42  Excellent 👌

    1 day ago
  • RT  @iambdxoul :  @TheHackersNews  Lmao

    2 days ago
  • RT  @PR0GRAMMERHUM0R : Finally a GPT feature useful for work https://t.co/8U9FSUwKg5 https://t.co/GkUIJi7qtW

    2 days ago

Mots clés

Apple (32) Architecture (13) Big Data (5) Conference (8) Devoxx (55) Dev Web (37) Doctolib (2) geekevent (1) groovy (2) Innoteria (11) Java (517) Linux (10) Non classé (14) Perso (266) Recrutement (3) Scala (30) scrum (43) Société (3) Startup (20) Web 2.0 (67)

Le Touilleur Express

Blog par Nicolas Martignole

Contactez-moi : nicolas@touilleur-express.fr

Suivez-moi sur Twitter : @nmartignole

Copyright© 2008 - 2020 Nicolas Martignole | Tous droits réservés
  • A propos de l’auteur
  • A propos du Touilleur Express
  • Log In
  • My Account
  • My Profile
  • Reset Password

Le Touilleur Express