モバイル・アプリのバックエンドを OpenShift 4 にデプロイする Tekton パイプラインを構築する

OpenShift 4.3 on IBM Cloud がリリースされた今、新しい画期的な機能の数々についての話題が飛び交っています。私がとりわけ注目している機能の 1 つは、OpenShift Web コンソールで Tekton Pipeline のリソースを表示できるようになっていることです。Tekton リソースの動作状況を確認するには Tekton Dashboard が役立つことに変わりはありませんが、OpenShift 4 で導入されたこの新機能により、以下のスクリーン・キャプチャーに示されているように、ユーザー・インターフェース (UI) 内でパイプラインを確認できます。

Tekton パイプラインが表示された OpenShift Web コンソールのスクリーン・キャプチャー

Tekton の機能のいくつかを実証するために、このチュートリアルでは Example Loyalty というサンプルの顧客還元アプリケーションのインスタンスをデプロイします。このインスタンスを例に、「データ・プライバシーを重視した、顧客ロイヤルティー向けモバイル・アプリのバックエンド」コード・パターンでの手作業によるデプロイ・プロセスを、Tekton パイプラインに変換する方法を説明します。

このチュートリアルで取り上げるサンプルでは Red Hat® OpenShift® on IBM Cloud™ を利用します。

前提条件

このチュートリアルに従うには、以下の環境が必要です。

  • パイプラインをセットアップできるようにプロビジョニングされた Red Hat OpenShift on IBM Cloud クラスター。クラスターを作成する必要がある場合は、IBM Cloud Web コンソールまたは ibmcloud CLI を使用して作成できます。後者の方法を使用するとしたら、このチュートリアルが役立ちます。 : このチュートリアルで Cloud Pak for Applications を使用することはできません。ここでは空のクラスターが必要です。

  • kubectloc などの CLI。ここから入手できます。

  • このチュートリアルを開始する前に、メインのコード・パターンで説明しているいくつかのステップを実行する必要があります。「前提条件」と「デプロイ」のセクションを完了して、example-loyalty プロジェクト内でアプリ ID インスタンス、PostgreSQL データベース、必須の Kubernetes シークレットをセットアップしてください。

所要時間

前提条件を満たしていれば、パイプラインを実行するために必要な時間を含め、このチュートリアルは約 30 分で完了できます。

Example Loyality アプリについて

Example Loyalty は、アプリケーションのユーザーに見返りを与える方法を説明するためにセットアップされたサンプル・アプリです。このアプリは、参加者を登録して記念品を配布するようなカンファレンス (当時を覚えていますか?) で実装されたプロジェクトから生まれています。

Example Loyalty を示す図

このチュートリアルでパイプラインによってデプロイするのは、Example Loyalty のバックエンドです。バックエンドは複数のマイクロサービスで構成されています。具体的には、それぞれイベントとユーザーを追跡する 2 つの Java サービス、ユーザー・データを夜間に削除するサービス、Node.js フロントエンド、アプリのすべてを追跡する PostgresSQL インスタンスです。

パイプラインのセットアップ手順

まず始めに、Tekton パイプライン自体をインストールする必要があります。その上で、この演習に固有のパイプラインを実行するために必要なすべてのリソースを適用します。

1. ターゲットのクラスターを設定する

IBM Cloud アカウントにログインし、OpenShift クラスターの概要ページにナビゲートします。右上隅にある「OpenShift web console (OpenShift Web コンソール)」ボタンをクリックします。表示される Web コンソールで、右上隅にあるメニュー (メニューのラベルには、ログイン・ユーザーの e-メール・アドレスが示されます) をクリックし、「Copy Login Command (ログイン・コマンドをコピー)」を選択します。コピーされたコマンドをローカル・コンソール・ウィンドウに貼り付けます。このコマンドは以下のようになっているはずです。

$ oc login https://c100-e.us-east.containers.cloud.ibm.com:XXXXX --token=XXXXXXXXXXXXXXXXXXXXXXXXXX

2. Tekton をインストールする

次は、Tekton をインストールします。

$ kubectl apply --filename https://storage.googleapis.com/tekton-releases/pipeline/latest/release.notags.yaml

3. 新しいプロジェクトを作成する

ツールをアプリケーションから分離するために、新しいプロジェクトを作成しましょう。

$ oc new-project loyalty-infra

4. サービス・アカウントを作成する

