Ошибки при сборке проекта в TeamCity (groovy)

Ошибки при сборке в TeamCity (groovy)

(это незаконченная статья)

Я пытался собрать проект в TeamCity, который использует Java 17. На 11 января 2022г.  на сайте jetbrains.com заявлено следующее:

Note that TeamCity is not currently compatible with Java 17, which makes Java 11 the only version planned for support in TeamCity Server 2022.04.

Я попытался всё равно сделать сборку, но никакие кастомные решение сделать это к сожалению не помогли.

java.lang.IllegalArgumentException: No enum constant org.jetbrains.jps.model.java.LanguageLevel.JDK_17

установка ява 17

openJDK 17
https://jdk.java.net/17/

wget https://download.java.net/java/GA/jdk17/0d483333a00540d886896bac774ff48b/35/GPL/openjdk-17_linux-x64_bin.tar.gz
tar xvfz openjdk-17_linux-x64_bin.tar.gz
mv jdk-17 /usr/lib/jvm/jdk-17
update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-17/bin/java 2
update-alternatives --config java

update-alternatives --set java /usr/lib/jvm/jdk-17/bin/java

от пользователя teamcity. переменные окружения в .bashrc (т.к. видимо перезаписываются от рутовых настроек, если перезагрузка).

меняем и source .bashrc

export TEAMCITY_JRE=/usr/lib/jvm/jdk-17
export JAVA_HOME=/usr/lib/jvm/jdk-17
export JRE_HOME=/usr/lib/jvm/jdk-17
export JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF8

export PATH=${JAVA_HOME}/bin:$PATH

teamcity@teamcity:~/TeamCity/buildAgent/bin$ ./agent.sh stop/start

После перезагрузки в параметры агента подтянулись значения переменных окружения java 17 (но остались и установленной 11й).

В build steps стало возможным тоже выбрать 17ю версию.

Повторный запуск билда, другая ошибка:

Process exited with code 1 (Step: Rebuild (IntelliJ IDEA Project))
Step Rebuild (IntelliJ IDEA Project) failed

Подробности от агента:

Caused by: groovy.lang.MissingMethodException: No signature of method: org.codehaus.groovy.tools.RootLoader.getPackage() is applicable for argument types: (java.lang.String) values: [gant]

Тут либа, из-за которой происходит ошибка — ~/TeamCity/buildAgent/tools/gant/lib

Установил агента на отдельную машину через AgentPush. Появилось предупреждение о несовместимости агента с проектом:

Implicit requirements:
env.JDK_17_0 defined in Build step: Rebuild

Ставлю 17ю яву.

Ant output
10:35:46     java.lang.reflect.InvocationTargetException
10:35:46       at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
10:35:46       at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
10:35:46       at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
10:35:46       at java.base/java.lang.reflect.Method.invoke(Method.java:568)
10:35:46       at org.codehaus.groovy.tools.GroovyStarter.rootLoader(GroovyStarter.java:109)
10:35:46       at org.codehaus.groovy.tools.GroovyStarter.main(GroovyStarter.java:131)
10:35:46       at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
10:35:46       at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
10:35:46       at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
10:35:46       at java.base/java.lang.reflect.Method.invoke(Method.java:568)
10:35:46       at jetbrains.buildServer.agent.ideaRunner.ToolsAwareGroovyStarter.main(ToolsAwareGroovyStarter.java:48)
10:35:46     Caused by: groovy.lang.MissingMethodException: No signature of method: org.codehaus.groovy.tools.RootLoader.getPackage() is applicable for argument types: (java.lang.String) values: [gant]
10:35:46       at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:58)
10:35:46       at org.codehaus.groovy.runtime.callsite.PojoMetaClassSite.call(PojoMetaClassSite.java:49)
10:35:46       at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
10:35:46       at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
10:35:46       at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)
10:35:46       at gant.Gant.<init>(Gant.groovy:192)
10:35:46       at gant.Gant.<init>(Gant.groovy:180)
10:35:46       at gant.Gant.<init>(Gant.groovy:173)
10:35:46       at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
10:35:46       at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
10:35:46       at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
10:35:46       at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
10:35:46       at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
10:35:46       at org.codehaus.groovy.reflection.CachedConstructor.invoke(CachedConstructor.java:83)
10:35:46       at org.codehaus.groovy.runtime.callsite.ConstructorSite$ConstructorSiteNoUnwrapNoCoerce.callConstructor(ConstructorSite.java:105)
10:35:46       at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallConstructor(CallSiteArray.java:60)
10:35:46       at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:235)
10:35:46       at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:239)
10:35:46       at gant.Gant.main(Gant.groovy:667)

Версии библиотек, с которыми может быть проблема:

ant-1.9.9.jar
ant-launcher-1.9.9.jar
commons-cli-1.2.jar
gant_groovy2.4-1.9.11.jar
groovy-all-2.4.11.jar

При замене библиотеки на groovy-all-source 3.0.9 ошибка

Exception in thread "main" java.lang.ClassNotFoundException: org.codehaus.groovy.tools.GroovyStarter

Она означает, что не найден GroovyStarter, который должен быть в библиотеке. Получается, в 2.4.11 он есть.

/usr/share/groovy

Вместе с запуском агента тимсити запускает и groovy (при условии, если он установлен). (ps -Af | grep groovy)

Конфиг запуска groovy — nano /root/BuildAgent/tools/gant/bin/startGroovy. В нём есть переменная и ссылка на библиотеку:

STARTER_CLASSPATH=»$GROOVY_HOME/lib/groovy-all-2.4.11.jar»

По факту нет библиотеки на месте и переменная не определена (решается после установки groovy по инструкции ниже)

Инструкция по установке groovy 3.0.9 — https://infoit.com.ua/linux/ubuntu/kak-ustanovit-apache-groovy-v-ubuntu-20-04-18-04/

В конфиге указано использовать конкретную библиотеку:

/root/BuildAgent/tools/gant/bin/startGroovy:STARTER_CLASSPATH=»$GROOVY_HOME/lib/groovy-all-2.4.11.jar»

Я подменял в этом пути название библиотеки, чтобы использовалась более новая версия, но это не помогло.


Библиотеки jar — repo1.maven.org

Добавить комментарий