2023.01.25

GitHubとCircleCIでCI/CDをはじめよう

水野源
日本仮想化技術株式会社 技術部所属
このエントリーをはてなブックマークに追加

日本仮想化技術株式会社の水野です。

現在のITシステムの開発現場では、激しく変化する要求に対し、柔軟かつ高速に対応することが求められています。DevOpsはそのためのアプローチのひとつですが、DevOpsライフサイクルを高速に回すためには、なによりテスト、ビルド、デプロイを自動化するCI/CDが欠かせません。

そこで本エントリーでは、GitHubCircleCIを用いて、実際にCI/CDワークフローを動かす手順を紹介します。

なぜCircleCIなのか

CI/CDを実現するツールは数多く存在します。まず大きくオンプレミスで運用するか、クラウドサービスを使うかで分けることができますが、運用コスト面から見ても、特別な理由がない限りクラウドサービスの利用を第一に検討するべきでしょう。もちろんこれは、CI/CDツールだけに限った話ではありません。

現在ソースコードホスティングサービスとして、第一候補に挙げられるのはやはりGitHubでしょう。となると、CI/CDツールにおけるGitHubとの親和性というのは見逃せないポイントです。そしてコスト(*1)、使い勝手、GitHub連携という点から総合的に判断すると、CircleCIが最有力ではないかというのが筆者の考えです。CI/CDのSaaSとしては、Travis CIという対抗馬も存在します。もちろんTravis CIでも同様にCI/CDは行えるのですが、プライベートリポジトリの扱いや、ビルド手順の煩雑さ、マシンスペックの選択肢といった理由から、全体的にCircleCIの方が使い勝手がよいのでは? と筆者は感じています。

「GitHubと親和性の高いCI/CDなら、GitHub Actionsがあるじゃないか」

もちろんその通りです。現在ではGitHub Actionsも有力な選択肢のひとつでしょう。ただ筆者がCI/CDを実践し始めた頃は、まだGitHub Actionsは存在しなかったことや、Insightsなどの機能が充実しているという点で、CircleCIの方が好みではあります。

GitHubにリポジトリを作成する

GitHub上に、テスト用の新しいリポジトリを作成しましょう。今回はci-testという名前で、プライベートリポジトリを作成しました。

VTJ-CircleCI_01.png

 

このリポジトリにコードと、CircleCIのワークフローの設定を追加していきます。今回は例として、簡単なシェルスクリプトの文法をチェックします。script.shという名前で、以下のコードをコミットしました。文字列を表示するだけのhelloというシェル関数を定義し、実行するだけのシンプルなシェルスクリプトです。

VTJ-CircleCI_code01.png

続いてリポジトリに.circleciというディレクトリを作成し、その中にconfig.ymlというファイルを以下の内容で作成します。

VTJ-CircleCI_code02.png

本エントリーでは詳細は解説しませんが、チェックアウトしたリポジトリ内の*.shというファイルに対してshellcheckで文法チェックを行うワークフローを定義しています。YAMLファイルに定義を列挙しているだけなので、なんとなく意味はわかるのではないでしょうか。

ここまでができたらファイルをコミットし、GitHubへpushしましょう。

CircleCIにプロジェクトを設定する

circleci.comから、GitHubのアカウントでCircleCIにログインしましょう。それだけで、CircleCIがGitHub上のリポジトリにアクセスできるようになります。

CircleCIでは、リポジトリを「プロジェクト」という単位で管理します。まずはダッシュボードからAdd a projectをクリックします。

VTJ-CircleCI_02.png

 

GitHub上にある自分のリポジトリ一覧が表示されますので、先ほど作成したci-testのSet Up Projectをクリックしましょう。

VTJ-CircleCI_03.png

 

するとCircleCIは自動的に、リポジトリ内にあるワークフローの設定(先ほどコミットした.circleci/config.yml)を検索してくれます。

VTJ-CircleCI_04_small.png

 

これをそのまま利用しますので、Use the .circleci/config.yml in my repoを選択してSet Up Projectをクリックします。これで自動的にCIが起動します。しかしCIパイプラインの画面に遷移してみると、どうやらテストに失敗しているようです。

VTJ-CircleCI_05.png

 

テスト結果をもとにコードを修正する    

ジョブの詳細を確認すると、以下のログが表示されていました。

VTJ-CircleCI_code03.png

スクリプトの3行目にあるfunctionがよくないようですね。実はfunctionはBashやkshで使える非標準な構文のため、POSIX shでは「関数名()」と記述する必要があります。ではコードを修正してpushし直してみましょう。修正したコードは以下になります。

VTJ-CircleCI_code04.png

修正したコードをpushすると、自動的にワークフローが再実行されます。

VTJ-CircleCI_06.png

 

というわけで、無事にテストをパスすることができました。

おわりに

新規追加したコードの品質を担保し、また既存の機能にリグレッションを発生させないためにも、リリースブランチへのマージ前のテストは必須です。とはいえ、人間は面倒くさい作業はサボってしまうものです。ですのでこうした作業はツールにオフロードし、意識せずとも自動的に実行されるのが理想でしょう。今回は文法チェックを行いましたが、CIにはセキュリティチェックや静的コード解析などを組込むことも可能です。

 

1:最近CircleCIでは無料プランが大幅に強化され、無料でも月あたり6000分のビルド、30件までのジョブ並列実行などが可能になっています。

本記事は日本仮想化技術が提供するDevOps技術情報メディアの記事を再編集した上で掲載しています。

関連リンク

かんたんDevOps | 日本仮想化技術株式会社

とことんDevOps  | DevOpsに取り組みたい皆さんのための技術情報メディア

この記事の著者:水野源

日本仮想化技術株式会社 技術部所属

普段はクラウドを利用したDevOps案件に携わることが多いインフラ寄りのエンジニア。最近の著書に『そろそろ常識? マンガでわかる「Linuxコマンド」』(C&R研究所)、『いちばんやさしい新しいサーバーの教本』(インプレス)、『Linuxをマスターしたい人のための実践Ubuntu』(秀和システム)などがある。


DevOps Hubのアカウントをフォローして
更新情報を受け取る

  • Like on Feedly
    follow us in feedly

関連記事

このエントリーをはてなブックマークに追加

お問い合わせ

DevOpsに関することなら
お気軽にご相談ください。

Facebook、TwitterでDevOpsに関する
情報配信を行っています。