Anarchy In the 1K

CircleCIの導入

CircleCIとは

 GitHub上のリポジトリの更新を契機として、処理実行が可能なCI/CDサービスです。リポジトリ上のに配置した.circleci/config.ymlに則り、CircleCIが処理を行います。CircleCIの概要に関しては、合わせて以下もご覧下さい。
継続的インテグレーションのプロダクトと機能 - CircleCI

 使用した際の所感としては、SaaS型でJenkinsの様に自前でサーバを立てる必要がなく、手軽に導入できるのがとても良かったです。

導入手順

  1. 以下URIよりCircleCIのSign upを行います。その際に、Sign up with GitHubを選択し、GitHubとの紐付けを行います。
    Signup - CircleCI

  2. 下図の通り、Set Up Projectボタンを押下し、既存のリポジトリをCircleCIに紐付けます。
    f:id:fujiU:20200301183437p:plain

  3. 下図の通り、Start Buildingボタンを押下し、続いてAdd Configボタンを押下します。 すると、該当のリポジトリ.circleci/config.ymlファイルが追加された、circleci-project-setupブランチが作成されます。
    f:id:fujiU:20200301184456p:plain
    f:id:fujiU:20200301184529p:plain

  4. CIrcleCIがリポジトリの更新を検知し、.circleci/config.ymlに則った処理を実行します。成功すると下図の通り、STATUSがSUCCESSになります。
    f:id:fujiU:20200301192715p:plain

ハンズオン

設定ファイルの変更

 上述の導入手順で追加した.circleci/config.ymlを、下図の通りGitHub上で直接編集します。 f:id:fujiU:20200301195510p:plain

以下をコピペしcommit changesボタンを押下して下さい。

version: 2.1
jobs: # ジョブ
  job01:
    docker: # Executor
      - image: buildpack-deps:trusty
    steps: # ステップ
      - run: echo "job01"
  job02:
    docker:
      - image: buildpack-deps:trusty
    steps:
      - run: echo "job02"

workflows: # ワークフロー
  version: 2.1
  workflow01:
    jobs:
      - job01
      - job02:
          requires:
            - job01

結果確認

  1. CIrcleCIがリポジトリの更新を検知し、workflow01が実行さた様子が確認できます。 f:id:fujiU:20200301214548p:plain

  2. workflow01を押下すると、job01, job02の順にジョブが実行さた様子が確認できます。 f:id:fujiU:20200301215115p:plain

  3. job01を押下すると、ステップが実行さた様子が確認できます。
    f:id:fujiU:20200301215906p:plain

解説

用語整理

ステップ, ジョブ, ワークフロー

上記に関して、それぞれ下図の関係になります。

f:id:fujiU:20200225131813p:plain

  • ステップ: シェルコマンドなどの、実行可能な1つの処理を指します。
  • ジョブ: ステップの集まりを指します。依存関係が無いジョブは、有料プランでは並列で実行されます。
  • ワークフロー: ジョブの集まりを指します。ジョブの実行に関する制御を行います。

合わせて以下もご覧下さい。
Orbs、ジョブ、ステップ、ワークフロー - CircleCI

Executor

ジョブ毎の処理を実行する環境を指します。以下より選択が可能です。

  • docker
  • machine
  • macos(有料プランのみ)

合わせて以下もご覧下さい。
Executor とイメージ - CircleCI
Executor タイプの選び方 - CircleCI

設定ファイル詳細

ステップ

シェルコマンドの実行

以下の通り、run: <コマンド>という記載をすることで、実行が可能です。

steps: # ステップ
  - run: echo "job01"

ジョブ

Executorの指定

以下の通り、dockerを指定しています。使用するイメージに関して、- image: <イメージ名>で指定可能です。

job01:
  docker: # Executor
    - image: buildpack-deps:trusty

指定可能なイメージに関して、以下をご覧ください。
Pre-Built CircleCI Docker Images - CircleCI

ワークフロー

ジョブの実行順序の制御

以下の通り、requires:を記載することで、ジョブの依存関係を指定可能です。

- job02:
    requires:
      - job01