はじめに
CircleCI便利ですね。
テスト結果をGitにコミットしてもらうようにしました。
今回はテスト結果ということで、それぐらいだったらCircleの画面で見ればいいじゃない、って感じなんですが、もっと重いE2Eの結果をスクショで取って専用のブランチにコミットしてもらったり、Cronでスケジュールを走らせて自動コミットできて便利でした。
手順
CircleCI用のconfigを書く
# Javascript Node CircleCI 2.0 configuration file
version: 2
defaults: &defaults
working_directory: ~/repo
docker:
- image: circleci/node:8.9.1
jobs:
build:
<<: *defaults
steps:
- checkout
- restore_cache:
keys:
- v1-dependencies-
# fallback to using the latest cache if no exact match is found
- v1-dependencies-
- run: git reset --hard HEAD
- run: git checkout test-results;
- run: npm install
- run: npm test -- --coverage > result.txt
- run: echo $RANDOM >> result.txt
- run: git config user.email "yousan+circleci@users.noreply.github.com"
- run: git config user.name "yousan+circleci"
- run: git add result.txt package-lock.json
- run: git commit -m 'add test results'
- run: git push origin test-results;
- save_cache:
paths:
- node_modules
key: v1-dependencies-{{ checksum "package.json" }}
後ろの方でgitコマンドを調整しています。
- CIで走らせたいコマンド(ここだと
npm test -- --coverage
) -
git config
などでコミットの準備 - 実際に
git commit
とgit push
しています。
CircleCIでデプロイキーの設定
CircleCIでプロジェクトの設定画面にある「Checkout SSH Keys」を開きます。
ここにある「Create and add xxx user key」をクリックします。
こんな感じでキーが増えていればOKです。
GitHub側では個人プロファイルの「SSH and GPG keys」で追加されていることが確認できます。
これでCircleCIがgit
コマンドを実行する際にこの秘密鍵を使ってくれます。
実行
CircleCIから手動で実行したり、コミットを契機にCIが走ってくれます。
うまくいくとこんな感じでコミットプッシュに成功します。
GitHub側にもコミットが来ました。
cron化
Cronでスケジューリングとして走らせるために、workflowを定義します。
workflows:
version: 2
commit_test_results:
triggers:
- schedule:
cron: "30 * * * *"
filters:
branches:
only:
- master
jobs:
- build
triggersのところにcronとして時間を設定すればOKです。
ここで走るようになったworkflowはCircleCIのWorkflowで確認できます。(コミットを契機として走り始めたJobとは別に確認できます)
良いCIライフを送りたいです!
エラーメッセージ
最初は読み出しのみの鍵を使っていたため、権限が足りませんでした。