情報畑でつかまえてロゴ
本サイトは NTTテクノクロスが旬の IT をキーワードに
IT 部門が今知っておきたい最新テクノロジーに関する情報をお届けするサイトです

CloudNative Days Tokyo 2019に出展!CI/CDつーるのエラビカタ

CI/CDツールの選定と紹介の記事です。 より詳細な情報はCloud Native Days Tokyo 2019 (7/22月,23火 虎ノ門ヒルズフォーラム)で発表します!

2019年のCI/CD

こんにちは、NTTテクノクロスです。

いきなりですが、みなさまCI/CDツールは利用されていますか?

(CI = Continuous Integration 、 継続的インテグレーション

 CD = Continuous Delivery / Deployment 、継続的デリバリーまたはデプロイメント)

アプリケーションのみならず、インフラや各種運用手順などもコードとして管理されるようになった現代において、コードの健全性を保つために、CI/CDツールは無くてはならない存在です。

ただ、かつてはほとんど Jenkins(Hudson)一択だったCI/CDツールも、今や数えきれないほど増加しています。CI/CDツールは各々に得意分野、長所・短所があり、目的に応じて適切なツールを選択することで、テストや運用をより効率化することができます。

とはいえ、山ほどあるCI/CDツールを調査し、適切なツールを選定するには、労力がかかります。 そこで本記事では、2019年におけるCI/CDツール業界の全体像を見渡しつつ、 GitlabZuul という二つのCI/CDツールについてご紹介をしたいと思います。

なお本記事の更なる詳細は、 CloudNative Days Tokyo 2019 の、7/23火 [2E2] 14:20 - 15:00 (Room E)で発表する予定です。 ご興味ありましたら、虎ノ門ヒルズフォーラムまで、ぜひ足をお運びください。

CI/CDツール

2019年6月現在、非常に多くのCI/CDツールがあり、調べただけでも50弱くらいのツールが出てきました。 選択肢が多様であることは良い面もあるのですが、特に初めての方にとって、どれを使えばよいか分かりにくい状況も生み出しています。

ツール選択の評価軸

ツールを選択する際の観点、評価軸として、どのようなものがあるでしょうか? 思いつくものとして、例えば以下のようなものがあります。

  • 設置場所:オンプレミス、クラウド上などのサービス
  • 費用:無料 or 有料、有料プランごとでサポートされている点の差
  • CI/CD対象の種類:コンテナ化されたアプリケーション、k8sへのデプロイ、モバイルアプリ等がサポートされているか?
  • CI/CD対象の規模:大規模なアプリケーションにも使用可能か?
  • 連携製品・サービス:リポジトリ、通知先、CIとCDで別製品・サービスを使えるか?
  • CI/CD設定:設定の手段、柔軟性や使いやすさ
  • CI/CDタスクの実行場所:自分で作成できるか、柔軟に変更できるか
  • 情報量:使っている製品の情報・サポートを取得しやすいか?
  • リソース消費量:オンプレ設置の場合の必要リソース量はどの程度か?
  • 性能:各タスクでかかる時間を短くする手段がどの程度あるか?
  • 目的に合致しているか:特定の目的(GitOpsなど)がある場合それに特化した製品・サービスか?

絞り込み

たとえば、「オンプレにCI/CDツールを設置して、CIでコンテナ化したアプリケーションを作成し、k8sクラスタへのCDを実施したい」という場合を考えます。 この場合は、上記観点のうち「設置場所」「CI/CD対象の種類(のうち、コンテナとk8sのサポート具合)」に着目して、絞り込んでいくことになります。

いくつか代表的な製品・サービスを公式ページの情報などから分類してみましょう。

設置場所:オンプレミス型

コンテナサポートあり

コンテナサポートありのものとして、タスク実行場所にコンテナを使えるもの、アプリケーションのコンテナ化をしやすいもの、を選びます。

さらにその中でkubernetesに関する何等かの連携機能(コンテナ化したアプリケーションのデプロイをより楽にする仕組み等)があるかを調べてみました。 (各公式ページやドキュメントで調べておりますが、万が一、間違い・見逃しがあった場合、ご一報ください。)

なお誤解ないよう補足しておくと、「連携機能がある」というのは「より使いやすくしてくれるお助け機能がある」という意味です。連携機能がないからといって「kubernetesへのデプロイが使いにくい」ということではありません。

