将 gitlab JDK 更新为 JDK17(VM 没有互联网连接)

Update gitlab JDK to JDK17 (VM doesn't have internet connection)

我正在使用 Gitlab 构建一个 Java 工具,使用 ant

该工具需要JDK17,但是antJDK版本是11,我正在尝试更改它。
所以我尝试了很多使用远程存储库或远程下载站点的解决方案,但经过一些尝试后我发现用于构建该工具的 VM 未连接到互联网(尝试 ping google 或我的 IP 地址没有没用)。

所以我尝试将 JDK 17 (openjdk-17_linux-x64_bin.tar.gz) 与工具源代码放在同一个包中上传并安装在那里。
这就是问题所在,我不确定如何执行此操作,因为我不使用 linux,但我几乎尝试了互联网上的所有内容。

这些命令中的每一个都在 .gitlab-ci.yml 文件中使用,用于 gitlab 管道。

以下是我迄今为止尝试过的一些示例:


    - sudo cp /builds/project/openjdk-17_linux-x64_bin.tar.gz /usr/lib/jvm
    - sudo tar zxvf "/usr/lib/jvm/openjdk-17_linux-x64_bin.tar.gz" -C /usr/lib/jvm
    - echo "JAVA_HOME=/usr/lib/jvm/jdk-17" | sudo tee -a /etc/profile
    - echo "PATH=${PATH}:${HOME}/bin:${JAVA_HOME}/bin" | sudo tee -a /etc/profile
    - echo "export JAVA_HOME" | sudo tee -a /etc/profile
    - echo "export JRE_HOME" | sudo tee -a /etc/profile
    - echo "export PATH" | sudo tee -a /etc/profile
    - sudo cat /etc/profile
    - echo "JAVA_HOME=/usr/lib/jvm/jdk-17" | sudo tee -a /.bashrc
    - echo "PATH=${PATH}:${JAVA_HOME}/bin" | sudo tee -a /.bashrc
    - echo "JAVA_HOME='/usr/lib/jvm/jdk-17' | sudo tee -a /etc/environment"
    
    - export JAVA_HOME=/usr/lib/jvm/jdk-17
    - export PATH=$PATH:$JAVA_HOME/bin



这些命令的大量组合后 sudo update-alternatives --config java 的输出仍然是:

openjdk version "11.0.12" 2021-07-20
OpenJDK Runtime Environment (build 11.0.12+7-post-Debian-2deb10u1)
OpenJDK 64-Bit Server VM (build 11.0.12+7-post-Debian-2deb10u1, mixed mode, sharing)



但是如果我尝试 /usr/lib/jvm/jdk-17/bin/java -version 它会打印 17.
将默认 Java 版本设置为 17 的解决方案是什么。(还有一个解决方案让 ant 在不安装的情况下使用 JDK-17 也很好,因为我需要 JDK-17 ant)

我找到了解决办法。


    - sudo cp jdk-17-linux-x64.tar.gz /usr/lib/jvm
    - sudo tar zxvf "/usr/lib/jvm/jdk-17-linux-x64.tar.gz" -C /usr/lib/jvm
    - sudo \cp -r /usr/lib/jvm/jdk-17 /usr/lib/jvm/java-1.11.0-openjdk-amd64
    - sudo \cp -r /usr/lib/jvm/jdk-17 /usr/lib/jvm/default-java
    - sudo \cp -r /usr/lib/jvm/jdk-17 /usr/lib/jvm/java-11-openjdk-amd64
    - sudo \cp -r /usr/lib/jvm/jdk-17 /usr/lib/jvm/openjdk-11
    - sudo update-alternatives --remove-all java
    - sudo update-alternatives --remove-all javac
    - sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-17/bin/java 1



我在这里所做的是将 JDK-17 内容复制到 /usr/lib/jvm 文件夹中的所有文件夹。所以即使 docker 图像使用 JDK-11,我正在使用 JDK-17 重写它并上传源代码,现在该工具是使用 JKD-17 构建的。
PS:我知道这比较慢而且不专业,但就我而言,这比尝试从设置 docker 容器的人那里获得帮助更容易、更方便。

既然你已经找到了一种在旅途中更改 jdk 的方法,你可能真的想考虑更改 CI 的基本图像,以节省很多时间时间。此步骤将提高您的 CI 速度。这样做的步骤也相当简单。

  1. 编写你自己的 Dockerfile

以下为伪码。您可以查看 dockerfile builder

的描述
FROM your-original-image. This is what you have in your image tag in the gitlab-ci file.

COPY jdk-17-linux-x64.tar.gz /usr/lib/jvm
RUN sudo tar zxvf "/usr/lib/jvm/jdk-17-linux-x64.tar.gz" -C /usr/lib/jvm \
    && sudo \cp -r /usr/lib/jvm/jdk-17 /usr/lib/jvm/java-1.11.0-openjdk-amd64 \
    && sudo \cp -r /usr/lib/jvm/jdk-17 /usr/lib/jvm/default-java \
    && sudo \cp -r /usr/lib/jvm/jdk-17 /usr/lib/jvm/java-11-openjdk-amd64 \
    && sudo \cp -r /usr/lib/jvm/jdk-17 /usr/lib/jvm/openjdk-11 \
    && sudo update-alternatives --remove-all java \
    && sudo update-alternatives --remove-all javac \
    && sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-17/bin/java 1
  1. 构建 docker 图像
  • 如果您使用的是 docker 集线器,则需要登录 docker 并获取与代码段中的 dockerId 匹配的 dockerId。
  • 如果您使用的是像 harbor 或 artifactory 这样的私人仓库,您可能需要获得推送权限。
docker build . -t dockerId/Name-of-your-image-you-want:latest
  1. 使用docker push
  2. 上传docker图片
docker push dockerId/Name-of-your-image-you-want:latest
  1. 将你的gitlab-ci.yaml中的图片标签更改为dockerId/Name-of-your-image-you-want:latest