Red Hat Developer Hub でのプラグインのインストールと表示
概要
第1章 Red Hat Developer Hub での動的プラグインのインストール リンクのコピーリンクがクリップボードにコピーされました!
動的プラグインのサポートは、バックエンドプラグインマネージャーパッケージに基づいています。このパッケージは、設定されたルートディレクトリー (app-config.yaml ファイルの dynamicPlugins.rootDirectory) で動的プラグインパッケージをスキャンし、動的にロードするサービスです。
Red Hat Developer Hub に事前にインストールされている動的プラグインを使用することも、パブリック NPM レジストリーから外部動的プラグインをインストールすることもできます。
1.1. Red Hat Developer Hub Operator を使用した動的プラグインのインストール リンクのコピーリンクがクリップボードにコピーされました!
動的プラグインの設定は、Backstage カスタムリソース (CR) が参照できる ConfigMap オブジェクトに保存できます。
pluginConfig フィールドが環境変数を参照する場合は、<my_product_secrets> シークレットで変数を定義する必要があります。
手順
- OpenShift Container Platform Web コンソールから、ConfigMaps タブを選択します。
- Create ConfigMap をクリックします。
Create ConfigMap ページで、Configure via の YAML view オプションを選択し、必要に応じてファイルを編集します。
GitHub 動的プラグインを使用した
ConfigMapオブジェクトの例kind: ConfigMap apiVersion: v1 metadata: name: dynamic-plugins-rhdh data: dynamic-plugins.yaml: | includes: - dynamic-plugins.default.yaml plugins: - package: './dynamic-plugins/dist/backstage-plugin-catalog-backend-module-github-dynamic' disabled: false pluginConfig: catalog: providers: github: organization: "${GITHUB_ORG}" schedule: frequency: { minutes: 1 } timeout: { minutes: 1 } initialDelay: { seconds: 100 }- Create をクリックします。
- Topology ビューに移動します。
使用する Red Hat Developer Hub インスタンスのオーバーフローメニューをクリックし、Edit Backstage を選択して、Red Hat Developer Hub インスタンスの YAML ビューを読み込みます。
dynamicPluginsConfigMapNameフィールドをBackstageCR に追加します。以下に例を示します。apiVersion: rhdh.redhat.com/v1alpha3 kind: Backstage metadata: name: my-rhdh spec: application: # ... dynamicPluginsConfigMapName: dynamic-plugins-rhdh # ...- Save をクリックします。
- Topology ビューに戻り、Red Hat Developer Hub Pod が起動するまで待ちます。
- Open URL アイコンをクリックして、新しい設定変更を適用した Red Hat Developer Hub プラットフォームの使用を開始します。
検証
Red Hat Developer Hub のルート URL に
/api/dynamic-plugins-info/loaded-pluginsを追加し、プラグインのリストをチェックして、動的プラグイン設定がロードされていることを確認します。プラグインの例リスト
[ { "name": "backstage-plugin-catalog-backend-module-github-dynamic", "version": "0.5.2", "platform": "node", "role": "backend-plugin-module" }, { "name": "backstage-plugin-techdocs", "version": "1.10.0", "role": "frontend-plugin", "platform": "web" }, { "name": "backstage-plugin-techdocs-backend-dynamic", "version": "1.9.5", "platform": "node", "role": "backend-plugin" }, ]
1.2. Helm チャートを使用して動的プラグインのインストール リンクのコピーリンクがクリップボードにコピーされました!
柔軟なインストール方法である Helm チャートを使用して、Developer Hub インスタンスをデプロイできます。Helm chart を使用すると、コードを再コンパイルしたりコンテナーを再ビルドしたりすることなく、動的プラグインを Developer Hub インスタンスにサイドロードできます。
Helm を使用して Developer Hub に動的プラグインをインストールするには、Helm チャートに次の global.dynamic パラメーターを追加します。
plugins: インストールを目的とした動的プラグインのリスト。デフォルトでは、リストは空です。プラグインのリストには次のフィールドを入力できます。-
package: インストールする動的プラグインパッケージのパッケージ仕様。パッケージは、ローカルまたは外部の動的プラグインのインストールに使用できます。ローカルインストールの場合は、動的プラグインを含むローカルフォルダーへのパスを使用します。外部インストールの場合は、パブリック NPM リポジトリーのパッケージ仕様を使用します。 -
integrity(外部パッケージの場合に必要): パッケージ固有の<alg>-<digest>形式の整合性チェックサム。サポートされるアルゴリズムは、sha256、sha384、sha512です。 -
pluginConfig: プラグイン固有のapp-config.yamlYAML フラグメント (オプション)。詳細は、プラグインの設定を参照してください。 -
disabled:trueに設定すると、動的プラグインが無効になります。デフォルトはfalseです。
-
-
includes: 同じ構文を使用する YAML ファイルのリスト。
includes ファイル内の plugins リストは、main Helm values の plugins リストとマージされます。プラグインパッケージが両方の plugins リストに記載されている場合は、main Helm values の plugins フィールドが includes ファイルの plugins フィールドをオーバーライドします。デフォルト設定には、dynamic-plugins.default.yaml ファイルが含まれています。このファイルには、デフォルトで有効か無効かに関係なく、Developer Hub に事前にインストールされているすべての動的プラグインが含まれます。
1.2.1. 動的プラグインインストール用の Helm chart 設定の例 リンクのコピーリンクがクリップボードにコピーされました!
次の例は、特定の種類の動的プラグインインストール用に Helm chart を設定する方法を示しています。
外部プラグインに特定の設定が必要な場合に、ローカルプラグインと外部プラグインを設定する
global:
dynamic:
plugins:
- package: <alocal package-spec used by npm pack>
- package: <external package-spec used by npm pack>
integrity: sha512-<some hash>
pluginConfig: ...
含まれるファイルからプラグインを無効にする
global:
dynamic:
includes:
- dynamic-plugins.default.yaml
plugins:
- package: <some imported plugins listed in dynamic-plugins.default.yaml>
disabled: true
含まれるファイルからプラグインを有効にする
global:
dynamic:
includes:
- dynamic-plugins.default.yaml
plugins:
- package: <some imported plugins listed in dynamic-plugins.custom.yaml>
disabled: false
含まれるファイルで無効になっているプラグインを有効にする
global:
dynamic:
includes:
- dynamic-plugins.default.yaml
plugins:
- package: <some imported plugins listed in dynamic-plugins.custom.yaml>
disabled: false
1.3. エアギャップ環境での動的プラグインのインストール リンクのコピーリンクがクリップボードにコピーされました!
カスタム NPM レジストリーをセットアップすることで、エアギャップ環境に外部プラグインをインストールできます。
Helm chart を使用して、動的プラグインパッケージの NPM レジストリー URL と認証情報を設定できます。npm pack を使用して取得した動的プラグインパッケージの場合は、.npmrc ファイルを使用できます。
Helm チャートを使用して、シークレットを作成して .npmrc ファイルを NPM レジストリーに追加します。以下に例を示します。
apiVersion: v1
kind: Secret
metadata:
name: <release_name>-dynamic-plugins-npmrc
type: Opaque
stringData:
.npmrc: |
registry=<registry-url>
//<registry-url>:_authToken=<auth-token>
...
- 1
<release_name>は Helm リリース名に置き換えます。この名前は、Kubernetes クラスター内の各チャートインストールの一意の識別子です。
第2章 Red Hat Developer Hub のサードパーティープラグイン リンクのコピーリンクがクリップボードにコピーされました!
サードパーティーの動的プラグインを Red Hat Developer Hub に統合すると、ソースコードを変更したり、再構築したりせずに機能を強化できます。これらのプラグインを追加するには、派生パッケージとしてエクスポートします。
プラグインパッケージをエクスポートするときは、Developer Hub 環境との関係に応じて、依存関係が正しくバンドルされているか、共有としてマークされていることを確認する必要があります。
サードパーティープラグインを Developer Hub に統合するには、以下を実行します。
- まず、プラグインのソースコードを取得します。
- プラグインを動的プラグインパッケージとしてエクスポートします。「Red Hat Developer Hub でのサードパーティープラグインのエクスポート」を参照してください。
- 動的プラグインをパッケージ化して公開します。「サードパーティーのプラグインを動的プラグインとしてパッケージ化して公開する」を参照してください。
- Developer Hub 環境にプラグインをインストールします。「Red Hat Developer Hub にサードパーティーのプラグインをインストールする」を参照してください。
2.1. Red Hat Developer Hub でのサードパーティープラグインのエクスポート リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Developer Hub でプラグインを使用するには、派生動的プラグインパッケージとしてプラグインをエクスポートできます。これらのパッケージにはプラグインコードと依存関係が含まれ、Developer Hub への動的プラグイン統合の準備が整っています。
前提条件
-
@janus-idp/cliパッケージがインストールされている。最新の機能と修正との互換性は、最新バージョン (@latestタグ) を使用してください。 - Node.js と NPM がインストールされ、設定されている。
- サードパーティーのプラグインが、Red Hat Developer Hub のバージョンと互換性がある。詳細は、バージョン互換性マトリックス を参照してください。
サードパーティーのプラグインには、必要なすべてのメタデータと依存関係を含む有効な
package.jsonファイルがルートディレクトリーに存在する。- バックエンドプラグイン
動的プラグインのサポートとの互換性を確保し、動的プラグインとして使用できるようにするには、既存のバックエンドプラグインに新しい Backstage バックエンドシステムとの互換性が必要です。さらに、これらのプラグインは専用の CLI コマンドを使用して再構築する必要があります。
新しい Backstage バックエンドシステムエントリーポイント (
createBackendPlugin()またはcreateBackendModule()を使用して作成) は、メインパッケージまたはalphaパッケージ (プラグインインスタンスのサポートがalphaAPI を使用して引き続き提供されている場合) のいずれかからデフォルトのエクスポートとしてエクスポートする必要があります。これにより、プラグインインスタンスの標準プラグイン開発ガイドラインに加えて追加の要件が追加されることはありません。動的エクスポートメカニズムはプライベート依存関係を識別し、
package.jsonファイルのbundleDependenciesフィールドを設定します。このエクスポートメカニズムにより、動的プラグインパッケージが自己完結型パッケージとして公開され、そのプライベート依存関係がプライベートnode_modulesフォルダーにバンドルされることが保証されます。特定のプラグイン依存関係では、派生パッケージで特定の処理が必要になります。たとえば、以下のようになります。
共有依存関係 は RHDH アプリケーションにより提供され、動的プラグインパッケージにバンドルされずに、
package.jsonファイルにpeerDependenciesとしてリストされます。たとえば、デフォルトでは、すべての@backstageスコープパッケージが共有されます。--shared-packageフラグを使用して、Red Hat Developer Hub アプリケーションにより提供され、動的プラグインパッケージにバンドルされていないことが予想される共有依存関係を指定できます。@backstageパッケージをプライベートとして扱うには、否定接頭辞 (!) を使用します。たとえば、プラグインが Red Hat Developer Hub アプリケーションで提供されていない@backstageのパッケージに依存している場合などです。埋め込まれた依存関係 は、依存関係が最上位レベルに引き上げられた状態で動的プラグインパッケージにバンドルされます。デフォルトでは、
-nodeまたは-common接尾辞を持つパッケージが埋め込まれます。--embed-packageフラグを使用して、追加の埋め込みパッケージを指定できます。たとえば、デフォルトの命名規則に従わない同じワークスペースからのパッケージなどです。以下は、共有パッケージと埋め込みパッケージを含む動的プラグインをエクスポートする例です。
共有パッケージと埋め込みパッケージを使用した動的プラグインのエクスポートの例
npx @janus-idp/cli@latest export-dynamic-plugin --shared-package '!/@backstage/plugin-notifications/' --embed-package @backstage/plugin-notifications-backend上の例では、以下のようになります。
-
@backstage/plugin-notificationsパッケージは、@backstageスコープ内にあるにもかかわらず、プライベート依存関係として扱われ、動的プラグインパッケージにバンドルされます。 -
@backstage/plugin-notifications-backendパッケージは埋め込み依存関係としてマークされ、動的プラグインパッケージにバンドルされています。
- フロントエンドプラグイン
フロントエンドプラグインは設定に
scalprumを使用できます。これは、エクスポートプロセス中に CLI により自動的に生成されます。次のコマンドを実行すると、生成されたデフォルト設定がログに記録されます。デフォルト設定をログに記録するコマンドの例
npx @janus-idp/cli@latest export-dynamic以下はデフォルトの
scalprum設定の例です。デフォルトの
scalprum設定"scalprum": { "name": "<package_name>", // The Webpack container name matches the NPM package name, with "@" replaced by "." and "/" removed. "exposedModules": { "PluginRoot": "./src/index.ts" // The default module name is "PluginRoot" and doesn't need explicit specification in the app-config.yaml file. } }package.jsonファイルにscalprumセクションを追加できます。以下に例を示します。scalprumカスタマイズの例"scalprum": { "name": "custom-package-name", "exposedModules": { "FooModuleName": "./src/foo.ts", "BarModuleName": "./src/bar.ts" // Define multiple modules here, with each exposed as a separate entry point in the Webpack container. } }動的プラグインでは、マウントポイントや動的ルートの静的 JSX など、Developer Hub のニーズに合わせて調整が必要になる場合があります。これらの変更はオプションですが、静的プラグインと互換性がない可能性があります。
静的 JSX を含めるには、追加のエクスポートを定義し、それを動的プラグインの
importNameとして使用します。以下に例を示します。静的および動的プラグインのエクスポートの例
// For a static plugin export const EntityTechdocsContent = () => {...} // For a dynamic plugin export const DynamicEntityTechdocsContent = { element: EntityTechdocsContent, staticJSXContent: ( <TechDocsAddons> <ReportIssue /> </TechDocsAddons> ), };
手順
プラグインをエクスポートするには、
@janus-idp/cliパッケージのpackage export-dynamic-pluginコマンドを使用します。サードパーティーのプラグインをエクスポートするコマンドの例
npx @janus-idp/cli@latest package export-dynamic-plugin前のコマンドは、プラグインの JavaScript パッケージ (
package.jsonファイルを含む) のルートディレクトリーで実行してください。結果として得られる派生パッケージは、
dist-dynamicサブフォルダーに配置されます。エクスポートされたパッケージ名は、元のプラグイン名に-dynamicが追加された名前になります。警告派生した動的プラグイン JavaScript パッケージは、パブリック NPM レジストリーに公開することはできません。より適切なパッケージオプションは、「サードパーティーのプラグインを動的プラグインとしてパッケージ化して公開する」 を参照してください。NPM レジストリーに公開する必要がある場合は、プライベートレジストリーを使用します。
2.2. サードパーティーのプラグインを動的プラグインとしてパッケージ化して公開する リンクのコピーリンクがクリップボードにコピーされました!
サードパーティーのプラグインをエクスポート した後、派生パッケージを、次のいずれかのサポートされている形式でパッケージ化できます。
- Open Container Initiative (OCI) イメージ (推奨)
- TGZ ファイル
JavaScript パッケージ
重要エクスポートされた動的プラグインパッケージは、プライベート NPM レジストリーにのみ公開する必要があります。
2.2.1. 動的パッケージを使用した OCI イメージの作成 リンクのコピーリンクがクリップボードにコピーされました!
前提条件
-
podmanまたはdockerをインストールしている。 - サードパーティーの動的プラグインパッケージをエクスポートしている。詳細は、「Red Hat Developer Hub でのサードパーティープラグインのエクスポート」 を参照してください。
手順
-
プラグインのルートディレクトリー (
dist-dynamicディレクトリーではありません) に移動します。 プラグインを OCI イメージにパッケージ化するには、次のコマンドを実行します。
エクスポートされたサードパーティープラグインをパッケージ化するコマンドの例
npx @janus-idp/cli@latest package package-dynamic-plugins --tag quay.io/example/image:v0.0.1前のコマンドでは、
--tag引数でイメージ名とタグを指定します。次のいずれかのコマンドを実行して、イメージをレジストリーにプッシュします。
podman を使用してイメージをレジストリーにプッシュするコマンドの例
podman push quay.io/example/image:v0.0.1docker を使用してイメージをレジストリーにプッシュするコマンドの例
docker push quay.io/example/image:v0.0.1package-dynamic-pluginsコマンドの出力には、dynamic-plugin-config.yamlファイルで使用するプラグインのパスが提供されます。
2.2.2. 動的パッケージを使用した TGZ ファイルの作成 リンクのコピーリンクがクリップボードにコピーされました!
前提条件
- サードパーティーの動的プラグインパッケージをエクスポートしている。詳細は、「Red Hat Developer Hub でのサードパーティープラグインのエクスポート」 を参照してください。
手順
-
dist-dynamicディレクトリーに移動します。 tgzアーカイブを作成するには、次のコマンドを実行します。tgzアーカイブを作成するコマンドの例npm pack次のように
--jsonフラグを使用して、npm packコマンドの出力から整合性ハッシュを取得できます。tgzアーカイブの整合性ハッシュを取得するコマンドの例npm pack --json | head -n 10RHDH インスタンスにアクセスできる Web サーバー上でアーカイブをホストし、次のように
dynamic-plugin-config.yamlファイルでその URL を参照します。dynamic-plugin-config.yamlファイルの例plugins: - package: https://example.com/backstage-plugin-myplugin-1.0.0.tgz integrity: sha512-<hash>プラグインをパッケージ化するには、次のコマンドを実行します。
動的プラグインをパッケージ化するコマンドの例
npm pack --pack-destination ~/test/dynamic-plugins-root/ヒントOpenShift Container Platform で HTTP サーバーを使用してプラグインレジストリーを作成するには、次のコマンドを実行します。
OpenShift Container Platform で HTTP サーバーを構築およびデプロイするためのコマンド例
oc project my-rhdh-project oc new-build httpd --name=plugin-registry --binary oc start-build plugin-registry --from-dir=dynamic-plugins-root --wait oc new-app --image-stream=plugin-registrydynamic-plugin-config.yamlファイルを編集して、HTTP サーバーからのプラグインを使用するように RHDH を設定します。RHDH でパッケージ化されたプラグインを使用するための設定例
plugins: - package: http://plugin-registry:8080/backstage-plugin-myplugin-1.9.6.tgz
2.2.3. 動的パッケージを使用した JavaScript パッケージの作成 リンクのコピーリンクがクリップボードにコピーされました!
派生した動的プラグイン JavaScript パッケージは、パブリック NPM レジストリーに公開することはできません。NPM レジストリーに公開する必要がある場合は、プライベートレジストリーを使用します。
前提条件
- サードパーティーの動的プラグインパッケージをエクスポートしている。詳細は、「Red Hat Developer Hub でのサードパーティープラグインのエクスポート」 を参照してください。
手順
-
dist-dynamicディレクトリーに移動します。 次のコマンドを実行して、パッケージをプライベート NPM レジストリーに公開します。
プラグインパッケージを NPM レジストリーに公開するコマンドの例
npm publish --registry <npm_registry_url>ヒントexportコマンドを実行する前に、package.jsonファイルに次の内容を追加できます。package.jsonファイルの例{ "publishConfig": { "registry": "<npm_registry_url>" } }動的プラグインをエクスポートした後に
publishConfigを変更する場合は、export-dynamic-pluginコマンドを再実行して、正しい設定が含まれていることを確認します。
2.3. Red Hat Developer Hub にサードパーティーのプラグインをインストールする リンクのコピーリンクがクリップボードにコピーされました!
RHDH アプリケーションを再構築せずに、Red Hat Developer Hub にサードパーティーのプラグインをインストールできます。
dynamic-plugin-config.yaml ファイルの場所は、デプロイメント方法により異なります。詳細は、Red Hat Developer Hub Operator を使用した動的プラグインのインストール および Helm チャートを使用した動的プラグインのインストール を参照してください。
プラグインは、dynamic-plugin-config.yaml ファイル内の plugins 配列で定義されます。各プラグインは、次のプロパティーを持つオブジェクトとして表されます。
-
package: プラグインのパッケージ定義。OCI イメージ、TGZ ファイル、JavaScript パッケージ、またはディレクトリーパスになります。 -
disabled: プラグインが有効か無効かを示すブール値。 -
integrity: パッケージの整合性ハッシュ。TGZ ファイルと JavaScript パッケージに必要です。 -
pluginConfig: プラグインの設定。バックエンドプラグインの場合、これはオプションですが、フロントエンドプラグインの場合は必須です。pluginConfigはapp-config.yamlファイルのフラグメントであり、追加されたプロパティーは RHDHapp-config.yamlファイルとマージされます。
別のディレクトリーから動的プラグインをロードすることもできますが、これは開発またはテスト目的であり、RHDH コンテナーイメージに含まれるプラグインを除き、実稼働環境では推奨されません。詳細は、3章RHDH コンテナーイメージに追加されたプラグインの有効化 を参照してください。
2.3.1. OCI イメージとしてパッケージ化されたプラグインをロードする リンクのコピーリンクがクリップボードにコピーされました!
前提条件
サードパーティーのプラグインは、OCI イメージ内の動的プラグインとしてパッケージ化されます。
サードパーティープラグインのパッケージ化の詳細は、「サードパーティーのプラグインを動的プラグインとしてパッケージ化して公開する」 を参照してください。
手順
dynamic-plugins.yamlファイルで、次の形式でoci://接頭辞を持つプラグインを定義します。oci://<image-name>:<tag>!<plugin-name>dynamic-plugins.yamlファイルの設定例plugins: - disabled: false package: oci://quay.io/example/image:v0.0.1!backstage-plugin-myplugin-
REGISTRY_AUTH_FILE環境変数をレジストリー設定ファイルのパスに設定して、プライベートレジストリーの認証を設定します。たとえば、~/.config/containers/auth.jsonまたは~/.docker/config.jsonです。 整合性チェックを実行するには、次のように
dynamic-plugins.yamlファイル内のタグの代わりにイメージダイジェストを使用します。dynamic-plugins.yamlファイルの設定例plugins: - disabled: false package: oci://quay.io/example/image@sha256:28036abec4dffc714394e4ee433f16a59493db8017795049c831be41c02eb5dc!backstage-plugin-myplugin- 変更を適用するには、RHDH アプリケーションを再起動します。
2.3.2. TGZ ファイルとしてパッケージ化されたプラグインをロードする リンクのコピーリンクがクリップボードにコピーされました!
前提条件
サードパーティーのプラグインは、TGZ ファイル内の動的プラグインとしてパッケージ化されています。
サードパーティープラグインのパッケージ化の詳細は、「サードパーティーのプラグインを動的プラグインとしてパッケージ化して公開する」 を参照してください。
手順
次の例を使用して、
dynamic-plugins.yamlファイルにアーカイブ URL とその整合性ハッシュを指定します。dynamic-plugins.yamlファイルの設定例plugins: - disabled: false package: https://example.com/backstage-plugin-myplugin-1.0.0.tgz integrity: sha512-9WlbgEdadJNeQxdn1973r5E4kNFvnT9GjLD627GWgrhCaxjCmxqdNW08cj+Bf47mwAtZMt1Ttyo+ZhDRDj9PoA==- 変更を適用するには、RHDH アプリケーションを再起動します。
2.3.3. JavaScript パッケージとしてパッケージ化されたプラグインを読み込む リンクのコピーリンクがクリップボードにコピーされました!
前提条件
サードパーティーのプラグインは、JavaScript パッケージ内の動的プラグインとしてパッケージ化されます。
サードパーティープラグインのパッケージ化の詳細は、「サードパーティーのプラグインを動的プラグインとしてパッケージ化して公開する」 を参照してください。
手順
次のコマンドを実行して、NPM レジストリーから整合性ハッシュを取得します。
npm view --registry <registry-url> <npm package>@<version> dist.integrity次のように、
dynamic-plugins.yamlファイルでパッケージ名、バージョン、およびその整合性ハッシュを指定します。dynamic-plugins.yamlファイルの設定例plugins: - disabled: false package: @example/backstage-plugin-myplugin@1.0.0 integrity: sha512-9WlbgEdadJNeQxdn1973r5E4kNFvnT9GjLD627GWgrhCaxjCmxqdNW08cj+Bf47mwAtZMt1Ttyo+ZhDRDj9PoA==カスタム NPM レジストリーを使用している場合は、レジストリー URL と認証の詳細を含む
.npmrcファイルを作成します。.npmrcファイルの例コードregistry=<registry-url> //<registry-url>:_authToken=<auth-token>OpenShift Container Platform または Kubernetes を使用する場合は以下のようになります。
Helm チャートを使用してシークレットを作成して
.npmrcファイルを追加します。以下に例を示します。シークレット設定の例
apiVersion: v1 kind: Secret metadata: name: <release_name>-dynamic-plugins-npmrc1 type: Opaque stringData: .npmrc: | registry=<registry-url> //<registry-url>:_authToken=<auth-token>- 1
<release_name>は Helm リリース名に置き換えます。この名前は、Kubernetes クラスター内の各チャートインストールの一意の識別子です。
RHDH Helm チャートの場合は、自動マウントのために次の形式を使用してシークレットに名前を付けます。
<release_name>-dynamic-plugins-npmrc
- 変更を適用するには、RHDH アプリケーションを再起動します。
2.3.4. Red Hat Developer Hub にサードパーティーのプラグインをインストールする例 リンクのコピーリンクがクリップボードにコピーされました!
このセクションでは、Todo プラグイン を Developer Hub に統合するプロセスを説明します。
サードパーティーのプラグインのソースコードを取得する: プラグインのリポジトリーのクローンを複製し、Todo プラグイン ディレクトリーに移動します。
サードパーティーのプラグインのソースコードを入手する
$ git clone https://github.com/backstage/community-plugins $ cd community-plugins/workspaces/todo $ yarn installバックエンドおよびフロントエンドプラグインをエクスポートする: 次のコマンドを実行して、バックエンドプラグインをビルドし、動的読み込み用のパッケージ依存関係を調整し、自己完結型の設定スキーマを生成します。
バックエンドプラグインをエクスポートする
$ cd todo-backend $ npx @janus-idp/cli@latest package export-dynamic-pluginバックエンドプラグインコマンドのエクスポートの出力
Building main package executing yarn build ✔ Packing main package to dist-dynamic/package.json Customizing main package in dist-dynamic/package.json for dynamic loading moving @backstage/backend-common to peerDependencies moving @backstage/backend-openapi-utils to peerDependencies moving @backstage/backend-plugin-api to peerDependencies moving @backstage/catalog-client to peerDependencies moving @backstage/catalog-model to peerDependencies moving @backstage/config to peerDependencies moving @backstage/errors to peerDependencies moving @backstage/integration to peerDependencies moving @backstage/plugin-catalog-node to peerDependencies Installing private dependencies of the main package executing yarn install --no-immutable ✔ Validating private dependencies Validating plugin entry points Saving self-contained config schema in /Users/user/Code/community-plugins/workspaces/todo/plugins/todo-backend/dist-dynamic/dist/configSchema.json次のコマンドを実行して、デフォルトの動的 UI 設定を設定し、フロントエンドプラグインアセットを作成し、フロントエンドプラグインの設定スキーマを生成できます。
フロントエンドプラグインをエクスポートする
$ cd ../todo $ npx @janus-idp/cli@latest package export-dynamic-pluginフロントエンドプラグインコマンドのエクスポートの出力
No scalprum config. Using default dynamic UI configuration: { "name": "backstage-community.plugin-todo", "exposedModules": { "PluginRoot": "./src/index.ts" } } If you wish to change the defaults, add "scalprum" configuration to plugin "package.json" file, or use the '--scalprum-config' option to specify an external config. Packing main package to dist-dynamic/package.json Customizing main package in dist-dynamic/package.json for dynamic loading Generating dynamic frontend plugin assets in /Users/user/Code/community-plugins/workspaces/todo/plugins/todo/dist-dynamic/dist-scalprum 263.46 kB dist-scalprum/static/1417.d5271413.chunk.js ... ... ... 250 B dist-scalprum/static/react-syntax-highlighter_languages_highlight_plaintext.0b7d6592.chunk.js Saving self-contained config schema in /Users/user/Code/community-plugins/workspaces/todo/plugins/todo/dist-dynamic/dist-scalprum/configSchema.jsonサードパーティーのプラグインをパッケージ化して公開する: 次のコマンドを実行してワークスペースディレクトリーに移動し、動的プラグインをパッケージ化して OCI イメージを構築します。
OCI イメージをビルドする
$ cd ../.. $ npx @janus-idp/cli@latest package package-dynamic-plugins --tag quay.io/user/backstage-community-plugin-todo:v0.1.1OCI イメージビルドコマンドの出力
executing podman --version ✔ Using existing 'dist-dynamic' directory at plugins/todo Using existing 'dist-dynamic' directory at plugins/todo-backend Copying 'plugins/todo/dist-dynamic' to '/var/folders/5c/67drc33d0018j6qgtzqpcsbw0000gn/T/package-dynamic-pluginsmcP4mU/backstage-community-plugin-todo No plugin configuration found at undefined create this file as needed if this plugin requires configuration Copying 'plugins/todo-backend/dist-dynamic' to '/var/folders/5c/67drc33d0018j6qgtzqpcsbw0000gn/T/package-dynamic-pluginsmcP4mU/backstage-community-plugin-todo-backend-dynamic No plugin configuration found at undefined create this file as needed if this plugin requires configuration Writing plugin registry metadata to '/var/folders/5c/67drc33d0018j6qgtzqpcsbw0000gn/T/package-dynamic-pluginsmcP4mU/index.json' Creating image using podman executing echo "from scratch COPY . . " | podman build --annotation com.redhat.rhdh.plugins='[{"backstage-community-plugin-todo":{"name":"@backstage-community/plugin-todo","version":"0.2.40","description":"A Backstage plugin that lets you browse TODO comments in your source code","backstage":{"role":"frontend-plugin","pluginId":"todo","pluginPackages":["@backstage-community/plugin-todo","@backstage-community/plugin-todo-backend"]},"homepage":"https://backstage.io","repository":{"type":"git","url":"https://github.com/backstage/community-plugins","directory":"workspaces/todo/plugins/todo"},"license":"Apache-2.0"}},{"backstage-community-plugin-todo-backend-dynamic":{"name":"@backstage-community/plugin-todo-backend","version":"0.3.19","description":"A Backstage backend plugin that lets you browse TODO comments in your source code","backstage":{"role":"backend-plugin","pluginId":"todo","pluginPackages":["@backstage-community/plugin-todo","@backstage-community/plugin-todo-backend"]},"homepage":"https://backstage.io","repository":{"type":"git","url":"https://github.com/backstage/community-plugins","directory":"workspaces/todo/plugins/todo-backend"},"license":"Apache-2.0"}}]' -t 'quay.io/user/backstage-community-plugin-todo:v0.1.1' -f - . ✔ Successfully built image quay.io/user/backstage-community-plugin-todo:v0.1.1 with following plugins: backstage-community-plugin-todo backstage-community-plugin-todo-backend-dynamic Here is an example dynamic-plugins.yaml for these plugins: plugins: - package: oci://quay.io/user/backstage-community-plugin-todo:v0.1.1!backstage-community-plugin-todo disabled: false - package: oci://quay.io/user/backstage-community-plugin-todo:v0.1.1!backstage-community-plugin-todo-backend-dynamic disabled: falseOCI イメージをコンテナーレジストリーにプッシュする:
$ podman push quay.io/user/backstage-community-plugin-todo:v0.1.1OCI イメージコマンドのプッシュの出力
Getting image source signatures Copying blob sha256:86a372c456ae6a7a305cd464d194aaf03660932efd53691998ab3403f87cacb5 Copying config sha256:3b7f074856ecfbba95a77fa87cfad341e8a30c7069447de8144aea0edfcb603e Writing manifest to image destinationサードパーティーのプラグインをインストールして設定する:
dynamic-plugins.yamlファイルに次のプラグイン定義を追加します。dynamic-plugins.yamlファイル内のプラグイン定義packages: - package: oci://quay.io/user/backstage-community-plugin-todo:v0.1.1!backstage-community-plugin-todo pluginConfig: dynamicPlugins: frontend: backstage-community.plugin-todo: mountPoints: - mountPoint: entity.page.todo/cards importName: EntityTodoContent entityTabs: - path: /todo title: Todo mountPoint: entity.page.todo - package: oci://quay.io/user/backstage-community-plugin-todo:v0.1.1!backstage-community-plugin-todo-backend-dynamic disabled: false
第3章 RHDH コンテナーイメージに追加されたプラグインの有効化 リンクのコピーリンクがクリップボードにコピーされました!
RHDH コンテナーイメージには、機能を強化するために一連の動的プラグインがプリロードされています。ただし、必須の設定要件があるため、ほとんどのプラグインは無効になります。
RHDH コンテナーイメージ内のプラグインを有効にして設定できます。これには、デフォルト設定を管理する方法、必要な環境変数を設定する方法、アプリケーション内のプラグインの適切な機能を確保する方法が含まれます。
前提条件
-
プリロードされたすべてのプラグインとそのデフォルト設定をリストする
dynamic-plugins.default.yamlファイルにアクセスできる。 -
RHDH アプリケーションをデプロイし、
install-dynamic-pluginsinit コンテナーのログにアクセスできる。 - プラグイン設定の変更およびアプリケーション環境へのアクセスに必要なパーミッションがある。
- プラグインのデフォルト設定によって参照される必須の環境変数を特定して設定してある。これらの環境変数は、Helm チャートまたは Operator 設定で定義する必要があります。
手順
-
RHDH アプリケーションを起動し、RHDH Pod 内の
install-dynamic-pluginsinit コンテナーのログにアクセスします。 - デフォルトで無効になっている Red Hat 対応プラグイン を特定します。
-
dynamic-plugins.default.yamlファイルからパッケージ設定をコピーします。 プラグイン設定ファイルを開き、有効にするプラグインエントリーを見つけます。
プラグイン設定ファイルの場所は、デプロイメント方法によって異なります。詳細は、Red Hat Developer Hub Operator を使用した動的プラグインのインストール および Helm チャートを使用した動的プラグインのインストール を参照してください。
disabledフィールドをfalseに変更し、以下のようにパッケージ名を追加します。プラグイン設定の例
plugins: - disabled: false package: ./dynamic-plugins/dist/backstage-plugin-catalog-backend-module-github-dynamicDeveloper Hub で動的プラグインを設定する方法の詳細は、Red Hat Developer Hub での動的プラグインのインストール を参照してください。
検証
- RHDH アプリケーションを再起動し、プラグインが正常にアクティブ化され、設定されていることを確認します。
- アプリケーションログを確認のため検証して、プラグインが期待どおりに機能していることを確認します。
第4章 インストール済みプラグインの表示 リンクのコピーリンクがクリップボードにコピーされました!
Dynamic Plugins Info フロントエンドプラグインを使用すると、Red Hat Developer Hub アプリケーションに現在インストールされているプラグインを表示できます。このプラグインはデフォルトで有効です。
手順
- Developer Hub アプリケーションを開き、Administration をクリックします。
- Plugins タブに移動し、インストールされているプラグインのリストと関連情報を表示します。