2

我有一份 Jenkins 管道工作。它需要几个参数,其中一个是“带密码的用户名”参数,它设置为我已经配置的“服务帐户”。

这在“StashNotifier”中用于通知 BitBucket 构建结果。

我现在必须在作业中添加一些“scp/ssh”步骤,并且我想使用相同的服务帐户主体和凭据。我可以手动添加两个参数,即服务帐户参数的用户名和密码的冗余副本,但我真的很想从现有的“用户名和密码”参数中提取部分。

有可能这样做吗?

4

3 回答 3

4
withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: credentialsId, usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD']]) { 
    // use USERNAME and PASSWORD as envs - ${USERNAME}
    // credentialId is the credential id from Credentials tab 
}
于 2016-12-12T19:06:42.270 回答
1

一般来说,如果您使用的是 ssh/scp,那么ssh-agent就是您想要的。(通常您还需要公钥身份验证而不是密码,但这是另一回事)

node {
    sshagent (credentials: ['your-credential-id']) {
        sh 'ssh blaa blaa'
    }
}
于 2016-12-12T19:07:36.340 回答
0

正如@jil 所提到的,如果您在 SSH 服务器上使用 ssh 密钥进行身份验证,事情会变得容易得多 - 假设您的 jenkins 服务器在 linux / unix 机器上运行。您可以将密钥添加到jenkins运行 Jenkins 的系统用户中,并将其复制到您要连接到的机器上以执行 scp / ssh 步骤。之后您可以直接使用任何 ssh / scp 命令而无需提供密码。

但是有一些安全考虑:向用户添加 SSH 密钥可以jenkins使 Jenkins 服务器上的每个作业都可以访问您的 SSH 服务器。

如果这对您来说不是问题 - 这是一篇关于如何使用 ssh 密钥的好文章

于 2017-01-03T12:50:35.840 回答