Red Hat Developer Hub でのプラグインのインストールと表示


Red Hat Developer Hub 1.6

Red Hat Developer Hub でのプラグインのインストール

Red Hat Customer Content Services

概要

管理ユーザーは、プラグインをインストールして設定し、他のユーザーがプラグインを使用して RHDH 機能を拡張できるようにすることができます。

第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> シークレットで変数を定義する必要があります。

手順

  1. OpenShift Container Platform Web コンソールから、ConfigMaps タブを選択します。
  2. Create ConfigMap をクリックします。
  3. Create ConfigMap ページで、Configure viaYAML 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 }
    Copy to Clipboard

  4. Create をクリックします。
  5. Topology ビューに移動します。
  6. 使用する Red Hat Developer Hub インスタンスのオーバーフローメニューをクリックし、Edit Backstage を選択して、Red Hat Developer Hub インスタンスの YAML ビューを読み込みます。

    Operator インストール 2
  7. dynamicPluginsConfigMapName フィールドを Backstage CR に追加します。以下に例を示します。

    apiVersion: rhdh.redhat.com/v1alpha3
    kind: Backstage
    metadata:
      name: my-rhdh
    spec:
      application:
    # ...
        dynamicPluginsConfigMapName: dynamic-plugins-rhdh
    # ...
    Copy to Clipboard
  8. Save をクリックします。
  9. Topology ビューに戻り、Red Hat Developer Hub Pod が起動するまで待ちます。
  10. 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"
      },
    ]
    Copy to Clipboard

1.2. Helm チャートを使用した動的プラグインのインストール

柔軟なインストール方法である Helm チャートを使用して、Developer Hub インスタンスをデプロイできます。Helm チャートを使用すると、コードを再コンパイルしたりコンテナーを再ビルドしたりすることなく、動的プラグインを Developer Hub インスタンスにサイドロードできます。

Helm を使用して Developer Hub に動的プラグインをインストールするには、Helm チャートに次の global.dynamic パラメーターを追加します。

  • plugins: インストールを目的とした動的プラグインのリスト。デフォルトでは、リストは空です。プラグインのリストには次のフィールドを入力できます。

    • package: インストールする動的プラグインパッケージのパッケージ仕様。パッケージは、ローカルまたは外部の動的プラグインのインストールに使用できます。ローカルインストールの場合は、動的プラグインを含むローカルフォルダーへのパスを使用します。外部インストールの場合は、パブリック NPM リポジトリーのパッケージ仕様を使用します。
    • integrity (外部パッケージの場合に必要): パッケージ固有の <alg>-<digest> 形式の整合性チェックサム。サポートされるアルゴリズムは、sha256sha384sha512 です。
    • pluginConfig: プラグイン固有の app-config.yaml YAML フラグメント (オプション)。詳細は、プラグインの設定を参照してください。
    • disabled: true に設定すると、動的プラグインが無効になります。デフォルトは false です。
    • forceDownload: キャッシュを回避してプラグインの再インストールを強制するには、値を true に設定します。デフォルト値は false です。
    • pullPolicy: forceDownload パラメーターに似ており、他のイメージコンテナープラットフォームと同じです。このキーには次のいずれかの値を使用できます。

      • Always: リモートレジストリー内のイメージダイジェストを比較し、変更されている場合は、プラグインが以前にダウンロードされていたとしても、アーティファクトをダウンロードします。
      • IfNotPresent: dynamic-plugins-root フォルダーにアーティファクトがまだ存在しない場合に、イメージダイジェストをチェックせずにダウンロードします。

        注記

        pullPolicy 設定は NPM ダウンロード方法にも適用されますが、Always ではダイジェストチェックなしでリモートのアーティファクトがダウンロードされます。その場合も既存の forceDownload オプションは機能しますが、pullPolicy オプションが優先されます。forceDownload オプションは、今後の Developer Hub リリースで非推奨となる可能性があります。

  • 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 チャート設定の例

次の例は、特定の種類の動的プラグインインストール用に Helm チャートを設定する方法を示しています。

