我目前正在对Jenkins Pipeline插件(以前称为Workflow插件)进行一些评估.阅读文档我发现我目前无法使用env.WORKSPACE以下方法检索工作区路径
:
工作流脚本中当前不可使用以下变量:
NODE_LABELS
工作区
特定于SCM的变量,例如SVN_REVISION
有没有其他方法如何获得当前工作区的绝对路径?我需要运行一些测试,然后获取一些参数(一些可执行文件的绝对路径).我已经尝试new File("").absolutePath()在一个@NonCPS部分内部使用,但看起来非CPS的东西总是在主服务器上执行.
有没有人知道如何在不运行某些批处理脚本的情况下获取此路径,该脚本将路径存储到某个文件中,以后可以再次读入该文件?
我们在一些工作中动态创建并行步骤.感谢这个线程,我找到了如何动态创建带有参数的地图,以便在并行步骤中使用.
但是现在我想重用用于创建这些并行步骤的代码部分.为此,我觉得我需要为闭合咖喱做准备.
然而,currying似乎无法正常工作.在闭包内引用循环变量(valueCopy)做了正确的事情(如这里所提到的)但是currying并没有达到我的预期.
我做错了什么,这是不是(还)支持,是否有任何解决方法?这可能是Jenkins管道中的一个错误吗?
希望任何人都知道为什么这不起作用和/或如何让它工作.
Jenkins:LTS(2.32.1)及最新的插件更新截至2017/01/19.
升级到Pipeline后:Groovy插件版本2.40 eveything正在按预期工作.
管道脚本执行:
def echoSome(val) {
echo val
}
def buildClosures() {
def someList = ["1", "2", "3"]
def closures = [:]
for (value in someList) {
final valueCopy = value
closures[value] = {val ->
echo valueCopy.toString()
echo val.toString()
}.curry(value)
}
closures
}
parallel buildClosures()
Run Code Online (Sandbox Code Playgroud)
输出:
[Pipeline] parallel
[Pipeline] [1] { (Branch: 1)
[Pipeline] [2] { (Branch: 2)
[Pipeline] [3] { (Branch: 3)
[Pipeline] [1] echo
[1] 1
[Pipeline] …Run Code Online (Sandbox Code Playgroud) parallel-processing closures currying jenkins jenkins-pipeline
我遇到了 Jenkins Pipeline 阶段视图插件的问题:
我们有一些工作使用了大量的阶段,大约有 500 多个阶段。
不幸的是,这意味着当打开工作主页时,浏览器卡住了。到目前为止,唯一能够向我展示工作经典视图主页的浏览器是 chrome。所有其他人都完全失败了。
因此,我想找到一种方法来完全禁用舞台视图。但是看起来 Pipeline 插件依赖于它。我已经尝试设置,com.cloudbees.workflow.rest.external.JobExt.maxRunsPerJob=0但没有按预期工作。至少在设置时com.cloudbees.workflow.rest.external.JobExt.maxRunsPerJob=1它只会显示最后一次运行,这是一个小的性能改进。
有没有办法如何禁用舞台视图(插件),以便能够看到那个疯狂工作的主页,不幸的是现在必须有那么多(> 500)个阶段?
当前,我们在一个Jenkins实例(生产性实例)中用于处理多分支测试作业的bitbucket分支源插件遇到了一些麻烦:
在詹金斯中,与已删除分支相关的所有作业都不会被删除。显示为禁用。
检查Scan Multibranch Pipeline Log我发现以下条目:
Will not remove foobranch because it is new
Will not remove PR-1 because it is new
Will not remove bar because it is new
Will not remove freeDiskSpaceHack because it is new
Run Code Online (Sandbox Code Playgroud)
我们还有另一个实例(测试实例),所有实例都按预期工作-分支会立即删除,例如,在日志中看到以下内容:
Will remove freeDiskSpaceHack
Will remove foo
Run Code Online (Sandbox Code Playgroud)
除此之外,没有区别。
Will not remove <branch> because it is new。希望任何人都有头绪。
我们在 Jenkins 系统中大量使用管道作业,并且需要能够copyArtifacts使用Build selector for Copy Artifact作业参数对步骤进行参数化。
首先,我发现 - 虽然参数返回 a String- 该copyArtifacts步骤需要BuildSelector.
我找到了BuildSelectorParameter.getSelectorFromXml将参数转换为BuildSelector类似实例的方法:
properties([parameters([
[$class: 'BuildSelectorParameter',
defaultSelector: upstream(fallbackToLastSuccessful: true),
description: '',
name: 'copyArtifactSelector']])
])
@NonCPS
static BuildSelector getSelectorFromParam(String xmlText) {
BuildSelectorParameter.getSelectorFromXml(xmlText)
}
node {
def selector = getSelectorFromParam(params.copyArtifactSelector)
copyArtifacts(
projectName: 'sourceJob',
selector: selector
)
}
Run Code Online (Sandbox Code Playgroud)
但是我刚刚意识到BuildSelector创建的不是Serializable. 因此,我现在得到了预期的异常:
hudson.plugins.copyartifact.TriggeredBuildSelector
导致:java.io.NotSerializableException:hudson.plugins.copyartifact.TriggeredBuildSelector
在 org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:860)
在 org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032)
在 org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:988)
在 org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:967)
在 org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)
之后,我尝试检查复制工件插件如何处理 - 不幸的是我在源代码中找不到任何线索。也许它只是偶然起作用?创建 …
我正在尝试运行一个包含多个代理的 jenkins 文件,但遇到了错误。这是我的詹金斯文件的片段:
pipeline {
agent {
docker {
label 'agentAAA'
...
}
node {
label 'agentBBB'
...
}
}
...
stages {
stage('to run on AAA') {
agent {
label 'agentAAA'
}
...
}
stage('to run on BBB') {
agent {
label 'agentBBB'
}
...
}
stage('to run on BBB') {
agent {
label 'agentBBB'
}
...
}
Run Code Online (Sandbox Code Playgroud)
我收到这些错误:
我在文档中找不到任何有关如何引用先前声明的代理的示例。我了解如何在每个单独的阶段声明代理,但最终我的文件中会出现许多重复的声明。