DUICUO

DevOps プラットフォーム オープンソース テクノロジー マップ

[[273733]]

導入:

開発プロセスにおいて、DevOpsプラットフォームはJira、GitLab、Jenkinsといった多くのサードパーティ製ツールを統合し、継続的インテグレーションプロセスを改善します。ツールの統合は実際には多くの細部に注意を払う必要がある面倒な作業です。では、どのように行うのでしょうか?この記事では、これらのツールをDevOpsプラットフォームに統合する方法を紹介します。

目次:

1. DevOpsプラットフォームにおけるサードパーティサービス統合の概要

2. DevOpsプラットフォームのサードパーティサービス統合アプローチ

3. DevOpsプラットフォームにおけるサードパーティサービス統合の例

1. DevOpsプラットフォームにおけるサードパーティサービス統合の概要

注: DevOps プラットフォームに統合されているすべてのサードパーティ サービスに関する情報は、次の画像に示すように、プラットフォームによって管理されるサービス統合ページに保存されます。

1. メディアサーバー

DevOpsプラットフォームは、メディアサーバーの種類としてNexusを使用します。Nexusは強力なMavenリポジトリマネージャーであり、ローカル内部リポジトリのメンテナンスと外部リポジトリへのアクセスを大幅に簡素化します。

2. エンジンを組み立てる

DevOpsプラットフォームは、ビルドエンジンとしてJenkinsを使用しています。Jenkinsはオープンソースソフトウェアプロジェクトであり、Javaベースで開発された継続的インテグレーションツールで、反復的なタスクの監視に使用されます。Jenkinsは、継続的なソフトウェアインテグレーションを可能にする、オープンで使いやすいソフトウェアプラットフォームを提供することを目指しています。

JenkinsはDevOpsプラットフォームの重要なコンポーネントです。CI/CDはJenkinsを使用して実装されます。ユーザーはビルド定義を作成し、Mavenビルドなどの必要なタスクを設定し、ビルドタスクの実行を定期的にスケジュールまたはトリガーすることで、面倒なビルドタスクからユーザーを解放できます。

3. デプロイメントエンジン

DevOps プラットフォームでは、デプロイメント エンジンとビルド エンジンの両方に Jenkins を使用します。

4. 品質分析サーバー

DevOpsプラットフォームは、品質分析サーバーとしてSonarQubeを使用しています。SonarQubeは、ソースコードの品質管理に使用されるオープンソースのコード品質管理プラットフォームです。プラグインを通じて、Java、C#、C/C++、PL/SQL、Cobol、JavaScript、Groovyなど、20以上のプログラミング言語のコード品質管理と検出をサポートします。

5. プロジェクト管理サーバー

DevOpsプラットフォームにおけるプロジェクト管理には、JiraとZENTAOという2つの専門ツールを使用しています。これら2つのツールは、DevOpsプラットフォームの3つの主要モジュール(プロジェクト管理、概要、タスク)をサポートしています。ユーザーはDevOpsプラットフォーム上で、プロジェクトの基本情報を簡単に確認・編集したり、新しいイテレーションを作成したり、割り当てられたバグや要件を確認したりできるため、作業効率が向上します。

JIRA は、Atlassian が開発したプロジェクトおよびタスク追跡ツールであり、欠陥追跡、顧客サービス、要件収集、プロセス承認、タスク追跡、プロジェクト追跡、アジャイル管理などの分野で広く使用されています。

ZENTAOは、R&Dプロジェクト管理に特化した国産オープンソースのプロジェクト管理ソフトウェアです。要件管理、タスク管理、バグ管理、欠陥管理、ユースケース管理、リリース計画などの機能を内蔵し、包括的なソフトウェアライフサイクル管理を実現します。

6. コンテナクラウドサーバー

DevOps プラットフォームに統合されるコンテナ クラウド サーバーの種類は Kubernetes です。

コンテナ クラウドは、コンテナをリソースの分割とスケジュールの基本単位として使用し、ソフトウェア ランタイム環境全体をカプセル化し、開発者とシステム管理者に分散アプリケーションを構築、展開、実行するためのプラットフォームを提供します。

7. ミラーサーバー

DevOps に統合されているイメージ サーバー タイプは Harbor です。

