LaravelプロジェクトとJenkinsの連携
一年前くらいに自社サーバにJenkinsをいれた(yumしただけ)んだけど、放置していたので、ボチボチCIしないとってことで、社内のGitと連携することにしました。
とりあえずLaravelプロジェクトを連携してみます。
QuickStart
composerでプロジェクトを作成します。
>composer create-project laravel/laravel laravel_jenkins
できました!
Gitにいれます。今回はBacklogでやりました。
続けて、Jenkinsの設定をします。新規プロジェクト作成で、フリースタイル・プロジェクトのビルドを作成します。
ソースコード管理にGitを選択し、リポジトリと認証情報を設定して保存します。
ひとまず完成。
ビルドが問題なく実行されることを確認します。
ユニットテストを実行します。まずは、ローカルで実行してみました。
>phpunit Fatal error: Call to undefined method PHPUnit_Util_Configuration::getTestdoxGroupConfiguration() in C:\xampp\htdocs\laravel_jenkins\src\vendor\phpunit\phpunit\src\TextUI\TestRunner.php on line 1066くそー・・・
>composer exec phpunit PHPUnit 5.7.19 by Sebastian Bergmann and contributors. .. 2 / 2 (100%) Time: 373 ms, Memory: 9.00MB OK (2 tests, 2 assertions)うごきました!
続いて、おなじみbuild.xmlをおきます。
<project name="laravel-jenkins" default="build"> <target name="phpunit"> <exec dir="./src/" executable="phpunit" failonerror="true"> <arg line="--colors tests" ></arg> </exec> </target> <target name="build" depends="phpunit"></target> </project>
失敗しました!
関連ライブラリをインストールしないとダメですね。
phpunit: [exec] PHP Warning: require(/var/lib/jenkins/workspace/laravel_jenkins/src/bootstrap/../vendor/autoload.php): failed to open stream: No such file or directory in /var/lib/jenkins/workspace/laravel_jenkins/src/bootstrap/autoload.php on line 17 [exec] PHP Stack trace: [exec] PHP 1. {main}() /usr/bin/phpunit:0 [exec] PHP 2. PHPUnit_TextUI_Command::main() /usr/bin/phpunit:50 [exec] PHP 3. PHPUnit_TextUI_Command->run() /usr/share/php/PHPUnit/TextUI/Command.php:116 [exec] PHP 4. PHPUnit_TextUI_Command->handleArguments() /usr/share/php/PHPUnit/TextUI/Command.php:127 [exec] PHP 5. PHPUnit_TextUI_Command->handleBootstrap()
composerタスクを追加しました。(31行目でenvファイルのコピーも追加しました)
<project name="laravel-jenkins" default="build" basedir="."> <property name="basedir" value="${project.basedir}" /> <property name="sourcedir" value="${basedir}/src"/> <target name="build" depends="composer,copy-env-file,phpunit" /> <target name="composer" depends="composer-clean,composer-install,composer-update" /> <target name="composer-check"> <condition property="composer.lock.exist.in.gitignore"> <resourcecontains resource="${sourcedir}/.gitignore" substring="composer.lock" /> </condition> </target> <target name="composer-clean" depends="composer-check" if="composer.lock.exist.in.gitignore"> <delete file="${sourcedir}/composer.lock" /> </target> <target name="composer-install" depends="composer-check" unless="composer.lock.exist.in.gitignore"> <echo>Installing dependencies</echo> <exec executable="composer" failonerror="true"> <arg value="install" /> <arg value="-d=src" /> </exec> </target> <target name="composer-update" depends="composer-check" if="composer.lock.exist.in.gitignore"> <echo>Updating dependencies</echo> <exec executable="composer" failonerror="true"> <arg value="update" /> <arg value="-d=src" /> </exec> </target> <target name="copy-env-file"> <copy file="${basedir}/deploy/laravel/.env" todir="${sourcedir}/"/> </target> <target name="phpunit"> <exec dir="${sourcedir}" executable="phpunit" failonerror="true"> <arg line="--colors tests" /> </exec> </target> </project>
テスト実行まで成功しました!
満足したので今日はここまで。