Dockerによるテストの自動実行やデプロイ自動化をやってくれる便利なサービスであるCircleCi。各種設定はconfig.ymlに記載するんだけど、store_artifacts(カバレッジレポートやその他ファイルをwebからアクセスできるようにしてくれる)のpath設定でつまづいたのでメモ。
問題:pathに環境変数が使えない
下記のようにconfig.ymlを書けば、テスト実行後に生成されるカバレッジレポートをCircleCiのArtifactsからアクセスできる、と思っていた。アプリケーションはCakePHP3系で、phpunitをcomposerでインストールしている前提(xdebugをインストール済のサーバー環境)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
version: 2 jobs: build: docker: - image: circleci/php:7-apache-node-browsers-legac environment: TEST_REPORT_PATH: /tmp/report ... steps: ... - run: name: run test command: | mkdir -p ${TEST_REPORT_PATH} cd /var/www/hogehoge.com vendor/bin/phpunit --configuration phpunit.xml.dist --coverage-html ${TEST_REPORT_PATH} - store_artifacts: path: ${TEST_REPORT_PATH} |
が、CircleCiの管理画面からJobsの実行結果のUploading artifactsを確認したところ、実際にはこうなった:
1 2 |
Uploading /var/www/hogehoge.com/${TEST_REPORT_PATH} to /var/www/hogehoge.com/${TEST_REPORT_PATH} No artifact files found at /var/www/hogehoge.com/${TEST_REPORT_PATH} |
ふーむ、どうやらstore_artifacts内ではパスが認識されていないらしい(おまけに1つ前のrunで実行したcdを引きずっている)。調べてみると同様のケースを報告している記事も見つかった:
CircleCi2.0でカバレッジレポートを画面上から見れるようにstore_artifactsで指定する際、環境変数が使えなかった。ふーむそういうものなのか。。https://t.co/Y2Bot5qSnw
— masyus (@masyus_work) 2019年1月17日
解決方法
仕方ないので、直書きでパスを書くことで解消した。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
version: 2 jobs: build: docker: - image: circleci/php:7-apache-node-browsers-legac environment: TEST_REPORT_PATH: /tmp/report ... steps: ... - run: name: run test command: | mkdir -p ${TEST_REPORT_PATH} cd /var/www/hogehoge.com vendor/bin/phpunit --configuration phpunit.xml.dist --coverage-html ${TEST_REPORT_PATH} - store_artifacts: path: /tmp/report |
pathは絶対パス相対パスどちらでも指定可能。本件、CircleCiの公式ドキュメントを眺めてみても書いていなかったので調査に手間取ってしまった。参考になると幸いです。
Storing Build Artifacts: https://circleci.com/docs/2.0/artifacts/
ちなみに他のソリューションとしては、まだ試していないがProject単位の環境変数ならいけるかも?もし検証された方いらっしゃいましたらご共有いただけると有難いです。