第1章 devfile およびプラグインレジストリーのカスタマイズ
CodeReady Workspaces 2.3 には、プラグインレジストリーと devfile レジストリーの 2 つのレジストリーが導入されています。CodeReady Workspaces プラグインおよび CodeReady Workspaces devfiles のメタデータが公開される静的な Web サイトです。
プラグインレジストリーは、CodeReady Workspaces の同じインスタンスの全ユーザーにプラグイン定義を共有できるようにします。レジストリーで公開されるプラグインのみが devfile で使用できます。
devfile レジストリーは、CodeReady Workspaces スタックの定義を保持します。これらは、Create Workspace を 選択する際に CodeReady Workspaces ユーザーダッシュボードで利用できます。これには、サンプルプロジェクトを含む CodeReady Workspaces の技術スタックサンプルの一覧が含まれます。
devfile およびプラグインレジストリーは 2 つの個別の Pod で実行され、CodeReady Workspaces サーバーがデプロイされる際にデプロイされます(CodeReady Workspaces Operator のデフォルト動作です)。プラグインおよび devfile のメタデータは GitHub でバージョン化され、CodeReady Workspaces サーバーのライフサイクルに従います。
本書では、CodeReady Workspaces(プラグインまたは devfile メタデータを変更する)でデプロイされるデフォルトのレジストリーをカスタマイズする以下の 2 つの方法を説明します。
- レジストリーのカスタムイメージのビルド
デフォルトのイメージの実行がランタイム時に変更
1.1. カスタムレジストリーイメージのビルドおよび実行 リンクのコピーリンクがクリップボードにコピーされました!
本セクションでは、レジストリーのビルドおよび実行中の CodeReady Workspaces サーバーを更新してレジストリーを参照する方法を説明します。
1.1.1. カスタム devfile レジストリーのビルド リンクのコピーリンクがクリップボードにコピーされました!
本セクションでは、カスタム devfile レジストリーを構築する方法を説明します。以下の操作について説明します。
- devfile レジストリーを構築するのに必要なソースコードのコピーを取得します。
- 新しい devfile の追加。
- devfile レジストリーをビルドします。
手順
devfile レジストリーリポジトリーのクローンを作成します。
$ git clone git@github.com:redhat-developer/codeready-workspaces.git $ cd codeready-workspaces/dependencies/che-devfile-registry.
/che-devfile-registry/devfiles/ディレクトリーにサブディレクトリー<devfile-name>/を作成し、devfile.yaml ファイルおよびファイルを追加します。meta.yamldevfile のファイル組織
./che-devfile-registry/devfiles/ └── <devfile-name> ├── devfile.yaml └── meta.yaml-
devfile.yamlファイルに有効なコンテンツを追加します。devfile 形式の詳細な説明は、「 Devfile を使用したワークスペースポータブルの使用」を 参照してください。 meta.yamlファイルが以下の構造に準拠していることを確認します。Expand 表1.1 devfile meta.yamlのパラメーター attribute description descriptionユーザーダッシュボードに表示される説明。
displayNameユーザーダッシュボードに表示される名前。
globalMemoryLimitdevfile によって起動されるすべてのコンポーネントが使用する予想されるメモリーの合計。この数は、ユーザーダッシュボードに表示されます。これは通知され、CodeReady Workspaces サーバーによって考慮されません。
iconユーザーダッシュボードに表示される
.svgファイルへのリンクtagsタグの一覧。タグには、通常スタックに含まれるツールが含まれます。
devfile
meta.yamlの例displayName: Rust description: Rust Stack with Rust 1.39 tags: ["Rust"] icon: https://www.eclipse.org/che/images/logo-eclipseche.svg globalMemoryLimit: 1686Miカスタム devfile レジストリーのコンテナーをビルドします。
$ docker build -t my-devfile-registry .
1.1.2. カスタムプラグインレジストリーのビルド リンクのコピーリンクがクリップボードにコピーされました!
このセクションでは、カスタムプラグインレジストリーを構築する方法を説明します。以下の操作について説明します。
- カスタムプラグインレジストリーのビルドに必要なソースコードのコピーを取得します。
- 新しいプラグインの追加。
- カスタムプラグインレジストリーをビルドします。
手順
プラグインレジストリーリポジトリーのクローンを作成します。
$ git clone git@github.com:redhat-developer/codeready-workspaces.git $ cd codeready-workspaces/dependencies/che-plugin-registry.
/che-plugin-registry/v3/plugins/ディレクトリーに新しいディレクトリー <publisher>/<plugin-name> /<plugin-version>/およびmeta.yamlファイルを最後のディレクトリーに作成します。プラグインのファイル組織
./che-plugin-registry/v3/plugins/ ├── <publisher> │ └── <plugin-name> │ ├── <plugin-version> │ │ └── meta.yaml │ └── latest.txt-
meta.yamlファイルに有効なコンテンツを追加します。meta.yaml ファイル形式の詳細は、「Using a Visual Studio Code extension in CodeReady Workspaces」セクションまたはmd ファイルを参照してください。eclipse/che-plugin-registryリポジトリーの README. 最新の
<plugin-version>ディレクトリーの名前を含むlatest.txtという名前のファイルを作成します。例$ tree che-plugin-registry/v3/plugins/redhat/java/ che-plugin-registry/v3/plugins/redhat/java/ ├── 0.38.0 │ └── meta.yaml ├── 0.43.0 │ └── meta.yaml ├── 0.45.0 │ └── meta.yaml ├── 0.46.0 │ └── meta.yaml ├── 0.50.0 │ └── meta.yaml └── latest.txt $ cat che-plugin-registry/v3/plugins/redhat/java/latest.txt 0.50.0カスタムプラグインレジストリーのコンテナーをビルドします。
./build.sh
1.1.3. レジストリーのデプロイ リンクのコピーリンクがクリップボードにコピーされました!
前提条件
このセクションで使用される my-plug-in イメージは、-registry イメージおよび my-devfile-registrydocker コマンドを使用してビルドされます。このセクションでは、CodeReady Workspaces がデプロイされている OpenShift クラスターにこれらのイメージが利用可能であることを前提としています。
たとえば、docker ビルドコマンド を実行する前には true の場合、ユーザーは eval $\{minikube docker-env} コマンドを実行します(または、Minishift の場合は eval $\{minishift docker-env} コマンド)。
それ以外の場合は、これらのイメージをコンテナーレジストリー( quay.io、DockerHub、プライベートレジストリーなど)にプッシュできます。
1.1.3.1. OpenShift でのレジストリーのデプロイ リンクのコピーリンクがクリップボードにコピーされました!
手順
プラグインレジストリーをデプロイする OpenShift テンプレートは、GitHub リポジトリーの openshift/ ディレクトリーにあります。
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 プロジェクトは
ワークスペースになります。OperatorHub のインストール方法では、CodeReady Workspaces をユーザー現在のプロジェクトにデプロイします。
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 プロジェクトは
ワークスペースになります。OperatorHub のインストール方法では、CodeReady Workspaces をユーザー現在のプロジェクトにデプロイします。
レジストリーが OpenShift に正常にデプロイされているかどうかを確認します。
新規プラグインがプラグインレジストリーに正しく公開されていることを確認するには、レジストリーパス
/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" } }CodeReady Workspaces サーバーがレジストリーの URL を参照することを確認します。これには、コード対応
ConfigMap(または devfile レジストリーの CHE_WORKSPACE__REGISTRY__URL)で CHEパラメーターを比較します。_WORKSPACE_PLUGIN__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.mycluster.mycompany.com/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.mycluster.mycompany.com一致しない場合は、ConfigMap を更新し、CodeReady Workspaces サーバーを再起動します。
$ oc edit cm/che (...) $ oc scale --replicas=0 deployment/che $ oc scale --replicas=1 deployment/che
新しいレジストリーをデプロイし、CodeReady Workspaces サーバーがそれらのレジストリーを使用するように設定すると、新しいプラグインがワークスペース の プラグインビューで利用でき、新しいスタックはユーザーダッシュボードの New Workspace タブに表示されます。