Jenkins / when{ changelog '****' }短语,脚本管道中的任何等效短语?

3df52oht  于 2023-04-05  发布在  Jenkins
关注(0)|答案(1)|浏览(70)

我为我的CI工作设计了一个声明性管道,包括一些与分支更新日志魔法词相关的条件阶段。它工作得很好,尽管试图在声明性管道中建立流控制会导致许多阶段,这些阶段在某些方面是冗余的。
因此,我决定尝试脚本管道语法,但我找不到任何等效的“changelog”符号,这是有用的,以确定一个神奇的词匹配分支changelog。
我希望我能像这样继续前进:

//Declarative
pipeline {
    agent any

    stages {
        stage('Dummy') {
            when
            {
                changelog '\\[ci BUILD\\]'
            }

            steps
            {
                echo 'Building dummy...'
            }
        }
    }
}

//Scripted
node {
    stage('Dummy') {
        if (changelog '\\[ci BUILD\\]')
        {
            echo 'Building dummy...'
        }
    }
}

但是它没有工作。有什么方法可以设置这个吗?

i86rm4rw

i86rm4rw1#

我已经设法使用regex find运算符编写了一个Groovy函数,并在Jenkins 2.375.2上测试了“Pipeline:Supporting APIs”插件,版本839.v35e2736cfd5c,它工作正常。下面是实现:

boolean matchChangelog(GString ptrnString)
{
    def ptrn = ~"${ptrnString}"

    for(i in currentBuild.changeSets)
    {
        for(j in i.items)
        {
            if(j.msg =~ ptrn)
            {
                return true
            }
        }
    }

    return false
}

使用这种方法,这:

when{ expression{ return matchChangelog("pattern") }

相当于这个:

when{ changelog 'pattern' }

相关问题