3.4. Jenkinsfile を使用したパイプラインの作成
本セクションでは、3scale toolbox を使用するカスタム Jenkinsfile
を新規に Groovy で記述するためのベストプラクティスについて説明します。
Red Hat では、Red Hat Integration リポジトリーで提供される サンプル Jenkins パイプライン をサポートしています。
このパイプラインに対して行った変更については、Red Hat による直接のサポートはありません。独自の環境用に作成したカスタムのパイプラインはサポート対象外です。本セクションは参照用途としてのみ提供されています。
前提条件
- 「サンプル Jenkins CI/CD パイプラインのデプロイ」
- API の OpenAPI 仕様ファイルを用意する。たとえば、Apicurio Studio を使用してこのファイルを生成できます。
手順
3scale toolbox を呼び出すためのユーティリティー関数を記述します。以下の例は、3scale toolbox を実行する Kubernetes ジョブを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Kubernetes オブジェクトテンプレート
提示しているこの関数は、Kubernetes オブジェクトテンプレートを使用して 3scale toolbox を実行するもので、必要に応じて調整できます。
- この関数は 3scale ツールボックスコマンドラインインターフェイス (CLI) 引数を設定し、結果の Kubernetes ジョブ定義を YAML ファイルに書き込みます。
- また、この関数は 3scale ツールボックスの以前の実行をクリーンアップします。
-
この関数は Kubernetes ジョブを作成し、待機します。待機時間は、Pod が
Created
からRunning
状態に移行するのに要する時間に一致するように、サーバー速度に合わせて調整することができます。ポーリングループを使用して、この手順を改善することもできます。 -
OpenAPI 仕様ファイルは、openapi という名前の
ConfigMap
から取得されます。表示されているソースコードの例を参照してください。 -
3scale 管理ポータルのホスト名とアクセストークンは、「3scale toolbox のインストールおよびアクセスの有効化」 のように
3scale-toolbox
という名前のシークレットから取得されます。 -
openapi
ConfigMap は、ステップ 3 のパイプラインによって作成されます。ただし、シークレットはパイプラインの外部で事前にプロビジョニングされています。このシークレットは、セキュリティーを強化するためにロールベースのアクセス制御 (RBAC) の対象となります。
Jenkins パイプラインステージで 3scale toolbox で使用するグローバル環境変数を定義します。以下に例を示します。
ホスト型 3scale
def targetSystemName = "saas-apikey-usecase" def targetInstance = "3scale-saas" def privateBaseURL = "http://echo-api.3scale.net" def testUserKey = "abcdef1234567890" def developerAccountId = "john"
def targetSystemName = "saas-apikey-usecase" def targetInstance = "3scale-saas" def privateBaseURL = "http://echo-api.3scale.net" def testUserKey = "abcdef1234567890" def developerAccountId = "john"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow オンプレミス型 3scale
Self-managed APIcast またはオンプレミス型 3scale のインストールを使用する場合、さらに 2 つの変数を宣言する必要があります。
def publicStagingBaseURL = "http://my-staging-api.example.test" def publicProductionBaseURL = "http://my-production-api.example.test"
def publicStagingBaseURL = "http://my-staging-api.example.test" def publicProductionBaseURL = "http://my-production-api.example.test"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 変数の説明は、以下のとおりです。
-
targetSystemName
: 作成されるサービスの名前 -
targetInstance
: この変数は、「3scale toolbox のインストールおよびアクセスの有効化」 で作成された 3scale リモートインスタンスの名前と一致します。 -
privateBaseURL
: API バックエンドのエンドポイントホスト -
testUserKey
: インテグレーションテストの実行に使用されるユーザー API キー。ここで示されているようにハードコーディングするか、ハッシュベースのメッセージ認証コード (HMAC) 関数からこれを生成できます。 -
developerAccountId
: テストアプリケーションが含まれるターゲットアカウントの識別子。 -
publicStagingBaseURL
: サービスのパブリックステージングベース URL。 -
publicProductionBaseURL
: サービスのパブリックプロダクションベース URL。
-
以下のように、OpenAPI 仕様ファイルを取得して OpenShift で ConfigMap としてプロビジョニングするパイプラインステージを追加します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 3scale toolbox を使用して API を 3scale にインポートするパイプラインステージを追加します。
ホスト型 3scale
stage("Import OpenAPI") { runToolbox([ "3scale", "import", "openapi", "-d", targetInstance, "/artifacts/swagger.json", "--override-private-base-url=${privateBaseURL}", "-t", targetSystemName ]) }
stage("Import OpenAPI") { runToolbox([ "3scale", "import", "openapi", "-d", targetInstance, "/artifacts/swagger.json", "--override-private-base-url=${privateBaseURL}", "-t", targetSystemName ]) }
Copy to Clipboard Copied! Toggle word wrap Toggle overflow オンプレミス型 3scale
Self-managed APIcast またはオンプレミス型 3scale のインストールを使用する場合、ステージング環境と実稼働環境の公開ベース URL のオプションも指定する必要あります。
stage("Import OpenAPI") { runToolbox([ "3scale", "import", "openapi", "-d", targetInstance, "/artifacts/swagger.json", "--override-private-base-url=${privateBaseURL}", "-t", targetSystemName, "--production-public-base-url=${publicProductionBaseURL}", "--staging-public-base-url=${publicStagingBaseURL}" ]) }
stage("Import OpenAPI") { runToolbox([ "3scale", "import", "openapi", "-d", targetInstance, "/artifacts/swagger.json", "--override-private-base-url=${privateBaseURL}", "-t", targetSystemName, "--production-public-base-url=${publicProductionBaseURL}", "--staging-public-base-url=${publicStagingBaseURL}" ]) }
Copy to Clipboard Copied! Toggle word wrap Toggle overflow toolbox を使用して 3scale のアプリケーションプランとアプリケーションを作成するパイプラインステージを追加します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ツールボックスを使用して継続的インテグレーションテストを実行するステージを追加します。Hosted 3scale インスタンスを使用する場合、ステージング環境用の公開 URL を抽出するためにプロキシー定義を取得する必要があります。それ以外の場合は、すでに定義されている
publicStagingBaseURL
変数を再利用できます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow toolbox を使用して API を実稼働環境にプロモートするステージを追加します。
stage("Promote to production") { runToolbox([ "3scale", "proxy", "promote", targetInstance, targetSystemName ]) }
stage("Promote to production") { runToolbox([ "3scale", "proxy", "promote", targetInstance, targetSystemName ]) }
Copy to Clipboard Copied! Toggle word wrap Toggle overflow