我不是Jenkinsfile的新手。 />为此,我以前在GUI上使用了sshagent插件来指定我的密钥。
但是,在jenkinsfile机制上,这是行不通的。 >除了使用jenkinsfile,我们还迁移到了在docker中构建。我在某些地方读到docker可能与sshagent插件冲突,所以我试图通过使用“ agent any”启动干净的工作并尝试进行测试来删除docker。 :

    @NonCPS  // Necessary to allow .each to work.
def changelist() {
    def changes = ""
    currentBuild.changeSets.each { set ->
        set.each { entry ->
            changes += "${entry.author.id} "
        }
    }
    changes
}

pipeline {
    agent none
    stages {
            stage('test') {
            agent any
            steps {
                sshagent ( ['a-jenkins-credential']) {
    sh '''
ssh -vv myuser@myserver echo testing connection || true
ssh-add -L
echo done running remote windows test
'''
  }
            }
        }


}
}


在同一台服务器上,但使用jenkins GUI可以正常工作,但是在jenkinsfile管道上会产生:

FATAL: [ssh-agent] Could not find specified credentials


并继续运行,并在ssh命令上失败。有趣的是,该作业使用完全相同的密钥成功从GIT中拉出,因此这并不是好像未将其安装在服务器上。

#1 楼

发现了问题:

我正在使用GUI上的人类可读密钥名称。
需要使用密钥的UUId ID(在凭据屏幕中名称旁边指定)
/>
steps {
            sshagent ( ['THIS-SHOULD-HAVE-BEEN-A-UNIQUE-ID-INSTEAD-OF-A-NAME']) {


评论


您是否愿意在GUI中显示UUID的示例?

– 2rs2ts
18年11月13日在20:09

项目不再处于活动状态,所以我没有屏幕截图。但是,当您在Jenkins配置中浏览凭据时:您会发现配置屏幕上的密钥具有2个属性:它具有人类可读的名称,例如:“ My_Dev_Credentials”,该名称显示在大多数屏幕中。但是,它也有一个唯一的ID,该ID应该看起来像一个长的十六进制字符串(对人类来说是垃圾)。它应类似于:“ 571fe649-7844-4e93-891e-35496cc8cc72”。基本上,您应该使用十六进制ID代替凭据的英文名称。希望对您有所帮助

–eshalev
18年11月14日在22:00