環境
- Circle CI 2.1
- Yarn 1.x
- cimg 利用
- Node + MySQL(ですが、主にCircle CIの設定のため、←の環境には大きく依存していません)
- MySQLの複数DBを立ち上げる場合の設定は、以下に加えて【CircleCI】MySQLで複数DBを構築するも参照して下さい。
設定例
version: 2.1
orbs:
node: circleci/node@3.0.0
executors:
default:
docker:
- image: cimg/node:16.13.1
extended:
docker:
- image: cimg/node:16.13.1
- image: cimg/mysql:8.0l
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
MYSQL_DATABASE: your_database_name_comes_here
commands:
restore_yarn_cache:
steps:
- restore_cache:
name: Restore Yarn Package Cache
keys:
- v1-yarn-packages-{{ checksum "yarn.lock" }}
install_yarn_dependencies:
steps:
- run:
name: Install Yarn Dependencies
# to avoid "Extracting tar content of undefined failed"
# https://github.com/yarnpkg/yarn/issues/7212
command: yarn install --frozen-lockfile --cache-folder ~/.cache/yarn --network-concurrency 1
save_yarn_cache:
steps:
- save_cache:
name: Save Yarn Package Cache
key: v1-yarn-packages-{{ checksum "yarn.lock" }}
paths:
- .yarn/cache
wait_for_db_start_up:
steps:
- run:
name: Wait for db start up
command: dockerize -wait tcp://127.0.0.1:3306 -timeout 1m
run_test:
steps:
- run:
name: Run test
command: yarn run test
run_lint:
steps:
- run:
name: Run lint
command: yarn run lint
jobs:
build:
executor: default
steps:
- checkout
- restore_yarn_cache
- install_yarn_dependencies
- save_yarn_cache
test:
executor: extended
steps:
- checkout
- restore_yarn_cache
- wait_for_db_start_up
- run_test
lint:
executor: default
steps:
- checkout
- restore_yarn_cache
- run_lint
workflows:
build_and_test:
jobs:
- build
- lint:
requires:
- build
- test:
requires:
- build
ポイント
-
2.1
の機能(executors
、commands
)を使って、設定をわかりやすくする。 -
executor
を最適化する。- 例えば、DBのセットアップは数十秒かかるので(※実測で20秒程)、不要なところでは行わない。
- 上記の例では、
build
(yarn install
)にDBは不要なので、DBが無いexecutor
(= default)を使っています。 -
executor
の名前(defaultやextended)は任意です。
- テスト実行前に、DBの起動待ちをする(
dockerize -wait
)。 -
step
内でname
を付ける。- 無くてもいいですが、その場合はCircleCIのデフォルトが使われます。
restore_cache
などは全てRestoring Cache
となり、中を見ないとどのステップか分からなくなるので、付けています。
- 無くてもいいですが、その場合はCircleCIのデフォルトが使われます。
参照先
Caching Dependencies
By default, cache storage duration is set to 15 days. This can be customized on the CircleCI web app
by navigating to Plan > Usage Controls. Currently, 15 days is also the maximum storage duration you can set.
Tip: Caches are immutable, so it is helpful to start all your cache keys with a version prefix, for example v1-.... This allows you to regenerate all of your caches just by incrementing the version in this prefix.
yarn install
に --frozen-lockfile
オプションを付ける
- https://circleci.com/docs/ja/2.0/yarn/
- https://classic.yarnpkg.com/ja/docs/cli/install/#toc-yarn-install-frozen-lockfile
version: 2.1
では workflows
の version 指定は不要。
その他
- ソースコードが大きくなってきたら、ソースコードのキャッシュも検討する(※デフォルトでやっておいてもいいかもしれない)。