2017-06-12 20 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 
       ''' 
      } 
     } 
    } 
} 

をビルドはジェンキンス上で実行されると、ビルドが失敗し、私はコンソール出力をチェックするとき、それはしてPIP installコマンドに失敗しているボックスエラー:私はジェンキンスビルド環境に必要なSSHキーを設定する必要がありますが、これを行う方法を確認していないことを

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

推測しています。

+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ディレクティブの下のアクションはサブプロセスとして実行されるため、長い構文を使用して仮想環境から実行可能ファイルを明示的に呼び出す必要があります。

関連する問題