Maison >développement back-end >tutoriel php >Réintroduction de Jenkins: tests automatisés avec des pipelines

Réintroduction de Jenkins: tests automatisés avec des pipelines

Christopher Nolan
Christopher Nolanoriginal
2025-02-10 15:01:09738parcourir

Re-Introducing Jenkins: Automated Testing with Pipelines

Points de base

  • Jenkins est un serveur de construction open source populaire qui prend en charge les tests automatisés d'applications complexes et accélère le processus de version en découvrant et en résolvant les erreurs avant le déploiement.
  • Jenkins Pipeline (introduit dans la version 2.0) est un ensemble d'étapes personnalisables écrites dans le langage de script Groovy pour les tests et le code de construction. Si une étape échoue, toute la construction échouera et Jenkins cessera de s'exécuter.
  • Jenkins peut être facilement installé et configuré à l'aide de Laravel Homestead. Une fois la configuration terminée, vous pouvez créer un nouveau travail de construction pour consulter la dernière version du projet, installer les dépendances et exécuter des tests unitaires.
  • Le pipeline Jenkins peut être écrit comme un script JenkinsFile dans le répertoire racine de la base de code, implémentant ainsi le contrôle de version. Vous pouvez également configurer des travaux de pipeline multi-branches pour exécuter différentes opérations sur différentes branches du projet.
  • Jenkins prend en charge un large écosystème de plug-ins qui peut être installé et configuré pour étendre leurs capacités, notamment le test des plug-ins et l'intégration avec les services cloud. Il peut être configuré pour être construit automatiquement chaque fois qu'un commit est poussé vers le référentiel et doit être sécurisé correctement.

Étant donné que les applications deviennent plus complexes, y compris les dépendances des compositeurs, les scripts de construction de webpack et chaque variable environnement - nous atteignons inévitablement un point où le test de toutes ces différentes complexités devient lent et qu'il est laborieux, surtout lorsque chaque test nécessite la suppression et la reconstruction de la Environnement entier. De même, les styles de code peuvent s'affronter au fil du temps, et la création d'une archive de déploiement qui peut être utilisée pour la production nécessite un ensemble spécifique d'étapes.

Supposons de tester l'application, les étapes suivantes sont nécessaires:

  1. Run composer install pour s'assurer que les dépendances sont installées
  2. Exécutez php -l sur chaque fichier PHP dans la base de code pour vérifier les erreurs de syntaxe
  3. Exécuter le phpunit pour les tests unitaires
  4. Exécuter CodeCection pour les tests fonctionnels

Re-Introducing Jenkins: Automated Testing with Pipelines

Si l'une de ces étapes échoue, le logiciel doit être jugé inadapté au déploiement jusqu'à ce que l'erreur soit résolue. À mesure que le logiciel devient plus complexe et que le nombre de tests augmente au fil du temps, il peut prendre plusieurs minutes pour exécuter une suite de test complète, ce qui ralentit le développeur et, à son tour, ralentit le processus de version.

Pour surmonter ce problème, les serveurs de construction peuvent être introduits dans le flux de travail de développement. Le serveur de construction exécute un logiciel qui vous permet d'exécuter une série d'étapes à plusieurs reprises, et si l'un d'eux échoue, le serveur de construction peut vous informer du problème. Si vous avez été impliqué dans des projets open source, vous avez peut-être vu des applications pratiques pour la construction de serveurs tels que Travisci ou Circleci. Par exemple, chaque demande de traction pour un projet Laravel est testée par Travisci pour garantir que les modifications ne brisent aucun test, et Styleci garantit alors que les modifications de code correspondent au style de code de projet.

Re-Introducing Jenkins: Automated Testing with Pipelines

Jenkins est un serveur de construction open source populaire qui a publié la version 2.0 cette année. L'une des principales fonctionnalités de cette nouvelle version consiste à inclure le plugin de pipeline (précédemment facultatif) en tant que fonctionnalité principale.

Le pipeline

est un ensemble d'étapes entièrement personnalisables qui peuvent être exécutées séquentiellement pour tester et créer du code. Pipeline est écrit en langage de script Groovy et il a une syntaxe très simple et est facile à démarrer. Par exemple, si vous souhaitez décrire l'étape de test décrite précédemment comme un pipeline, cela pourrait ressembler à ceci:

