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

Grégoire Pineau

June 09, 2022
Tweet

More Decks by Grégoire Pineau

Other Decks in Technology

Transcript

  1. 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
  2. Workflow Une recette écrite en YAML Dans le dossier .github/workflows

    Avec • un name • des jobs • et biens d’autres choses 5
  3. 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
  4. 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
  5. 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
  6. La marketplace • Beaucoup d’actions • Par GitHub ou non

    • Vérifié ou non • https://github.com/marketplace?type=actions 12
  7. 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
  8. 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
  9. 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
  10. Context 18 Github fourni différentes variables • github • env

    • job • steps • runner • secrets • etc https://docs.github.com/en/actions/learn-github-actions/contexts
  11. 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
  12. 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
  13. 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
  14. 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
  15. Registry natif + Packages • Docker • npm • Maven

    • NuGet • RubyGems Avec le système classique de permissions Attention aux connexions avec un repo 35
  16. 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
  17. Les permissions 38 • Ne pas utiliser de PAT (tant

    que possible) • Définir les permissions dans le workflow.yml
  18. Les environnements 40 • correspond à une URL • a

    un jeu de secrets • a un ensemble de protections • disponible uniquement pour ◦ les repositories publics ◦ GH Enterprise
  19. 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
  20. Git Split automatique • Vous avez un mono repo •

    Vous voulez splitter les composants • https://github.com/jderusse/docker-gitsplit 46
  21. Profile GitHub 48 Automatiser la MAJ de son profile GitHub,

    avec GitHub Actions ➰ https://github.com/jessfraz
  22. 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
  23. Quel Pricing ? • Pricing classique de GitHub • Gratuit

    pour l’open source • Avec un quota pour le closed source • Minutes de build / mois 55
  24. 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
  25. 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