ハマログ

株式会社イーツー・インフォの社員ブログ

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>
テスト実行まで成功しました!
満足したので今日はここまで。
CIjenkinsLaravelPHPPHPUnitTestテスト

  kaneko tomo   2017年5月10日


関連記事

composer実行時にtokenの入力を求められてインストールが止まる問題

PHPのプロジェクトでcomposer実行時に、Token入力のプロンプトが表示…

SQLでinとexistsの話

最近開発した時、sqlも使いました。使った時、inとexistsの区別が分からな…

コンピュータと言語

どうも。 台風接近中の奄美から元井です。   この島、 “自然と人が共…


← 前の投稿

次の投稿 →