<code class="language-groovy">node {
    stage("composer_install") {
        sh 'composer install'
    }

    stage("php_lint") {
        sh 'find . -name "*.php" -print0 | xargs -0 -n1 php -l'
    }

    stage("phpunit") {
        sh 'vendor/bin/phpunit'
    }

    stage("codeception") {
        sh 'vendor/bin/codecept run'
    }
}</code>
L'instruction

node> indique à Jenkins d'attribuer un nœud de construction séparé (Jenkins peut s'exécuter en mode unique ou paramètres multi-nœuds). node Il y a plusieurs étapes dans le bloc, chaque étape effectue une opération spécifique. Jenkins exécutera chaque étape à son tour, et en cas d'échec d'une étape, l'ensemble de la construction échouera et Jenkins cessera de s'exécuter.

À partir de cet exemple simple, des phases supplémentaires d'autres tests peuvent être facilement ajoutées, en disant à Jenkins d'envoyer des notifications de jeu de construction réussies ou échouées, de pousser le code testé avec succès à la branche de publication ou de marquer la demande de traction comme fusion.

Installez Jenkins

Jenkins est très facile à installer, et dans ce tutoriel, nous utiliserons Laravel Homestead pour fournir un environnement virtuel cohérent afin que vous puissiez utiliser Jenkins localement.

La première étape consiste à installer Laravel Homestead - voici un guide utile. Vous avez juste besoin de démarrer et d'exécuter la machine virtuelle, nous n'avons pas besoin de configurer aucun site dans le fichier homestead.yaml.

Après vous lever et exécuter la machine virtuelle Homestead, utilisez vagrant ssh pour vous connecter.

Homestead est livré avec toutes les dépendances dont nous avons besoin, à savoir Git, PHP et compositeur, nous avons donc juste besoin d'installer Jenkins lui-même. Après le guide de package Debian Jenkins, nous devons effectuer les étapes suivantes.

Run wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -. Cette commande ajoute la clé de signature de code à aptitude afin que les packages Jenkins de ce référentiel soient fiables.

Ensuite, la liste des sources de packages doit être mise à jour afin que l'aptitude connaît le référentiel de packages Jenkins. Exécuter echo "deb https://pkg.jenkins.io/debian-stable binary/" | sudo tee -a /etc/apt/sources.list.

Enfin, nous avons besoin d'aptitude pour mettre à jour le cache de ses packages disponibles, puis installer Jenkins:

<code class="language-groovy">node {
    stage("composer_install") {
        sh 'composer install'
    }

    stage("php_lint") {
        sh 'find . -name "*.php" -print0 | xargs -0 -n1 php -l'
    }

    stage("phpunit") {
        sh 'vendor/bin/phpunit'
    }

    stage("codeception") {
        sh 'vendor/bin/codecept run'
    }
}</code>

L'installation de Jenkins prend environ cinq minutes, car il a également de nombreuses dépendances qui doivent être installées.

Après avoir installé Jenkins, ouvrez http://192.168.10.10:8080 (ou l'URL de l'hôte virtuel que vous avez configuré, par exemple homestead.app) dans votre navigateur et vous devriez voir une page intitulée "Déverrouiller Jenkins".

Re-Introducing Jenkins: Automated Testing with Pipelines

Dans la machine virtuelle, exécutez la commande suivante - sudo cat /var/lib/jenkins/secrets/initialAdminPassword, et un nombre aléatoire et une chaîne alphabétique seront imprimés sur la console. Copiez et collez la chaîne dans le champ de texte dans le navigateur et appuyez sur.

Re-Introducing Jenkins: Automated Testing with Pipelines

Vous verrez deux options - sélectionnez "Installation du plugin suggéré" et attendez quelques minutes jusqu'à ce que le plugin soit téléchargé et installé.

Re-Introducing Jenkins: Automated Testing with Pipelines

Sur l'écran suivant, entrez les détails de l'utilisateur de l'administrateur et appuyez sur "Enregistrer et fait".

Re-Introducing Jenkins: Automated Testing with Pipelines

Jenkins est maintenant installé et configuré!

Créez le premier travail

Après avoir configuré Jenkins, nous créerons un nouveau travail de construction qui fera ce qui suit:

  1. Découvrez la dernière version de laravel/framework
  2. Installation des dépendances des compositeurs
  3. Exécuter phpunit

