ホームページ バックエンド開発 PHPチュートリアル Jenkins に基づいて PHP プロジェクトの自動テスト、自動パッケージ化、自動デプロイメントを実装します。

Jenkins に基づいて PHP プロジェクトの自動テスト、自動パッケージ化、自動デプロイメントを実装します。

Jul 30, 2016 pm 01:29 PM

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 ログ ファイルを出力


これらのプラグインは、Jenkins が提供する一部のプラグインであることに注意してください。 PHP プロジェクトですが、必須ではないため、家にいてください。Niao は、最も注目すべきテスト、パッケージ化、公開を自動化する方法のみを説明します。

最初にプロジェクトのディレクトリ構造を指定します:

root@dop-kvm-2:/home/jenkins/api# tree
.
├── aa.php
├── build.xml
├── create.php
└── test
    ├── DemoTest.php
    └── FunctionTest.php
1 directory, 5 files
ログイン後にコピー

注:

aa.php と create.php はプロジェクトのプログラム ファイルです

test ディレクトリ内の DemoTest.php と FunxtionTest.php はプロジェクトのテスト ファイルですプロジェクト

build .xml は、Jenkins の継続的統合テストのパッケージ化とデプロイメントのための呼び出しファイルです


まず、プロジェクトに必要な build.xml ファイルを指定します:

<?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>
ログイン後にコピー

build.xml を読むと、コンテンツ:


印刷後のプロジェクト名、バージョン、パッケージ名:

<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" />
ログイン後にコピー

パッケージ化時に含まれるファイルとフォルダー: exclude を使用してファイルとフォルダーを除外することもできます:

<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>
ログイン後にコピー

これらを理解した後、Jenkins で新しい autoTestTarAndPublish プロジェクトを作成し、次を選択します: フリー スタイル ソフトウェア プロジェクトをビルドします:

そして、図に示すようにコード ベースを指定します:

Jenkins に基づいて PHP プロジェクトの自動テスト、自動パッケージ化、自動デプロイメントを実装します。

次に、ビルド ステップを追加します - >Phing ターゲットを呼び出す:

2 つのターゲットを追加します: test、tar は、それぞれビルド内の test 名と tar 名に対応します: [Publish over SSH] の下にホストを追加します: (ここでは、Zhainiao 設定は ssh パスワードなしのログインを使用します) を設定する必要があります。 jenkins から公開する Web サーバーにパスワードなしでログインします

次のように設定します:

Jenkins に基づいて PHP プロジェクトの自動テスト、自動パッケージ化、自動デプロイメントを実装します。

Jenkins に基づいて PHP プロジェクトの自動テスト、自動パッケージ化、自動デプロイメントを実装します。

ここに設定を追加します。ホスト名は 134 です

Jenkins に基づいて PHP プロジェクトの自動テスト、自動パッケージ化、自動デプロイメントを実装します。次に、デプロイメントを設定できますwork:

ビルド ステップを追加するには、下の表で選択します: SSh 経由でファイルを送信するか、コマンドを実行します。 このオプションが表示されない場合は、プラグイン管理にある必要があります。 プラグインをインストールします: SSH 経由で公開し、次に、jenkins を再起動します


次に、表示される SSH Publishers で公開するホストを選択します:


パッケージ ファイルのアドレスを入力し、リモート サーバーのアドレス情報を入力し、Exec コマンドに解凍を入力します。およびその他のシェル スクリプトをテキスト ボックスに入力します:

詳細については画像を参照してください:

Jenkins に基づいて PHP プロジェクトの自動テスト、自動パッケージ化、自動デプロイメントを実装します。 この設定が完了したら、php プロジェクトを 134 サーバーに公開できます:

最終ファイル リリースのアーカイブパッケージ:

Jenkins に基づいて PHP プロジェクトの自動テスト、自動パッケージ化、自動デプロイメントを実装します。

ビルド後のステップを追加:


填写dist/*.tar.gz

Jenkins に基づいて PHP プロジェクトの自動テスト、自動パッケージ化、自動デプロイメントを実装します。

至此配置完毕后,点击 保存 按钮.我们就可以发布程序到指定服务器134上了.


来看一下发布结果:

回到项目左侧点击:立即构建:可以看到构建进度条,结束后可以在控制台看到输出结果:

Jenkins に基づいて PHP プロジェクトの自動テスト、自動パッケージ化、自動デプロイメントを実装します。

我们来到134上看:

Jenkins に基づいて PHP プロジェクトの自動テスト、自動パッケージ化、自動デプロイメントを実装します。

至此发布完毕.


此时我们查看一下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);

这个是错误的断定:

提交文件后再次构建:

我们可以看到本次构建失败,查看输出结果如下:

Jenkins に基づいて PHP プロジェクトの自動テスト、自動パッケージ化、自動デプロイメントを実装します。

当把测试用例修改回正确后,执行构建,发布正确。

<?php
class DemoTest extends PHPUnit_Framework_TestCase {
  public function testPass() {
      $this->assertTrue(true);
    }
  public function testFail() {
      $this->assertFalse(false);
    }
}
?>
ログイン後にコピー
ログイン後にコピー

Jenkins に基づいて PHP プロジェクトの自動テスト、自動パッケージ化、自動デプロイメントを実装します。

ok,到此介绍结束.

总结一下:

jenkins根据项目根目录下的build.xml文件,并根据jenkins中targets的配置,首先自动执行test,当测试通过后,开始执行tar,打包完成后,开始链接远程webserver把程序包上传到远程webserver指定目录下,然后再根据jenkins下的command 执行解压操作,然后就可以根据自己的业务通过shell脚本进行自动处理自动发布的各项操作.


如果在执行test过程中,出现发现测试用例不通过,则就发出错误报告,终止本次构建。


以上就是基于Jenkins 实现php项目的自动化测试、自动打包和自动部署的内容,更多相关内容请关注PHP中文网(www.php.cn)!


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Python スクリプトを使用して Linux 環境で自動テストを実装する方法 Python スクリプトを使用して Linux 環境で自動テストを実装する方法 Oct 05, 2023 am 11:51 AM

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

Go言語を使用して自動テストサンプルを作成する Go言語を使用して自動テストサンプルを作成する Jun 03, 2023 pm 07:31 PM

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

マイクロサービス アーキテクチャでサービスの自動テストとデプロイをどのように処理するか? マイクロサービス アーキテクチャでサービスの自動テストとデプロイをどのように処理するか? May 17, 2023 am 08:10 AM

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

Java および Linux スクリプト: テストを自動化する方法 Java および Linux スクリプト: テストを自動化する方法 Oct 05, 2023 am 08:50 AM

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

go-zeroの統合テスト:APIサービスの非破壊テストの自動化を実現 go-zeroの統合テスト:APIサービスの非破壊テストの自動化を実現 Jun 22, 2023 pm 02:06 PM

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

Pin フレームワークでの API ドキュメントと自動テストの詳細な説明 Pin フレームワークでの API ドキュメントと自動テストの詳細な説明 Jun 22, 2023 pm 09:43 PM

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

未来志向のAI自動テストツール 未来志向のAI自動テストツール Apr 08, 2023 pm 05:01 PM

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

自動テストにおける Go 言語の戻り値の型推論の重要性 自動テストにおける Go 言語の戻り値の型推論の重要性 Apr 29, 2024 pm 04:45 PM

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

See all articles