DevOpsにおけるCI/CDとは?Oracle Cloud Infrastructure DevOpsの紹介Oracle Cloud Infrastructure DevOps (以下、OCI DevOps)は、OCI上の各種サービスを利用してCI/CDを実現するためのサービスです。
今回はDevOps、CI/CDとは何かという用語のおさらいから、OCI DevOpsの主な機能の紹介までしていきます。
用語のおさらい
OCI DevOpsに係わる用語としてCI、CD、DevOpsが挙げられます。
これらの用語は書籍やWebサイトごとにニュアンスや示している範囲が異なる場合があるので、要件定義や設計の際には、相手が言っているCI/CD・DevOpsが何を指しているのかしっかりと認識を合わせられるように注意が必要です。
それぞれの用語についておさらいしていきましょう。
CI
CIは Continuous Integration(継続的インテグレーション)の略語です。
変更したコードをすぐさま動く状態のシステムへ統合(Integration)する処理が、継続的に稼働している仕組みのことをCIといいます。
具体的には、開発の際にバージョン管理システム(一般的にはGit)へ変更をコミットしたタイミングで、都度、ビルド&テストが行われる仕組みです。
※ここでいうテストとは自動化した単体/結合テストのこと
これにより、変更したコードに問題があった場合、すぐに開発者へフィードバック&問題の早期発見と対応をすることができるため、開発の効率化と品質の向上が実現できます。
CD
CDは Continuous Delivery(継続的デリバリー)&Continuous Deployment(継続的デプロイメント)の略語です。
CDはCIの後に続くプロセスで、「継続的デリバリー」はCIで自動ビルド&テストが完了したプログラムをいつでも本番環境へデプロイできる状態にすること、「継続的デプロイメント」はそこからさらに自動的に本番環境へのデプロイまでするところまでを言います。
このように同じCDでも、厳密には継続的デリバリーと継続的デプロイメントは区別されていますが、これらは外から見る分には区別ができないこともあってか両方まとめてCDといわれることが多く、あまり区別はされていないのが実情です。
要件定義や設計の際にはCDという用語がどちらを指しているのか、またどちらが望ましいのかを認識合わせするように注意しましょう。
なお、ここまでのCIからCDまでの一連を統合してCI/CDと表現されます。
DevOps
DevOpsは Development+Operations(開発+運用)を組み合わせた造語です。
DevOpsは説明が難しい概念です。
例えばすでに安定稼働しているシステムがあったとして、開発チームが「機能を追加・改善したい」と考えていても、運用チームは「安定稼働のために手を入れないで欲しい」と考えているかもしれません。
これは立場の違いによる意見であり、どちらのチームも目的は共通して「より良い体験をユーザーへ提供する」ことに違いはありません。
つまり「安定稼働させながら迅速に機能の追加や改善を行う」ことが実現できれば、両方のチームが抱える不安や懸念点を解消しつつ、本来の目的を果たすことができると言えます。
この 、「安定稼働させながら迅速に機能の追加や改善を行う」 環境を実現する状態・仕組み・取り組みが、DevOpsです。
前述のCI/CDもDevOpsに含まれますが、組織やコミュニケーションといった対人の概念もDevOpsに含まれています。
例えば、システムに対しての課題の共有と議論ができる場と仕組みのようなツールが整っていることに加えて、お互いのチームやチームメンバーを尊重し、共通の目的のために柔軟に対応するといった、目に見える仕組み以外のマインド的な部分も含まれます。
このようにDevOpsには様々な観点と実現のための手法が含まれており、一言で説明することが難しいため、巷で色々な説明があふれているのかと思います。
あえて一言でいってしまうと、「より効率的に・無駄なく・快適に開発と運用を行う環境を整えていくこと」がDevOpsだと言えるのではないでしょうか。
OCI DevOpsの機能
用語のおさらいが済んだところで、ここからは本題となるOCI DevOpsの機能について紹介していきます。
OCI DevOps(Oracle Cloud Infrastructure)は、その名の通りOCIで提供されているDevOpsに係わるサービスです。
主な機能と全体像
OCI DevOpsの主な機能としては大まかに以下が挙げられます。
- Git Pushをトリガーとした自動ビルド&テストの実行
- 任意のタイミング、または自動でサーバへデプロイ
- ビルド時や承認時の通知
細かい話になりますが、少なくとも現時点では課題管理等の組織的なDevOpsの助けとなるような機能があるわけではないので、あくまで「DevOpsを実現するためのCI/CD環境を構築するツール」になります。
関連するOCIサービス
OCI DevOpsと関連する主要なサービスを紹介します。(各サービスをつなぐネットワークやユーザー・ポリシー関連のサービスを除く)
サービス名 | 役割 |
Oracle Cloud Infrastructure Compute | アプリケーションが稼働するサーバ |
Oracle Cloud Infrastructure Flexible Network Load Balancer | アプリケーションへのトラフィック制御 |
Oracle Container Engine for Kubernetes(OKE) | Kubernetesクラスタの管理 |
Oracle Functions | サーバレスアプリケーションでのプラットフォーム |
Oracle Cloud Infrastructure Registry(OCIR)※1 | コンテナイメージを格納するレジストリ |
Oracle Cloud Infrastructure Artifact Registry | ビルド時の定義ファイルやビルド成果物等を格納する汎用的なレジストリ |
※1…Container Registryといわれることもある
ビルドパイプラインでCI環境を構築
CIに当たる部分はビルドパイプラインという機能で定義することができます。
パイプラインとは一連の処理をまとめたものです。
例えば、一般的なビルドパイプラインでの例として以下のような一連の処理を定義することができます。
- ソースからビルド
- テストを実行
- アーティファクト(ビルド成果物)の保存
- デプロイメントのトリガー
ビルドおよびテストの際には、事前にArtifact Registryに格納してOCI DevOpsに紐づけたビルド仕様ファイル(yamlファイル)の定義に則って、一連の処理を行います。
アーティファクトの保存では、ビルドしたプログラム等の成果物をOCI Artifact Registryに格納します。
最後のデプロイメントのトリガーでは、ビルドが正常終了したらそのまま次に実行したいデプロイメントパイプラインを定義することができます。
■ビルドはどの環境で行われる?
ビルドはビルドパイプライン内で選択した「ビルドランナーシェイプ」でビルドのたびインスタンスが立てられて行われます。 現時点でビルドランナーシェイプでは、Oracle Linux 7のイメージのみが選択可能で、OCPUとメモリーは任意に変更可能です。 また、このイメージではJava、Git、Apache Maven等のランタイムは標準で使えるようになっています。
デプロイメントパイプラインでCD環境を構築
続いてCDに当たるデプロイメントパイプラインについてです。
デプロイメントパイプラインの流れとしては以下のようなものが考えられます。
- 承認
- デプロイ
承認とは、人間による手動での承認がされるまで、パイプラインの処理をそこで一時停止する、という定義です。
ユーザーからの承認が、設定した承認人数に達した場合に次のパイプライン処理へ進みます。(承認者がDevOpsプロジェクトへアクセスできる必要があります)
デプロイについて上記では一言で書きましたが、実際には様々な手法でのデプロイを定義することができます。
例えば複数のComputeインスタンスで冗長化がされたアプリケーションに対してデプロイする場合には、以下のような選択肢が用意されています。
- ローリングデプロイ(ローリングアップデート)
- ブルーグリーンデプロイ
- カナリアリリース
Computeインスタンス以外では、OKE(OCIのマネージドKubernetesサービス)へのデプロイであれば通常のマニフェスト適用以外に、Helmチャートのデプロイにも対応。その他Functions(OCIのFaaSサービス)に対してのデプロイも可能です。
ここではシンプルに承認とデプロイをするだけの例を紹介しましたが、デプロイメントパイプラインではその他にもLBのトラフィック制御やサーバでの任意のシェルコマンドの実行等、デプロイ時に行う様々なアクションを定義することができます。
ビルドソースとなるGitリポジトリ
OCI DevOpsではプロジェクト内にGitリポジトリを持つことができます。
ビルド時にソースとなるGitリポジトリには、このOCI DevOpsのGitリポジトリを使うこともできますが、それ以外にもいくつかのサービスから選択することが可能です。
- OCI DevOpsプロジェクトが持つコードリポジトリ
- GitHub
- GitLab(SaaS版)
- GitLab(Self-Managed版)
- Bitbucket Cloud
- Bitbucket Server
- Oracle Visual Builder Studio
OCI DevOpsの利用料
OCI DevOpsサービス自体には利用料は発生しません。
OCI DevOpsで使われる関連サービス(Computeやストレージ等)に対して、通常の個別サービス利用時と同様の料金が発生します。
このため、すでに構築済みのサーバについても気軽に低コストでCI/CD環境の構築をすることができます。
もちろんビルドマシンやストレージ等で少しは課金が発生しますが、まずはお試しで触ってみるのも良いのではないでしょうか。
おわりに
OCI DevOpsの基本的な役割と機能についての紹介でした。
OCI DevOpsは、OCI上で完結しているOCIネイティブなシステムに対して非常に簡単に導入することができるため、新規構築時以外に既存の運用環境を改善するためにも取り入れてみてはいかがでしょうか。
私もまだOCI DevOpsが提供している全ての機能を触ることができたわけではありませんが、承認処理や通知タイミングのカスタマイズができない等、運用周りで一部まだ手が回っていない機能もあるのかなと感じています。
しかし、OCI DevOpsサービスは2021年末にCI/CDの提供が始まり、2022年から現在に至るまで頻繁に様々な機能の追加とアップデートが行われています。
今後のアップデートに期待しつつ積極的に活用していきたいと思います。
Oracle Cloudに関するお困りごとはシステムエグゼまでお問い合わせください。
- カテゴリ:
- OCI基礎知識