如何知道哪个用户回答了Jenkins-Pipeline输入步骤?

时间:2016-09-12 13:21:39

标签: jenkins versioning jenkins-pipeline

我有一个Jenkinsfile脚本,用于测试执行SVN合并的可能性,然后要求用户提交合并的权限。

我想知道回答“输入”步骤的用户名,以便将其写入提交消息。

这可能吗?

这是假设我想做的事情:

outcome = input message: 'Merge trunk into branch?', ok: 'Merge'
echo "User that allowed merge: ${outcome.user}"

4 个答案:

答案 0 :(得分:17)

input步骤有一个可选的submitterParameter,它允许指定应该包含提交输入对话框的用户的返回Map的键:

  

如果指定,则这是返回值的名称,该值将包含批准此输入的用户的ID   返回值将以类似parameters值的方式处理   输入:字符串

这看起来如下:

def feedback = input(submitterParameter: 'submitter', ...)
echo "It was ${feedback.submitter} who submitted the dialog."

P.S:如果有人对完整的代码片段感兴趣,请将用户的正面反馈和负面反馈返回给对话框(并且还会超时),我请指向our pipeline library

答案 1 :(得分:3)

目前无法实现,目前只有input step答案中会返回输入参数,如source code中所述:

// TODO: perhaps we should return a different object to allow the workflow to look up
// who approved it, etc?
switch (mapResult.size()) {
case 0:
    return null;    // no value if there's no parameter
case 1:
    return mapResult.values().iterator().next();
default:
    return mapResult;
}

如果您想限制哪些用户可以批准输入步骤,您可以使用submitter参数,例如:

input message: 'Approve ?', submitter: 'authorized-submitter'

修改

自2017年1月起,现在可以请求发送其他参数。请参阅上面的StephenKing answer

答案 2 :(得分:2)

如果您没有在输入上询问任何参数,那么添加submitterParameter就可以了。它没有将它作为参数添加到返回对象上,而是将返回的对象转换为包含用户名的字符串。

def feedback = input(submitterParameter: 'submitter')
echo "It was ${feedback} who submitted the dialog."

答案 3 :(得分:1)

如果您关闭groovy-sandbox

,则可以针对例外情况执行此操作
try {
 'Deploy to production?'

 node {
  sh 'echo deploying'
  }
} catch(e) {
  def user = e.getCauses()[0].getUser()
   echo "Production deployment aborted by:\n ${user}"
}