NPMプロジェクトを構築するJenkins Pipeline Model Definitionを使用して、いくつかのJenkinsジョブを定義しています。私はDockerコンテナーを使用してこれらのプロジェクトを構築します(Node.js + npm + yarnだけで共通のイメージを使用)。
ビルドの結果は、Zip
パイプラインコマンドを使用して圧縮したdist/
フォルダーに含まれています。
SSH/SCP(秘密鍵認証を使用)を使用して、このZipファイルを別のサーバーにコピーします。私の秘密鍵はJenkins環境(資格情報マネージャー)に追加されますが、Dockerコンテナーを使用すると、SSH接続を確立できません。
agent { label 'master' }
を追加してファイル転送にマスターJenkinsノードを使用しようとしましたが、新しいGitフェッチを使用して、ビルドファイルなしでクリーンなワークスペースを作成するようです。
SSHエージェントプラグインを試した後、次の出力があります。
Identity added: /srv/jenkins3/workspace/myjob-TFD@tmp/private_key_370451445598243031.key (rsa w/o comment)
[ssh-agent] Started.
[myjob-TFD] Running Shell script
+ scp -r dist test@myremotehost:/var/www/xxx
$ docker exec bfda17664965b14281eef8670b34f83e0ff60218b04cfa56ba3c0ab23d94d035 env SSH_AGENT_PID=1424 SSH_AUTH_SOCK=/tmp/ssh-k658r0O76Yqb/agent.1419 ssh-agent -k
unset SSH_AUTH_SOCK;
unset SSH_AGENT_PID;
echo Agent pid 1424 killed;
[ssh-agent] Stopped.
Host key verification failed.
lost connection
リモートホストを承認済みとして追加するにはどうすればよいですか?
同様の問題がありました。私はラベル「マスター」を使用しませんでしたが、このようにすると、ファイル転送がスレーブ間で機能することを確認しました:
手順1-リモートホストサーバーでSSHキーを作成し、authorized_keysにキーを含めます
手順2-JenkinsでSSHキーを使用して資格情報を作成し、リモートホストの秘密キーを使用します
以下のステップがパイプラインに追加されます。
stage ('Deploy') {
steps{
sshagent(credentials : ['use-the-id-from-credential-generated-by-jenkins']) {
sh 'ssh -o StrictHostKeyChecking=no [email protected] uptime'
sh 'ssh -v [email protected]'
sh 'scp ./source/filename [email protected]:/remotehost/target'
}
}
}
既知のホストにリモートホストを追加し、できればエラーに対処するには、JenkinsユーザーとしてJenkinsホストからターゲットホストに手動でsshしてみてください。
Jenkinsがインストールされているホストにアクセスします。タイプ
Sudo su jenkins
今のようにsshまたはscpを使用してください
ssh username@server
次のようにプロンプトが表示されます。
ホスト「サーバー(ip)」の信頼性を確立できません。 ECDSAキーフィンガープリントはSHA256:some-weird-stringです。接続を続行してもよろしいですか(はい/いいえ)?
Yesと入力します。サーバーは既知のホストとして永久に追加されます。パスワードをわざわざ渡すことすらしないでください。 Ctrl + C Jenkinsジョブを実行してみてください。
@haschibaschiが推奨しているように、ssh-agentプラグインも使用しています。リモートマシンにはUID Jenkinsアカウントがないため、リモートマシンで個人のUID資格情報を使用する必要があります。コードは次のようになります(たとえば、個人のUID = "myuid"とリモートサーバーhostname = "non_jenkins_svr"を使用します:
sshagent(['e4fbd939-914a-41ed-92d9-8eededfb9243']) {
// 'myuid@' required for scp (this is from UID jenkins to UID myuid)
sh "scp $WORKSPACE/example.txt myuid@non_jenkins_svr:${dest_dir}"
}
ID e4fbd939-914a-41ed-92d9-8eededfb9243は、グローバルドメイン資格情報エントリを作成した後にJenkins資格情報マネージャーによって生成されました。
資格情報エントリを作成すると、資格情報ページの「ID」列の下にIDが見つかります。エントリを作成する際に、タイプ「SSH Username with private key」(「Kind」フィールド)を選択し、この目的で作成したRSAプライベートキーをHost non_jenkins_svr
パスフレーズなし。