たとえば、自動車で衝突防止機能がないからといって、運転しづらいわけではありません。それと一緒で、あくまでプラスアルファの加点として、お考え下さい。

・コンテナサポートあり、さらにkubernetes連携機能あり

  • JenkinsX
  • Spinnaker
  • TeamCity
  • Tekton
  • Skaffold

・コンテナサポートあり

  • Jenkins
  • Concourse CI
  • Zuul

コンテナサポートなし

  • なし

タスク実行場所にコンテナが選べなかったり、コンテナに特化した便利な機能がないものは、流石に見つかりませんでした。

設置場所:サービス型

コンテナサポートあり

同様に、サービス型のほうでもkubernetes連携の機能について調べてみます。

・コンテナサポートあり、さらにkubernetes連携機能あり

  • Codefresh
  • CircleCI
  • Wercker
  • Azure DevOps
  • GCP CloudBuild

・コンテナサポートあり

  • AWS CodeBuild/CodeDeploy

コンテナサポートなし

  • なし

設置場所:両対応型(オンプレミス、サービス共にあり)

コンテナサポートあり

最後に、両対応型のほうもkubernetes連携の機能について調べてみます。

・コンテナサポートあり、さらにkubernetes連携機能あり

  • GitLab

・コンテナサポートあり

  • Drone
  • AppVeyor
  • TravisCI

コンテナサポートなし

  • なし

今時、コンテナがサポートされていないツールは、ほとんど無さそうですね。

ここまでで、以下の表のような情報が得られました。

分類オンプレサービス両対応
k8s連携機能あり JenkinsX
Spinnaker
TeamCity
Tekton
Skaffold
Codefresh
CircleCI
Wercker
Azure DevOps
GCP CloudBuild
GitLab
コンテナサポートあり Jenkins
Concourse CI
Zuul
AWS CodeBuild/CodeDeploy Drone
AppVeyor
TravisCI
コンテナサポートなし なし なし なし

「オンプレにCI/CDツールを設置して、CIでコンテナ化したアプリケーションを作成し、k8sクラスタへのCDを実施したい」が、もともとの要望でした。 なので、この中で「k8s連携機能あり」の行で、「オンプレ型」または「(オンプレとサービスの)両対応型」となっているものが第一候補になります。

それでもまだまだ数が多いので、たとえばオンプレへの構築を考えているのであれば「構築時の情報を検索したときの情報量」など、他の要素で絞ることになります。

多くの製品・サービスがあるので情報収集がそれなりに必要ですが、ここから先は他の観点で自分の求めるものがどれかを絞ることになります。また、CI/CDのうち一方にのみ強いツールの場合は組み合わせの検討も必要かもしれません。

CloudNative Days Tokyo 2019では、CI/CDツールについて選ぶ際の各観点について詳細を述べ、ここから先の絞り込みについて「このような場合には私はこう考えて選ぶ」という話をさせていただきます。

GitLab, Zuulのご紹介

上記でCIツール全体の話をしました。 ここから先は具体例として、GitLab, Zuulという2つのCI/CDツールについてご紹介いたします。

たくさん良いツールがあり、どれを紹介するか迷うところですが、以下の理由から、この2つのツールをおすすめのツールとして選びました。

  • GitLab : 守備範囲の広さ。無料であっても最初から機能的に充実しており、CI/CDを実施するうえで困ることが少ない。GUIで多くの設定が可能。またオンプレ/サービス版どちらでも使え、自社にあった使い方を選びやすい。
  • Zuul :互いに関係性を持つ複数のソフトウェアを開発する場合、特に利便性が高い。比較的新しいツールであり、まだご存知ない方も多いと思われるため、選択。利用形態はオンプレのみ。

Gitlab

GitLabは、GitLab Inc.が開発したGitリポジトリマネージャーです。

ですが、最近は単なるリポジトリに留まらず、公式ページでも 「A full DevOps tool」 と書かれているとおり、「DevOpsのためのツール全部入りのソフトウェア」となっています。非常に多機能であり、私も全部は把握しきれておりません。

