如何检查构建是由计时器触发的还是由用户触发的?

How can I check whether the build is triiggered by timer or by the user?

如何检查构建是由计时器触发的还是由用户触发的。

我有一个计划 运行 的构建,有时我也 运行 手动构建它。我可以从一个变量或同一个 运行 中的某个东西中找出谁启动了 运行 吗?

您可以在 Jenkins 控制台输出中查看这些信息。

看控制台输出

第一行将是:

由用户 xxx 启动(如果有人启动它)

由 SCM 更改启动(如果版本控制中的更改触发了它)

由计时器启动(如果已安排)

有 Jenkins plugin 可以让您识别构建的触发方式等。

在上面 link 的功能部分您可以看到:

Build Cause Run the build step depending on the cause of the build e.g. triggered by timer, user, scm-change,...

我们可以使用 "BUILD_CAUSE" 变量来获取有关谁发起 运行

的信息

正如@Bachu 已经回答的那样,构建原因在 ${BUILD_CAUSE} 环境变量中可用。 此外,每种触发器类型都有相应的环境变量,可以解释为布尔值。 对于由计时器触发的构建,它是 ${BUILD_CAUSE_TIMERTRIGGER},对于由计时器触发的构建,它将设置为 true。

如果使用pipeline 2.0,可以使用:

if(manager.logContains("Started by timer")){
        echo "This build was triggered by a timer."
}

另一个解决方案是使用 user build vars plugin:

def buildUser
wrap([$class: 'BuildUser']) {
    buildUser = env.BUILD_USER
}

buildUser 将在手动触发管道时包含用户名,否则为空。

如果您有共享管道库,请创建一个文件startedByTimer.groovy:

@NonCPS
def call() {
    boolean startedByTimer = false

    def buildCauses = currentBuild.rawBuild.getCauses()

    for (buildCause in buildCauses) {
        if ("${buildCause}".contains("hudson.triggers.TimerTrigger$TimerTriggerCause")) {
            startedByTimer = true
        }
    }

    return startedByTimer
}