GitHubのPull Request時にCircleCIを回す方法

CircleCIロゴ

業務で,CircleCIをconfig.ymlを編集することはあったのですが,1から設定を行ったことがありませんでした.基礎なくして,応用なしということで初期設定の理解を深めた.本記事では,業務でよくみるGitHubでCircleCIのテストの様子が可視化できるまでの過程とつまずきポイントを紹介する.

ここで言う可視化とは,commitをするとCircleCIのロゴが表示され,テスト結果の詳細に飛べることを指す.

CircleCIを可視化した図

CircleCI is 何?

CIを実現するためのサービス.

CI(continuous integration: 継続的インテグレーション)とは,アジャイル型開発における御作法であり,短いスパンで変化に対応していくため,開発プロセスにおけるフィードバックを担当する.つまり、短い間隔で常にテストを行うことでフィードバックで改善サイクルを速く回す.

アジャイル型の開発が主流となる以前のソフトウェア開発手法として,ウォーターフォール型モデルがある.これは、企画から始まり最後にテストを行う手法だ.このモデルの問題点は,後戻りできないことで市場に素早く対応ができないことである.炎上しやすいイメージがあるが,ウォーターフォールでの開発をしたことがないので,よくわかっていない.

CircleCIとGithubを連携する

まず,はじめに行うことはCircleCIのユーザー登録だ.公式ページの右上にあるSign upをクリックするとGitHubとBitbucketでSign upをできることがわかる.GitHubにて登録を行い,好きなプロジェクトとCircleCIを連携する.連携方法は,左サイドバーのAdd ProjectsをクリックしSet up Projectを選択することだ.すると,プロジェクトに直下に.circleciというディレクトリを作成し,config.ymlを加えることを指示される.指示に従い,以下のように設定を行う.

[.circleci/config.yml]

version: 2
jobs:
  build:
    docker:
      - image: circleci/node:4.8.2
    steps:
      - checkout
      - run: echo "hello world"

CircleCIの設定ファイルをGitHubにPushした後に,CircleCI画面サイドバーJobsをクリックするとテストが実行されていることがわかる. ここで,もし下記のようなエラーが出た場合,.circleci/config.ymlの名前が間違っていないか,余分なスペースが前後にないかを確認する.1

私は,config.ymlの後ろに空白を入れていたため,エラー対応であたふたしてしまった.

#!/bin/sh -eo pipefail
# No configuration was found in your project. Please refer to https://circleci.com/docs/2.0/ to get started with your configuration.
# 
# -------
# Warning: This configuration was auto-generated to show you the message above.
# Don't rerun this job. Rerunning will have no effect.
false
Exited with code 1

次に,連携したGitHubプロジェクトのSettingページに移動をする.Add ruleをクリックし適当なBranch name patternを入力,Require status checks to pass before mergingをチェックすると先ほど回したCircleCIのjob-nameが表示される.該当するjob-nameを選択しCreateボタンを押した後,再度テストを実行するとCircleCIのテストが可視化されているはずだ.

連携したGitHubプロジェクトのSettingページ

ハマりポイント

version: 2
jobs:
 my-job-name: ## 変更点
    docker:
      - image: circleci/node:4.8.2
    steps:
      - checkout
      - run: echo "hello world"

上記のように,job-nameを変更してPushすると下記のようなエラーが出力されていることを確認できる.

Build-agent version hogehogehoge (2019-06-26T16:13:26+0000)
Configuration errors: 1 error occurred:

* Cannot find a job named `build` to run in the `jobs:` section of your configuration file.
If you expected a workflow to run, check your config contains a top-level key called 'workflows:'

この問題の原因は,下記のように公式ドキュメントのjobsに記載されている.つまり,Workflowを利用していない場合,CircleCIではbuild jobをトリガーとして走るためjobsの名前にbuildを含むことが要求されるのだ.よって上記の問題点の解決策は,job-nameをbuildに変更するか,Workflowでjobを管理することだ.

If you are not using workflows, the jobs map must contain a job named build. This build job is the default entry-point for a run that is triggered by a push to your VCS provider. It is possible to then specify additional jobs and run them using the CircleCI API.

Workflowでjobを管理する方法を以下に示す.

version: 2
jobs:
  my-job-name:
    docker:
      - image: circleci/node:4.8.2
    steps:
      - checkout
      - run: echo "hello world"

 workflows:
  version: 2
  your-name:
    jobs:
      - my-job-name

まとめ

  • CircleCIとGitHubを連携した
  • CircleCIは,公式ドキュメントが充実している
  • CircleCIは,怖くない