GitLabの特徴は以下のような点です。

  • OSS版とエンタープライズ版があり、後者は有償だがより多くの機能やサポートが使える
  • Githubでできることがほとんどできる(脆弱性対策とかは無い)
  • オンプレにインストールしても利用できるし、クラウドサービス版も利用できる
  • WikiやGitLab pagesのようにドキュメント作成の機能も充実
  • グループによりリポジトリをまとめられる
  • リポジトリの公開範囲として、プライベート(外からも他のユーザからも見えない)、内部(外から見えないが他のユーザには見える)、パブリック(外から見える)と3種類から選べる。
  • CI/CDの利用がしやすい
  • Githubなど他リポジトリからのインポート可能
  • 「Bronze」、「Silver」、「Gold」など有償のプランではサポートを利用できる。ただし英語。

中でも以下のような点が良いと考えています。

  • これ1つでコンテナベースでの開発に必要なものがほとんど入っている
    • レジストリもあれば、RunnerによるCI/CDもできるし、Kubernetes連携もできる
  • CI/CDタスクの実行環境(executor)を自作でき、タグにより柔軟にタスクとexecutorを対応付けできる

UIなどで最初ちょっととっつきにくい箇所はありましたが、慣れてみると非常に便利です。 CloudNative Days Tokyo 2019では、このツールについて使用した事例などをご説明いたします。

余談ですが、GitLabを一度学習しておくと、Werckerなど他のツールの概念もよく分かるようになります。 学習を目的に、「とりあえずで使ってみる最初の1つ」としても、GitLabはよいと思います。

Zuul

ZuulはOpenStackコミュニティで、OpenStackのコードをテストするために開発されたCIツールです。

これまでは、単にコミュニティ内部で使われているツールという立ち位置でしたが、OpenStackFoundation は2018年5月、Zuulを独立したソフトウェアとしてホスティングすることに決めました。言ってみればOpenStack コミュニティの秘蔵っ子というところでしょうか。

Zuulは、以下のような特徴を持っています。

  • テスト実行のトリガーとなるシステムはGit, Github , Gerrit が選択可能。
  • 複数のアプリケーション(のリポジトリ)を試験対象にできる。
  • パイプラインをYAML、テストはAnsibleのplaybookとして記述する。
    • いずれもテキストファイルなのでGit等による管理がしやすい。
  • テストは、継承・オーバーライドのようなことが出来る。
  • コミット間の関係性を規定すれば、それを意識した順序で試験してくれる。
  • パイプラインやテストのファイルは、テスト対象リポジトリに含めることもできる。 これによって、ユーザー自身でテスト追加が可能となる。
    • 対象リポジトリはconfig-projects or untrusted-projectsに分けられており、迂闊に変更されては困るような基礎的設定はconfig-projectsに含める。
  • 試験ごとに仮想マシンやコンテナを作成して、そのクリーンな環境で試験を行う。

以上より、Zuulは以下のようなケースにはよく適合します。 出自を考えれば当たり前なのですが、いずれもOpenStackにあてはまる特徴です。

  • 試験対象ソフトウェアが多数存在しており、各々に、類似だが少しずつ異なる試験を行いたい。
  • 互いに依存性を持ったソフトウェアが、多数存在している。
  • 複数のプロジェクトの、各々の開発者自身に、CIのテスト内容を作成してほしい。

一方で、テスト対象のアプリケーションの種類が少ないケースでは、Zuulよりも、Jenkinsのような、GUIで手軽に設定できるツールのほうが効率的でしょう。

※Zuulは、テストの実施状況を閲覧できるWebUIは存在しますが、設定をGUIで編集する機能は(少なくとも現状は)存在していません。

CloudNative Days Tokyo 2019の発表では、Zuulのもう少し深い部分(アーキテクチャや、パイプラインの設定方法など)をご解説する予定です。

まとめ

アジャイル開発やGitを利用した分散開発の浸透、クラウドの普及など、今日IT業界の現場で求められるスピード感はますます加速しています。適切なCI/CDツールの導入は、効率と品質の両面で効果的です。

一方で、冒頭に述べたとおり適切なCI/CDツールツールの選定には知見が必要であり、(特にオンプレの場合)導入にあたっては、運用面も考慮する必要があります。組織内で複数のツールを調査・構築・運用していると、全体最適化が遠のくケースも有り得ます。

NTTテクノクロスでは、CI/CDの導入や刷新についてノウハウを有していますので、もしお悩みでしたら、ぜひお声掛けください。

ご相談いただくにあたっては、OSS製品について定額・回数制で質問できる、安価な定額制チケットサービスもご用意しております: image-20190701064447488.png

連載シリーズ
テクノロジーコラム
著者プロフィール
新倉雄樹
新倉雄樹