【问题标题】:Abort, rather than error, stage within a Jenkins declarative pipeline在 Jenkins 声明性管道中中止,而不是错误,阶段
【发布时间】:2017-08-07 12:14:20
【问题描述】:

问题

我们的源是一个包含多个项目的大型存储库。如果提交发生在特定区域,我们需要能够避免在存储库中构建所有项目。我们正在使用管道管理我们的构建过程。

研究

git 插件提供了忽略来自某些用户、路径和消息内容的提交的能力。但是,当我们使用管道时,我们相信我们遇到了JENKINS-36195 描述的问题。在最近的一次 cmets 中,Jesse 建议检查变更集,如果变更看起来很无聊,请尽早返回。他提到 return 语句在库、闭包等中不起作用),但他没有提到如何中止工作。

可能的方法

  1. 我们曾考虑使用 error 步骤,但这会导致作业被标记为失败并且需要进行调查。
  2. 虽然可以将作业结果标记为 NOT_BUILT,但该作业并未中止,而是继续处理所有阶段。

问题

如何在不将其标记为失败并处理管道的所有阶段(以及可能的其他管道)的情况下在早期步骤中中止作业?

【问题讨论】:

    标签: jenkins jenkins-pipeline


    【解决方案1】:

    您可以尝试在管道中使用 try catch finally 块吗?

    try{
    
    }
    catch {
    
    }
    finally{
    
    }
    

    我想您也可以在管道中使用构建后操作。

    pipeline {
    agent any
    stages {
        stage('Test') {
            steps {
                sh 'make check'
            }
        }
    }
    post {
        always {
            junit '**/target/*.xml'
        }
        failure {
            mail to: team@example.com, subject: 'The Pipeline failed :('
        }
    }
    

    }

    文档在https://jenkins.io/doc/book/pipeline/syntax/#post下方

    您还可以根据 Slawomir Demichowicz 在工单中指定的条件尝试在构建步骤之外使用以下步骤。

    if (stash.isJenkinsLastAuthor() && !params.SKIP_CHANGELOG_CHECK) {
        echo "No more new changes, stopping pipeline"
        currentBuild.result = "SUCCESS"
        return
    }
    

    我不确定这对你有帮助。

    【讨论】:

    • 谢谢@mohamed-thoufeeque。对于提议的解决方案,团队成员如何区分“正常情况”(源存储库没有适用的更新)和失败情况(例如单元测试失败)?
    猜你喜欢
    • 2021-08-02
    • 1970-01-01
    • 2021-07-14
    • 2022-10-27
    • 1970-01-01
    • 2020-04-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-20
    相关资源
    最近更新 更多