The my-plug-in-registry and my-devfile-registry images used in this section are built using the docker command. This section assumes that these images are available on the Kubernetes and OpenShift cluster where Che is deployed.
This is true on Minishift or Minikube, for example, if before running the docker build commands, the user executed the eval $\{minikube docker-env} command (or, the eval $\{minishift docker-env} command for Minishift).
Otherwise, these images can be pushed to a container registry (public, such as quay.io, or the DockerHub, or a private registry).
Deploying registries in Kubernetes
A Helm chart for the plug-in registry is available in the /kubernetes/che-plugin-registry/ directory of the GitHub repository.
-
To deploy the plug-in registry using the Helm chart, run the following command:
NAMESPACE=<namespace-name> (1) DOMAIN=<kubernetes-cluster-domain> (2) IMAGE="my-plug-in-registry" helm upgrade --install che-plugin-registry \ --debug \ --namespace ${NAMESPACE} \ --set global.ingressDomain=${DOMAIN} \ --set chePluginRegistryImage=${IMAGE} \ --set chePluginRegistryImagePullPolicy="IfNotPresent" \ ./kubernetes/che-plugin-registry/1 If installed using chectl, the default Che namespace is default. The OperatorHub installation method deploys Che to the users current namespace.2 On Minikube, use $(minikube ip).nip.io -
The devfile registry also has a Helm chart in the
deploy/kubernetes/che-devfile-registry/directory of the GitHub repository. To deploy it, run the command:NAMESPACE=<namespace-name> (1) DOMAIN=<kubernetes-cluster-domain> (2) IMAGE="my-devfile-registry" helm upgrade --install che-devfile-registry \ --debug \ --namespace ${NAMESPACE} \ --set global.ingressDomain=${DOMAIN} \ --set cheDevfileRegistryImage=${IMAGE} \ --set cheDevfileRegistryImagePullPolicy="IfNotPresent" \ ./deploy/kubernetes/che-devfile-registry/1 If installed using chectl, the default Che namespace is default. The OperatorHub installation method deploys Che to the users current namespace.2 On Minikube, use $(minikube ip).nip.io -
The Helm chart creates a Pod, a service, and an Ingress. To get them, use
app=che-plugin-registry(orapp=che-plugin-registryfor the devfile registry).$ kubectl get -o custom-columns=TYPE:.kind,NAME:.metadata.name \ -l app=che-plugin-registry pod,svc,ingress TYPE NAME Pod che-plugin-registry-5c7cd8d5c9-zlqlz Service che-plugin-registry Ingress che-plugin-registry
-
Check if the registries are deployed successfully on Kubernetes.
-
To verify that the new plug-in is correctly published to the plug-in registry, make a request to the registry path
/v3/plugins/index.json(or/devfiles/index.jsonfor the devfile registry).$ URL=$(kubectl get -o 'custom-columns=URL:.spec.rules[0].host' \ -l app=che-plugin-registry ingress --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 Che", "version":"1.0.0", "type":"VS Code extension", "name":"my-plug-in", "description":"This plugins 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 Che", "version":"latest", "type":"VS Code extension", "name":"my-plug-in", "description":"This plugins shows that we are able to add plugins to the registry...", "publisher":"my-org", "links": \{"self":"/v3/plugins/my-org/my-plug-in/latest" } } -
Verify that the Che server points to the URL of the registry. To do this, compare the value of the
CHE_WORKSPACE_PLUGIN__REGISTRY__URLparameter in thecheConfigMap (orCHE_WORKSPACE_DEVFILE__REGISTRY__URLfor the devfile registry):$ kubectl 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
with the URL of the Ingress:
$ kubectl get -o 'custom-columns=URL:.spec.rules[0].host' \ -l app=che-plugin-registry ingress --no-headers che-plugin-registry-che.192.168.99.100.nip.io
-
If they do not match, update the ConfigMap and restart the Che server.
$ kubectl edit cm/che (...) $ kubectl scale --replicas=0 deployment/che $ kubectl scale --replicas=1 deployment/che
When the new registries are deployed and the Che server is configured to use them, the new plug-ins are available in the Plugin view of a workspace.
The new stacks are displayed in the New Workspace tab of the user dashboard.
-
Deploying registries in OpenShift
An OpenShift template to deploy the plug-in registry is available in the openshift/ directory of the GitHub repository.
-
To deploy the plug-in registry using the OpenShift template, run the following command:
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 If installed using chectl, the default Che namespace is default. The OperatorHub installation method deploys Che to the users current namespace. -
The devfile registry has an OpenShift template in the
deploy/openshift/directory of the GitHub repository. To deploy it, run the command: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 If installed using chectl, the default Che namespace is default. The OperatorHub installation method deploys Che to the users current namespace. -
Check if the registries are deployed successfully on OpenShift.
-
To verify that the new plug-in is correctly published to the plug-in registry, make a request to the registry path
/v3/plugins/index.json(or/devfiles/index.jsonfor the devfile registry).$ 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 Che", "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 Che", "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" } } -
Verify that the Che server points to the URL of the registry. To do this, compare the value of the
CHE_WORKSPACE_PLUGIN__REGISTRY__URLparameter in thecheConfigMap (orCHE_WORKSPACE_DEVFILE__REGISTRY__URLfor the devfile registry):$ 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
with the URL of the route:
$ 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
-
If they do not match, update the ConfigMap and restart the Che server.
$ oc edit cm/che (...) $ oc scale --replicas=0 deployment/che $ oc scale --replicas=1 deployment/che
-
When the new registries are deployed and the Che server is configured to use them, the new plug-ins are available in the Plugin view of a workspace and the new stacks are displayed in the New Workspace tab of the user dashboard.