并行使用 try/catch 时管道失败
Pipeline fails when using try/catch in parallel
我对管道还很陌生,一直在阅读一些官方教程。我一直在尝试弄清楚如何在 parallel
中的 运行 节点中使用 try/catch
。我正在关注 official example。这是一些代码:
stage('Test') {
parallel linux: {
node('linux') {
checkout scm
try {
unstash 'app'
sh 'make check'
}
finally {
junit '**/target/*.xml'
}
}
}
}
运行 几乎相同的代码,只是更改了节点标签。但是我收到以下错误:
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: 23: Expected a step @ line 23, column 29.
try {
^
有人知道这里出了什么问题吗?
我猜,您是 运行 版本的 Pipeline 插件,其中不推荐使用此语法(是的,即使您从官方文档中获取示例也会发生这种情况...)
我建议你这样做:
stage('Test') {
steps {
parallel (
node('linux') {
"firstTask" : {
// Do your try/catch etc.
}
},
node('linux') { //or some other slave name
"secondTask" : {
// Do some other thing in parallel
}
}
)
}
}
如果这不起作用,请尝试使用这些步骤,因为错误的原因与它们有关:
stage('Test') {
parallel linux: {
node('linux') {
steps {
checkout scm
try {
unstash 'app'
sh 'make check'
}
finally {
junit '**/target/*.xml'
}
}
}
}
}
或:
stage('Test') {
parallel linux: {
node('linux') {
checkout scm
try {
steps {
unstash 'app'
sh 'make check'
}
}
finally {
junit '**/target/*.xml'
}
}
}
}
尝试将'script'替换为'steps',我这边效果很好
stage('Test') {
parallel linux: {
node('linux') {
script {
checkout scm
try {
unstash 'app'
sh 'make check'
}
finally {
junit '**/target/*.xml'
}
}
}
}
}
我对管道还很陌生,一直在阅读一些官方教程。我一直在尝试弄清楚如何在 parallel
中的 运行 节点中使用 try/catch
。我正在关注 official example。这是一些代码:
stage('Test') {
parallel linux: {
node('linux') {
checkout scm
try {
unstash 'app'
sh 'make check'
}
finally {
junit '**/target/*.xml'
}
}
}
}
运行 几乎相同的代码,只是更改了节点标签。但是我收到以下错误:
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: 23: Expected a step @ line 23, column 29.
try {
^
有人知道这里出了什么问题吗?
我猜,您是 运行 版本的 Pipeline 插件,其中不推荐使用此语法(是的,即使您从官方文档中获取示例也会发生这种情况...) 我建议你这样做:
stage('Test') {
steps {
parallel (
node('linux') {
"firstTask" : {
// Do your try/catch etc.
}
},
node('linux') { //or some other slave name
"secondTask" : {
// Do some other thing in parallel
}
}
)
}
}
如果这不起作用,请尝试使用这些步骤,因为错误的原因与它们有关:
stage('Test') {
parallel linux: {
node('linux') {
steps {
checkout scm
try {
unstash 'app'
sh 'make check'
}
finally {
junit '**/target/*.xml'
}
}
}
}
}
或:
stage('Test') {
parallel linux: {
node('linux') {
checkout scm
try {
steps {
unstash 'app'
sh 'make check'
}
}
finally {
junit '**/target/*.xml'
}
}
}
}
尝试将'script'替换为'steps',我这边效果很好
stage('Test') {
parallel linux: {
node('linux') {
script {
checkout scm
try {
unstash 'app'
sh 'make check'
}
finally {
junit '**/target/*.xml'
}
}
}
}
}