我正在使用Gitlab构建使用ant
的Java工具
该工具需要JDK 17,但ant
JDK版本是11,我试图改变它。
所以我尝试了很多使用远程存储库或远程下载站点的解决方案,但经过一些尝试后,我发现用于构建该工具的VM未连接到互联网(试图ping谷歌或我的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的解决方案是什么?(另一个解决方案是蚂蚁使用JDK-17而不安装它也将是伟大的,因为我需要JDK-17ant
)
既然您已经找到了一种随时更改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并获得一个与代码片段中的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
- 更改giitlab -ci中的图像标签。yaml到
dockerId/Name-of-your-image-you-want:latest
我找到了一个解决办法。
- 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容器的帮助。