この「プラグイン一覧」画面に「Language Support for Java 12」が欲しいわけです。
前提
- OS: Windows10 Pro
- Docker: Docker version 19.03.1, build 74b1e89
- helm: v2.14.2
- Docker Desktop の Kubernetes 有効化済み
- Docker Desktop の Kubernetes を使う
- インストールする che: 7.0.0-rc-4.0
自作プラグイン作成
theia-endpoint-runtime をベースイメージにして、必要な環境一式をインストールすればよい。
Docker イメージは、 Docker Hub の eclipse/che-theia-endpoint-runtime で公開されている。
プラグイン実行用の Docker コンテナを作成
remote-plugin-java11 の Dockerfile と AdoptOpenJDK の Dockerfile を参考にして、vscode-java の実行環境を組み立てていく。
Dockerfile:
FROM eclipse/che-theia-endpoint-runtime:7.0.0-rc-4.0
LABEL maintainer "mikoto2000 <mikoto2000@gmail.com>"
LABEL version="1.0.0"
LABEL description "che-theia, remote-plugin-runner-java12"
# from https://github.com/AdoptOpenJDK/openjdk-docker/blob/4dd8db3c0fb30281ead0baa706800a605d3ebbe1/12/jdk/alpine/Dockerfile.hotspot.releases.full#L24
RUN apk add --no-cache --virtual .build-deps curl binutils procps nss \
&& GLIBC_VER="2.29-r0" \
&& ALPINE_GLIBC_REPO="https://github.com/sgerrand/alpine-pkg-glibc/releases/download" \
&& GCC_LIBS_URL="https://archive.archlinux.org/packages/g/gcc-libs/gcc-libs-9.1.0-2-x86_64.pkg.tar.xz" \
&& GCC_LIBS_SHA256="91dba90f3c20d32fcf7f1dbe91523653018aa0b8d2230b00f822f6722804cf08" \
&& ZLIB_URL="https://archive.archlinux.org/packages/z/zlib/zlib-1%3A1.2.11-3-x86_64.pkg.tar.xz" \
&& ZLIB_SHA256=17aede0b9f8baa789c5aa3f358fbf8c68a5f1228c5e6cba1a5dd34102ef4d4e5 \
&& curl -LfsS https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub -o /etc/apk/keys/sgerrand.rsa.pub \
&& SGERRAND_RSA_SHA256="823b54589c93b02497f1ba4dc622eaef9c813e6b0f0ebbb2f771e32adf9f4ef2" \
&& echo "${SGERRAND_RSA_SHA256} */etc/apk/keys/sgerrand.rsa.pub" | sha256sum -c - \
&& curl -LfsS ${ALPINE_GLIBC_REPO}/${GLIBC_VER}/glibc-${GLIBC_VER}.apk > /tmp/glibc-${GLIBC_VER}.apk \
&& apk add /tmp/glibc-${GLIBC_VER}.apk \
&& curl -LfsS ${ALPINE_GLIBC_REPO}/${GLIBC_VER}/glibc-bin-${GLIBC_VER}.apk > /tmp/glibc-bin-${GLIBC_VER}.apk \
&& apk add /tmp/glibc-bin-${GLIBC_VER}.apk \
&& curl -Ls ${ALPINE_GLIBC_REPO}/${GLIBC_VER}/glibc-i18n-${GLIBC_VER}.apk > /tmp/glibc-i18n-${GLIBC_VER}.apk \
&& apk add /tmp/glibc-i18n-${GLIBC_VER}.apk \
&& /usr/glibc-compat/bin/localedef --force --inputfile POSIX --charmap UTF-8 "$LANG" || true \
&& echo "export LANG=$LANG" > /etc/profile.d/locale.sh \
&& curl -LfsS ${GCC_LIBS_URL} -o /tmp/gcc-libs.tar.xz \
&& echo "${GCC_LIBS_SHA256} */tmp/gcc-libs.tar.xz" | sha256sum -c - \
&& mkdir /tmp/gcc \
&& tar -xf /tmp/gcc-libs.tar.xz -C /tmp/gcc \
&& mv /tmp/gcc/usr/lib/libgcc* /tmp/gcc/usr/lib/libstdc++* /usr/glibc-compat/lib \
&& strip /usr/glibc-compat/lib/libgcc_s.so.* /usr/glibc-compat/lib/libstdc++.so* \
&& curl -LfsS ${ZLIB_URL} -o /tmp/libz.tar.xz \
&& echo "${ZLIB_SHA256} */tmp/libz.tar.xz" | sha256sum -c - \
&& mkdir /tmp/libz \
&& tar -xf /tmp/libz.tar.xz -C /tmp/libz \
&& mv /tmp/libz/usr/lib/libz.so* /usr/glibc-compat/lib \
&& apk del --purge .build-deps glibc-i18n \
&& rm -rf /tmp/*.apk /tmp/gcc /tmp/gcc-libs.tar.xz /tmp/libz /tmp/libz.tar.xz /var/cache/apk/*
RUN wget -q https://download.java.net/java/GA/jdk12.0.2/e482c34c86bd4bf8b56c0b35558996b9/10/GPL/openjdk-12.0.2_linux-x64_bin.tar.gz \
&& tar xf ./openjdk-12.0.2_linux-x64_bin.tar.gz -C /opt \
&& rm ./openjdk-12.0.2_linux-x64_bin.tar.gz
ENV JAVA_HOME /opt/jdk-12.0.2
ENV PATH $PATH:/opt/jdk-12.0.2/bin
RUN chmod 777 /home/theia
WORKDIR /projects
この Dockerfile を使ってビルド・プッシュする。
docker build -t mikoto2000/remote-plugin-runner-java12:latest .
コンテナレジストリに登録
Docker Hub に push。
docker push mikoto2000/remote-plugin-runner-java12:latest
(mikoto2000/remote-plugin-runner-java12
ではなく mikoto2000/che-remote-plugin-runner-java12
とするべきだったかもしれない...)
自作プラグインを登録した docker-plugin-registry を作成
che-server は、「どんなプラグインがあるか・つかえるか」を、 che-plugin-registry に問い合わせ、 その結果を前述のプラグイン一覧に表示している。
なので、自作プラグインを登録した che-plugin-registry を作成する必要がある。
この章で che-plugin-registry を作っていく。
eclipse/che-plugin-registry
をクローン
$CHE_PLUGIN_REGISTRY_SOURCE
にクローンしたものとして話を進める。
バージョニングのポリシーががわからないのでとりあえず master で進めてしまう。
git clone https://github.com/eclipse/che-plugin-registry
cd che-plugin-registry
$CHE_PLUGIN_REGISTRY_SOURCE=$(pwd)
$CHE_PLUGIN_REGISTRY_SOURCE/v3/plugins/
にプラグイン情報を追加
v3/plugins/redhat/java11/latest を参考に、 java12 版を作成。
ディレクトリ構成:
$CHE_PLUGIN_REGISTRY_SOURCE/
+- v3/
+- plugins/
+- mikoto2000/
+- java12/
+- latest/
+- meta.yaml
mikoto2000
: publisherlatest
: versionmeta.yaml
: プラグイン情報を記載したメタデータファイル
meta.yaml
:
apiVersion: v2
publisher: mikoto2000
name: java12
version: latest
type: VS Code extension
displayName: Language Support for Java 12
title: Language Support for Java(TM) by mikoto2000
description: Java Linting, Intellisense, formatting, refactoring, Maven/Gradle support
and more...
icon: https://www.eclipse.org/che/images/logo-eclipseche.svg
repository: https://github.com/redhat-developer/vscode-java
category: Language
firstPublicationDate: "2019-08-02"
spec:
containers:
- image: mikoto2000/remote-plugin-runner-java12:latest
name: vscode-java
memoryLimit: "1500Mi"
extensions:
- https://github.com/microsoft/vscode-java-debug/releases/download/0.19.0/vscode-java-debug-0.19.0.vsix
- https://download.jboss.org/jbosstools/static/jdt.ls/stable/java-0.46.0-1549.vsix
適当にまねして書き換えただけなので説明省略。
che-plugin-registry のコンテナを作成
cd $CHE_PLUGIN_REGISTRY_SOURCE
docker build -t mikoto2000/che-plugin-registry:latest -f ./build/dockerfiles/Dockerfile --target registry .
コンテナレジストリに登録
docker push mikoto2000/che-plugin-registry:latest
che の設定とデプロイ
che-server が、先ほど作った che-plugin-registry に問い合わせを投げるように設定して、デプロイしなおす。
$CHE_SOURCE/deploy/kubernetes/helm/che/custom-charts/che-plugin-registry/values.yaml
を編集
che-plugin-registry/values.yaml
の chePluginRegistry
で、 先ほど作った mikoto2000/che-plugin-registry
を使用するように修正。
before:
chePluginRegistry:
image: quay.io/eclipse/che-plugin-registry:nightly
imagePullPolicy: Always
memoryLimit: 32Mi
memoryRequests: 16Mi
after:
chePluginRegistry:
image: mikoto2000/che-plugin-registry:latest
imagePullPolicy: Always
memoryLimit: 32Mi
memoryRequests: 16Mi
che のデプロイ
helm upgrade
で更新を認識してくれなかったので削除してインストールしなおししている。 helm の使い方勉強しなきゃ...。
cd $CHE_SOURCE/deploy/kubernetes/helm/che
helm delete --purge che
helm init --service-account tiller --wait --upgrade
helm dependency update
helm upgrade --install che --namespace che --set cheImage=eclipse/che-server:7.0.0-rc-4.0 --set global.cheWorkspacesNamespace="che" --set global.ingressDomain=${CHE_DOMAIN}.nip.io ./
プラグインが追加されていることを確認
start http://che-che.${CHE_DOMAIN}.nip.io/
で che を開いたら、 Workspaces
-> Add Workspace
ボタン押下 -> SELECT STACK
の Java Gradle
を選択 -> 右上の下向き三角形ボタンを押下 -> Create & Proceed Editing
-> Plugins
タブ選択 -> プラグイン一覧に Language Support for Java 12
が増えているのが確認できる。
以上。
参考資料
- eclipse/che-plugin-registry
- Publishing a VS Code extension into the Che plug-in registry
- Che-Theia plug-in metadata
- remote-plugin-java11 の Dockerfile
- AdoptOpenJDK の Dockerfile
更新履歴
日付 | 更新内容 |
---|---|
2019/8/07 | 新規作成 |
2020/6/10 | docker build のコマンド間違いを修正 |
0 件のコメント:
コメントを投稿