外部プラグインに特定の設定が必要な場合に、ローカルプラグインと外部プラグインを設定する

global:
  dynamic:
    plugins:
      - package: <alocal package-spec used by npm pack>
      - package: <external package-spec used by npm pack>
        integrity: sha512-<some hash>
        pluginConfig: ...
Copy to Clipboard

含まれるファイルからプラグインを無効にする

global:
  dynamic:
    includes:
      - dynamic-plugins.default.yaml
    plugins:
      - package: <some imported plugins listed in dynamic-plugins.default.yaml>
        disabled: true
Copy to Clipboard

含まれるファイルからプラグインを有効にする

global:
  dynamic:
    includes:
      - dynamic-plugins.default.yaml
    plugins:
      - package: <some imported plugins listed in dynamic-plugins.custom.yaml>
        disabled: false
Copy to Clipboard

含まれるファイルで無効になっているプラグインを有効にする

global:
  dynamic:
    includes:
      - dynamic-plugins.default.yaml
    plugins:
      - package: <some imported plugins listed in dynamic-plugins.custom.yaml>
        disabled: false
Copy to Clipboard

1.3. エアギャップ環境での動的プラグインのインストール

カスタム NPM レジストリーをセットアップすることで、エアギャップ環境に外部プラグインをインストールできます。

Helm チャートを使用して、動的プラグインパッケージの NPM レジストリー URL と認証情報を設定できます。npm pack を使用して取得した動的プラグインパッケージの場合は、.npmrc ファイルを使用できます。

Helm チャートを使用して、シークレットを作成して .npmrc ファイルを NPM レジストリーに追加します。以下に例を示します。

apiVersion: v1
kind: Secret
metadata:
  name: <release_name>-dynamic-plugins-npmrc 
1

type: Opaque
stringData:
  .npmrc: |
    registry=<registry-url>
    //<registry-url>:_authToken=<auth-token>
          ...
Copy to Clipboard
1
<release_name> は Helm リリース名に置き換えます。この名前は、Kubernetes クラスター内の各チャートインストールの一意の識別子です。

第2章 Red Hat Developer Hub のサードパーティープラグイン

サードパーティーの動的プラグインを Red Hat Developer Hub に統合すると、ソースコードを変更したり、再構築したりせずに機能を強化できます。これらのプラグインを追加するには、派生パッケージとしてエクスポートします。

プラグインパッケージをエクスポートするときは、Developer Hub 環境との関係に応じて、依存関係が正しくバンドルされているか、共有としてマークされていることを確認する必要があります。

サードパーティープラグインを Developer Hub に統合するには、以下を実行します。

  1. まず、プラグインのソースコードを取得します。
  2. プラグインを動的プラグインパッケージとしてエクスポートします。「Red Hat Developer Hub でのサードパーティープラグインのエクスポート」を参照してください。
  3. 動的プラグインをパッケージ化して公開します。「サードパーティーのプラグインを動的プラグインとしてパッケージ化して公開する」を参照してください。
  4. 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 パッケージ (プラグインインスタンスのサポートが alpha API を使用して引き続き提供されている場合) のいずれかからデフォルトのエクスポートとしてエクスポートする必要があります。これにより、プラグインインスタンスの標準プラグイン開発ガイドラインに加えて追加の要件が追加されることはありません。

    動的エクスポートメカニズムはプライベート依存関係を識別し、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
      Copy to Clipboard

      上の例では、以下のようになります。

    • @backstage/plugin-notifications パッケージは、@backstage スコープ内にあるにもかかわらず、プライベート依存関係として扱われ、動的プラグインパッケージにバンドルされます。
    • @backstage/plugin-notifications-backend パッケージは埋め込み依存関係としてマークされ、動的プラグインパッケージにバンドルされています。
    フロントエンドプラグイン

    フロントエンドプラグインは設定に scalprum を使用できます。これは、エクスポートプロセス中に CLI により自動的に生成されます。次のコマンドを実行すると、生成されたデフォルト設定がログに記録されます。

    デフォルト設定をログに記録するコマンドの例

    npx @janus-idp/cli@latest export-dynamic
    Copy to Clipboard

    以下はデフォルトの 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.
      }
    }
    Copy to Clipboard

    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.
      }
    }
    Copy to Clipboard

    動的プラグインでは、マウントポイントや動的ルートの静的 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>
      ),
    };
    Copy to Clipboard

