在Jenkins / docker下,xtext maven构建失败

时间:2018-01-18 17:35:42

标签: eclipse maven docker jenkins xtext

我正在使用xtext2.13 / java8开发xtext DSL项目。这一切都在maven下构建并执行回归测试,现在我想将构建移动到使用Jenkins在CI下运行。 Jenkins作业在docker镜像中运行maven。我特意使用的是docker图片“maven:3.5-jdk-8”。 我可以看到构建开始 - 日志显示正在下载的p2依赖项,但随后出现此异常:

[INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/eclipse/tycho/org.eclipse.tycho.p2.tools.impl/1.0.0/org.eclipse.tycho.p2.tools.impl-1.0.0.jar (48 kB at 630 kB/s)
[WARNING] Error initializing: org.eclipse.tycho.p2.resolver.P2DependencyResolver@72725ee1
java.lang.RuntimeException: java.lang.IllegalStateException: Service is not registered class='interface org.eclipse.tycho.core.shared.ProxyServiceFacade'
at org.eclipse.sisu.equinox.embedder.internal.DefaultEquinoxEmbedder.checkStarted (DefaultEquinoxEmbedder.java:312)
...

我可以在本地docker中运行docker / maven构建,它运行正常。我在Jenkins管道中运行时只看到这个错误。

该错误并未提供任何关于底层问题可能是什么的线索。我只能猜测它可能是以下之一:

  • 对外部回购的不同访问权限(但之前能够下载其他几十种资源)
  • 不同的本地权限(可能缺少某些资源的权限?)

还有其他建议吗? 感谢

1 个答案:

答案 0 :(得分:1)

我有同样的问题。发布我的解决方案以供参考。

根本原因是Maven本地存储库目录的路径中包含?(即?/.m2/repository),而Tycho无法正确解析该目录(常规的Maven依赖关系很好)。 发生这种情况的原因是,如果在运行容器时使用--user标志并且在容器内部,/etc/passwd中没有该用户的映射,则${user.home}不能正确解析。

解决方案是在mvn命令中手动将路径指定为有效路径,例如 -Dmaven.repo.local=/path/to/repo

我想其他选择是:

  • 在Maven设置文件中指定路径,或
  • 使相应的用户在容器中可用(例如,将附加参数添加到容器-v /etc/passwd:/etc/passwd:ro中)