はじめに
jenkinsの仕組みがボヤッとした状態で始めたので大変だった。。。
何とか成功したので手順を残す
事前準備
ここの前提が間違ってるとうまくいかないので残しとく
管理サーバ編
jenkinsをインストールする
インストールしといてください。
ターゲットノード編
jenkins という名前のユーザーを作っといてください
ターゲットノードを追加する
昔のjenkinsさんはエージェントが必要だったっぽいけど、今どきのjenkinsさんは
ansibleみたくssh接続とjava11があれば、エージェントインストール不要だそうです。
このサイトに従えばイケます
管理サーバでターゲットノード接続用のsshキーを作成する
jenkinsインストールできたら、管理サーバ上に新たにjenkinsユーザができるので
そのユーザにスイッチしてからsshキーを作って下さい。
su - jenkins
cd /var/lib/jenkins
mkdir .ssh
cd /var/lib/jenkins/.ssh
ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): /var/lib/jenkins/.ssh/id_rsa ←ちゃんと指示してあげよう
~このあとsshキーのパスワード聞かれるけど入力しなくてもなんとかなる~
sshキーができたら権限を変更してから公開鍵の内容をコピーしておく
chmod 700 /var/lib/jenkins/.ssh
chmod 600 /var/lib/jenkins/.ssh/*
cat /var/lib/jenkins/.ssh/id_rsa.pub
ターゲットノードに、管理サーバで作った公開鍵を保管する
次はターゲットノードにログインしての作業
jenkinsユーザにスイッチしてから公開鍵置き場に管理サーバで作成した公開鍵の内容をペーストする
su - jenkins
mkdir ~/.ssh
cd ~/.ssh
vi authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
公開鍵はこんなやつです。
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDjqSqAE9eJzmiEcKS4E4MIbUIt0HxIsZ3+NM0FYcOQHNBuDw6uHTMyVrAc2JYUUoe1W/Qiz2FojMWLzFwy43EmvFCwb7mpJBGE0XtRthA+dlO50GSjNLIVQyiUPdar8sy9Y/85kqF1Jtb6+fatIufVbzEk8poivIFGvcLHqvMQvXh98mt3aWBaAa2cQgJSXLdxd1pEIB6Km8BAsycfW9ol7U919iCfDpm6KZTayzSEGG1fUDS8v0YpKJL45SnHI/DkYLQ6OlNUYNbSZt3jba4UWUnPEEnIpxREhs7SX2NdbmxTaG5reFXPs0T/g8iXbTDzGRzIVKKIK8y4nUUTPkUn root@nbfr151v
管理サーバからターゲットノードへ疎通確認する
ちゃんと疎通ができるかを確認しましょ。
管理サーバではjenkinsユーザにスイッチしてから、ターゲットノードへjenkinsユーザでsshログインしてください。
が、その前に管理サーバのjenkinsユーザの起動シェルを/bin/bashに修正しておく必要があるのでやっておくこと。
chsh jenkins
jenkins のシェルを変更します。
新しいシェル [/bin/false]: /bin/bash
シェルを変更しました。
これで準備整ったので疎通確認
su - jenkins
ssh -i /var/lib/jenkins/.ssh/id_rsa jenkins@{ターゲットノードのIPアドレス}
疎通確認出来たらOK。実際の画面がこちら。
ログイン確認ついでに、known_hostsに署名データができていることが確認出来たら成功。
Jenkins管理画面でSSH認証情報の設定
URLは~、、、 http://{管理サーバのIPアドレス}:8080/
設定内容はこんな感じ
IDはなんの接続設定なのかがわかる名前になっていたらなんでもOK。
ユーザー名は、ターゲットノードへのログインIDなのでさっき作ったjenkinsユーザを入力した。
後半。秘密鍵のところにいれる鍵のところには、さっき管理サーバ上でssh-keygenで作った秘密鍵の内容をまるごと入力する。
パスファインダーは本来入れるんだろうけど自分の場合はssh-keygenのときに設定しなかったので空白でOK。
秘密鍵はこんなやつ。---BEGIN~~~とかも丸ごと入れればOK
-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEA46kqgBPXic5ohHCkuBODCG1CLdB8SLGd/jTNBWHDkBzQbg8O
rh0zMlawHNiWFFKHtVv0Is9haIzFi8xcMuNxJrxQsG+5qSQRhNF7UbYQPnZTudBk
ozSyFUMolD3Wq/LMvWP/OZKhdSbW+vn2rSLn1W8xJPKaIryBRr3Cx6rzEL14ffJr
d2lgWgGtnEICUly3cXdaRCAeipvAQLMnH1vaJe1PdfYgnw6ZuimU2ss0hBhtX1A0
vL9GKSiS+OUpxyPw5GC0OjpTVGDW0mbd422uFFlJzxBJyKcURIbO0l9jXW5sU2hu
a3hVz7NE/4PIl20w8xkcyFSiiCvMuJ1FEz5FJwIDAQABAoIBAQCTOb0AYtSKi+9P
ZsE/QW8FrhKUKjWVlTfFQ0Qq7NRZiCjKY/ZsZvnK3gC6Rt6Xed/FSxgQwugNgqvm
AlzFlAyCrlnIIBiC545kxEvpxcGvgzoV+kx6twNLeMjvRSZkwHnjKJ3PD6JWbq2s
VKZPxTkD8ApqCHHhcOJxaxphoY3bDlQgWsfyhKfJHvIODMZXuV9bjHUEjf+C53/I
MVa2Nef0OKd+wrMYm3VHarGKYAYldqLF4UHq8vQ7zGaDm+/C+h/YIIT6Sq8ynfBw
dQg8FtQ5cBPSOVi88vc3ZlvIQkzY9xSsVQjrdFfrSBAFzhWNgjd3wfHqATB3s7Ee
51nLGf+hAoGBAPzHfZM+bCWGwXm73mYIhzh17o3elSKletijWXhcCwkYw50S5Ykm
ZBse/LKp+qIkZBIKl1aSbGOIhCocOKazyFHf5BRam4r8pWhxZYYjG6CcjypbmTCf
8h+ayuoXb10NSrZBGQAkRwFxOYUqT/UQDdl7pyl7yeJtqYlNp9X3qt5pAoGBAOaP
vqSnnqMIp5sAqdhA5WM3POFpKTQEG/KS2HN2RiLoptE7dqMraD7HcFX6DlY0Fr1f
vU15h++lVna00Td4PmGS9pVlDXGoEseUZjlD3zA44lAMqhKV21vjuTE+uXAVSILK
/PkeEyTYon1E/uSZ5LSh4DAWwKOcs1Rsd0i/w7UPAoGAYe0ys9FR+jO7Tlq+rM6O
/AuL8EATjImJDtYxehRGXi7O0VIZxEkwLOWTRe/d3eS1M9wQhwRQozqm4N1wAPzT
FQzkghIcAfsgZVbQ2udM86rTN7imnxTHqwC/rXKIvQbCM9sCQXDMZT2k5/bdZPXk
N6XUu5huPJ75N+zyoUzCUEkCgYEAg5IuEdpRrennc43aXr0R6h+Aj4WqbLOXm0Lv
YFxzQ8KOR8JuPkksEP9Q/M9Y1Rqei20SIx8iUsCAafdfmQ72UkpCixiCpoRqSxhF
iZJQ0Dz18QZ5G2gHKRX3/cE0o2CR44mg+SyPcixp9aCk8KFdoTLrM6YYQoXO1HOd
UpeUQEMCgYEAyJWXHtYO8c/ooRtu15ZczimLuQpVCmkSPfmUSg9nwCYFxrJav9XE
i0MNmsyuhte7TwkXJekLq7UhpNYIBhVh2qvDSpa3bAFsKDbJnKWQ3crSQOCIP2YJ
WaDHGCL29HUyTh3075vzK9pkYkSCeykGZE+IBAlr/mkw6Wt/ngLZPWI=
-----END RSA PRIVATE KEY-----
Jenkins管理画面で管理ノードに外部サーバを追加
ノード名を入力して、Type=Permanent Agent を選択すると一気に入力範囲が増える
こんな感じで入力する。
リモートFSルートはssh接続時のホームディレクトリを置いてやればOK。
後半。ホストのところはターゲットノードのIPアドレスを入力する。
ラスト。こんな感じです。
Jenkinsから外部サーバに対してテストジョブを実行して動作検証
これで準備整ったので動かしてみる。
お試しなので、名前を適当に入力して、「フリースタイル・プロジェクトのビルド」クリック
実行対象ノードを指定する。
ラベル式にはノードの管理で追加した「ノード名」を入れてやる。
ラスト。 Build Stepsを選択して「シェルの実行」を選択。
こんな感じでシェル入力できるので、ここで実行したいシェルを入れてやる。
さりげなく相対パス指定してるけど、この場合はリモートFSルートを起点としたパスになる。
完成。 これで ビルド実行 をクリックすると動き出す。クリックしてみる。
echoしてファイル保管するだけだから一瞬で完了した。
よくみると下に#1ってのが履歴として残ってる。クリックしてみる。
試しにサーバにログインしてちゃんとhello.txtできてるか見に行く。
行ってみて気づいたけど
どうやら、相対パスの起点は
{リモートFSルート}/workspace/{ジョブ名}/ の配下になるようだ。おぼえとこ。
ちゃんと思った通りのものができててよかった