【问题标题】:How to know which user answered a Jenkins-Pipeline input step?如何知道哪个用户回答了 Jenkins-Pipeline 输入步骤?
【发布时间】:2017-01-19 22:52:14
【问题描述】:

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

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

这可能吗?

这是假设我想做的:

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

【问题讨论】:

    标签: jenkins versioning jenkins-pipeline


    【解决方案1】:

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

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

    这看起来如下:

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

    P.S:如果有人对完整的代码 sn-p 返回用户对对话框的正面和负面反馈感兴趣(以及超时),我请指向our pipeline library

    【讨论】:

    • 在 jenkins v2.128 上:def submitter = input( message: "Confirm deployment?", submitterParameter: 'submitter' ); echo "部署确认:${submitter}"
    • 这是一个问题还是示例代码?您将 input 调用的返回值分配 并将其设置为 submitterParameter 是没有意义的。
    • 这是一个示例代码,是的,它没有意义,这就是我发布它的原因,因为它出于某种未知原因而工作。如果我不通过submitterParameter(值无关紧要)它就不起作用。这就是为什么我很困惑为什么这个答案被接受了。也许这是一个错误,或者他们在詹金斯中改变了这一点。
    【解决方案2】:

    目前不可能,目前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

    【讨论】:

    • 在此期间(见我的回答):-)
    • 非常好,感谢您的更新!你的答案现在应该是公认的答案:-)
    【解决方案3】:

    如果您不要求输入任何参数,那么添加 submitterParameter 类型的工作。它没有将它作为参数添加到返回对象上,而是将返回的对象转换为包含用户名的字符串。

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

    【讨论】:

    • 这个答案与两个月前 StephenKing 的答案有何不同?
    • 我在回答中解释了。不同的是,如果你不使用其他输入参数,那么结果不是一个映射,你可以从feedback.submitter中获取提交者,而是提交者实际上是反馈对象本身的值。
    【解决方案4】:

    如果您关闭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}"
    }
    

    【讨论】:

    • 或者您将该方法列入白名单而不是关闭沙箱。
    • 使用此方法无法获取try block中的userid。
    • 将检索触发构建的用户,不一定与填充输入的用户相同
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-30
    • 2019-12-20
    • 2014-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多