Jenkins に基づいて PHP プロジェクトの自動テスト、自動パッケージ化、自動デプロイメントを実装します。
Jenkinsをベースとした継続的インテグレーション環境の構築をベースに、PHPプロジェクトと組み合わせたJenkinsを導入し、自動テストと自動デプロイメントを実現していきます。もうナンセンスはやめて、仕事に取り掛かりましょう。
Zhainiao が使用するサーバーは Ubuntu です
Jenkins で PHP の自動テストを実装するには、まず Jenkins サーバーに PHP テスト フレームワークをインストールする必要があります。ここでは PHPUnit Framework.
PHPUnit を選択します。インストールは非常に簡単です:
sudo apt-get install phpunit
次のエラーが発生した場合:
PHP Warning: require_once(PHP/CodeCoverage/Filter.php): failed to open stream: No such file or directory in /usr/bin/phpunit on line 39 PHP Fatal error: require_once(): Failed opening required 'PHP/CodeCoverage/Filter.php' (include_path='.:/usr/share/php:/usr/share/pear') in /usr/bin/phpunit on line 39
次の方法でインストールできます:
sudo pear channel-discover pear.phpunit.de sudo pear channel-discover pear.symfony-project.com sudo pear channel-discover components.ez.no sudo pear channel-discover pear.symfony.com sudo pear update-channels sudo pear upgrade-all sudo pear install pear.symfony.com/Yaml sudo pear install --alldeps phpunit/PHPUnit sudo pear install --force --alldeps phpunit/PHPUnit
インストール後、phpunit --versionを実行してバージョン情報を返します。インストールが成功したことを示します。
root@dop-kvm-2:# phpunit --version PHPUnit 3.7.28 by Sebastian Bergmann.
さて、Jenkins にいくつかのプラグインを与え始めましょう:
Subversion/Git: プロジェクトのバージョン管理ソフトウェアを統合するために使用され、必要に応じて選択します (すでにインストールされ、前のブログ投稿で使用されています)
Phing/Ant: Phing またはApache Ant for PHP プロジェクト構築の自動化
CheckStyle: PHP CodeSniffer を使用したコード スタイル チェックのためのツール。 PHP コードが一連の事前設定されたコーディング標準に違反しているかどうかをチェックするために使用される PEAR パッケージには、ZEND および PEAR コーディング スタイル ルールが組み込まれています
Clover PHP: phpunit を使用した単体テスト用のツールで、xdebug 拡張機能で使用できます。コードカバレッジレポートを生成し、自動テストのために phing と統合することもできます。また、大規模な自動統合テストを完了するために Selenium と統合することもできます
DRY: PHPCPD (php コピーペースト検出器) を使用して、プロジェクト内の重複コードを見つけます
HTML Publisher: phpunit コードカバレッジレポートを公開するために使用します
JDepend: PHP depend を使用して php の静的コードを分析し、プロジェクト内のコードのサイズと複雑さをチェックします
Plot: phploc を使用して php のサイズをカウントしますphp プロジェクト コードの行数をカウントできるプロジェクト
PMD: phpmd (php mes dector) を使用して、pdepend に基づいて結果を分析します。プロジェクトが pdepend の特定の指標を超えると、警告メッセージが発行されます。
違反: 重大なコードの欠陥による pwd 静的コード分析の結果を一元的に表示xUnit: JUnit 形式を使用して phpunit ログ ファイルを出力root@dop-kvm-2:/home/jenkins/api# tree . ├── aa.php ├── build.xml ├── create.php └── test ├── DemoTest.php └── FunctionTest.php 1 directory, 5 files
<?xml version="1.0" encoding="UTF-8"?> <project name="api" default="build"> <target name="build" depends="make_runtime,phpcs-ci,phploc,pdepend,phpcb,phpunit,phpdox,phpcpd"/> <property name="version-m" value="1.1" /> <property name="version" value="1.1.0" /> <property name="stability" value="stable" /> <property name="releasenotes" value="" /> <property name="tarfile" value="${phing.project.name}.${buildnumber}.${buildid}.tar.gz" /> <property name="pkgfile" value="${phing.project.name}.${version}.tgz" /> <property name="distfile" value="dist/${tarfile}" /> <property name="tests.dir" value="test" /> <fileset id="api.tar.gz" dir="."> <include name="test/**"/> <include name="*.php"/> <include name="*.xml"/> </fileset> <target name="make_runtime"> <mkdir dir="${project.basedir}/Runtime" /> <mkdir dir="${project.basedir}/build/logs" /> <mkdir dir="${project.basedir}/build/pdepend" /> <mkdir dir="${project.basedir}/build/code-browser" /> </target> <target name="phpcs" description="Find coding standard violations using PHP_CodeSniffer"> <exec executable="phpcs"> <arg value="--standard=${project.basedir}/build/phpcs.xml" /> <arg value="--ignore=autoload.php" /> <arg path="${project.basedir}/" /> </exec> </target> <target name="phpcs-ci" description="Find coding standard violations using PHP_CodeSniffer"> <exec executable="phpcs" output="${project.basedir}/build/build.log"> <arg value="--report=checkstyle" /> <arg value="--report-file=${project.basedir}/build/logs/checkstyle.xml" /> <arg value="--standard=${project.basedir}/build/phpcs.xml" /> <arg value="--ignore=" /> <arg path="${project.basedir}/" /> </exec> </target> <target name="phploc" description="Measure project size using PHPLOC"> <exec executable="phploc"> <arg value="--log-csv" /> <arg value="${project.basedir}/build/logs/phploc.csv"/> <arg path="${project.basedir}/"/> </exec> </target> <target name="pdepend" description="Calculate software metrics using PHP_Depend"> <exec executable="pdepend"> <arg value="--jdepend-xml=${project.basedir}/build/logs/jdepend.xml"/> <arg value="--jdepend-chart=${project.basedir}/build/pdepend/dependencies.svg"/> <arg value="--overview-pyramid=${project.basedir}/build/pdepend/overview-pyramid.svg"/> <arg path="${project.basedir}/"/> </exec> </target> <target name="phpmd" description="Perform project mess detection using PHPMD"> <exec executable="phpmd"> <arg path="${project.basedir}/"/> <arg value="text"/> <arg value="${project.basedir}/build/phpmd.xml"/> </exec> </target> <target name="phpmd-ci" description="Perform project mess detection using PHPMD"> <exec executable="phpmd"> <arg path="${project.basedir}/"/> <arg value="xml"/> <arg value="${project.basedir}/build/phpmd.xml"/> <arg value="--reportfile"/> <arg value="${project.basedir}/build/logs/pmd.xml"/> </exec> </target> <target name="phpcpd" description="Find duplicate code using PHPCPD"> <exec executable="phpcpd"> <arg value="--log-pmd"/> <arg value="${project.basedir}/build/logs/pmd-cpd.xml"/> <arg path="${project.basedir}/"/> </exec> </target> <target name="phpdox" description="Generate API documentation using phpDox"> <exec executable="phpdox"/> </target> <target name="phpunit" description="Run unit tests with PHPUnit"> <exec executable="phpunit" /> </target> <target name="test" description="Run PHPUnit tests"> <phpunit haltonerror="true" haltonfailure="true" printsummary="true"> <batchtest> <fileset dir="${tests.dir}"> <include name="**/*Test.php" /> </fileset> </batchtest> </phpunit> </target> <target name="phpcb" description="Aggregate tool output with PHP_CodeBrowser"> <exec executable="phpcb"> <arg value="--log"/> <arg path="${project.basedir}/build/logs"/> <arg value="--source"/> <arg path="${project.basedir}/"/> <arg value="--output"/> <arg path="${project.basedir}/build/code-browser"/> </exec> </target> <target name="check" description="Check variables" > <fail unless="version" message="Version not defined!" /> <fail unless="buildnumber" message="buildnumber not defined!" /> <fail unless="buildid" message="buildid not defined!" /> <delete dir="dist" failonerror="false" /> <mkdir dir="dist" /> </target> <target name="tar" depends="check" description="Create tar file for release"> <echo msg="Creating distribution tar for ${phing.project.name} ${version}"/> <delete file="${distfile}" failonerror="false"/> <tar destfile="${distfile}" compression="gzip"> <fileset refid="api.tar.gz"/> </tar> </target> </project>
<project name="api" default="build"> <target name="build" depends="make_runtime,phpcs-ci,phploc,pdepend,phpcb,phpunit,phpdox,phpcpd"/> <property name="version-m" value="1.1" /> <property name="version" value="1.1.0" /> <property name="stability" value="stable" /> <property name="releasenotes" value="" /> <property name="tarfile" value="${phing.project.name}.${buildnumber}.${buildid}.tar.gz" /> <property name="pkgfile" value="${phing.project.name}.${version}.tgz" /> <property name="distfile" value="dist/${tarfile}" /> <property name="tests.dir" value="test" />
<fileset id="api.tar.gz" dir="."> <include name="test/**"/> <include name="*.php"/> <include name="*.xml"/> </fileset>
<target name="phpunit" description="Run unit tests with PHPUnit"> <exec executable="phpunit" /> </target> <target name="test" description="Run PHPUnit tests"> <phpunit haltonerror="true" haltonfailure="true" printsummary="true"> <batchtest> <fileset dir="${tests.dir}"> <include name="**/*Test.php" /> </fileset> </batchtest> </phpunit> </target>
次に、デプロイメントを設定できますwork:
ビルド ステップを追加するには、下の表で選択します: SSh 経由でファイルを送信するか、コマンドを実行します。 このオプションが表示されない場合は、プラグイン管理にある必要があります。 プラグインをインストールします: SSH 経由で公開し、次に、jenkins を再起動します
パッケージ ファイルのアドレスを入力し、リモート サーバーのアドレス情報を入力し、Exec コマンドに解凍を入力します。およびその他のシェル スクリプトをテキスト ボックスに入力します:
詳細については画像を参照してください:
この設定が完了したら、php プロジェクトを 134 サーバーに公開できます:
填写dist/*.tar.gz
至此配置完毕后,点击 保存 按钮.我们就可以发布程序到指定服务器134上了.
来看一下发布结果:
回到项目左侧点击:立即构建:可以看到构建进度条,结束后可以在控制台看到输出结果:
我们来到134上看:
至此发布完毕.
此时我们查看一下test/DemoTest.php文件内容:
<?php class DemoTest extends PHPUnit_Framework_TestCase { public function testPass() { $this->assertTrue(true); } public function testFail() { $this->assertFalse(false); } } ?>
我们把 testFail()改成下面:
<?php class DemoTest extends PHPUnit_Framework_TestCase { public function testPass() { $this->assertTrue(true); } public function testFail() { $this->assertTrue(false); } } ?>
$this->assertTrue(false);
这个是错误的断定:
提交文件后再次构建:
我们可以看到本次构建失败,查看输出结果如下:
当把测试用例修改回正确后,执行构建,发布正确。
<?php class DemoTest extends PHPUnit_Framework_TestCase { public function testPass() { $this->assertTrue(true); } public function testFail() { $this->assertFalse(false); } } ?>
ok,到此介绍结束.
总结一下:
jenkins根据项目根目录下的build.xml文件,并根据jenkins中targets的配置,首先自动执行test,当测试通过后,开始执行tar,打包完成后,开始链接远程webserver把程序包上传到远程webserver指定目录下,然后再根据jenkins下的command 执行解压操作,然后就可以根据自己的业务通过shell脚本进行自动处理自动发布的各项操作.
如果在执行test过程中,出现发现测试用例不通过,则就发出错误报告,终止本次构建。
以上就是基于Jenkins 实现php项目的自动化测试、自动打包和自动部署的内容,更多相关内容请关注PHP中文网(www.php.cn)!

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Python スクリプトを使用して Linux 環境で自動テストを実装する方法 ソフトウェア開発の急速な発展に伴い、自動テストはソフトウェアの品質を確保し、開発効率を向上させる上で重要な役割を果たしています。 Python はシンプルで使いやすいプログラミング言語として、移植性と開発効率が高く、自動テストで広く使用されています。この記事では、Python を使用して Linux 環境で自動テスト スクリプトを作成する方法を紹介し、具体的なコード例を示します。 Linux環境での自動化のための環境準備

ソフトウェア開発の急速な発展に伴い、自動テストは開発プロセスにおいてますます重要な役割を果たしています。手動テストと比較して、自動テストはテストの効率と精度を向上させ、納期とコストを削減できます。したがって、自動テストを使いこなすことが非常に必要になります。 Go 言語は最新の効率的なプログラミング言語であり、その独自の同時実行モデル、メモリ管理、ガベージ コレクション メカニズムにより、Web アプリケーション、ネットワーク プログラミング、大規模同時実行、分散システムなどの分野で広く使用されています。自動テストに関しては、

インターネット技術の急速な発展に伴い、マイクロサービス アーキテクチャはますます広く使用されるようになりました。マイクロサービス アーキテクチャを使用すると、単一アプリケーションの複雑さとコードの結合を効果的に回避し、アプリケーションのスケーラビリティと保守性を向上させることができます。ただし、モノリシック アプリケーションとは異なり、マイクロサービス アーキテクチャには膨大な数のサービスがあり、サービスの品質と信頼性を確保するために各サービスには自動化されたテストとデプロイが必要です。この記事では、マイクロサービス アーキテクチャでサービスの自動テストとデプロイを処理する方法について説明します。 1. マイクロサービス アーキテクチャでの自動テスト 自動テストが保証

Java および Linux スクリプト操作: 自動テストを実装する方法と例 はじめに: ソフトウェア開発プロセスにおいて、自動テストはテストの効率と品質を大幅に向上させることができます。 Java 言語と Linux スクリプトを使用すると、テスト ケースを自動的に実行し、テスト レポートやその他の機能を生成する強力な自動テスト スクリプトを作成できます。この記事では、Java および Linux スクリプトを使用して自動テストを実装する方法を紹介し、いくつかの具体的なコード例を示します。 1. Java 自動テスト: Java は

インターネット企業が成長を続けるにつれて、ソフトウェア開発はますます複雑になり、テストの重要性がますます高まっています。プログラムの正確性と安定性を確保するには、さまざまな種類のテストを実行する必要があります。その中でも自動テストは、テスト作業の効率化やエラー率の低減、テストケースの繰り返し実行による問題の早期発見などを実現する非常に重要な手段ですが、実際の運用プロセスではさまざまな問題も発生します。 、テストツールの選択、テストケースの作成、テスト環境のセットアップなどの問題。ゴーゼロ

Gin は Golang で書かれた Web フレームワークで、効率性、軽量性、柔軟性、比較的高いパフォーマンス、そして使いやすさという利点があります。 Jin フレームワークの開発では、API ドキュメントと自動テストが非常に重要です。この記事では、Gin フレームワークでの API ドキュメントと自動テストについて詳しく説明します。 1. API ドキュメント API ドキュメントは、他の開発者の使用と理解を容易にするために、すべての API インターフェイスの詳細情報を記録するために使用されます。 Gin フレームワークは、Swagger、GoSwa などのさまざまな API ドキュメント ツールを提供します。

翻訳者 | Chen Jun によるレビュー | Sun Shujuan 近年、自動テストは大規模な反復を経ています。これは、QA チームが人的エラーの可能性を大幅に減らすのに役立ちます。自動テストに使用できるツールは数多くありますが、適切なツールが常に自動テストの成否の鍵となります。同時に、さまざまな分野で人工知能、機械学習、ニューラルネットワークが広く使用されるようになったことで、人工知能の自動テストには、プロジェクトチームの貴重な時間を節約し、より正確に実行するために、反復作業を行うための適切なツールも必要になります。タスク: 複雑で重要なタスク。以下では、未来志向の AI 自動テスト ツールについて詳しく説明します。人工知能 (AI) 自動テストとは何ですか? AI 自動テストとは既存のソフトウェアを意味します

Go 言語の戻り値の型推論により、自動テストが簡素化されます。これにより、コンパイラーは関数の実装に基づいて戻り値の型を推論できるため、明示的な宣言が不要になります。テスト関数のシンプルさと読みやすさを向上させ、関数出力の検証を簡素化します。実際のケースでは、型推論を使用して自動テストを作成し、関数の出力が期待を満たしていることを検証する方法を示します。