Cliquez sur le lien Créer un nouveau travail (ou le lien Créer un nouveau projet - ils font tous de même).

Re-Introducing Jenkins: Automated Testing with Pipelines

laravel Entrez un nom

, sélectionnez "Pipeline" et appuyez sur OK.

Vous verrez maintenant l'éditeur de configuration pour le travail. Faites défiler jusqu'à la section Pipeline et entrez le script suivant:
<code class="language-bash">sudo apt-get update && sudo apt-get install jenkins</code>

Appuyez sur "Enregistrer". Vous serez redirigé vers la page Présentation du travail et après quelques secondes, vous verrez le travail commencer. Si cela ne démarre pas, cliquez simplement sur le lien Build Now dans le menu de gauche.

Re-Introducing Jenkins: Automated Testing with Pipelines

La vue de phase sera mise à jour lorsque chaque phase démarre et se termine lorsque nous définissons dans le script de pipeline.

Si vous cliquez sur une étape, une superposition apparaîtra avec la sortie du journal pour cette étape, ce qui est très utile pour le débogage. Alternativement, vous pouvez cliquer sur le travail dans le menu à gauche et cliquer sur la console.

Tous les travaux Jenkins ont leur propre espace de travail, qui est une zone où vous pouvez créer des fichiers temporaires en toute sécurité dont vous pourriez avoir besoin dans la zone de construction. L'emplacement de l'espace de travail pour ce travail se trouve dans /var/lib/jenkins/workspace/laravel. Par défaut, Jenkins n'efface pas cet espace de travail pour chaque version. Si vous devez le faire, vous pouvez ajouter une phase au début du script de pipeline comme suit:

<code class="language-groovy">node {
    stage("composer_install") {
        sh 'composer install'
    }

    stage("php_lint") {
        sh 'find . -name "*.php" -print0 | xargs -0 -n1 php -l'
    }

    stage("phpunit") {
        sh 'vendor/bin/phpunit'
    }

    stage("codeception") {
        sh 'vendor/bin/codecept run'
    }
}</code>

jenkinsfile

Pour notre premier emploi, nous avons édité le script de pipeline dans l'interface des paramètres du travail. Cependant, il serait plus utile d'enregistrer ce script dans le contrôle de version avec notre code.

À l'aide du pipeline de Jenkins, vous pouvez écrire le pipeline comme un script JenkinsFile dans le répertoire racine du référentiel de code et il sera découvert et exécuté. Son concept est similaire à un fichier .travis.yml ou .circleci.yml que vous connaissez peut-être déjà.

Sur la page laravel/framework GitHub Project, cliquez sur le bouton "Fork" dans le coin supérieur droit, puis cliquez sur le profil dans la fenêtre contextuelle.

Créez une nouvelle branche nommée jenkinsfile puis créez un nouveau fichier (vous pouvez le faire directement dans GitHub et vous n'avez pas à cloner le référentiel si vous n'en avez pas besoin).

Re-Introducing Jenkins: Automated Testing with Pipelines

Entrez le script suivant et soumettez le fichier:

<code class="language-bash">sudo apt-get update && sudo apt-get install jenkins</code>

Revenez maintenant à Jenkins et cliquez sur le bouton "Configuration" dans le menu à gauche. Faites défiler jusqu'à la section Pipeline et mettez à jour le menu déroulant de définition du script de pipeline à SCM.

Re-Introducing Jenkins: Automated Testing with Pipelines

Entrez les détails du référentiel que vous avez fourché et cliquez sur Enregistrer.

Re-Introducing Jenkins: Automated Testing with Pipelines

Sur l'écran Présentation du travail, cliquez maintenant sur le menu à gauche. Vous devriez avoir une construction réussie.

Projet de pipelines multi-branches

La plupart des projets logiciels utilisent plusieurs branches dans le référentiel pour définir différentes étapes du projet. Par exemple:

  • La branche maître représente la version de production actuelle
  • Développer la branche représente la version temporaire actuelle
  • La fonctionnalité de fonctionnalité / new-profile-Page peut représenter les fonctions continues

Pour chaque branche, vous souhaiterez peut-être exécuter de nombreuses opérations personnalisées - par exemple, chaque fois qu'il y a un engagement de la branche maître ou de développement, vous souhaitez exécuter des tests d'unité et d'intégration complets, tandis que sur toutes les autres succursales, seuls les tests d'unités sont assez.

