【发布时间】:2020-04-03 12:21:09
【问题描述】:
我正在尝试从 jenkins 运行与从 IDE 或 cmd 相同的构建。从 IDE/CMD 重建大约需要 3 分钟,从 jenkins 重建需要 60 分钟。
我使用基于 Eclipse 的 IDE 和 ant。 我从詹金斯管道的工作区使用这个命令
D:/programy/IngeDev_8.20.2.0/ingedevc.exe -data D:/ingedev/pipeline2server -clean -nosplash -application org.eclipse.ant.core.antRunner -buildfile D:/ingedev/pipeline2server/demoApp02/Ant/build.xml SERVER_UAT
这个构建在 3 分钟内完成。
当我查看 jenkins build 时,我看到执行了相同的命令 1
构建需要 1 小时。
两种情况下的输出相同。在这两种情况下,我都会遇到异常
2019-12-10 10:39:38 ERROR ProtobufActivator:69 - Failed to create injector for com.google.eclipse.protobuf.Protobuf
2019-12-10 10:39:38 ERROR ProtobufActivator:70 - Workbench has not been created yet.
java.lang.IllegalStateException: Workbench has not been created yet.
at org.eclipse.ui.PlatformUI.getWorkbench(PlatformUI.java:93)
at com.google.eclipse.protobuf.ui.util.Workbenches.activeWorkbenchWindow(Workbenches.java:37)
at com.google.eclipse.protobuf.ui.ProtobufUiModule.<init>(ProtobufUiModule.java:69)
at com.google.eclipse.protobuf.ui.internal.ProtobufActivator.getUiModule(ProtobufActivator.java:85)
at com.google.eclipse.protobuf.ui.internal.ProtobufActivator.createInjector(ProtobufActivator.java:65)
at com.google.eclipse.protobuf.ui.internal.ProtobufActivator.getInjector(ProtobufActivator.java:55)
at com.google.eclipse.protobuf.ui.ProtobufExecutableExtensionFactory.getInjector(ProtobufExecutableExtensionFactory.java:26)
at org.eclipse.xtext.ui.guice.AbstractGuiceAwareExecutableExtensionFactory.create(AbstractGuiceAwareExecutableExtensionFactory.java:49)
at org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtension(ConfigurationElement.java:262)
at org.eclipse.core.internal.registry.ConfigurationElementHandle.createExecutableExtension(ConfigurationElementHandle.java:55)
at org.eclipse.xtext.internal.ResourceServiceProviderDescriptor.get(ResourceServiceProviderDescriptor.java:39)
at org.eclipse.xtext.resource.impl.ResourceServiceProviderRegistryImpl$InternalData.getServiceProvider(ResourceServiceProviderRegistryImpl.java:40)
at org.eclipse.xtext.resource.impl.ResourceServiceProviderRegistryImpl.getResourceServiceProvider(ResourceServiceProviderRegistryImpl.java:77)
at org.eclipse.xtext.resource.impl.ResourceServiceProviderRegistryImpl.getResourceServiceProvider(ResourceServiceProviderRegistryImpl.java:93)
at org.eclipse.xtext.ui.resource.UriValidator.isValid(UriValidator.java:28)
at org.eclipse.xtext.ui.resource.Storage2UriMapperImpl.isValidUri(Storage2UriMapperImpl.java:136)
at org.eclipse.xtext.ui.resource.Storage2UriMapperImpl.getUri(Storage2UriMapperImpl.java:122)
at org.eclipse.xtext.builder.impl.ToBeBuiltComputer.getUri(ToBeBuiltComputer.java:155)
at org.eclipse.xtext.builder.impl.ToBeBuiltComputer.updateStorage(ToBeBuiltComputer.java:122)
at org.eclipse.xtext.builder.impl.ToBeBuiltComputer$2.visit(ToBeBuiltComputer.java:108)
at org.eclipse.core.internal.resources.Resource$2.visit(Resource.java:120)
at org.eclipse.core.internal.resources.Resource$1.visitElement(Resource.java:84)
at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:82)
at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:87)
at org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:87)
at org.eclipse.core.internal.watson.ElementTreeIterator.iterate(ElementTreeIterator.java:129)
at org.eclipse.core.internal.resources.Resource.accept(Resource.java:94)
at org.eclipse.core.internal.resources.Resource.accept(Resource.java:52)
at org.eclipse.core.internal.resources.Resource.accept(Resource.java:117)
at org.eclipse.core.internal.resources.Resource.accept(Resource.java:105)
at org.eclipse.xtext.builder.impl.ToBeBuiltComputer.updateProject(ToBeBuiltComputer.java:103)
at org.eclipse.xtext.builder.impl.javasupport.JdtToBeBuiltComputer.updateProject(JdtToBeBuiltComputer.java:88)
at org.eclipse.xtext.builder.impl.XtextBuilder.fullBuild(XtextBuilder.java:209)
at org.eclipse.xtext.builder.impl.XtextBuilder.build(XtextBuilder.java:89)
at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:735)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:206)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:330)
at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:405)
at org.eclipse.core.internal.resources.Project$1.run(Project.java:566)
at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2240)
at org.eclipse.core.internal.resources.Project.internalBuild(Project.java:544)
at org.eclipse.core.internal.resources.Project.build(Project.java:120)
at com.ingenico.ingedev.telium.ant.task.TeliumBuildTask.execute(TeliumBuildTask.java:245)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:293)
at sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
...
但是两种情况下的例外都是一样的,所以我认为这没关系。 我的计划是从 jenkins 运行 Ant 构建,因为 Ant 是 IDE 的一部分。 这是蚂蚁文件
<project name="Build" default="SERVER_UAT">
<!-- Load the ant-contrib package (needed for the 'foreach' task). -->
<taskdef resource="net/sf/antcontrib/antcontrib.properties">
</taskdef>
<property name="debugflag" value="false"/>
<property name="build.log.dir" location="${basedir}/buildlogs"/>
<mkdir dir="${build.log.dir}"/>
<tstamp>
<format property="timestamp" pattern="yyyy-MM-dd_HH-mm-ss"/>
</tstamp>
<property name="build.log.filename" value="buildLog_${timestamp}.txt"/>
<property name="rebuild.err.filename" value="buildErrors_${timestamp}.txt"/>
<property name="exportDir" location="${basedir}/Delivery" />
<property name="importDir" location="${basedir}/Delivery" />
<property name="workspaceDir" location="${basedir}/../.." />
<target name="initProjectName">
<ingedev.getCurrentProjectName outputproperty="projectName"/>
</target>
<target name="SERVER_UAT" depends="initProjectName">
<record name="${build.log.dir}/${build.log.filename}" loglevel="info" append="false" action="start"/>
<echo message="Build logged to ${build.log.filename}"/>
<!-- ${ingedev.version} property is set to IngeDev version-->
<echo message="IngeDev Version=">${ingedev.version}</echo>
<echo message=""/>
<echo message="**************************************************************"/>
<echo>Building '${projectName}'... </echo>
<echo message=""/>
<echo message="**************************************************************"/>
<echo message="Build ACTIVE Configuration"/>
<ingedev.telium.build
config="SERVER_UAT"
project="${projectName}"
kind ="incremental"
/>
<record name="${build.log.dir}/${build.log.filename}" loglevel="verbose" append="false" action="stop"/>
<eclipse.refreshLocal resource="${projectName}" depth="infinite"/>
</target>
</project>
这是我的 Jenkins 文件
pipeline {
agent any
stages {
stage('Build') {
steps {
echo 'Building..'
bat 'D:/programy/IngeDev_8.20.2.0/ingedevc.exe -data D:/ingedev/pipeline2server -clean -nosplash -application org.eclipse.ant.core.antRunner -buildfile D:/ingedev/pipeline2server/demoApp02/Ant/build.xml SERVER_UAT'
}
}
}
}
谁能告诉我我做错了什么? 谢谢。
我在 Windows 10 的桌面上运行,Jenkins 版本。 2.190.3 和 blueocean 1.21.0 和 IDE 是 IngeDev 8.20.2
【问题讨论】: