Circle CI
CLI
https://circleci.com/docs/2.0/local-cli/
インストール
brew install circleci
https://circleci.com/account/api に行き、CLI 用のトークンを取得する。
次のコマンドを実行して取得したトークンを貼り付ける。
circleci setup
config.yml のバリデーション
circleci config validate
ビルトイン環境変数
https://circleci.com/docs/2.0/env-vars/#built-in-environment-variables
テンプレ
gradle
version: 2
# 各ジョブで共通の設定をまとめられる
references:
env_config: &env_config
docker:
- image: "circleci/openjdk:8u181-jdk-stretch-node"
environment:
HTTP_PROXY: http://proxy.example.com:9999
HTTPS_PROXY: http://proxy.example.com:9999
GRADLE_OPTS: "-Dhttp.proxyHost=proxy.example.com -Dhttp.proxyPort=9999 -Dhttps.proxyHost=proxy.example.com -Dhttps.proxyPort=9999"
# checksumで指定したファイルに変更があったらキャッシュを更新する
gradle_cache: &gradle_cache gradle-{{ checksum "build.gradle" }}
jobs:
build:
<<: *env_config
steps:
- checkout
- restore_cache:
key: *gradle_cache
- run:
name: Assemble
command: ./gradlew assemble
- save_cache:
paths:
- ~/.gradle
key: *gradle_cache
deploy:
<<: *env_config
steps:
- checkout
- restore_cache:
key: *gradle_cache
- run:
name: Store build number
command: mkdir _hoge && echo 'hello' >> _hoge/hoge.txt
# ジョブで生成したファイルを別のジョブから参照したいときに使う
- persist_to_workspace:
root: _hoge
paths:
- hoge
test:
<<: *env_config
steps:
- checkout
- run:
name: test
command: ./gradlew test
workflows:
version: 2
build_and_test:
jobs:
- build
- test:
requires:
- build
# 特定のブランチでのみjobを動かしたいときに
filters:
branches:
only:
- master
- develop
node.js
npm-cli-login
を使うために以下の環境変数を設定しておく必要あり。
- NPM_NAME
- NPM_EMAIL
- NPM_PASS
- NPM_REGISTRY
version: 2
# 各ジョブで共通の設定をまとめられる
references:
env_config: &env_config
docker:
- image: "circleci/node:strech"
npm_cache: &npm_cache v1-npm-deps-{{ checksum "package.json" }}
jobs:
build:
<<: *env_config
steps:
- checkout
- restore_cache:
key: *npm_cache
# - run:
# name: Install npm-cli-login
# command: yarn add npm-cli-login
- run:
name: Install
command: yarn
- run:
name: Build
command: yarn build
- save_cache:
key: *npm_cache
paths:
- ./node_modules
publish:
<<: *env_config
steps:
- checkout
- restore_cache:
key: *npm_cache
- run:
name: Login NPM registory
command: yarn npm-cli-login
- run:
name: Publish
command: npm publish
# command: npm --no-git-tag-version version patch && npm publish
workflows:
version: 2
build_and_publish:
jobs:
- build
- publish:
requires:
- build
filters:
branches:
only:
- master
Ref: npm-cli-login
GitHub Pages にデプロイ
yarn add -D gh-pages
package.json
にデプロイ用のスクリプトを追加する。
-d
オプションでデプロイ対象のディレクトリを指定する。
{
"scripts": {
"deploy-pages": "gh-pages -d .out"
}
}
CircleCI からデプロイする用の鍵を生成する。
cd ~/.ssh
ssh-keygen -t rsa -b 4096 -C "<>" -f circleci-myproject
生成した鍵はそれぞれ次のとおりに登録する。
- 秘密鍵: CircleCI のプロジェクト設定で登録
- 公開鍵: GitHub のプロジェクト設定で登録(書き込み権限にチェックを入れるのを忘れない)
.circleci/config.yml
を書く。以下は一例。
デプロイ前にgit config
でユーザ名とパスワードを設定しておく必要がある。
version: 2
references:
env_config: &env_config
docker:
- image: "circleci/node:stretch"
npm_cache: &npm_cache v1-npm-deps-{{ checksum "yarn.lock" }}
jobs:
build:
<<: *env_config
steps:
- checkout
- restore_cache:
key: *npm_cache
- run:
name: Install
command: yarn
- run:
name: Build
command: yarn build
- save_cache:
key: *npm_cache
paths:
- ./node_modules
publish_storybook:
<<: *env_config
steps:
- checkout
- restore_cache:
key: *npm_cache
- run:
name: Git config
command: |
git config user.name "CircleCI"
git config user.email "<>"
- run:
name: Build
command: yarn build
- run:
name: Deploy
command: yarn deploy-ghpages
workflows:
version: 2
build_and_publish:
jobs:
- build:
filters:
branches:
ignore:
- gh-pages
- publish_storybook:
requires:
- build
git pushなしでCircleCIを動かす
config.yml
を直してgit push
を繰り返すとコミットログもCIログも汚れるので、
トライアンドエラーしたい場合はこの方法で試せる。
export CIRCLE_TOKEN=<CIRCLECIのトークン>
export CIRCLE_USER=hako1912
export CIRCLE_REPO=my-repository
export CIRCLE_RIVISION=<コミットリビジョン>
curl --user ${CIRCLE_TOKEN}: \
--request POST \
--form revision=${CIRCLE_RIVISION} \
--form config=@.circleci/config.yml \
--form notify=false \
https://circleci.com/api/v1.1/project/github/${CIRCLE_USER}/${CIRCLE_REPO}/tree/master
https://circleci.com/docs/ja/2.0/examples/#section=configuration
複数イメージを指定する
テストに便利。
コマンドは最初に指定したコンテナで実行される。
jobs:
build:
docker:
- image: "ubuntu:18.04"
- image: "circleci/mysql:5.7"
steps:
- checkout
- run:
name: Install
command: echo 'hello'