Upgrade to Pro — share decks privately, control downloads, hide ads and more …

GitHub Actions - Automatisation de vos workflows

GitHub Actions - Automatisation de vos workflows

GitHub Action a été rendu public en 2019, mais en quoi peut il nous aider à automatiser nos workflows ? Durant cette conférence, nous appendrons à exécuter une suite de tests, puis déployer notre code. Nos verrons en détails les fichiers de configuration, les subtilités, et comment exploiter toute la puissance de GA.

Cependant, on ne peut pas résumer GA à une CI/CD, car il permet de faire bien plus, comme répondre, trier automatiquement des pull requests, fermer les vieilles issues sans activité, remercier les contributeurs, etc.

---

Quelques resources:

* https://github.com/lyrixx/ga-playground : plein de démo / tips
* https://github.com/lyrixx/ga-docker-playground : intégration de GA + ghrc.io
* https://github.com/lyrixx/ga-netlify-playground : intégration de GA + Netlify

7602f2751868682b296171f58589c851?s=128

Grégoire Pineau

June 09, 2022
Tweet

More Decks by Grégoire Pineau

Other Decks in Technology

Transcript

  1. GitHub Actions - Automatisation de vos workflows Grégoire Pineau @lyrixx

    Dev @JoliCode Core Team @symfony
  2. GitHub Actions • Annoncé en 2018 (beta privée) • GA

    en novembre 2019 2
  3. GitHub Actions 3

  4. GitHub Actions • Permet d'exécuter du code • Dans un

    environnement contrôlé • Vous codez - GitHub exécute • Supporte n’importe quel langage GitHub Actions n’est ni plus ni moins qu’un scheduler de workflows 4
  5. Workflow Une recette écrite en YAML Dans le dossier .github/workflows

    Avec • un name • des jobs • et biens d’autres choses 5
  6. Quand est déclenché mon workflow ? Un système d'événements puissants

    • repository events: ◦ commit, tags ◦ pull request ◦ issue ◦ project ◦ milestones ◦ etc • cron • trigger custom (API) • à la main https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows 6
  7. Où est exécuté mon workflow ? aka “runner” Chez GitHub

    • Linux (Ubuntu 18.04, 20.04, ou 22.04) • MacOS (10.15, 11, ou 12) • Windows (Server 2022 ou 2019) Chez vous “hosted-runner” • Sur l’OS de votre choix 7
  8. Des Jobs et des Steps 8

  9. Des Jobs et des Steps Un workflow exécute un ou

    plusieurs jobs • en parallèle • ou séquentiellement Chaque job exécute une ou plusieurs steps • séquentiellement 9
  10. Une Step • Une marketplace d’actions ◦ avec des arguments

    • run 10
  11. Run L’instruction la plus simple 11

  12. La marketplace • Beaucoup d’actions • Par GitHub ou non

    • Vérifié ou non • https://github.com/marketplace?type=actions 12
  13. Partager son action • on peut écrire une action en

    TypeScript • ou une action composite en YAML • le dépôt doit être open source • (peut être sur la marketplace) • ou privé sur un plan enterprise • ou sinon bidouiller un peu 🤓 13
  14. Partager des actions (privées) |-- hello-world (repository) | |__ .github

    | └── workflows | └── my-first-workflow.yml | └── actions | |__ hello-world-action | └── action.yml jobs: build: runs-on: ubuntu-latest steps: - uses: ./.github/actions/hello-world-action - uses: myorga/foobar@v3 # ⚠ 14 https://docs.github.com/en/actions/learn-github-actions/finding-and-customizing-actions
  15. Résumé 15

  16. Interlude : Expression & Context 16

  17. Expression GitHub a son propre moteur de template : ${{

    <expression> }} Supporte les opérateurs usuels : < > == ! && !! () [] etc Ainsi que quelques functions : contains startsWith endsWith format join toJSON fromJSON etc Exemple: • startsWith('Hello world', 'He') • join(github.event.issue.labels.*.name, ', ') 17 https://docs.github.com/en/actions/learn-github-actions/expressions
  18. Context 18 Github fourni différentes variables • github • env

    • job • steps • runner • secrets • etc https://docs.github.com/en/actions/learn-github-actions/contexts
  19. Jobs, Steps & Dépendances 19

  20. Matrix 20 Exécute le même job avec différentes configurations

  21. Conditions Exécute une action ou une step si la condition

    est OK 21
  22. Dépendance Permet de rendre séquentielle une série de jobs 22

  23. Pitfalls 23

  24. Jobs 24 Chaque job tourne dans une VM différente On

    peut uploader des artefacts
  25. L'enchaînement de workflow • Enchaîner les workflows est compliqué (mais

    possible) • Surtout si on a besoin de partager du context / artefacts Un seul workflow avec des jobs conditionnés ✔ 1. Build 2. Test 3. Release / Publish 4. Deploy Différents workflows pour des tâches totalement différentes ✔ 25
  26. Les entrées / sorties 26

  27. Input 27

  28. Output 28

  29. Améliorer le rapport Il est possible • d’ajouter des logs

    aux jobs • d’ajouter un résumé aux jobs • de grouper l’output dans les logs 29
  30. Les secrets Trois niveaux de secrets • au niveau de

    l'organisation • au niveau du projet • au niveau de l'environnement Ils sont • non éditables • non affichables dans les logs 30
  31. Les variables d'environnements 31

  32. Astuces 32

  33. Surcharge de la configuration 33 Il est possible de surcharger

    la configuration pour chaque section
  34. Intégration avec Docker • Docker est disponible par défaut •

    Docker Compose aussi • Un registry : ghcr.io • Des actions pour gérer les workflows ◦ build ◦ tag ◦ push ◦ ectc Example : https://github.com/lyrixx/ga-docker-playground 34
  35. Registry natif + Packages • Docker • npm • Maven

    • NuGet • RubyGems Avec le système classique de permissions Attention aux connexions avec un repo 35
  36. Utilisation du cache 36 • https://github.com/actions/cache • https://github.com/actions/setup-node • https://github.com/actions/setup-python

    • https://github.com/actions/setup-java • https://github.com/actions/setup-ruby GitHub cache lui-même certains packages Des fois le cache est contre-productif
  37. Services disponibles • Fait tourner n’importe quel service • Tant

    qu’il est dans un container 37
  38. Les permissions 38 • Ne pas utiliser de PAT (tant

    que possible) • Définir les permissions dans le workflow.yml
  39. Déploiement ? 39

  40. Les environnements 40 • correspond à une URL • a

    un jeu de secrets • a un ensemble de protections • disponible uniquement pour ◦ les repositories publics ◦ GH Enterprise
  41. Les déploiements On peut attacher un déploiement dans • un

    commit • une PR • un environnement Très dépendant de l'hébergement https://github.com/lyrixx/ga-netlify-playground 41
  42. Intégrations avec des cloud providers (2690) 42

  43. Et à part la CI/CD ? 43

  44. Interaction avec votre communauté 44

  45. Entretien du dépôt 45

  46. Git Split automatique • Vous avez un mono repo •

    Vous voulez splitter les composants • https://github.com/jderusse/docker-gitsplit 46
  47. Code review 47

  48. Profile GitHub 48 Automatiser la MAJ de son profile GitHub,

    avec GitHub Actions ➰ https://github.com/jessfraz
  49. https:/ /estcequegregaplusdefollowerquejolicode.fr 49 • “Project” / blague développé pendant une

    soirée 🍻🥃󰷺 - piloté à 100% par GitHub • Une action qui est déclenchée via un CRON • Contrôle qui a le plus de followers • “Build” un site web en fonction du résultat • Déploie sur GitHub Pages https://github.com/lyrixx/estceque
  50. 50 Ou du fun

  51. GitHub CLI 51

  52. GitHub CLI https://cli.github.com/ 52 https://cli.github.com/

  53. GitHub Extensions 53

  54. Conclusion 54

  55. Quel Pricing ? • Pricing classique de GitHub • Gratuit

    pour l’open source • Avec un quota pour le closed source • Minutes de build / mois 55
  56. Conclusion • Vraiment très agréable à utiliser • Rapide et

    relativement simple • Gratuit dans une certaine limite • Documentation très complète • La courbe d'apprentissage est un peu compliquée ◦ presque trop de documentation ◦ la sécurité pose souvent des problèmes (mais pour notre bien) 56
  57. Quelques ressources • https://github.com/lyrixx/ga-playground : plein de démo / tips

    • https://github.com/lyrixx/ga-docker-playground : intégration de GA + ghrc.io • https://github.com/lyrixx/ga-netlify-playground : intégration de GA + Netlify • https://github.com/skills/hello-github-actions : tuto fait par github • https://docs.github.com/en/actions : la documentation officiel 57
  58. Merci 58

  59. Des questions ? Grégoire Pineau @lyrixx Dev @JoliCode Core Team

    @symfony 59 Les slides