手順

  • プラグインをエクスポートするには、@janus-idp/cli パッケージの package export-dynamic-plugin コマンドを使用します。

    サードパーティーのプラグインをエクスポートするコマンドの例

    npx @janus-idp/cli@latest package export-dynamic-plugin
    Copy to Clipboard

    前のコマンドは、プラグインの JavaScript パッケージ (package.json ファイルを含む) のルートディレクトリーで実行してください。

    結果として得られる派生パッケージは、dist-dynamic サブフォルダーに配置されます。エクスポートされたパッケージ名は、元のプラグイン名の後ろに -dynamic を追加したものです。

    警告

    派生した動的プラグイン JavaScript パッケージは、パブリック NPM レジストリーに公開することはできません。より適切なパッケージオプションは、「サードパーティーのプラグインを動的プラグインとしてパッケージ化して公開する」 を参照してください。NPM レジストリーに公開する必要がある場合は、プライベートレジストリーを使用します。

2.2. サードパーティーのプラグインを動的プラグインとしてパッケージ化して公開する

サードパーティーのプラグインをエクスポート した後、派生パッケージを、次のいずれかのサポートされている形式でパッケージ化できます。

  • Open Container Initiative (OCI) イメージ (推奨)
  • TGZ ファイル
  • JavaScript パッケージ

    重要

    エクスポートされた動的プラグインパッケージは、プライベート NPM レジストリーにのみ公開する必要があります。

2.2.1. 動的パッケージを使用した OCI イメージの作成

前提条件

手順

  1. プラグインのルートディレクトリー (dist-dynamic ディレクトリーではありません) に移動します。
  2. プラグインを OCI イメージにパッケージ化するには、次のコマンドを実行します。

    エクスポートされたサードパーティープラグインをパッケージ化するコマンドの例

    npx @janus-idp/cli@latest package package-dynamic-plugins --tag quay.io/example/image:v0.0.1
    Copy to Clipboard

    前のコマンドでは、--tag 引数でイメージ名とタグを指定します。

  3. 次のいずれかのコマンドを実行して、イメージをレジストリーにプッシュします。

    podman を使用してイメージをレジストリーにプッシュするコマンドの例

    podman push quay.io/example/image:v0.0.1
    Copy to Clipboard

    docker を使用してイメージをレジストリーにプッシュするコマンドの例

    docker push quay.io/example/image:v0.0.1
    Copy to Clipboard

    package-dynamic-plugins コマンドの出力には、dynamic-plugin-config.yaml ファイルで使用するプラグインのパスが提供されます。

2.2.2. 動的パッケージを使用した TGZ ファイルの作成

前提条件

手順

  1. dist-dynamic ディレクトリーに移動します。
  2. tgz アーカイブを作成するには、次のコマンドを実行します。

    tgz アーカイブを作成するコマンドの例

    npm pack
    Copy to Clipboard

    次のように --json フラグを使用して、npm pack コマンドの出力から整合性ハッシュを取得できます。

    tgz アーカイブの整合性ハッシュを取得するコマンドの例

    npm pack --json | head -n 10
    Copy to Clipboard

  3. RHDH インスタンスにアクセスできる 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>
    Copy to Clipboard

  4. プラグインをパッケージ化するには、次のコマンドを実行します。

    動的プラグインをパッケージ化するコマンドの例

    npm pack --pack-destination ~/test/dynamic-plugins-root/
    Copy to Clipboard

    ヒント

    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-registry
    Copy to Clipboard

  5. dynamic-plugin-config.yaml ファイルを編集して、HTTP サーバーからのプラグインを使用するように RHDH を設定します。

    RHDH でパッケージ化されたプラグインを使用するための設定例

    plugins:
      - package: http://plugin-registry:8080/backstage-plugin-myplugin-1.9.6.tgz
    Copy to Clipboard

