Le Touilleur Express

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

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 !

0 no like

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

  • L’instant T où tu poses ta dém…
  • The « Robinson » projection – comprendre son système d’information
  • Réussir son démarrage comme Staff/Principal Engineer dans une nouvelle entreprise
  • Gérer les situations de blocage en tant que Staff Engineer
  • Un monolithe, c’est quoi ?

Commentaires récents

  • Nicolas Martignole dans The « Robinson » projection – comprendre son système d’information
  • Lucas dans The « Robinson » projection – comprendre son système d’information
  • Guillaume dans The « Robinson » projection – comprendre son système d’information
  • Francois Dechery dans The « Robinson » projection – comprendre son système d’information
  • Gaëtan dans The « Robinson » projection – comprendre son système d’information

Les plus lus

  • Les revenus d’un informaticien indépendant en EURL - 89 684 affichage(s)
  • Optional en Java 8 - 70 952 affichage(s)
  • Changer la batterie d’un MacBook Pro de 2011 - 65 588 affichage(s)
  • Quelle est la différence entre volatile et synchronized ? - 65 465 affichage(s)
  • Retour sur la soirée du lundi 12 juillet chez Doctolib - 63 072 affichage(s)
  • Un modèle de Product Backlog et de Sprint Backlog avec Excel - 57 801 affichage(s)
  • Redis, découverte d’un moteur clé-valeur simple et puissant - 51 018 affichage(s)
  • Comment simuler le navigateur de l'iphone avec Firefox ou Safari ? - 45 657 affichage(s)
  • serialVersionUID mythes et légendes - 41 901 affichage(s)
  • Développeur après 31 ans ? Ridé et chauve tu seras - 39 394 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

  • L’instant T où tu poses ta dém…

    Retour d’expérience sur la démission et le moment où vous devez quitter une entreprise.

    6 likes

    24 octobre, 2024
  • The « Robinson » projection – comprendre son système d’information

    Nous sommes en juillet 2022 chez Doctolib. Je travaille sur un projet

    5 likes

    22 octobre, 2024
  • Réussir son démarrage comme Staff/Principal Engineer dans une nouvelle entreprise

    Je prépare une présentation avec mon collègue Théotime pour la conférence Cloud

    3 likes

    6 octobre, 2024

Mots clés

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

Le Touilleur Express

Blog par Nicolas Martignole

Contactez-moi : nicolas@touilleur-express.fr

Suivez-moi sur X (Twitter) : @nmartignole

Copyright© 2008 - 2024 Nicolas Martignole | Tous droits réservés
  • A propos de l’auteur
  • A propos du Touilleur Express
  • Reset Password

Le Touilleur Express