💚

CircleCI version 2.1の入門

2023/05/03に公開

概要

version 2.1でCircleCIのパイプラインを作る上で自分が気をつけていることまとめ
あとCircleCIをこれから使う人への入門記事

紹介する内容

version 2.1ベースで、自分が便利に感じている設定を含め説明します

orbs

CircleCIではプログラミングにおけるパッケージのようにパイプラインを配布している
それらを利用することで、冗長な記述をせずに済むようにできる

ただCI/CDというツールの特性上、不確かなorbsは利用したくないケースもある
そういうときは CERTIFIED と付いた認定済みのorbを使用すれば良い

例えば、circleci/aws-cli は認定済みのorbには以下がある
https://circleci.com/developer/orbs/orb/circleci/aws-cli

配布されているorbについては以下から確認できる
https://circleci.com/developer/ja/orbs

ref. orbsについて
https://circleci.com/docs/configuration-reference/#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について
https://circleci.com/docs/configuration-reference/#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について
https://circleci.com/docs/configuration-reference/#parameters-pipeline
https://circleci.com/docs/reusing-config/#parameter-syntax

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について
https://circleci.com/docs/configuration-reference/#executors

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について
https://circleci.com/docs/ja/local-cli/
https://circleci.com/docs/ja/how-to-use-the-circleci-local-cli/#running-a-job

終わりに

コンテナでapt-get installしなくても済むようにcimgの配布もされていますし、orbsなどの再利用可能なパイプラインも配布されています
orbsで配布されている他のパイプラインを見るのも参考にできる箇所があるように感じます

上記で紹介した、 orbs / commands / parameters / executors をうまく利用するとパイプラインの記載はかなりスッキリします
あとcircleci cliを使うことで、config.ymlの実装も楽になります

これらをうまく利用することで、快適なCI/CDを構築に役立てば幸いです

Discussion