2.2.3. 動的パッケージを使用した JavaScript パッケージの作成

警告

派生した動的プラグイン JavaScript パッケージは、パブリック NPM レジストリーに公開することはできません。NPM レジストリーに公開する必要がある場合は、プライベートレジストリーを使用します。

前提条件

手順

  1. dist-dynamic ディレクトリーに移動します。
  2. 次のコマンドを実行して、パッケージをプライベート NPM レジストリーに公開します。

    プラグインパッケージを NPM レジストリーに公開するコマンドの例

    npm publish --registry <npm_registry_url>
    Copy to Clipboard

    ヒント

    export コマンドを実行する前に、package.json ファイルに次の内容を追加できます。

    package.json ファイルの例

    {
      "publishConfig": {
        "registry": "<npm_registry_url>"
      }
    }
    Copy to Clipboard

    動的プラグインをエクスポートした後に 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: プラグインの設定。バックエンドプラグインの場合、これはオプションですが、フロントエンドプラグインの場合は必須です。pluginConfigapp-config.yaml ファイルのフラグメントであり、追加されたプロパティーは RHDH app-config.yaml ファイルとマージされます。
注記

別のディレクトリーから動的プラグインをロードすることもできますが、これは開発またはテスト目的であり、RHDH コンテナーイメージに含まれるプラグインを除き、実稼働環境では推奨されません。詳細は、3章RHDH コンテナーイメージに追加されたプラグインの有効化 を参照してください。

2.3.1. OCI イメージとしてパッケージ化されたプラグインをロードする

前提条件

手順

  1. 認証されたレジストリーからプラグインを取得するには、次の手順を実行します。

    1. コンテナーイメージレジストリーにログインします。

      podman login <registry>
      Copy to Clipboard
    2. ログイン後に作成された auth.json ファイルの内容を確認します。

      cat ${XDG_RUNTIME_DIR:-~/.config}/containers/auth.json
      Copy to Clipboard
    3. 次の例を使用してシークレットファイルを作成します。

      oc create secret generic _<secret_name>_ --from-file=auth.json=${XDG_RUNTIME_DIR:-~/.config}/containers/auth.json 
      1
      Copy to Clipboard
      • Operator ベースのデプロイメントの場合は、<secret_name>dynamic-plugins-registry-auth に置き換えます。
      • Helm ベースのデプロイメントの場合は、<secret_name><Helm_release_name>_-dynamic-plugins-registry-auth に置き換えます。
  2. 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
    Copy to Clipboard

  3. 整合性チェックを実行するには、次の例に示すように、dynamic-plugins.yaml ファイル内のタグの代わりにイメージダイジェストを使用します。

    dynamic-plugins.yaml ファイルの設定例

    plugins:
      - disabled: false
        package: oci://quay.io/example/image@sha256:28036abec4dffc714394e4ee433f16a59493db8017795049c831be41c02eb5dc!backstage-plugin-myplugin
    Copy to Clipboard

  4. 変更を適用するには、RHDH アプリケーションを再起動します。

2.3.2. TGZ ファイルとしてパッケージ化されたプラグインをロードする

前提条件

手順

  1. 次の例を使用して、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==
    Copy to Clipboard

  2. 変更を適用するには、RHDH アプリケーションを再起動します。

2.3.3. JavaScript パッケージとしてパッケージ化されたプラグインを読み込む

前提条件

