我花了很多时间没有任何成功。根据{{3}}我应该可以使用任何可用的SCM,但我不知道如何映射路径,在哪里,如果在任何地方,插入$ {library.RegLib.version}或使用什么工作区名称。
我按照上述文档设置了一个库:
<root>/src/org/somelib/MyLib.groovy
包含:
package org.registration;
def doTest() {
echo "test running..."
}
我尝试了很多不同的东西,但没有任何作用。我还尝试重新启动Jenkins,如上所述this。没有变化。
我的构建报告:
Loading library MyLib@#1
java.lang.ArrayIndexOutOfBoundsException: 1
at org.jenkinsci.plugins.p4.tasks.AbstractTask.setEnvironment(AbstractTask.java:106)
at org.jenkinsci.plugins.p4.PerforceScm.checkout(PerforceScm.java:391)
at org.jenkinsci.plugins.workflow.steps.scm.SCMStep.checkout(SCMStep.java:109)
at org.jenkinsci.plugins.workflow.libs.SCMSourceRetriever.doRetrieve(SCMSourceRetriever.java:107)
at org.jenkinsci.plugins.workflow.libs.SCMRetriever.retrieve(SCMRetriever.java:63)
at org.jenkinsci.plugins.workflow.libs.LibraryAdder.retrieve(LibraryAdder.java:150)
at org.jenkinsci.plugins.workflow.libs.LibraryAdder.add(LibraryAdder.java:131)
at org.jenkinsci.plugins.workflow.libs.LibraryDecorator$1.call(LibraryDecorator.java:99)
at org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1053)
at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:591)
at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:569)
at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:546)
at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:298)
at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:268)
at groovy.lang.GroovyShell.parseClass(GroovyShell.java:688)
at groovy.lang.GroovyShell.parse(GroovyShell.java:700)
at org.jenkinsci.plugins.workflow.cps.CpsGroovyShell.reparse(CpsGroovyShell.java:67)
at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.parseScript(CpsFlowExecution.java:429)
at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.start(CpsFlowExecution.java:392)
at org.jenkinsci.plugins.workflow.job.WorkflowRun.run(WorkflowRun.java:221)
at hudson.model.ResourceController.execute(ResourceController.java:98)
at hudson.model.Executor.run(Executor.java:404)
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: Loading libraries failed
“默认版本”设置为1,因为只有一次提交。我也试过#1。我不知道是映射特定文件还是顶级目录。如果我删除默认版本,则构建失败并抱怨我没有设置版本。它应该是可选的,但显然不是。
我也尝试过使用vars目录
<root>/vars/doTest.groovy
包含:
def call(msg) {
echo msg
}
但我认为还需要加载库。文档对此不清楚。
因此...
这适用于perforce吗?
如何映射路径以使其有效?
如何使vars中的代码可访问?它是作为整个库的一部分加载的吗?
我的代码中某处有错误吗?
非常感谢。
答案 0 :(得分:0)
安装Pipeline Shared Libraries插件。
配置在Manage Jenkins中 - &gt;全球管道图书馆
检索方法应为legacy mode
。添加存储库
勾选Load implicitly
以加载每个版本中的脚本
将groovy文件放在vars / yourGroovy.groovy中并从Jenkinsfile调用它:
yourGroovy()
答案 1 :(得分:0)
p4插件似乎是一个开放的问题,与p4插件无法处理与工作区根目录不同位置的perforce签出有关:
https://issues.jenkins-ci.org/browse/JENKINS-40055
https://issues.jenkins-ci.org/browse/JENKINS-36243
编辑:根据第一期的记者的说法,你可以使用旧的插件版本来使用它:
在workflow-cps-global-lib的2.4版本中没有崩溃 开始只在2.5版本中发生。
答案 2 :(得分:0)
这真的很晚,但是我想知道您是否找到了解决方案。
在Amityo的回答中,您评论说您的Perforce源路径为//<prod>/trunk/src/apps/jenkinslib#${library.RegLib.version}/...
,如果在管道中未明确指定其他版本,则为${library.RegLib.version} = 1
。
我认为Jenkins会从字面上查找名为jenkinslib#1
的文件夹,因为您的文件夹仅名为jenkinslib
,所以找不到该文件夹。
我不知道您如何设置结构以支持不同的版本,但是即使配置页面告诉您添加库,在地图中将//<prod>/trunk/src/apps/jenkinslib/...
作为源路径也可能有效。 RegLib.version。
我本来会在Amityo的帖子上评论所有这些,但是我没有足够的声誉。
答案 3 :(得分:0)
为了回应#HS10,我这样做了,我一直在意要更新它,以使他人受益多年,但是生活中的其他一切似乎都变得更加重要。既然您已经问过,这就是我所做的。
在Jenkins / Configuration的“全局管道库”下,我设置了以下内容:
具体来说,提供一个function onEachFeature (feature, layer) {
layer.on('mouseover', function (e) {
e.target.setStyle({
color: "#FF0000"
});
});
layer.on('mouseout', function (e) {
e.target.setStyle({
color: "#000000"
});
});
}
并将Name
设置为Default version
。将head
设置为Retrieval method
。 Perforce还没有现代SCM支持。在Legacy SCM
下,选择Source Code Management
。请注意,这是Perforce Software
插件,而不是列为p4
的旧Perforce
插件。我怀疑使用Perforce自己编写的版本很重要。选择您已配置的凭据,并提供匹配的工作空间名称和映射。我可能不早知道有错。其他设置应由您自行决定。库目录结构与文档相同。我确实有一段时间认为工作空间名称必须为Perforce
,但最近的实验似乎证明了这一点。
在您的管道中,像这样导入库:
_global_lib
您现在应该有一个可以使用的库。
我想我也有这个错误。请注意,下划线很重要。有关更多详细信息,请参见“全球图书馆”文档。获得这项工作使我非常痛苦,所以我希望这可以使某人免于遭受类似的经历。