Jenkins input pipeline step – 如何将提交者设置为组

36次阅读
没有评论

问题描述

在使用Jenkins的输入流程步骤时,希望能够将提交者设置为Jenkins本地组。他发现“submitter”参数只接受个人用户ID和外部LDAP组,而不接受由任何授权策略定义的“Jenkins-local”组。由于某些限制,他不能使用外部LDAP组。他目前的解决方法是将逗号分隔的个人用户列表定义为Jenkins全局变量,并从全局变量中管理该列表。这样做可以更好地维护列表。然而,这要求将该阶段包装在node中。由于流水线等待批准者批准此步骤,它会占用一个节点实例,这会导致其他作业等待可用实例。用户想知道是否有办法在node之外使用Jenkins全局变量来使用输入步骤。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

我们可以使用Jenkins模板来解决这个问题,并且我有一个解决方法,可以将个人批准者名称列表保存在一个地方。以下是示例代码供您参考:

#!/usr/bin/env groovy
import com.mm.Constants

def call(String teamName = 'LOGIN') {
   // team name of null means UI
   teamName = teamName ?: 'UI'
   timeout(time:2, unit:'DAYS') {
      input message: 'Can you approve this ??', submitter: Constants."${teamName}_APPROVERS"
   }
}
#!/usr/bin/env groovy
class Constants {
   static final LOGIN_APPROVERS = 'approver1,approver2';
   static final UI_APPROVERS = 'approver2,approver3';
}

以下是如何从流水线调用的示例:

stage ('Ship to QA?'){
   echo "Waiting for QA approval"
   shipToQA('LOGIN')
}

在上面的示例中,我们使用Jenkins模板来定义一个名为shipToQA的函数。这个函数接受一个参数teamName,默认值为LOGIN。在函数内部,我们使用timeout来设置超时时间,并使用Jenkins全局变量Constants."${teamName}_APPROVERS"作为提交者参数。这样,我们可以将个人批准者名称列表保存在Constants类中,并根据teamName参数选择相应的列表。

请注意,这只是一种解决方案,您可以根据自己的需求进行修改和扩展。

正文完