手順

  1. 次のコマンドを実行して、NPM レジストリーから整合性ハッシュを取得します。

    npm view --registry <registry-url> <npm package>@<version> dist.integrity
    Copy to Clipboard
  2. 次のように、dynamic-plugins.yaml ファイルでパッケージ名、バージョン、およびその整合性ハッシュを指定します。

    dynamic-plugins.yaml ファイルの設定例

    plugins:
      - disabled: false
        package: @example/backstage-plugin-myplugin@1.0.0
        integrity: sha512-9WlbgEdadJNeQxdn1973r5E4kNFvnT9GjLD627GWgrhCaxjCmxqdNW08cj+Bf47mwAtZMt1Ttyo+ZhDRDj9PoA==
    Copy to Clipboard

  3. カスタム NPM レジストリーを使用している場合は、レジストリー URL と認証の詳細を含む .npmrc ファイルを作成します。

    .npmrc ファイルの例コード

    registry=<registry-url>
    //<registry-url>:_authToken=<auth-token>
    Copy to Clipboard

  4. OpenShift Container Platform または Kubernetes を使用する場合は以下のようになります。

    • Helm チャートを使用してシークレットを作成して .npmrc ファイルを追加します。以下に例を示します。

      シークレット設定の例

      apiVersion: v1
      kind: Secret
      metadata:
        name: <release_name>-dynamic-plugins-npmrc 
      1
      
      type: Opaque
      stringData:
        .npmrc: |
          registry=<registry-url>
          //<registry-url>:_authToken=<auth-token>
      Copy to Clipboard

      1 1
      <release_name> は Helm リリース名に置き換えます。この名前は、Kubernetes クラスター内の各チャートインストールの一意の識別子です。
    • RHDH Helm チャートの場合は、自動マウントのために次の形式を使用してシークレットに名前を付けます。

      <release_name>-dynamic-plugins-npmrc

  5. 変更を適用するには、RHDH アプリケーションを再起動します。

2.3.4. Red Hat Developer Hub にサードパーティーのプラグインをインストールする例

このセクションでは、Todo プラグイン を Developer Hub に統合するプロセスを説明します。

  1. サードパーティーのプラグインのソースコードを取得する: プラグインのリポジトリーのクローンを複製し、Todo プラグイン ディレクトリーに移動します。

    サードパーティーのプラグインのソースコードを入手する

    $ git clone https://github.com/backstage/community-plugins
    $ cd community-plugins/workspaces/todo
    $ yarn install
    Copy to Clipboard

  2. バックエンドおよびフロントエンドプラグインをエクスポートする: 次のコマンドを実行して、バックエンドプラグインをビルドし、動的読み込み用のパッケージ依存関係を調整し、自己完結型の設定スキーマを生成します。

    バックエンドプラグインをエクスポートする

    $ cd todo-backend
    $ npx @janus-idp/cli@latest package export-dynamic-plugin
    Copy to Clipboard

    バックエンドプラグインコマンドのエクスポートの出力

    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
    Copy to Clipboard

    次のコマンドを実行して、デフォルトの動的 UI 設定を設定し、フロントエンドプラグインアセットを作成し、フロントエンドプラグインの設定スキーマを生成できます。

    フロントエンドプラグインをエクスポートする

    $ cd ../todo
    $ npx @janus-idp/cli@latest package export-dynamic-plugin
    Copy to Clipboard

    フロントエンドプラグインコマンドのエクスポートの出力

    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
    Copy to Clipboard

  3. サードパーティーのプラグインをパッケージ化して公開する: 次のコマンドを実行してワークスペースディレクトリーに移動し、動的プラグインをパッケージ化して OCI イメージを構築します。

    OCI イメージをビルドする

    $ cd ../..
    $ npx @janus-idp/cli@latest package package-dynamic-plugins --tag quay.io/user/backstage-community-plugin-todo:v0.1.1
    Copy to Clipboard

    OCI イメージビルドコマンドの出力

      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: false
    Copy to Clipboard

    OCI イメージをコンテナーレジストリーにプッシュする:

    $ podman push quay.io/user/backstage-community-plugin-todo:v0.1.1
    Copy to Clipboard

    OCI イメージコマンドのプッシュの出力

    Getting image source signatures
    Copying blob sha256:86a372c456ae6a7a305cd464d194aaf03660932efd53691998ab3403f87cacb5
    Copying config sha256:3b7f074856ecfbba95a77fa87cfad341e8a30c7069447de8144aea0edfcb603e
    Writing manifest to image destination
    Copy to Clipboard

  4. サードパーティーのプラグインをインストールして設定する: 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
    Copy to Clipboard