JenkinsFile est écrit dans le langage de programmation Groovy, ce qui signifie que nous avons un langage de script complet à utiliser.

Dans cet exemple, j'ai ajouté une instruction IF pour vérifier le nom de la branche;

Après

, il y a une instruction Switch qui crée une archive de déploiement différente et le enregistre au service de déploiement de code basé sur le nom de la branche (dans cet exemple, j'ai démontré comment cela fonctionnera avec le service CodeDeploy d'Amazon Web Service).

<code class="language-groovy">node {
    stage("composer_install") {
        sh 'composer install'
    }

    stage("php_lint") {
        sh 'find . -name "*.php" -print0 | xargs -0 -n1 php -l'
    }

    stage("phpunit") {
        sh 'vendor/bin/phpunit'
    }

    stage("codeception") {
        sh 'vendor/bin/codecept run'
    }
}</code>

Les travaux de pipeline multi-branchés sont également faciles à configurer - lors de la création d'un projet, sélectionnez "Pipeline multi-branché" comme type:

Re-Introducing Jenkins: Automated Testing with Pipelines

Ensuite, dans l'écran de configuration, définissez le menu déroulant de définition du pipeline sur le script de pipeline dans SCM et entrez les détails du référentiel.

chaque fois que l'option "Brand Index" est exécutée (elle remplace l'élément de menu "Build Now" dans le travail), Jenkins itérera récursivement sur chaque branche du référentiel et pour chaque branche avec un JenkinsFile qui a récemment changé, un La nouvelle construction pour cette branche sera exécutée.

aller un peu plus loin

La popularité de Jenkins est en grande partie due à son vaste écosystème de plugin.

Sur l'écran d'accueil de Jenkins, cliquez sur Gérer Jenkins dans le menu à gauche, puis cliquez sur Plugin Manager.

Re-Introducing Jenkins: Automated Testing with Pipelines

Vous pouvez installer et configurer des dizaines de plug-ins, du test de plug-ins à l'intégration avec les services cloud.

Par exemple, si votre équipe utilise Slack, vous pouvez activer le plugin de notification Slack. Il est configuré dans l'écran principal des paramètres Jenkins ("Gérer Jenkins" -> "Configurer le système") et le message Slack peut ensuite être envoyé dans le cadre du script de pipeline:

<code class="language-bash">sudo apt-get update && sudo apt-get install jenkins</code>

Lorsque Jenkins est opérationnel sur le serveur, le travail peut être facilement configuré pour créer (ou exécuter automatiquement les index de branche) chaque fois qu'un engagement est poussé vers le référentiel.

Pour les projets GitHub, assurez-vous que le plugin GitHub est installé et activé, puis activez l'intégration avec le service "Jenkins (GitHub Plugin)" dans les paramètres du référentiel GitHub.

Pour Bitbucket, c'est un peu plus compliqué, et j'ai détaillé les étapes requises sur mon blog.

Vous devez également vous assurer que le serveur Jenkins est correctement protégé - les utilisateurs peuvent être créés manuellement dans Jenkins, une authentification déléguée à GitHub ou Bitbucket en utilisant OAuth ou connecté Jenkins au répertoire LDAP de votre organisation. Encore une fois, Jenkins doit toujours être exécuté sur SSL afin que l'accès à Jenkins ne puisse pas être facilement intercepté.

L'installation de Jenkins est également livrée avec un "générateur d'exnippet de code" qui vous permet d'afficher toutes les fonctions de pipeline activées (par exemple, nous avons déjà utilisé SH, SlackSennd, Deletedir () et SCM). Vous pouvez y trouver un lien dans le menu de gauche de l'écran Présentation du travail.

Résumé

Jenkins est un outil très puissant qui peut aider à améliorer la fiabilité de votre logiciel et à vous faire économiser, ainsi qu'à votre équipe, beaucoup de temps. Les humains sont très mauvais pour effectuer des tâches répétitives encore et encore, mais les ordinateurs sont bons dans ce domaine.

Si votre équipe ralentit en raison des tests qui durent plus de cinq minutes, désinstallez le test à Jenkins.

Jenkins peut le faire si vous souhaitez générer automatiquement des archives de déploiement lorsqu'une nouvelle version de production ou de mise en scène est disponible.

Si vous souhaitez garder un œil sur la qualité du code et découvrir les régressions avant que les clients ne le découvrent, Jenkins est prêt à aider.

