2017-06-12 40 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指令下的操作是作爲子進程執行的,所以您需要使用長語法來顯式調用虛擬環境中的可執行文件。

相關問題