第3章 RHDH コンテナーイメージに追加されたプラグインの有効化

RHDH コンテナーイメージには、機能を強化するために一連の動的プラグインがプリロードされています。ただし、必須の設定要件があるため、ほとんどのプラグインは無効になります。

RHDH コンテナーイメージ内のプラグインを有効にして設定できます。これには、デフォルト設定を管理する方法、必要な環境変数を設定する方法、アプリケーション内のプラグインの適切な機能を確保する方法が含まれます。

前提条件

  • プリロードされたすべてのプラグインとそのデフォルト設定をリストする dynamic-plugins.default.yaml ファイルにアクセスできる。
  • RHDH アプリケーションをデプロイし、install-dynamic-plugins init コンテナーのログにアクセスできる。
  • プラグイン設定の変更およびアプリケーション環境へのアクセスに必要なパーミッションがある。
  • プラグインのデフォルト設定によって参照される必須の環境変数を特定して設定してある。これらの環境変数は、Helm チャートまたは Operator 設定で定義する必要があります。

手順

  1. RHDH アプリケーションを起動し、RHDH Pod 内の install-dynamic-plugins init コンテナーのログにアクセスします。
  2. デフォルトで無効になっている Red Hat 対応プラグイン を特定します。
  3. dynamic-plugins.default.yaml ファイルからパッケージ設定をコピーします。
  4. プラグイン設定ファイルを開き、有効にするプラグインエントリーを見つけます。

    プラグイン設定ファイルの場所は、デプロイメント方法によって異なります。詳細は、Red Hat Developer Hub Operator を使用した動的プラグインのインストール および Helm チャートを使用した動的プラグインのインストール を参照してください。

  5. disabled フィールドを false に変更し、以下のようにパッケージ名を追加します。

    プラグイン設定の例

    plugins:
      - disabled: false
        package: ./dynamic-plugins/dist/backstage-plugin-catalog-backend-module-github-dynamic
    Copy to Clipboard

    Developer Hub で動的プラグインを設定する方法の詳細は、Red Hat Developer Hub での動的プラグインのインストール を参照してください。

検証

  1. RHDH アプリケーションを再起動し、プラグインが正常にアクティブ化され、設定されていることを確認します。
  2. アプリケーションログを確認のため検証して、プラグインが期待どおりに機能していることを確認します。

第4章 Red Hat Developer Hub の Extensions

重要

この章の機能はテクノロジープレビュー機能です。テクノロジープレビュー機能は、実稼働環境での Red Hat サービスレベルアグリーメント (SLA) ではサポートされておらず、機能的に完全ではない可能性があるため、Red Hat では実稼働環境での使用を推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。

Red Hat のテクノロジープレビュー機能のサポートの詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。

Red Hat Developer Hub (RHDH) には、デフォルトでプリインストールされ有効になっている Extensions 機能があります。Extensions は、利用可能なプラグインを閲覧および管理するための一元的なインターフェイスをユーザーに提供します。

Extensions を使用すると、RHDH の機能を拡張し、開発ワークフローを合理化し、開発者のエクスペリエンスを向上させるプラグインを見つけることができます。

4.1. 利用可能なプラグインの表示

Extensions ページで、Red Hat Developer Hub アプリケーションで使用できるプラグインを表示できます。

手順

  1. Developer Hub アプリケーションを開き、Administration > Extensions をクリックします。
  2. Catalog タブに移動し、利用可能なプラグインと関連情報のリストを表示します。

    Extensions カタログ

4.2. インストール済みプラグインの表示

Dynamic Plugins Info フロントエンドプラグインを使用すると、Red Hat Developer Hub アプリケーションに現在インストールされているプラグインを表示できます。このプラグインはデフォルトで有効です。

手順

  1. Developer Hub アプリケーションを開き、Administration > Extensions をクリックします。
  2. Installed タブに移動し、インストールされているプラグインのリストと関連情報を表示します。

