2017-06-06 11 views
0

私はシェルスクリプトを実行する必要があるJenkinsジョブを持っています。それはリモートコンピュータにsshキーを介して接続を行います。bashスクリプト(jenkinsパイプライン)にsshキーを追加

stage ('Run') { 
     try { 
      sh "chmod +x \$(find . -name '*.sh')" 
      wrap([$class: 'AnsiColorBuildWrapper', 'colorMapName': 'XTerm']) { 
       sh "./run-ansible-playbook.sh -f ansible-playbook.yml" 
      } 
etc... 

.shファイルは、ssh-agentコマンドとssh-addコマンドを実行します。

sshAgentCount=$(pgrep ssh-agent | wc -l) 

if [[ $sshAgentCount -eq 0 ]]; then 
     echo "# run ssh-agent #" 
     eval `ssh-agent -s` 
     ssh-add /var/lib/jenkins/id_rsa_ansible 
fi 

問題は時にはうまく動作しないことがあります。私はいつも変わるユーザ(ここではジェンキンズ)のttyとssh-agentプロセスがttyにリンクしているからだと思う。 eval ssh-agent -sは、マシンが時間切れでメモリ不足の原因となるため、常に呼び出す必要はありません。

ここでps aux | grep ssh-agentステータス:

jenkins 1243 0.0 0.0 11140 320 ?  Ss 17:20 0:00 ssh-agent -s 
jenkins 1397 0.0 0.0 11140 320 ?  Ss 17:23 0:00 ssh-agent -s 
jenkins 1435 0.0 0.0 11140 320 ?  Ss 17:23 0:00 ssh-agent -s 

この問題の解決策はありますか? (1 ssh-agentのが必要な場合にのみ)

はあなたにたくさんのありがとう:)

答えて

1

私はそれがあるため、ユーザのTTYのだと思います(ここではジェンキンス)すべての時間とssh-agentプロセスを変更しますttyにリンクされています。

No. SSHエージェントは、ttyにリンクされていません。 SSHエージェントの接続は環境変数$SSH_AUTH_SOCKに格納されますので、ssh-agentを起動した元のシェルを閉じると、エージェントへの接続が失われます。

しかし、環境変数をファイルに格納し、次のシェル(それがまだ使用可能な場合)または同様のものにロードすることで、この接続を維持することができます。

0

ありがとうございました。実際にはファイルで動作します。

しかし、私はちょうど仕事の終わりにプロセスを強制終了、簡単に何かを見つけた:

# add ssh key 
echo "# run ssh-agent #" 
eval `ssh-agent -s` 
ssh-add /var/lib/jenkins/id_rsa_ansible 

work... 

kill $SSH_AGENT_PID 
関連する問題