首页 > 解决方案 > 如何检查触发 Jenkins Job 的原因?

问题描述

我正在尝试将作业参数化,但我想检查触发当前作业的上一步。如何检查?

标签: jenkinsjenkins-pipeline

解决方案


在 Pipeline 脚本中,您可以执行以下操作:

@NonCPS
def getAllCauses() {
  currentBuild.rawBuild.getCauses().toString()
}

stage('print causes') {
  echo getAllCauses()
}

这将打印出如下内容:

[hudson.model.Cause$UserIdCause@a05b0080]

如果您想要更详细的信息,您将不得不从hudson.model.Cause实例中删除它。例如,这是一个返回对构建“负责”的用户列表的片段,如果用户对构建贡献了提交或如果他们导致构建(即通过登录到 Web UI),则认为用户是“负责”的并单击“立即构建”按钮):

@NonCPS
def getResponsibleUsers() {
  def build = currentBuild.rawBuild
  def users = build.getCauses().collect() { cause->
    def causeType = cause.getClass()
    if (causeType == jenkins.branch.BranchIndexingCause) {
      return build.changeSets.collect() { set->
        set.collect { entry->
          entry.getAuthor()
        }
      }
    } else if (causeType == hudson.model.Cause$UserIdCause) {
      return User.get(cause.getUserName())
    } else { 
      return []
    }      
  }

  return users.flatten().unique()
}

stage('print responsible users') {
  echo getResponsibleUsers()
}

推荐阅读