こんにちは。日本ヒューレットパッカードのオープンソース、Linuxテクノロジーエバンジェリストの古賀政純です。前回の記事では、HPEの開発部門が採用しているDockerイメージの管理手法について紹介しました。今回は、HPEの開発部門におけるDockerを使った「継続的インテグレーション/継続的デリバリ(CI/CD)」基盤について紹介します。
Jenkinsの採用
HPE社内に設置されたソフトウェア開発基盤のシステム構成では、徹底的なオープンソースの活用を図っています。新型のブレードサーバには、アプリケーションのビルド、実行、リリースなどの開発作業を行うためのDockerエンジンが稼働します。Dockerエンジンの上では、以前の連載記事でも紹介したCI/CDと呼ばれる開発手法を実現するソフトウェアが稼働します。
CI(継続的インテグレーション)において、開発者が頻繁に変更するソフトウェアのソースコード(設計図)は、中央集権的なリポジトリ(ソースコードそのものの保管庫であり、バージョン管理などをする場所)にアップロード(マージ)され、そのたびにビルドやテストが実行されます。ソフトウェアのインテグレーション作業は、従来に比べると短い期間に何度も繰り返されます。これにより、インテグレーションに伴う不具合箇所の修正が迅速になり、結果的に開発工数の短縮が期待できます。
一方、CD(継続的デリバリ)は、CIに加えてソフトウェアのソースコードの変更とビルドを行った後、テスト環境や本番前のステージング環境に配備し、テストを実施します。
HPEでは、CI/CD向けのオープンソースソフトウェアに「Jenkins」を採用しています。Jenkinsは、CI/CDを行うための統合ソフトウェアツールです。大規模なコードの開発においても、変更したコードをすぐにテストし、レポートするといった機能があります。Jenkinsのおかげで、開発者はコードの不具合を迅速に発見、解決し、ビルドやテストの作業を大幅に自動化できます。
CI/CDモデルの実装目的は、アプリケーション開発速度の劇的な向上です。従来、HPEにおいて、主要なアプリケーションの新バージョンのリリースサイクルは、1年に数回程度でしたが、現在のDocker基盤では、新バージョンのソフトウェアをリリースしてから数分以内で実稼働テストを行えるようになっています。これにより、ソフトウェアのリリースから実稼働までに掛かる遅延を大幅に改善し、節約できた時間を使って開発者が余裕を持ってコーディングできるようになり、結果的にソフトウェアの品質向上に大きく貢献しています。
図1.一般的なCI/CDの構成要素
Docker環境におけるソフトウェアリポジトリと開発業務
HPEのソフトウェア開発部門が、Docker環境においてどのような作業手順で開発業務を進めているのかを簡単に紹介します。HPEの開発部門では、まずテスト用の新しいコードを「Git/Gerritゲートウェイ」と呼ばれるマシンに送信します。Gerritは、コードレビューを行うウェブベースのオープンソースソフトウェアであり、コードのレビュー作業を素早く行えるのが特徴です。このテスト用のコードは通常、複数の開発チームによって開発された新機能や追加モジュールなどで構成されています。
Git/Gerritゲートウェイは、ソフトウェアのリリース管理と承認サービスを提供します。新しいコードがGit/Gerritゲートウェイに登録(ここでは、コードの登録のことをコミットと言います)されると、コンプライアンスのチェック処理が行われます。コンプライアンスチェックを通過させ、無事承認されれば、次の処理に進むことができます。この時点で、コンプライアンスチェックを通過できず否認された場合、そのコードは製品を形成するモジュールとして構成することはできません。
HPE社内で規定するコンプライアンスに準拠し、承認されたコードのみがJenkinsサーバに送信され、自動化機能によってジョブが開始されます。Jenkinsサーバ上のコードは、Sonatypeのパッケージリポジトリ管理ソフトウェア「Nexus」が稼働するサーバに登録されます。登録されたコードは、複数の開発者の間で共有、管理されます。また、ソフトウェア製品本体に組み込めますので、Dockerコンテナ上でビルドされ、コードの変更・追加・削除、機能テストなどに使用されます。最終的には、ソフトウェア製品のイメージファイル(Open Virtual Appliance、通称:OVA形式ファイル)が作成され、別途、テストチームによって製品の品質分析が行われます。
図2.HPE開発部門におけるDockerを使ったCI/CD環境