问题描述
在使用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
参数选择相应的列表。
请注意,这只是一种解决方案,您可以根据自己的需求进行修改和扩展。
正文完