-
Les problèmes de GitHub Actions
- J’ai récemment passé beaucoup de temps à réécrire des scripts de CI avec GitHub Actions. J’utilisais auparavant Earthly, mais le projet a été abandonné, ce qui m’a forcé à revenir à GitHub Actions.
- La CI est complexe et inclut une file d’attente de fusion, plusieurs runners, des builds Rust, des images Docker, des tests d’intégration, etc. Chaque fusion de PR consomme énormément de temps de CI.
- Les bonnes pratiques logicielles exigent que tous les tests passent, que les petites erreurs soient corrigées automatiquement et que les artefacts testés soient identiques à ceux de la release. GitHub Actions permet cela, mais sa configuration est complexe et incohérente.
-
Vérifications d’état et file d’attente de fusion
- La file d’attente de fusion de GitHub rebase une PR sur la branche principale avant d’exécuter la CI. Mais il faut exécuter la CI à la fois avant et après l’entrée dans la file d’attente, et cela est difficile à configurer.
- La solution consiste à définir le même nom de job aux deux étapes. Cela permet d’exiger la réussite des deux phases.
-
Problèmes de sécurité
- Une GitHub Action populaire a récemment été compromise. En réponse, il a été recommandé d’épingler les dépendances par hash, mais la plupart des utilisateurs ne le font pas.
- Le modèle de sécurité de GitHub est complexe et difficile à comprendre. Il est possible de définir les permissions par défaut de
GITHUB_TOKEN, mais la manière de retirer des permissions n’est pas claire.
- Les permissions du workflow ne dépendent pas de l’action elle-même, et le fait d’élever les permissions dans le code paraît étrange.
-
La combinaison de Docker et GitHub Actions
- GitHub Actions permet d’exécuter des tâches dans un conteneur, mais cela provoque des problèmes comme les permissions de fichiers et le changement d’emplacement du répertoire
$HOME.
- Le champ
container comporte de nombreuses limitations, ce qui empêche par exemple de redéfinir l’entrypoint ou d’exécuter seulement certaines étapes dans le conteneur.
-
Développer des workflows en YAML
- Écrire de la logique en YAML peut vite devenir complexe et propice aux erreurs. J’ai utilisé l’IDE RustRover pour effectuer certaines vérifications, mais de meilleurs contrôles statiques sont nécessaires.
- Il est difficile de tester en local, si bien qu’il faut créer le même dépôt, puis répéter les commits et les push jusqu’à ce que la CI fonctionne.
- Il faut garder les workflows petits et pousser des artefacts pour pouvoir les réutiliser dans d’autres workflows. Mais télécharger des artefacts nécessite un token.
-
Conclusion
- Le nouveau script de CI a nettement réduit le temps de fusion, mais le processus de configuration reste complexe et le débogage difficile. Il faut de l’innovation.
1 commentaires
Avis Hacker News
Certains estiment que GitLab est meilleur, mais GitLab a aussi ses propres problèmes d’une autre manière
Il est intéressant de constater que GitHub Actions et le DevOps sont largement critiqués
Je suis passé de GitLab à GitHub, mais j’ai été déçu
Une boucle de feedback de 30 à 60 secondes, c’est le pire
Je ne veux pas que la CI modifie automatiquement le code
Je suis déçu, on dirait que l’évolution de GitHub Actions s’est arrêtée
GitHub Actions pousse à détourner les conteneurs en scripts d’installation
Il est important de choisir l’outil adapté
À cause des problèmes de sécurité de GitHub Actions, il faut verrouiller les dépendances avec des hash
GitHub Actions a de nombreux problèmes