ローカルの OpenShift レジストリー内にイメージを保管するための適切な権限がパイプラインに付与されるようにするには、サービス・アカウントを作成する必要があります。このチュートリアルでは、「pipeline」という名前のアカウントを作成します。

$ oc create serviceaccount pipeline
$ oc adm policy add-scc-to-user privileged -z pipeline
$ oc adm policy add-role-to-user edit -z pipeline
$ oc policy add-role-to-user edit system:serviceaccount:loyalty-infra:pipeline -n example-loyalty

最後のコマンドにより、サービス・アカウントに example-loyalty プロジェクトに対するアクセス権限が付与されます。このプロジェクトは、前提条件の一環としてすでに作成されているはずです。

5. タスクをインストールする

Tekton パイプラインは基本的に、一連の個別のタスクからなります。このチュートリアルで使用する一連のタスクは、一度にすべてインストールすることもできます。それには、メインのコード・パターン・リポジトリーのクローンを作成し、ターゲットとして pipelines/tasks フォルダーを設定します。

$ git clone https://github.com/IBM/loyalty.git
$ cd loyalty/pipeline
$ oc apply -f tasks

6. パイプラインを作成する

パイプラインのすべてのタスクは、パイプライン・ファイル (example-health-pipeline.yaml) によってリンクされます。このチュートリアルの例でのパイプラインは、コードをスキャンするタスク、コードをビルドしてイメージにするタスク、イメージをデプロイして公開するタスクからなります。

$ kubectl apply -f example-loyalty-pipeline.yaml

脅威テストの手順

今、コードをスキャンすると言いましたよね?このパイプラインを作成する演習を一歩進めて、脅威テストを導入しましょう。そのためにパイプラインに組み込むのは、SonarQube というアプリケーションです。SonarQube はコード・ベースを検査するオープンソース・ソフトウェアであり、さまざまな言語をサポートしています。SonarQube はバグとセキュリティーの脆弱性を報告できるだけでなく、コード・カバレッジや単体テストといった分野でも役立ちます。このチュートリアルでは SonarQube を使用してコードの脆弱性をテストします。

1. SonarQube のインスタンスをデプロイする

リポジトリー内に、SonarQube をデプロイするために必要なすべての設定が記述されているファイルがあります。このファイルの Deployment セクションに、SonarQube に必要なボリュームとマウント・パスのすべてがリストアップされています。さらに、ServiceRoute を使用して、アプリを一般公開できます。1 つのファイルにこれらすべての情報が含まれています。

$ oc apply -f sonarqube.yaml

2. PVC を作成する

永続ボリューム・クレームも必要です。これにより、パイプライン内のタスクが互いに共有する情報を書き込む場所を確保できます。

oc apply -f loyalty-pvc.yaml

3. パイプラインを実行する

脆弱性スキャナーが用意できたので、PipelineRun ファイルを使用して loyalty パイプラインを実行できます。

$ oc create -f loyalty-pipelinerun.yaml

コード・ベースの再スキャンや再デプロイが必要になったら、いつでもこのコマンドを実行するだけで対応できます。

結果

これまでの作業の成果を味わいましょう!SonarQube には独自の Web インターフェースがあります。このインターフェースにアクセスするには、OpenShift Web コンソール内で loyalty-infra プロジェクトにナビゲートします。左側にあるメニューから「Networking (ネットワーキング)」を選択し、次に「Routes (ルート)」を選択します。

loyalty_routes

SonarQube の URL を選択し、インストールの統計情報を確認します。

sonarqube_results

すべての項目に緑色のマークが示されています!つまりコード・べースに脆弱性はまったくないため、クリックスルーしてコード行の統計情報を確認できます。

sonar_loc

Routes (ルート)」ページに戻ると、新しくインストールされた Example Loyalty アプリのユーザー・インターフェースの URL も確認できます。loyalty-mobile-simulator-service のユーザー・インターフェースは次のようになっています。

simulator

まとめ

このチュートリアルで確認できたように、Tekton パイプラインは重要なワークロードを自動化できる、強力なツールです。イメージ化されたコード・ベースと同じクラスター内でパイプラインをホストする、このクラウド・ネイティブのアプローチによって、継続的デプロイメントをシームレスで手間のかからないプロセスにすることができます。

このサンプルで練習した後は、独自のインストール内でパイプラインを活用するためのアイデアを探ってください!