我在Jenkinsfile(Groovy)上有这样的东西,我想在变量中记录stdout和退出代码,以便稍后使用这些信息.
sh "ls -l"
Run Code Online (Sandbox Code Playgroud)
我怎么能这样做,特别是因为你似乎无法在里面运行任何类型的groovy代码Jenkinsfile?
在编写jenkins管道时,为了查看它是否有效,提交每个新更改似乎非常不方便.
有没有办法在不提交代码的情况下在本地执行这些?
如何从内部触发另一个作业的构建Jenkinsfile?
我假设这个工作是同一个github组织下的另一个存储库,一个已经有自己的Jenkins文件.
我也想在分支名称为master时执行此操作,因为触发任何本地分支的下游构建没有意义.
更新:
stage 'test-downstream'
node {
def job = build job: 'some-downtream-job-name'
}
Run Code Online (Sandbox Code Playgroud)
仍然,执行时我得到一个错误
找不到名为some-downtream-job-name的参数化作业
我确信这个工作存在于jenkins中,并且与当前工作文件夹在同一组织文件夹下.这是另一项有自己的工作Jenkinsfile.
请注意,此问题特定于GitHub组织插件,该插件可从GitHub组织自动创建和维护每个存储库和分支的作业.
例如:
var output=sh "echo foo";
echo "output=$output";
Run Code Online (Sandbox Code Playgroud)
我会得到:
output=0
Run Code Online (Sandbox Code Playgroud)
所以,显然我得到退出代码而不是标准输出.是否有可能将stdout捕获到管道变量中,这样我就可以得到:
output=foo
作为我的结果?
我有一个具有多个阶段的Jenkins文件,其中一个实际上是另一个工作(部署一个),在某些情况下可能会失败.
我知道我可以使用Jenkinsfile提示,但我真的不知道如何为这个作业实现重试机制.
我正在尝试运行块,如果我的jenkins工作空间中存在一个目录,并且工作空间中的管道步骤"fileExists:验证文件存在"似乎无法正常工作.
我正在使用Jenkins v 1.642和Pipeline v 2.1.并试图有一个像这样的条件
if ( fileExists 'test1' ) {
//Some block
}
Run Code Online (Sandbox Code Playgroud)
我在管道中有哪些其他选择?
我目前正在对Jenkins Pipeline插件(以前称为Workflow插件)进行一些评估.阅读文档我发现我目前无法使用env.WORKSPACE以下方法检索工作区路径
:
工作流脚本中当前不可使用以下变量:
NODE_LABELS
工作区
特定于SCM的变量,例如SVN_REVISION
有没有其他方法如何获得当前工作区的绝对路径?我需要运行一些测试,然后获取一些参数(一些可执行文件的绝对路径).我已经尝试new File("").absolutePath()在一个@NonCPS部分内部使用,但看起来非CPS的东西总是在主服务器上执行.
有没有人知道如何在不运行某些批处理脚本的情况下获取此路径,该脚本将路径存储到某个文件中,以后可以再次读入该文件?
在阅读了解释Pipeline插件的Jenkins 教程后,似乎插件应该可以实现Post-Build步骤.但是,文档在具体说明方面相当有限.
例如,我想知道如何实现:
- 仅在构建成功时运行
- 仅在构建成功或不稳定时运行
- 无论构建结果如何都运行
仅在构建成功时运行
stage 'build'
... build
... tests
stage 'post-build'
...
Run Code Online (Sandbox Code Playgroud)
(或添加-Dmaven.test.failure.ignore=false到MAVEN_OPTS)
仅在构建成功或不稳定时运行
stage 'build'
... build
try {
... tests
} catch {
...
}
stage 'post-build'
...
Run Code Online (Sandbox Code Playgroud)
(或添加-Dmaven.test.failure.ignore=true到MAVEN_OPTS)
无论构建结果如何运行 - 是否可以使用try / catch / finally?
try {
stage 'build'
...
} catch {
...
} finally {
stage 'post-build'
...
}
Run Code Online (Sandbox Code Playgroud)(我注意到最终的构建状态被设置为SUCCESS,即使某些阶段,即'build'在基于最后阶段设置时失败了.这是否意味着最终构建状态需要明确设置,即currentBuild.result = 'UNSTABLE'?)
这是我正在玩的代码
node {
stage 'build'
echo 'build'
stage 'tests'
echo 'tests'
stage 'end-to-end-tests'
def e2e = build job:'end-to-end-tests', propagate: false
result = e2e.result
if (result.equals("SUCCESS")) {
stage 'deploy'
build 'deploy'
} else {
?????? I want to just fail this stage
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法让我将"端到端测试"阶段标记为失败,而不会使整个工作失败?传播假只是总是将舞台标记为真,这不是我想要的,但传播真实标志着失败的工作,我也不想要.
我正在研究Jenkins Pipeline:Multibranch的功能.据说最近推出的properties步骤在那里可能有用,但我无法理解它是如何工作的以及它的目的是什么.
它的提示信息似乎不是很清楚:
更新运行此步骤的作业的属性.主要用于多分支工作流,因此Jenkinsfile本身可以编码静态作业配置.
所以我用这个脚本创建了一个新的Pipeline(直接粘贴到Jenkins而不是SCM中):
properties [[$class: 'ParametersDefinitionProperty',
parameterDefinitions: [[$class: 'StringParameterDefinition',
defaultValue: '', description: '', name: 'PARAM1']]
]]
Run Code Online (Sandbox Code Playgroud)
我运行它并没有发生任何事情,工作没有收到一个新的参数,即使它确实我没有得到为什么我可能需要这个.有人可以解释一下吗?
UPDATE1:我尝试将带有属性步骤的虚拟管道放入我的git仓库,然后配置了一个多分支作业.
println 1
properties [[$class: 'ParametersDefinitionProperty', parameterDefinitions: [[$class: 'StringParameterDefinition', defaultValue: 'str1', description: '', name: 'PARAM1']]], [$class: 'RebuildSettings', autoRebuild: false, rebuildDisabled: false]]
println 2
Run Code Online (Sandbox Code Playgroud)
它找到了我的分支,创建了一个工作,但构建失败了:
groovy.lang.MissingPropertyException: No such property: properties for class: groovy.lang.Binding
at groovy.lang.Binding.getVariable(Binding.java:62)
at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onGetProperty(SandboxInterceptor.java:185)
at org.kohsuke.groovy.sandbox.impl.Checker$4.call(Checker.java:241)
at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checker.java:238)
at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.getProperty(SandboxInvoker.java:23)
at com.cloudbees.groovy.cps.impl.PropertyAccessBlock.rawGet(PropertyAccessBlock.java:17)
at WorkflowScript.run(WorkflowScript:2)
at ___cps.transform___(Native Method)
at com.cloudbees.groovy.cps.impl.PropertyishBlock$ContinuationImpl.get(PropertyishBlock.java:62)
at com.cloudbees.groovy.cps.LValueBlock$GetAdapter.receive(LValueBlock.java:30)
at com.cloudbees.groovy.cps.impl.PropertyishBlock$ContinuationImpl.fixName(PropertyishBlock.java:54)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) …Run Code Online (Sandbox Code Playgroud)