当前位置: 首页 > 面试题库 >

如何在Jenkinsfile中捕获手动UI取消作业

汪深
2023-03-14
问题内容

我试图找到有关如何在Jenkinsfile管道中捕获用户在jenkins Web UI中取消作业时发生的错误的文档。

我还没有拿到posttry/catch/finally当某事在构建内无法接近的工作,他们只工作。

当某人取消工作时,这将导致资源无法释放。

我今天拥有的是 声明式管道中 的脚本,如下所示:

pipeline {
  stage("test") {
    steps {
      parallell (
        unit: {
          node("main-builder") {
            script {
              try { sh "<build stuff>" } catch (ex) { report } finally { cleanup }
            }
          }
        }
      )
    }
  }
}

因此,当从UI中手动取消作业时,将忽略catch(ex)finally块中的所有内容。


问题答案:

非声明性方法:

当您中止管道脚本生成时,org.jenkinsci.plugins.workflow.steps.FlowInterruptedException将引发类型异常catch阻塞释放资源,然后重新引发异常。

import org.jenkinsci.plugins.workflow.steps.FlowInterruptedException

def releaseResources() {
    echo "Releasing resources"
    sleep 10
}

node {
    try {
        echo "Doing steps..."
        sleep 20
    } catch (FlowInterruptedException interruptEx) {
        releaseResources()
        throw interruptEx
    }
}

声明式方法(更新11/2019):

相同,但一个内 script {}的块 stepsstage。不是最巧妙的解决方案,而是我已经测试并开始工作的解决方案。

在最初回答时,没有条件abortedcleanup后置条件(而IIRC仅pipeline具有后置条件,但stage没有条件)。

根据Jenkins声明性管道文档,在post部分下:

cleanup

在评估所有其他发布条件之后,无论管道或阶段的状态如何,都请在此发布条件中运行步骤。

因此,无论管道是否中止,这都是释放资源的好地方。

def releaseResources() {
    echo "Releasing resources"
    sleep 10
}

pipeline {
    agent none
    stages {
        stage("test") {
            steps {
                parallel (
                    unit: {
                        node("main-builder") {
                            script {
                                echo "Doing steps..."
                                sleep 20
                            }
                        }
                    }
                )
            }
            post {
                cleanup {
                    releaseResources()
                }
            }
        }
    }
}


 类似资料:
  • 问题内容: 我想卷曲一个URL并将响应捕获到一个变量中。 当我卷曲命令并回显其输出时,我得到如下正确的响应 我想将相同的响应捕获到变量中,并将该响应用于进一步的操作 以下是我的Jenkinsfile 能否请您告诉我我需要在Jenkinsfile中进行哪些更改 问题答案: 如果要从step 返回输出并将其捕获到变量中,则必须更改: 至: 参考: https : //jenkins.io/doc/pi

  • 问题内容: 在Jenkinsfile Groovy脚本阶段,假设我要发出一个Linux命令来输出字符串的行和列,并想要在特定行的输出中获取第n列。这样的命令的一个示例是“ ls -al”。所以我这样做正确吗? 但是,如何获取本质上为$ {COL [4]}的值,该值是“ ls -al”命令的第五列,即目录大小? 谢谢! 问题答案: 您在示例中显示的bash脚本不会返回正确的目录大小。它将以递归方式返

  • 在Jenkinsfile Groovy脚本阶段,假设我想发出一个linux命令来输出字符串的行和列,并希望在某一行的输出中获取第n列。此类命令的示例是“ls-al”。所以我做得对吗? 但是我如何获得${COL[4]}的值,这是“ls-al”命令中的第五列,即目录大小? 谢谢

  • 我们的Java8和基于Spring的应用程序正在后台生成批量报告(PDF文件)。这可能需要一到两个小时以上。在生成每个报告后,UI(前端)中的进度(百分比值)已经更新,因此UI在完成报告生成之前一直处于活动状态,但由于某种原因,在报告生成过程的中间,我们在UI中从Vaadin框架获取会话过期消息。 Vaadin framework版本:7.6.2 Web服务器:Tomcat 7 心跳持续时间的值:

  • 我正在开发一个Android应用程序。它有一个功能,捕获的图像应该显示在屏幕上,我需要得到那个图像路径,这样我就可以把那个图像发送到服务器。 我可以在屏幕上显示图像,但无法获得绝对图像路径。 我得到的路径像: 如何获取实际图像路径? 这是我的密码: 值如上所示。 我如何从这个路径得到我的绝对图像路径。

  • 我正在尝试弄清楚如何确定是什么导致构建从脚本化Jenkinsfile中运行。原因是我在docker容器中有一个脚本,我想在cron作业中运行它,所以当cron作业触发时,我只希望它运行容器,但当我推送更改时,我希望它检查代码、重建容器、运行静态代码分析、运行测试等。在cron运行中不需要所有这些。 我如何能得到原因?我尝试了< code > current build . get causes()