Veuillez laisser les questions ou commentaires ci-dessous et faites-nous savoir votre pipeline Jenkins le plus créatif!

Si vous aimez cet article, vous pouvez également trouver le suivant utile:

  • Test de cyprès: un guide pour exécuter les applications Web
  • Introduire des tests unitaires Python en utilisant unittest et pytest
  • Comment tester les composants React en utilisant la plaisanterie
  • Apprenez des tests de bout en bout avec des marionnettistes
  • Trois méthodes de test continu mains libres

Les questions fréquemment posées sur Jenkins à l'aide du pipeline pour les tests automatisés

Quels sont les avantages de l'utilisation de Jenkins pour des tests automatisés?

Jenkins est un outil open source populaire qui offre de nombreux avantages pour les tests automatisés. Premièrement, il fournit une intégration continue et une livraison continue (CI / CD), permettant aux développeurs d'intégrer les changements dans les projets plus fréquemment. Cela conduit à la détection précoce de problèmes potentiels et réduit le temps de réparation. Deuxièmement, Jenkins prend en charge divers plug-ins, ce qui les rend hautement personnalisables et adaptables aux différents besoins du projet. Troisièmement, il fournit des résultats de test en temps réel et des rapports détaillés, ce qui aide à identifier et à résoudre rapidement les problèmes. Enfin, Jenkins prend en charge le pipeline, un ensemble d'outils qui permettent une livraison simple à complexe du pipeline «en tant que code» via un langage spécifique au domaine du pipeline (DSL).

Comment configurer Jenkins pour les tests PHP?

La configuration des Jenkins pour les tests PHP implique plusieurs étapes. Tout d'abord, vous devez installer Jenkins sur le serveur. Après l'installation, vous pouvez installer des plug-ins requis pour les tests PHP, tels que le plug-in PHP, le plug-in phpunit, etc. Après avoir installé le plugin, vous pouvez créer un nouveau travail Jenkins et le configurer pour votre projet PHP. Cela comprend la mise en place de la gestion du code source, des déclencheurs de construction et des étapes de construction. Dans l'étape de construction, vous pouvez spécifier la commande pour exécuter le test PHP. Une fois la configuration terminée, le travail peut être exécuté et Jenkins effectuera le test et fournira un rapport détaillé.

Comment les Jenkins testent-ils avec PHPUNIT?

Jenkins travaille avec PHPUnit en effectuant des tests PHPUnit dans les travaux de Jenkins. La commande phpunit peut être spécifiée dans l'étape de construction du travail Jenkins. Lorsque le travail est exécuté, Jenkins effectuera le test PHPUnit et capturera les résultats. Les résultats sont ensuite affichés dans le tableau de bord Jenkins, fournissant un rapport détaillé sur l'exécution du test. Cela comprend le nombre de tests exécutés, passés, échoués et sautés, ainsi que la couverture du code.

Quel est le flux de travail correct pour une application Jenkins PHP à l'aide de phpunit?

Le flux de travail correct pour une application Jenkins PHP utilisant PHPUnit comprend généralement les étapes suivantes: Tout d'abord, consultez le code source du système de contrôle de version. Ensuite, installez toutes les dépendances, telles que Composer pour PHP Project. Ensuite, exécutez le test PHPUnit. Les résultats des tests sont ensuite collectés et affichés dans le tableau de bord Jenkins. Si un test échoue, la construction est marquée comme échec. Sinon, la construction est marquée comme réussie. Ce flux de travail peut être automatisé à l'aide du pipeline Jenkins pour une intégration et une livraison continues.

Comment analyser les résultats phpunit et junit dans Jenkins?

Les résultats de phpunit et Junit peuvent être analysés dans Jenkins à l'aide du plugin JUnit. Après avoir exécuté le test PHPUnit, vous pouvez générer un rapport XML JUnit. Le plugin Junit à Jenkins peut ensuite analyser ce rapport. Dans le fonctionnement post-construction d'un travail de Jenkins, vous pouvez ajouter l'opération "Publier Junit Test Results Report" et spécifier l'emplacement du rapport JUnit XML. Jenkins analyse ensuite le rapport et affiche les résultats dans le tableau de bord. Cela comprend le nombre de tests effectués, passés, échoués et sautés, ainsi que la durée et les tendances du test.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn