CircleCI 2.0 GAリリース: 続Node.jsマルチバージョンビルド
CircleCI 2.0 GA が無事リリースされたので、betaが取れるのを待ってた方は是非どうぞ。 今の所は爆速だったbeta時代と遜色ない速度で動いてる。
1.0やTravis CIと比較してのCircleCI 2.0のメリットは前回記事に書いたのでご参照ください。
CircleCI 2.0 でNode.jsのマルチバージョンビルド - teppeis blog
Workflows
前回の記事でcurl
を使った無理やりなマルチビルド並列実行を紹介したけど、当時クローズドアルファだったWorkflowsといういわゆるビルドパイプラインのようなものを組める機能が無事搭載された。
Orchestrating Workflows - CircleCI
これを使うとNode.jsのマルチバージョンビルドはこんな感じで書ける。
workflows: version: 2 node-multi-build: jobs: - node-v4 - node-v6 - node-v8 version: 2 jobs: node-base: &node-base docker: - image: node working_directory: ~/working_directory steps: - run: name: Versions command: | yarn versions echo "npm: $(npm --version)" - checkout - restore_cache: keys: - v{{ .Environment.CIRCLE_CACHE_VERSION }}-yarn-lock-{{ .Branch }}-{{ .Environment.CIRCLE_JOB }}-{{ checksum "yarn.lock" }} - v{{ .Environment.CIRCLE_CACHE_VERSION }}-yarn-lock-master-{{ .Environment.CIRCLE_JOB }}-{{ checksum "yarn.lock" }} - v{{ .Environment.CIRCLE_CACHE_VERSION }}-yarn-cache-{{ .Branch }}-{{ .Environment.CIRCLE_JOB }} - v{{ .Environment.CIRCLE_CACHE_VERSION }}-yarn-cache-master-{{ .Environment.CIRCLE_JOB }} - run: name: Install dependencies command: yarn install - run: name: Test command: | mkdir -p $TEST_REPORTS yarn test - save_cache: key: v{{ .Environment.CIRCLE_CACHE_VERSION }}-yarn-lock-{{ .Branch }}-{{ .Environment.CIRCLE_JOB }}-{{ checksum "yarn.lock" }} paths: - node_modules - save_cache: key: v{{ .Environment.CIRCLE_CACHE_VERSION }}-yarn-cache-{{ .Branch }}-{{ .Environment.CIRCLE_JOB }}-{{ checksum "yarn.lock" }} paths: - /usr/local/share/.cache/yarn - run: # Variables are not available in `path` or `paths` # https://discuss.circleci.com/t/can-i-use-variables-in-cache-paths/11393 name: Check `yarn cache dir` command: | CACHE_DIR=$(yarn cache dir) echo "yarn cache dir: ${CACHE_DIR}" if [[ "$CACHE_DIR" != /usr/local/share/.cache/yarn* ]]; then exit 1 fi node-v4: <<: *node-base docker: - image: node:4 node-v6: <<: *node-base docker: - image: node:6 node-v8: <<: *node-base docker: - image: node:8
サンプルプロジェクトはこちらを参照。curl
用のAPIトークンが不要になってセットアップも楽になった。
プルリクはこんな感じ。
その他、前回書いたpath
で環境変数使えない問題と、Dockerイメージのキャッシュ制御できない問題は解決していない。
Dockerイメージの方は、node:8
とか書いておけばまあ実用上問題ないレベルだった。
あと、Node v8でpackage-lock.json
を採用した場合にNode v6以下をどうするか問題にも答えが出ていない。
みんなどうしているんだろう。