尝试捕获破坏性的Jenkins管道parseScript

时间:2019-04-25 14:26:48

标签: jenkins groovy jenkins-pipeline

我试图对失败的Jenkins管道实施自动清理,以便docker-compose删除Docker容器。

不幸的是,这会在运行中产生错误。我做错了什么?

stage('Verification') {
  steps {
    try {
      sh '''
      docker-compose exec -T cli drush status
      docker-compose exec -T cli curl http://nginx:8080 -v
      if [ $? -eq 0 ]; then
        echo "OK!"
      else
        echo "FAIL"
        /bin/false
      fi
      docker-compose down
      '''
    }
    catch (e) {
      sh 'docker-compose down'
      throw e
    }
  }
}

错误:

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: 37: Expected a step @ line 37, column 9.
           try {
           ^

1 error

  at org.codehaus.groovy.control.ErrorCollector.failIfErrors(ErrorCollector.java:310)
  at org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1085)
  at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:603)
  at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:581)
  at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:558)
  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.doParse(CpsGroovyShell.java:131)
  at org.jenkinsci.plugins.workflow.cps.CpsGroovyShell.reparse(CpsGroovyShell.java:125)
  at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.parseScript(CpsFlowExecution.java:560)
  at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.start(CpsFlowExecution.java:521)
  at org.jenkinsci.plugins.workflow.job.WorkflowRun.run(WorkflowRun.java:320)
  at hudson.model.ResourceController.execute(ResourceController.java:97)
  at hudson.model.Executor.run(Executor.java:429)
Finished: FAILURE

2 个答案:

答案 0 :(得分:1)

您应将try-catch放在script步骤中。

script {
  try {
  }
  catch(e) {
  }
}

答案 1 :(得分:0)

您可以在工作结束时使用post step拆除docker-compose安装

~$ kubectl get ns delete-me

Error from server (NotFound): namespaces "delete-me" not found