【技術メモ】Jenkinsからリモートホストでシェル実行
Jenkinsからリモートホストでシェル実行
(参考サイト) http://knowledge.sakura.ad.jp/knowledge/5293/
概要
のやったこと手順。
初回のみ必要な手順
Jenkinsプラグイン導入
ssh-agent
https://wiki.jenkins-ci.org/display/JENKINS/SSH+Agent+Plugin 導入時バージョン:1.13
bouncycastle-api(over ver1.0.2)
https://wiki.jenkins-ci.org/display/JENKINS/Bouncy+Castle+API+Plugin 導入時バージョン:2.16.0
導入済みだった依存プラグイン
SSH認証情報を追加
http://gomocool.net/gomokulog/?p=557
SSH公開鍵/秘密鍵を作成
「~jenkins/.ssh」にSSH公開鍵および秘密鍵を作成する
sudo -u jenkins ssh-keygen Enter file in which to save the key (/home/jenkins/.ssh/id_rsa): Enter passphrase (empty for no passphrase):
一つ目の質問は保存先、二つ目はパスフレーズ
どちらも空でもいける、成功すると2ファイルできる
公開鍵をリモートホストに登録
http://gomocool.net/gomokulog/?p=557 http://www.turbolinux.com/support/document/knowledge/152.html
# 接続元 scp /home/jenkins/.ssh/id_rsa.pub root@10.x.x.x:filename
# 接続先 cat ~/tmp.pub >> ~/.ssh/authorized_keys rm ~/tmp.pub
jenkinsに認証情報を追加
jenkinsの画面から「認証情報」→「System」→「グローバルドメイン」、「認証情報の追加」で以下を入力
Jenkinsジョブの作り方
jenkins画面から [新規ジョブ作成]→ジョブ名称入力、[Pipeline]を選択して以下を入力
- [General]説明を書く
- [BuildTriggers]変更不要
- [Advanced Project Options]変更不要
- [Pipeline]
- DefinitionがPipeline scriptなら直書き
- Pipeline script fromSCMならGitから取得
- Jenkinsfileの記載例は以下
stage "リモートホストでシェル実行" node { sshagent(['jenkins']) { sh 'hostname' sh 'ssh -t -t -o StrictHostKeyChecking=no root@xxx hostname' } }
サンプルは[Pipeline Syntax]の「sshagent:SSH Agent」 * 「sshagent(['認証情報名']){}」でssh-agent利用 * ’認証情報名’は、前段でJenkins画面から登録したID * あとは普通に処理を記載
つまづきポイント
sshでHost key verification failed
状況
jenkinsのコンソールにエラー出力
Host key verification failed.
原因
接続先が知らないサーバだと出る。
- 初回接続
- 接続先がサーバ更改等でfingerprintが変わった
対処
sshコマンドに「-o StrictHostKeyChecking=no」をつける http://qiita.com/grgrjnjn/items/8ca33b64ea0406e12938
sshでPseudo-terminal・・・
状況
jenkinsのコンソールにエラー出力
Pseudo-terminal will not be allocated because stdin is not a terminal.
原因
仮想端末(pty)がアロケートされていないのでプロンプトや行バッファなどの機能が無効になっている
対処
sshコマンドに「-t」オプションを2個付ける。 http://takat.exblog.jp/12216326/
接続先のログインユーザが違う
状況
何もしないとjenkinsで行こうとする
原因
対処
これ、対象サーバいっぱいいたらどうするか考えないとダメ
ヒアドキュメント使いたい
検討中。実際コマンドいっぱい打ちたいときはどうするのか