CircleCI version 2.1の入門
概要
version 2.1でCircleCIのパイプラインを作る上で自分が気をつけていることまとめ
あとCircleCIをこれから使う人への入門記事
紹介する内容
version 2.1ベースで、自分が便利に感じている設定を含め説明します
orbs
CircleCIではプログラミングにおけるパッケージのようにパイプラインを配布している
それらを利用することで、冗長な記述をせずに済むようにできる
ただCI/CDというツールの特性上、不確かなorbsは利用したくないケースもある
そういうときは CERTIFIED
と付いた認定済みのorbを使用すれば良い
例えば、circleci/aws-cli は認定済みのorbには以下がある
配布されているorbについては以下から確認できる
ref. orbsについて
commands
# ref. https://circleci.com/docs/configuration-reference/#commands
commands:
sayhello:
description: "A very simple command for demonstration purposes"
parameters:
to:
type: string
default: "Hello World"
steps:
- run: echo << parameters.to >>
公式にはこのような例がある
commands
と複数形にされている通り、commandを複数定義できる
上記の場合は sayhello
を定義していて引数を受け取り、stepsが実行される
ref. commandsについて
parameters
例えば、devとstgとprodといった引数をjobに渡したいときに使用するケースに使える
commands以下に引数として展開することができる
commands:
print:
parameters:
env:
type: enum
enum: ["dev", "stg", "prod"]
steps:
- run: echo << parameters.env >>
string以外のtypeも用意されている
ref. parametersについて
executors
jobのstepを実行するための実行環境を定義する
# ref. https://circleci.com/docs/configuration-reference/#executors
version: 2.1
executors:
my-executor:
docker:
- image: cimg/ruby:3.0.3-browsers
auth:
username: mydockerhub-user
password: $DOCKERHUB_PASSWORD # context / project UI env-var reference
jobs:
my-job:
executor: my-executor
steps:
- run: echo "Hello executor!"
executorsはexecutorを複数定義することが出来る
例えば、rubyメインのリポジトリであればexecutorにrubyのdocker imageを定義して、各jobでexecutorを呼び出す…みたいなケースがありそう
executorとして定義することでパイプラインの冗長な記載も軽減される
ref. esecutorsについて
circleci cli
記載したパイプラインが問題なく動作するか、というのはローカルである程度ローカル環境で確認できる
これらを利用するとリモートへpushして確認、のようなことはしなくて済むようになる
validationは .circleci/
がある階層で以下のコマンドを実行するだけ
circleci config validate
dockerを利用したjobはローカルで実行できるが、machineは利用できない
ローカルジョブでは Machine Executor を使用できません。 Machine Executor でジョブを実行するには、別の VM が必要になるためです。
dockerを利用する際はローカルにセットアップしておく必要がある
circleci local execute JOB_NAME
ref. circleci cliについて
終わりに
コンテナでapt-get installしなくても済むようにcimgの配布もされていますし、orbsなどの再利用可能なパイプラインも配布されています
orbsで配布されている他のパイプラインを見るのも参考にできる箇所があるように感じます
上記で紹介した、 orbs
/ commands
/ parameters
/ executors
をうまく利用するとパイプラインの記載はかなりスッキリします
あとcircleci cliを使うことで、config.ymlの実装も楽になります
これらをうまく利用することで、快適なCI/CDを構築に役立てば幸いです
Discussion