3.3. カスタムレジストリーの実行

前提条件

このセクションで使用される my-plug-in-registry イメージおよび my-devfile-registry イメージは、docker コマンドを使用して構築されます。このセクションでは、これらのイメージが CodeReady Workspaces がデプロイされている OpenShift クラスターで利用できることを想定しています。

これらのイメージは以下にプッシュできます。

  • quay.io または DockerHub などのパブリックコンテナーレジストリー。
  • プライベートレジストリー

3.3.1. OpenShift でのレジストリーのデプロイ

手順

プラグインレジストリーをデプロイする OpenShift テンプレートは、GitHub リポジトリーの openshift/ ディレクトリーで利用できます。

  1. OpenShift テンプレートを使用してプラグインレジストリーをデプロイするには、以下のコマンドを実行します。

    NAMESPACE=<namespace-name>  1
    IMAGE_NAME="my-plug-in-registry"
    IMAGE_TAG="latest"
    oc new-app -f openshift/che-plugin-registry.yml \
     -n "$\{NAMESPACE}" \
     -p IMAGE="$\{IMAGE_NAME}" \
     -p IMAGE_TAG="$\{IMAGE_TAG}" \
     -p PULL_POLICY="IfNotPresent"
    1
    crwctl を使用してインストールされている場合、デフォルトの CodeReady Workspaces プロジェクトは workspaces になります。この OperatorHub のインストール方法では、CodeReady Workspaces を現在のプロジェクトユーザーにデプロイします。
  2. devfile レジストリーには、GitHub リポジトリーの deploy/openshift/ ディレクトリーに OpenShift テンプレートがあります。これをデプロイするには、以下のコマンドを実行します。

    NAMESPACE=<namespace-name>  1
    IMAGE_NAME="my-devfile-registry"
    IMAGE_TAG="latest"
    oc new-app -f openshift/che-devfile-registry.yml \
     -n "$\{NAMESPACE}" \
     -p IMAGE="$\{IMAGE_NAME}" \
     -p IMAGE_TAG="$\{IMAGE_TAG}" \
     -p PULL_POLICY="IfNotPresent"
    1
    crwctl を使用してインストールされている場合、デフォルトの CodeReady Workspaces プロジェクトは workspaces になります。この OperatorHub のインストール方法では、CodeReady Workspaces を現在のプロジェクトユーザーにデプロイします。
  3. レジストリーが OpenShift に正常にデプロイされたかどうかを確認します。

    1. 新規プラグインがプラグインレジストリーに正しく公開されることを確認するには、レジストリーパス /v3/plugins/index.json (または devfile レジストリーの /devfiles/index.json )に要求を実行します。

      $ URL=$(oc get -o 'custom-columns=URL:.spec.rules[0].host' \
        -l app=che-plugin-registry route --no-headers)
      $ INDEX_JSON=$(curl -sSL http://${URL}/v3/plugins/index.json)
      $ echo ${INDEX_JSON} | grep -A 4 -B 5 "\"name\":\"my-plug-in\""
      ,\{
       "id": "my-org/my-plug-in/1.0.0",
       "displayName":"This is my first plug-in for CodeReady Workspaces",
       "version":"1.0.0",
       "type":"VS Code extension",
       "name":"my-plug-in",
       "description":"This plugin shows that we are able to add plugins to the registry",
       "publisher":"my-org",
       "links": \{"self":"/v3/plugins/my-org/my-plug-in/1.0.0" }
      }
      --
      --
      ,\{
       "id": "my-org/my-plug-in/latest",
       "displayName":"This is my first plug-in for CodeReady Workspaces",
       "version":"latest",
       "type":"VS Code extension",
       "name":"my-plug-in",
       "description":"This plugin shows that we are able to add plugins to the registry",
       "publisher":"my-org",
       "links": \{"self":"/v3/plugins/my-org/my-plug-in/latest" }
      }
    2. CodeReady Workspaces サーバーがレジストリーの URL を参照していることを確認します。これを実行するには、che ConfigMapのCHE_WORKSPACE_PLUGIN__REGISTRY__URL(またはdevfileレジストリーのCHE_WORKSPACE_DEVFILE__REGISTRY__URL)の値を比較します。

      $ oc get \
        -o "custom-columns=URL:.data['CHE_WORKSPACE_PLUGINREGISTRYURL']" \
        --no-headers cm/che
      URL
      http://che-plugin-registry-che.192.168.99.100.nip.io/v3

      ルートの URL で以下を行います。

      $ oc get -o 'custom-columns=URL:.spec.rules[0].host' \
        -l app=che-plugin-registry route --no-headers
      che-plugin-registry-che.192.168.99.100.nip.io
    3. 一致しない場合は、ConfigMap を更新し、CodeReady Workspaces サーバーを再起動します。

      $ oc edit cm/che
      (...)
      $ oc scale --replicas=0 deployment/che
      $ oc scale --replicas=1 deployment/che

新規レジストリーがデプロイされ、CodeReady Workspaces サーバーがそのレジストリーを使用するように設定されている場合、新しいプラグインはワークスペースの Plugin ビューに利用でき、新規スタックはユーザーダッシュボードの New Workspace タブに表示されます。