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

Posted

技术标签:

【中文标题】将 gitlab JDK 更新为 JDK17(VM 没有互联网连接)【英文标题】:Update gitlab JDK to JDK17 (VM doesn't have internet connection) 【发布时间】:2021-12-07 06:03:34 【问题描述】:

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

该工具需要 JDK 17,但是ant JDK 版本是 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

【问题讨论】:

你不是在 docker 镜像中运行吗?能换个图吗? Using Docker executor with image organizationwebpage/ccp/vm:stable ... 这就是它所说的,所以我想您是对的,但我不知道如何更改图像。 是内部图片吗?你能和那些成功的人谈谈吗? 我不知道它是什么类型的图像,我不知道在哪里可以看到有关它的详细信息,并且确定它是否不是由团队中的某个人管理的(并且不是)我联系不上他们 创建一个新图像(可能基于您拥有的)并将其推送到 gitlab 信任的存储库,然后修改您的 gitlab yml 【参考方案1】:

既然您已经找到了一种随时更改 jdk 的方法,您可能真的需要考虑更改 CI 的基本映像以节省大量时间。此步骤将提高您的 CI 速度。执行此操作的步骤也相当简单。

    编写自己的 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
    构建 docker 镜像
如果您使用的是 docker hub,则需要登录 docker 并获取与 sn-p 中的 dockerId 匹配的 dockerId。 如果您使用的是像 Harbor 或 Artifactory 这样的私有仓库,您可能需要获得推送权限。
docker build . -t dockerId/Name-of-your-image-you-want:latest
    使用 docker push 上传 docker 镜像
docker push dockerId/Name-of-your-image-you-want:latest
    将你的 gitlab-ci.yaml 中的图片标签改为dockerId/Name-of-your-image-you-want:latest

【讨论】:

这在问题的cmets中已经有人提出了。问题是,容器由另一个团队管理,他们将它用于多个项目,因此很难更改这些。我也不能创建自己的,因为部署应该只在这个项目中完成......但是感谢您的回复,这可以帮助其他遇到问题的人。【参考方案2】:

我找到了解决方案。


    - 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 容器的人那里获得帮助更容易也更方便。

【讨论】:

以上是关于将 gitlab JDK 更新为 JDK17(VM 没有互联网连接)的主要内容,如果未能解决你的问题,请参考以下文章

基于Jenkins+maven+gitlab+harbor+Rancher+k8s的CI/CD实现(尚未完成,还在更新中)

jdk1.6 VM调优实战

JDK19都出来了~是时候梳理清楚JDK的各个版本的特性了JDK9特性讲解

Java17,有史以来最快 JDK

Java17,有史以来最快 JDK!

解压jdk1.8安装包(exe)后,java.version -version报错 Error occurred during initialization of VM,java/lang/NoCla