Harborは、Dockerイメージを保存・配布するためのエンタープライズグレードのレジストリサーバーです。セキュリティ、アイデンティティ、管理といったエンタープライズに不可欠な機能を追加することで、オープンソースのDocker Distributionを拡張します。エンタープライズグレードのプライベートレジストリサーバーであるHarborは、パフォーマンスとセキュリティを向上させ、レジストリを使用して環境を構築・実行するユーザーのイメージ転送効率を向上させます。Harborは複数のレジストリノード間でのイメージリソースのレプリケーションをサポートし、すべてのイメージをプライベートレジストリに保存することで、データと知的財産を社内ネットワーク内で管理します。さらに、Harborはユーザー管理、アクセス制御、アクティビティ監査などの高度なセキュリティ機能も提供します。

8. コードサーバー

DevOpsでは、プラットフォームのコードモジュールをサポートするコード管理ツールとして、GitLab、GitHub、SVNを使用します。ユーザーのプロジェクト関連コードはこれらの3つのツールに保存され、DevOpsプラットフォーム上の対応するプロジェクトにリンクされるため、ユーザーはコードを簡単に閲覧・比較でき、その後のCI/CD実装にも便利です。

GitLabは、GitLab Inc.が開発し、MITライセンスに基づいてライセンスされているWebベースのGitリポジトリ管理ツールです。Wiki機能と課題追跡機能も備えています。GitLabはGitをコード管理ツールとして利用し、その上にWebサービスを構築します。

GitHubは、オープンソースおよびプライベートソフトウェアプロジェクト向けのホスティングプラットフォームです。バージョン管理システムとしてGitのみをサポートしているため、GitHubという名前が付けられています。

SVNはSubversionの略称で、オープンソースのバージョン管理システムです。ブランチ管理システムの効率的な管理を活用し、簡単に言えば、複数の人が同じプロジェクトを共同で開発し、リソースを共有し、最終的に集中管理を実現するために使用されます。

9. ドキュメントサーバー

Confluence サーバーの存在により、プロジェクトの制作プロセス全体を通じてドキュメントの集中保存場所が提供され、管理が容易になります。

Confluenceはチームのためのコラボレーション環境を提供します。チームメンバーはそれぞれの強みを活かしながら、共同でドキュメントを作成し、プロジェクトを管理します。これにより、異なるチーム、部門、個人間の情報のサイロ化が解消され、組織全体でのリソース共有が真に可能になります。

2. DevOpsプラットフォームのサードパーティサービス統合アプローチ

1. データエンティティの対応

DevOpsプラットフォームには、作業項目テンプレートや反復テンプレートなど、独自のテンプレートがあります。そのため、サードパーティサービスを統合する場合、取得したデータを表示する前にDevOpsテンプレートにマッピングする必要があります。例えば、プロジェクト管理ツールとしてZENTAOを統合する場合、DevOpsプラットフォームにはバグ、ストーリー、タスクの3つのテーブルがありますが、DevOpsプラットフォームには作業項目という1つのテーブルしかありません。そのため、3つのテーブルのデータを1つのテーブルに変換する方法を見つける必要があります。このプロセスでは、必然的に概念間の非互換性の問題が発生します。解決策としては、類似の概念に置き換えるか、冗長な概念を削除するかのいずれかです。つまり、DevOpsプラットフォームのテンプレートを主な参照として使用する必要があります。

2. APIインターフェース呼び出し

サードパーティサービスが提供するAPIインターフェースは、操作が難しかったりエラーが発生したりする場合があります。そのような場合は、アプローチを変えてAPIインターフェースの使用をやめ、データを直接操作する必要があります。これは良い解決策となるかもしれません。

GitLabを例に挙げましょう。GitLabは現在までに12バージョンをリリースしており、使用されているAPIバージョンはすでにv4です。GitLab 8のv3バージョンを使用してGitLab 12のインターフェースを呼び出すと、問題が発生します。

3. DevOpsプラットフォームにおけるサードパーティサービス統合の例

1. GitLabとの統合

