Jenkins Pipeline中如何将密码参数的值传递给其他参数

135次阅读
没有评论

问题描述

在Jenkins Pipeline中使用了一个类型为”Active Choice Reactive Parameter”的参数”Branches”,他希望自动填充分支名称。因此,他在参数的Groovy脚本中执行了以下命令:

svn ls <url> --non-interactive --no-auth-cache --trust-server-cert --username <username> --password <password>

其中,<username>可以通过User.current().getId()获取。用户还创建了一个类型为”Password Parameter”的参数”Password”,并将其添加到”Branches”的”Referenced parameters”中,以便在Groovy脚本中使用该参数的值。然而,他发现”Branches”参数中没有反映出”Password”参数的值。他希望知道如何处理这个问题,或者是否有其他方法可以传递密码值或身份验证详细信息,以便执行svn命令。

解决方案

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

方案1

Jenkins提供了一个名为”credentials binding plugin”的插件,可以解决这个问题。具体步骤如下:
1. 在Jenkins凭据存储中添加svn用户和密码。
2. 在Pipeline中使用withCredentials步骤来绑定凭据,并在Groovy脚本中使用绑定的凭据。
以下是一个示例Pipeline代码:

withCredentials([
    usernamePassword(
        credentialsId: 'mySvnLogin',
        usernameVariable: 'USER',
        passwordVariable: 'PASSWORD'
    )
]) {
    sh '''
        svn ls <url> --non-interactive --no-auth-cache --trust-server-cert --username $USER --password $PASSWORD
    '''
}

在上面的示例中,我们使用withCredentials步骤来绑定名为”mySvnLogin”的凭据,并将用户名存储在变量USER中,将密码存储在变量PASSWORD中。然后,在Groovy脚本中使用这些变量来执行svn命令。
请注意,”Active Choice”参数使用的是Groovy脚本,而withCredentials是Pipeline步骤,因此在Active Choice参数的Groovy脚本中无法使用withCredentials步骤。

方案2

如果您不想使用”credentials binding plugin”插件,您可以尝试以下方法来传递密码值或身份验证详细信息:
1. 将密码值存储在环境变量中,并在Groovy脚本中使用该环境变量。
2. 将密码值存储在文件中,并在Groovy脚本中读取该文件。
请注意,这些方法可能会增加安全风险,因为密码值可能会暴露在环境变量或文件中。因此,使用这些方法时,请确保采取适当的安全措施来保护密码值的安全性。
以上是两种解决方案,您可以根据自己的需求选择其中一种来处理这个问题。

正文完