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 toolbox CLI 引数を設定し、結果の Kubernetes ジョブ定義を YAML ファイルに記述し、toolbox の以前の実行をクリーンアップし、Kubernetes ジョブを作成して、待機します。
-
待機時間は、Pod が
Created
からRunning
状態に移行するのに要する時間に一致するように、サーバー速度に合わせて調整することができます。このステップは、ポーリングループを使用して調整できます。 -
OpenAPI 仕様ファイルは、
openapi
というConfigMap
から取得されます。 -
3scale 管理ポータルのホスト名とアクセストークンは、「3scale toolbox のインストールおよびアクセスの有効化」 のように
3scale-toolbox
という名前のシークレットから取得されます。 -
ConfigMap
は、ステップ 3 でパイプラインによって作成されます。ただし、シークレットはすでにパイプライン外にプロビジョニングされており、セキュリティーを強化するロールベースのアクセス制御 (RBAC) の対象です。
-
待機時間は、Pod が
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
: テストアプリケーションが作成されるターゲットアカウントの ID -
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 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