DevOpsプラットフォームとGitLabを統合するプロセスは、上記の3つのステップに大別できます。最初のステップは、GitLabのAPIインターフェースを理解し、認証方法がトークンやセッションなどであるかどうかを確認することです。GitLabのインターフェースの多くは必要ではありません。この時点で、DevOpsテンプレートに必要なインターフェースと不要なインターフェースを確認し、必要なインターフェースを整理し、QueryParamとBodyの形式を調べて、インターフェースが正しく呼び出されるかどうかを確認する必要があります。インターフェースが機能し、必要なデータを取得できたものの、データ形式がDevOpsテンプレートと一致しない場合は、最終ステップに進み、取得したデータをDevOpsテンプレートにマッピングする必要があります。これでプロセスは完了です。

1) GitLab APIインターフェースを調べる

GitLabのウェブサイトで関連ドキュメントを直接参照できます。公式ドキュメントによると、GitLab 9.0以降ではAPI v4が推奨バージョンです。2017年8月22日にリリースされたGitLab 9.5はAPI v3をサポートしていません。API v3はGitLab 11.0で削除されたため、GitLabはバージョン11以降、API v3をサポートしなくなりました。したがって、GitLabを統合する際には、両方のバージョンのAPIの統合を検討する必要があります。

2) DevOps プラットフォームに必要なインターフェースをフィルタリングします。

GitLabをDevOpsプラットフォームに統合するには、コードリポジトリの作成、削除、変更、クエリ、ブランチとタグの作成、削除、変更、クエリなど、GitLabのインターフェースの一部を使用するだけで済みます。不要なインターフェースは除外され、ブランチクエリインターフェースが例として使用されます。

ご覧のとおり、このリクエストの認証方法はトークンを使用して実装されており、返されるデータ形式は図に示されています。

DevOps コード ブランチ テンプレートは以下の画像に示すように、別のマッピングが必要です。

3) 返されたデータを DevOps テンプレートに入力して表示します。

これは、DevOpsプラットフォーム上のGitLabコードリポジトリの統合成功後のインターフェースです。ユーザーはここで、コードリポジトリのファイルコンテンツ、ブランチ、タグを確認できるほか、異なるブランチやタグ間の差異を比較することもできます。

2. ZENTAOとの統合

ZENTAOのインターフェース設計は独特であるため、APIを用いた統合において様々な問題が発生しました。そのため、サービス統合を実現するために、ZENTAOデータベースを直接操作する方法が採用されました。大まかな手順は、まずZENTAOのテーブル構造を調査し、次に対応するDevOpsテーブルと比較し、次にDevOpsサーバーにマルチデータソースを実装し、ZENTAOデータベースから直接データを読み取り、DevOpsテンプレートにマッピングしてユーザーに表示するというものでした。

1) ZENTAO テーブル構造を調査し、ZENTAO テーブル データを DevOps テンプレートにマッピングします。

ZENTAO の zt_story テーブルを例にとると、次の図は ZENTAO の要件テーブルの構造を示しています。

以下の画像は DevOps 作業項目テンプレートです。

DevOpsプラットフォーム内でZENTAOの要件を表示するには、データマッピングが必要です。統合にあたっては、まずDevOpsプラットフォームのサーバー側マルチデータソース実装を設計する必要があります。これには、ZENTAO DAO実装の定義が含まれます。同時に、ユーザーがZENTAOデータベースを構成する必要があります。ソリューション1:ユーザーは構成ファイルでZENTAOデータベースのアドレスとユーザー名/パスワードを設定できます。ソリューション2:ユーザーはサービス統合ポイントでZENTAOデータベース情報を設定できます。これらの2つの方法のDAOレイヤー実装は異なります。以下は、ソリューション1のZENTAO DAO実装を示しています。

2) データ表示

統合に成功したタスクモジュールが画像に表示されています。ユーザーはこのインターフェースで、タスク、要件、バグの追加、削除、変更、照会を行うことができます。

4. まとめ

サードパーティツールを統合する場合、主にAPIの呼び出し方法と、返された結果の表示方法に重点が置かれます。データベース統合は、API呼び出しが失敗した場合にのみ検討されます。ただし、データベース統合には細心の注意が必要です。関連テーブルが存在する場合、サードパーティツールの一部の機能が使用できなくなる可能性があります。また、APIアクセスが失敗した場合は、まずリクエストボディがAPI仕様に準拠していることを確認してください。ボディが正しい場合は、APIバージョンがサードパーティツールのバージョンと一致しているかどうかを確認してください。つまり、統合は難しい作業ではありません。明確なアプローチと忍耐があれば、必ず成功する可能性があります。