我的代码类似于我在Jenkinsfile中的代码:
node {
checkout scm
// do some stuff
try {
// do some maven magic
} catch (error) {
stage "Cleanup after fail"
emailext attachLog: true, body: "Build failed (see ${env.BUILD_URL}): ${error}", subject: "[JENKINS] ${env.JOB_NAME} failed", to: 'someone@example.com'
throw error
} finally {
step $class: 'JUnitResultArchiver', testResults: '**/TEST-*.xml'
}
}
Run Code Online (Sandbox Code Playgroud)
如果上面的代码因为一些与jenkins-pipeline相关的错误而try { }失败(例如使用未经批准的静态方法),则脚本会无声地失败.当我删除try/catch/finally时,我可以看到错误.难道我做错了什么?不应该重新抛出error使管道错误出现在日志中?
编辑:当我使用尚未分配的变量时,我已设法将问题固定为groovy语法.示例:
echo foo
如果foo未在任何地方声明/分配Jenkins将失败构建,并且如果它在try/catch/finally内部而不会重新抛出异常,则不会显示原因.
我试图在前一阶段使用try/catch复制Jenkins管道中的条件阶段的等价物,然后设置成功变量,用于触发条件阶段.
看来try catch块是要走的路,将成功变量设置为SUCCESS或FAILED,稍后将其用作when语句的一部分(作为条件阶段的一部分).
我使用的代码如下:
pipeline {
agent any
stages {
try{
stage("Run unit tests"){
steps{
sh '''
# Run unit tests without capturing stdout or logs, generates cobetura reports
cd ./python
nosetests3 --with-xcoverage --nocapture --with-xunit --nologcapture --cover-package=application
cd ..
'''
currentBuild.result = 'SUCCESS'
}
}
} catch(Exception e) {
// Do something with the exception
currentBuild.result = 'SUCCESS'
}
stage ('Speak') {
when {
expression { currentBuild.result == 'SUCCESS' }
}
steps{
echo "Hello, CONDITIONAL"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我收到的最新语法错误如下: …
我希望能够同时运行同一个Jenkins工作的几个版本.
例:
我想这样做的原因是为了避免创建几个几乎完全相同的工作,所有工作都需要维护.
有没有办法做到这一点,或者可能是另一种解决方案(即 - 从基础作业动态创建作业并在完成后将其删除)?
当我在Jenkins工作流(Jenkins 1.609.1,工作流1.8)上运行以下代码时,我收到'NotSerializableException'错误(也在下面).但是,如果我将"构建作业"移到"for"范围之外,它可以正常工作(作业已激活).有什么想法为什么会这样?
node('master') {
ws('/opt/test) {
def file = "/ot.property"
def line = readFile (file)
def resultList = line.tokenize()
for(item in resultList )
{
build job: 'testjob_1'
}
}
}
Run Code Online (Sandbox Code Playgroud)
得到错误:
Running: End of Workflow
java.io.NotSerializableException: java.util.ArrayList$Itr
at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:860)
at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032)
at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:988)
at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)
at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032)
.....
Run Code Online (Sandbox Code Playgroud)