4.3. プラグインの検索とフィルタリング

4.3.1. プラグイン名での検索

ヘッダーの検索バーを使用して、Extensions プラグインカードを名前でフィルタリングできます。たとえば、検索バーに “A” と入力すると、名前フィールドに文字 “A” が含まれるプラグインのみが Extensions に表示されます。

Dynatrace 検索を使用した Extensions カタログ

必要に応じて、検索バーをフィルターと組み合わせて使用し、選択したフィルターのプラグインのみを名前でフィルタリングすることもできます。たとえば、Category フィルターを適用し、検索バーに文字を入力すると、入力した文字が名前に含まれる Openshift プラグインのみが表示されます。

利用可能なフィルターは次のとおりです。

  • カテゴリー
  • 作成者
  • サポートタイプ

4.4. 拡張機能を使用したプラグインのインストール

Extensions を使用して dynamic-plugins.yaml ファイルを更新し、プラグインをインストールして設定できます。

4.4.1. 前提条件

  • プラグイン設定の変更およびアプリケーション環境へのアクセスに必要なパーミッションがある。
  • プラグインのデフォルト設定によって参照される必須の環境変数を特定して設定してある。これらの環境変数は、Helm チャートまたは Operator 設定で定義する必要があります。

手順

  1. Developer Hub アプリケーションを開き、Administration > Extensions をクリックします。
  2. Extensions ページの検索バーを使用してインストールするプラグインを見つけ、カードをクリックします。たとえば、Tekton を検索し、Pipelines With Tekton カードの Read more をクリックします。

    Tekton カードを使用した拡張機能カタログ
  3. プラグインドロワーでは、プラグインに関する情報と、RHDH でプラグインを設定する方法を確認できます。プラグインをインストールするには、Install をクリックします。

    Tekton の詳細を含む拡張機能カタログ
  4. Install Plugin ページに、YAML エディターとインストール手順が表示されます。

    プラグインエディターテンプレートを備えた拡張機能カタログ
  5. プラグインのインストールと設定の詳細を表示するには、About the plugin タブをクリックします。
  6. Examples タブをクリックすると、デフォルトのプラグイン設定が表示されます。
  7. Apply をクリックして、デフォルトのプラグイン設定を YAML エディターにコピーします。
  8. YAML エディターで、コピーアイコンをクリックしてプラグインの設定をコピーします。

    Tekton 設定の拡張機能カタログ
    注記

    RHDH 1.6 では、Install ボタンが無効になっているため、プラグインの設定を dynamic-plugins.yaml ファイルにコピーする必要があります。

  9. dynamic-plugins.yaml ファイルで、前の手順でコピーしたプラグイン設定を plugins 定義に追加します。

    注記

    Helm チャートを使用して RHDH をインストールすると、プラグインを有効にするには、RHDH プロジェクトの手動ロールアウトが必要になる場合があります。

検証

  1. Administration > Extensions をクリックします。
  2. インストールされているプラグインのリストを表示するには、Installed タブに移動します。
  3. インストールしたプラグインを検索し、それが利用可能で有効になっていることを確認します。

4.5. Extensions の削除

Extensions 機能のプラグインは、Red Hat Developer Hub (RHDH) にプリインストールされており、デフォルトで有効になっています。RHDH インスタンスから Extensions を削除する場合は、関連するプラグインを無効にできます。

手順

  1. Extensions 機能のプラグインを無効にするには、次の内容を使用して dynamic-plugins.yaml を編集します。

    dynamic-plugins.yaml フラグメント

    plugins:
      - package: ./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-marketplace
        disabled: true
      - package: ./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-catalog-backend-module-marketplace-dynamic
        disabled: true
      - package: ./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-marketplace-backend-dynamic
        disabled: true
    Copy to Clipboard

注記

Extensions 機能のプラグインを無効にすると、Catalog タブと Installed タブも削除されます。Administration > Extensions をクリックすると、インストールされているプラグインを表示できます。

法律上の通知

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat