[CircleCI] 2.0でstore_artifactsのpathに環境変数が使えない問題の解決方法

2019/01/19

author

masyus

Dockerによるテストの自動実行やデプロイ自動化が可能なサービスであるCircleCIは、各種設定をconfig.ymlに記載する仕様になっています。今回はその設定の中でもstore_artifactsと呼ばれる、カバレッジレポートやその他ファイルをwebからアクセスできるようにしてくれる仕組みを使う際のpath設定でつまづいた点を解説します。

pathは環境変数が使えない

下記のようにconfig.ymlを書くことで、テスト実行後に生成されるカバレッジレポートをCircleCIのArtifactsからアクセスできると考えていました。

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は下記のようになりました。

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内では環境変数が認識されていない様子です。

解決方法: 直書きでpathを設定する

pathは環境変数で保持させるほどでも無い情報だと判断したため、直書きでpathを書くことで解消しました(ちなみに絶対パス相対パスどちらでも指定可能のようです)。

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

本件、CircleCIの公式ドキュメントを眺めてみても書いていなかったので調査に手間取ってしまいました。参考になれば幸いです。

参考

CI/CDの関連記事

まだ記事がありません

CircleCIの関連記事

まだ記事がありません