Ошибки при сборке в 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