こんにちは。三竹です。
このエントリーにあるように、先週の8月22日、23日で開発合宿に行ってきました。
場所は日光の民宿/はじめのいっぽ。
貸切で、かつ涼しい、というよりTシャツでは寒いぐらいの環境の中、1泊2日の開発漬けの時間を過ごしてきました。
今回、私が目標にしたことは、Jenkins/継続インテグレーション環境の構築です。
業務で本格的に使ったことがないので、どこまでできるのか、できるとしても、どこまでやるべきか、などが判断んできればと思い、合宿に臨みました。
簡単に説明すると以下の通り。
見極めたかったことは、
1)自動化すること
どこまでできるのか?
2)テストすること
どこまで自動化できるのか、できるとしたら、どこまでやるべきなのか、を見極めること
です。
では、やってきたことを纏めましょうー。
1)環境
使ってみたのは、以下の通りです。
・Jenkins
・Nginx
・Phing(デプロイツール/Antみたいなもの)
・PHPUnit
・Selenium
・コードインスペクション等(PHPCS/PHPMD)
・CakePHP
2)インストール
最初は各種インストール。話が長くなるので、前回のエントリーを参照。
ここは割愛します。
3)Jenkinsの設定
Jenkinsの設定内容は以下の通り。
まずは、ソースの取得。Gitから取得してます。※sshkeyをGit側に登録することにつまづきました…
次に、デプロイ
Jenkisでは、シェル、Ant、Maven等を利用可能です。まあ、やろうと思えば、なんでもできる感じですね。
今回は、Phingを使いました。AntのPHP版とったものなので、xmlに定義を書き、それを読み込んで処理を実行してもらいます。
設定ファイルは以下の通り。初期処理でディレクトリ等々と作り、各種処理を実施していく流れです。
<?xml version="1.0" encoding="UTF-8"?> <project name="jenkins" default="build"> <!-- Properties --> <property name="basedir" value="." /> <property name="appdir" value="../app" /> <property name="logdir" value="./logs" /> <!-- Build --> <target name="build" depends="clean,prepare,caketest,phpcs,phpcpd,phpmd,phpdoc"/> <!-- Clean up --> <target name="clean" description="Cleanup build artifacts"> <delete dir="${logdir}"/> <delete dir="${basedir}/coverage"/> <delete dir="${basedir}/phpdoc"/> </target> <!-- Prepare --> <target name="prepare" depends="clean" description="Prepare for build"> <mkdir dir="${logdir}"/> <mkdir dir="${basedir}/coverage"/> <mkdir dir="${basedir}/phpdoc"/> </target> <!-- CakePHP unit test with PHPUnit --> <target name="caketest" description="Run CakePHP unit tests with PHPUnit"> <exec dir="${basedir}" executable="${appdir}/Console/cake" output="${logdir}/caketest.log"> <arg line="test" /> <arg line="--configuration=${basedir}/phpunit.xml" /> <arg line="--log-junit=${logdir}/phpunit.xml" /> <arg line="--coverage-html=${basedir}/coverage/" /> <arg line="--coverage-clover=${logdir}/coverage.xml" /> <arg line="app" /> <arg line="AllTests" /> </exec> </target> <!-- PHPCodeSniffer --> <target name="phpcs" description="Find coding standard violations using PHP_CodeSniffer."> <exec dir="${basedir}" executable="phpcs" output="${logdir}/phpcs.log"> <arg line="--standard=${basedir}/phpcs.xml" /> <arg line="--report=checkstyle" /> <arg line="--report-file=${logdir}/phpcs.xml" /> <arg line="${appdir}" /> </exec> </target> <!-- PHPMD --> <target name="phpmd" description="Perform project mess detection using PHPMD"> <exec dir="${basedir}" executable="phpmd" output="${logdir}/phpmd.log"> <arg line="${appdir}" /> <arg line="xml" /> <arg line="${basedir}/phpmd-rule.xml" /> <arg line="--reportfile ${logdir}/phpmd.xml" /> <arg line="--exclude ${appdir}/Plugin,${appdir}/Config/Schema,${appdir}/Config/Migration" /> <arg line="--suffixes php,cpt" /> </exec> </target> <!-- PHPCPD --> <target name="phpcpd" description="Perform project mess detection using PHPMD"> <exec dir="${basedir}" executable="phpcpd" output="${logdir}/phpcpd.log"> <arg line="--log-pmd ${logdir}/phpcpd.xml" /> <arg line="--exclude Config/Schema" /> <arg line="--exclude Config/Migration" /> <arg line="--exclude Plugin" /> <arg line="--exclude webroot" /> <arg line="--names *.php,*.cpt" /> <arg line="${appdir}" /> </exec> </target> <!-- PHPDocumentor --> <target name="phpdoc" description="Generate Application Documentation using PHPDocumentor2"> <exec dir="${basedir}" executable="phpdoc" output="${logdir}/phpdoc.log"> <arg line="run" /> <arg line="-t ${basedir}/phpdoc" /> <arg line="-d ${appdir}" /> <arg line="-p" /> </exec> </target> </project>
詳細はこちらまで。英語ですがこのスライドは理解しやすかったです。
最後に、デプロイ後の処理です。デプロイ後、どのような処理を行うかを纏めている場所です。色々と指定ができます。
今回はレポート集計がメインです。デプロイ時実施した結果ファイルの取り込みを行います。
そして、レポーティング。処理実行後の集計結果です。
例えば、PHPMDについては、こんな感じでエラー内容が纏められます。
はい。ここまで。あっという間に終わってしまった感じでした。
想像以上に環境構築と、デプロイに時間がかかってしまったため、使った結果、どうすべきかを判断する所までは到達できず。
少し消化不良気味。
さて、私は開発というか技術のみの合宿は初めてでした。時間を忘れるくらい集中できたと思います。
場所を変えて集中するってのもいいなー、と感じました。
お互いにやってきたことを発表することで、技術習得への刺激にもなったと思います。
私は、他の人が発表したvagrant + chef に興味が出てきたので、早速取組中です。これ、便利です。ほんと。