我有一份 Jenkins 管道工作。它需要几个参数,其中一个是“带密码的用户名”参数,它设置为我已经配置的“服务帐户”。
这在“StashNotifier”中用于通知 BitBucket 构建结果。
我现在必须在作业中添加一些“scp/ssh”步骤,并且我想使用相同的服务帐户主体和凭据。我可以手动添加两个参数,即服务帐户参数的用户名和密码的冗余副本,但我真的很想从现有的“用户名和密码”参数中提取部分。
有可能这样做吗?
我有一份 Jenkins 管道工作。它需要几个参数,其中一个是“带密码的用户名”参数,它设置为我已经配置的“服务帐户”。
这在“StashNotifier”中用于通知 BitBucket 构建结果。
我现在必须在作业中添加一些“scp/ssh”步骤,并且我想使用相同的服务帐户主体和凭据。我可以手动添加两个参数,即服务帐户参数的用户名和密码的冗余副本,但我真的很想从现有的“用户名和密码”参数中提取部分。
有可能这样做吗?
withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: credentialsId, usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD']]) {
// use USERNAME and PASSWORD as envs - ${USERNAME}
// credentialId is the credential id from Credentials tab
}
一般来说,如果您使用的是 ssh/scp,那么ssh-agent就是您想要的。(通常您还需要公钥身份验证而不是密码,但这是另一回事)
node {
sshagent (credentials: ['your-credential-id']) {
sh 'ssh blaa blaa'
}
}
正如@jil 所提到的,如果您在 SSH 服务器上使用 ssh 密钥进行身份验证,事情会变得容易得多 - 假设您的 jenkins 服务器在 linux / unix 机器上运行。您可以将密钥添加到jenkins
运行 Jenkins 的系统用户中,并将其复制到您要连接到的机器上以执行 scp / ssh 步骤。之后您可以直接使用任何 ssh / scp 命令而无需提供密码。
但是有一些安全考虑:向用户添加 SSH 密钥可以
jenkins
使 Jenkins 服务器上的每个作业都可以访问您的 SSH 服务器。
如果这对您来说不是问题 - 这是一篇关于如何使用 ssh 密钥的好文章。