2017-06-12 38 views
2

我有一个项目正在使用多分支管道插件在Jenkins上构建。我使用的声明管道语法和我Jenkinsfile看起来是这样的:使用多分支管道时在构建环境中的SSH密钥Jenkinsfile

pipeline { 
    agent { label 'blah' } 
    options { 
     timeout(time: 2, unit: 'HOURS') 
     buildDiscarder(logRotator(numToKeepStr: '5')) 
    } 
    triggers { pollSCM('H/5 * * * *') } 
    stages { 
     stage('Prepare') { 
      steps { 
       sh ''' 
        echo "Building environment" 
        python3 -m venv venv && \ 
        pip install git+ssh://[email protected]_private_repo.git 
       ''' 
      } 
     } 
    } 
} 

当构建在詹金斯运行框中构建失败,当我检查控制台输出它失败画中画安装带有命令错误:

Permission denied (publickey). 
fatal: Could not read from remote repository. 

我猜测,我需要设置所需的SSH密钥到詹金斯生成环境,但我不知道如何做到这一点。

+0

这听起来像你没有访问任何回购你试图复制。你有没有在Jenkins盒子的'.ssh'目录中设置必要的'config'文件? –

+0

我想不是。我正试图将一个作业转换成一个单独的管道(没有jenkinsfile)到一个带有Jenkinsfile的多分支管道。在原始作业中,它使用配置作业,并在部分构建环境 - > ssh-agent下指定了ssh密钥。对于多分支管道作业没有这个选项,并且没有关于如何在jenkinsfile中执行的文档 –

+0

将私钥放在'〜jenkinsuser/.ssh/id_rsa'上 – Rik

回答

1

您需要安装SSH Agent plugin并将其用于包装steps指令中的操作,以便能够从专用存储库中提取。您可以使用sshagent指令启用SSH代理,您需要传递一个参数来表示具有对git存储库的读取权限的有效密钥的散列值。关键需要是在全球凭证可用查看詹金斯(詹金斯 - >凭证[左手侧菜单上],寻找正确的钥匙的ID字段),例如:

stage('Prepare') { 
     steps { 
      sshagent(['<hash_for_your_key>']) { 
       echo "Building environment" 
       sh "python3.5 -m venv venv" 
       sh "venv/bin/python3.5 venv/bin/pip install git+ssh://[email protected]_private_repo.git 
      } 
     } 

NB:因为steps指令下的操作是作为子进程执行的,所以您需要使用长语法来显式调用虚拟环境中的可执行文件。

相关问题