Kernpunkte
Wenn Anwendungen komplexer werden - einschließlich Abhängigkeiten der Komponisten, Webpack -Build -Skripte und jeder Umgebungsvariablen -, erreichen wir unweigerlich einen Punkt gesamte Umgebung. Ebenso können Codestile im Laufe der Zeit verzerren und ein Bereitstellungsarchiv erstellen, das für die Produktion verwendet werden kann, erfordert eine bestimmte Reihe von Schritten.
Angenommen, die Anwendung zu testen, sind folgende Schritte erforderlich:
composer install
, um sicherzustellen, dass die Abhängigkeiten installiert sind php -l
ausführen, um die Syntaxfehler
Wenn einer dieser Schritte fehlschlägt, sollte die Software für die Bereitstellung als ungeeignet angesehen werden, bis der Fehler behoben ist. Wenn die Software komplexer wird und die Anzahl der Tests im Laufe der Zeit zunimmt, kann es einige Minuten dauern, bis eine vollständige Testsuite ausgeführt wird, die den Entwickler verlangsamt und wiederum den Freigabeprozess verlangsamt.
Um dieses Problem zu überwinden, können Build -Server in den Entwicklungsworkflow eingeführt werden. Der Build -Server führt eine Software aus, mit der Sie eine Reihe von Schritten wiederholt ausführen können. Wenn einer von ihnen fehlschlägt, kann der Build -Server Sie über das Problem informieren. Wenn Sie an Open -Source -Projekten beteiligt waren, haben Sie möglicherweise praktische Anwendungen für den Bau von Servern wie Travisci oder Circleci gesehen. Beispielsweise wird jede Pull -Anfrage für ein Laravel -Projekt von Travisci getestet, um sicherzustellen, dass Änderungen keine Tests durchbrechen, und Styleci stellt dann sicher, dass die Codeänderungen mit dem Projektcode -Stil übereinstimmen.
Jenkins ist ein beliebter Open Source Build -Server, der Version 2.0 in diesem Jahr veröffentlicht hat. Eine der Hauptmerkmale dieser neuen Version ist das (zuvor optionale) Pipeline -Plugin als Kernfunktion.
Pipeline ist eine Reihe vollständig anpassbarer Schritte, die nacheinander ausführen können, um Code zu testen und zu erstellen. Pipeline ist in einer groovigen Skriptsprache geschrieben und hat eine sehr einfache Syntax und ist einfach zu beginnen. Wenn Sie beispielsweise den früher als Pipeline beschriebenen Testschritt beschreiben möchten, könnte dies in etwa so aussehen:
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' } }
node
werden Jenkins angewiesen, einen separaten Build-Knoten zuzuweisen (Jenkins können im Einzelhilfe- oder Multi-Knoten-Einstellungen ausgeführt werden). node
Es gibt mehrere Stufen im Block, jede Stufe führt einen bestimmten Vorgang durch. Jenkins leitet jede Stufe nacheinander, und wenn eine Stufe ausfällt, fällt der gesamte Build aus und Jenkins hört auf, auszuführen.
Aus diesem einfachen Beispiel können zusätzliche Phasen anderer Tests leicht hinzugefügt werden, wobei Jenkins aufforscht, erfolgreiche oder fehlgeschlagene Slack -Benachrichtigungen zu senden, den erfolgreich getesteten Code in die Veröffentlichungszweig zu bringen oder die Pull -Anfrage als Verschmelzung zu markieren.
Jenkins ist sehr einfach zu installieren, und in diesem Tutorial werden wir Laravel Homestead verwenden, um eine konsistente virtuelle Umgebung zu bieten, damit Sie Jenkins lokal verwenden können.
Der erste Schritt besteht darin, Laravel Homestead zu installieren - hier ist eine nützliche Anleitung. Sie müssen nur die virtuelle Maschine starten und ausführen, wir müssen keine Site in der Datei homestead.yaml
konfigurieren.
Nachdem Sie aufgestanden sind und die Virtual Machine aus dem Gehöft ausgeführt haben, verwenden Sie vagrant ssh
, um sich dafür anzumelden.
Homestead verfügt über alle Abhängigkeiten, die wir benötigen, nämlich Git, PHP und Komponist. Daher müssen wir nur Jenkins selbst installieren. Nach dem Jenkins Debian Package Guide müssen wir die folgenden Schritte ausführen.
run wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
. Dieser Befehl fügt die Codessignierschlüssel zu der Eignung hinzu, damit die Jenkins -Pakete aus diesem Repository vertrauenswürdig sind.
Als nächstes muss die Paketquellliste aktualisiert werden, damit die Fähigkeit das Jenkins -Paket -Repository kennt. Führen Sie echo "deb https://pkg.jenkins.io/debian-stable binary/" | sudo tee -a /etc/apt/sources.list
aus.
Schließlich benötigen wir eine Eignung, um den Cache seiner verfügbaren Pakete zu aktualisieren und dann Jenkins zu installieren:
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' } }
Die Installation von Jenkins dauert ungefähr fünf Minuten, da es auch viele Abhängigkeiten hat, die installiert werden müssen.
Öffnen Sie nach der Installation von Jenkins http://192.168.10.10:8080
(oder der von Ihnen konfigurierten virtuellen Host -URL) in Ihrem Browser eine Seite mit dem Titel "Entsperren Sie Jenkins". homestead.app
, und eine Zufallszahl und eine alphabetische Zeichenfolge werden in die Konsole gedruckt. Kopieren und fügen Sie die Zeichenfolge in das Textfeld im Browser ein und drücken Sie weiter. sudo cat /var/lib/jenkins/secrets/initialAdminPassword
Erstellen Sie den ersten Job
laravel/framework
Klicken Sie auf den Link zum neuen Job erstellen (oder den neuen Projektlink erstellen - sie alle tun dasselbe).
Geben Sie einen Namen laravel
ein, wählen Sie "Pipeline" und drücken Sie OK.
Sie sehen nun den Konfigurationseditor für den Job. Scrollen Sie zum Pipeline -Abschnitt und geben Sie das folgende Skript ein:
sudo apt-get update && sudo apt-get install jenkins
drücken Sie "speichern". Sie werden auf die Seite "Jobübersicht" umgeleitet und nach ein paar Sekunden sehen Sie den Job beginnen. Wenn es nicht startet, klicken Sie einfach im linken Menü auf den Link Build.
Die Phasenansicht wird aktualisiert, wenn jede Phase startet und endet, wie wir im Pipeline -Skript definieren.
Wenn Sie auf eine Bühne klicken, erscheint ein Overlay mit der Protokollausgabe für diese Phase, die zum Debuggen sehr nützlich ist. Alternativ können Sie im Menü links auf den Job klicken und auf Konsole klicken.
Alle Jenkins -Jobs verfügen über einen eigenen Arbeitsbereich, in dem Sie eine Zone sind, in der Sie sicher temporäre Dateien erstellen können, die Sie möglicherweise in der Build -Zone benötigen. Der Arbeitsbereich für diesen Job finden Sie in /var/lib/jenkins/workspace/laravel
. Standardmäßig löscht Jenkins diesen Arbeitsbereich nicht für jeden Build. Wenn Sie dies tun müssen, können Sie dem Beginn des Pipeline -Skripts wie folgt eine Phase hinzufügen:
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' } }
Für unseren ersten Job haben wir das Pipeline -Skript in der Schnittstelle zur Jobeinstellungen bearbeitet. Es wäre jedoch nützlicher, dieses Skript in der Versionskontrolle mit unserem Code zu speichern.
Verwenden von Jenkins 'Pipeline können Sie Pipeline als JenkinsFile -Skript im Stammverzeichnis des Code -Repositorys schreiben und es wird entdeckt und ausgeführt. Sein Konzept ähnelt einer Datei .travis.yml
oder .circleci.yml
, mit der Sie möglicherweise bereits vertraut sind.
Klicken Sie auf der Seite laravel/framework
GitHub-Projekt auf die Schaltfläche "Fork" in der oberen rechten Ecke und dann im Popup-Fenster auf das Profil.
Erstellen Sie einen neuen Zweig mit dem Namen jenkinsfile
und erstellen Sie dann eine neue Datei (Sie können dies direkt in GitHub tun und müssen das Repository nicht klonen, wenn Sie es nicht benötigen).
Geben Sie das folgende Skript ein und senden Sie die Datei:
sudo apt-get update && sudo apt-get install jenkins
Kehren Sie nun zu Jenkins zurück und klicken Sie im Menü links auf die Schaltfläche "Konfiguration". Scrollen Sie zum Pipeline-Abschnitt nach unten und aktualisieren Sie das Dropdown-Menü Definition im Pipeline-Skript auf SCM.
Geben Sie Details des Repositorys ein, das Sie gegabelt haben, und klicken Sie auf Speichern.
Klicken Sie auf dem Bildschirm "Auftragsübersicht" jetzt im Menü links auf Erstellen. Sie sollten einen erfolgreichen Build haben.
Die meisten Softwareprojekte verwenden mehrere Zweige im Repository, um verschiedene Phasen des Projekts zu definieren. Zum Beispiel:
Für jeden Zweig möchten Sie möglicherweise viele benutzerdefinierte Vorgänge ausführen. Wenn Sie beispielsweise einen Commit aus dem Master- oder Entwicklungszweig gibt, möchten Sie vollständige Einheiten- und Integrationstests ausführen, während bei allen anderen Zweigen nur Einheiten -Tests sind genug.
JenkinsFile ist in der Groovy -Programmiersprache geschrieben, was bedeutet, dass wir eine vollständige Skriptsprache zu verwenden haben.
In diesem Beispiel habe ich eine IF -Anweisung hinzugefügt, um den Zweignamen zu überprüfen.
Nachgibt es eine Switch -Anweisung, in der ein anderes Bereitstellungsarchiv erstellt wird und es basierend auf dem Zweignamen in den Code -Bereitstellungsdienst registriert (in diesem Beispiel habe ich gezeigt, wie dies mit dem CodEDePloy -Service von Amazon Web Service funktioniert).
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' } }
Multi-Franch-Pipeline-Jobs sind ebenfalls einfach einzurichten. Wenn Sie ein Projekt erstellen, wählen Sie "Multi-Franched-Pipeline" als Typ:
Stellen Sie dann im Konfigurationsbildschirm das Dropdown-Menü Pipeline Definition auf das Pipeline-Skript in SCM ein und geben Sie die Repository-Details ein.
Wann immer die Option "Brandindex" ausgeführt wird (sie ersetzt den Menüpunkt "now now" im Job), wird Jenkins rekursiv über jeden Zweig im Repository und für jeden Zweig mit einer kürzlich geänderten Jenkinsfile iteriert, die kürzlich geändert wurde, a Neubau für diesen Zweig wird ausgeführt.
Jenkins ist hauptsächlich auf sein umfangreiches Plugin -Ökosystem zurückzuführen.
Klicken Sie auf dem Startbildschirm von Jenkins im Menü links auf Jenkins verwalten und dann klicken Sie dann auf Plugin -Manager.
Sie können Dutzende von Plug-Ins installieren und konfigurieren, von Test-Plug-Ins bis hin zur Integration in Cloud-Dienste.
Wenn Ihr Team beispielsweise Slack verwendet, können Sie das Slack -Benachrichtigungs -Plugin aktivieren. Es ist im Bildschirm der Haupteinstellungen für Jenkins -Einstellungen konfiguriert
sudo apt-get update && sudo apt-get install jenkins
Für GitHub -Projekte stellen Sie sicher, dass das GitHub -Plugin installiert und aktiviert ist, und aktivieren Sie dann die Integration mit dem Service "Jenkins (Github Plugin)" in den GitHub -Repository -Einstellungen.
Für Bitbucket ist dies etwas komplizierter, und ich habe die erforderlichen Schritte in meinem Blog ausführlich beschrieben.
Sie sollten auch sicherstellen, dass der Jenkins -Server ordnungsgemäß geschützt ist. Benutzer können manuell in Jenkins erstellt, die Authentifizierung an GitHub oder Bitbucket mit OAuth oder verbundenem Jenkins mit dem LDAP -Verzeichnis Ihres Unternehmens angeschlossen werden. Auch hier sollte Jenkins immer über SSL geführt werden, damit der Zugang zu Jenkins nicht leicht abgefasst werden kann.
Die Jenkins -Installation wird außerdem mit einem "Code -Snippet -Generator" geliefert, mit dem Sie alle aktivierten Pipeline -Funktionen anzeigen können (z. B. wir haben bereits SH, Slacksend, Deletedir () und SCM verwendet. Sie finden einen Link dazu im linken Menü des Auftragsübersichtbildschirms.
Zusammenfassung
Wenn Ihr Team aufgrund von Tests, die länger als fünf Minuten laufen, langsamer wird, deinstallieren Sie den Test an Jenkins.
Jenkins können dies tun, wenn Sie automatisch Bereitstellungsarchive generieren möchten, wenn eine neue Produktions- oder Staging -Version verfügbar ist.
Wenn Sie die Codequalität im Auge behalten und Regressionen entdecken möchten, bevor die Kunden entdecken, ist Jenkins bereit zu helfen.
Bitte hinterlassen Sie unten Fragen oder Kommentare und teilen Sie uns Ihre kreativste Jenkins -Pipeline mit!
Wenn Ihnen dieser Artikel gefällt, finden Sie möglicherweise auch das folgende nützliche:
Wie hoch sind die Vorteile der Verwendung von Jenkins für automatisierte Tests?
Wie richte ich Jenkins für PHP -Tests ein?
Wie testen Jenkins mit Phpunit?
Jenkins arbeitet mit Phpunit zusammen, indem sie Phpunit -Tests in Jenkins Jobs durchführen. Der Befehl phpunit kann im Build -Schritt des Jenkins -Jobs angegeben werden. Wenn der Job ausgeführt wird, führt Jenkins den Phpunit -Test durch und erfasst die Ergebnisse. Die Ergebnisse werden dann im Jenkins -Dashboard angezeigt, was einen detaillierten Bericht über die Testausführung enthält. Dies beinhaltet die Anzahl der getesteten, bestandenen, fehlgeschlagenen und übersprungenen Tests sowie die Codeabdeckung.Der richtige Workflow für eine Jenkins -PHP -Anwendung mit Phpunit enthält normalerweise die folgenden Schritte: Schauen Sie sich zunächst den Quellcode aus dem Versionskontrollsystem an. Installieren Sie als Nächstes alle Abhängigkeiten wie Komponisten für das PHP -Projekt. Führen Sie dann den Phpunit -Test aus. Die Testergebnisse werden dann gesammelt und im Jenkins -Dashboard angezeigt. Wenn ein Test fehlschlägt, ist der Build als fehlgeschlagen markiert. Andernfalls ist der Build als erfolgreich markiert. Dieser Workflow kann mit Jenkins Pipeline für die kontinuierliche Integration und Lieferung automatisiert werden.
Phpunit- und JUNIT -Ergebnisse können mit dem Junit -Plugin in Jenkins analysiert werden. Nach dem Ausführen des Phpunit -Tests können Sie einen JUNIT XML -Bericht erstellen. Das Junit -Plugin in Jenkins kann diesen Bericht dann analysieren. Im Nachbetriebsbetrieb eines Jenkins-Jobs können Sie den Operation "Jungit-Testergebnisse veröffentlichen" hinzufügen und den Ort des Junit XML-Berichts angeben. Jenkins analysiert dann den Bericht und zeigt die Ergebnisse im Dashboard an. Dies schließt die Anzahl der Tests ein, die durchgeführt, bestanden, gescheitert und übersprungen wurden, sowie die Testdauer und Trends.
Das obige ist der detaillierte Inhalt vonJenkins neu steigern: automatisierte Tests mit Pipelines. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!