JenkinsMasterサーバからJenkinsSlaveサーバにSSH接続してジョブを実行する
以下の本を進めている中でdockercomposeでJenkinsMasterとJenskinsSlaveを立てて、MasterからSlaveにSSH接続するところでつまずいたので、Jenkinに慣れるためにコンテナでなく、EC2サーバを立ててやってみました。
https://www.amazon.co.jp/dp/B07GP1Q3VT/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1
目次
ローカル開発環境
Windows10
Jenkins(Master)環境
CentOS7
Java8
Jenkins(Slave)環境
CentOS7
Java8
前提
今回のゴール
MasterからSlaveに接続してSlave側で簡単なジョブを実行できる
手順
AWSインフラ構築
上記環境を構築する
Jenkinsサーバ(Master)の構築
CentOS7のAMIを選択して、CentOS7サーバを構築する
※セキュリティグループは以下のように設定する
タイプ | プロトコル | ポート範囲 | ソース | 用途 |
---|---|---|---|---|
SSH | TCP | 22 | マイIP | ローカルからの接続用 |
カスタムTCP | TCP | 8080 | マイIP | ブラウザからのアクセス用 |
サーバに接続後、サーバにJenkinsをインストールする
$ sudo yum -y install java-1.8.0-openjdk # 前提環境のインストール $ sudo curl -o /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo # Jenkins公式yumレポジトリの追加 $ sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key # Jenkinsインストール時に使用する公開鍵を追加 $ sudo yum install jenkins # Jenkinsのインストール $ sudo systemctl enable jenkins # 自動起動設定 $ sudo systemctl start jenkins # Jenkinsの起動 $ sudo systemctl status jenkins # 起動及び自動起動確認
※firewalldが有効になっている場合は、別途8080番へのアクセスを許可する必要があるので注意
※EC2ではセキュリティグループでアクセス制限を行う為、firewalldは標準ではインストールされていない
「http://(公開IP):8080/」に接続して画面に沿って初期設定を進める
この画面まで進めれば完了
Jenkinsサーバ(Slave)の構築
Master側と同様にCentOS7のAMIを選択して、CentOS7サーバを構築する ※セキュリティグループは以下のように設定する
タイプ | プロトコル | ポート範囲 | ソース | 用途 |
---|---|---|---|---|
SSH | TCP | 22 | マイIP | ローカルからの接続用 |
SSH | TCP | 22 | (Master側のセキュリティグループ) | Master側からの接続用 |
サーバ起動後、SSH接続して、Java環境のインストール
※Masterとの連携のためにSlave側でSlave.jarを実行させる必要がある為。
$ sudo yum -y install java-1.8.0-openjdk # 前提環境のインストール $ sudo adduser jenkins # SSH接続、ジョブ実行用のユーザー作成 $ sudo passwd jenkins # パスワードを設定 New password:(適当に入力) Retype new password:(適当に入力) $ su jenkins # jenkinsユーザーに切り替え $ mkdir /home/jenkins/jenkins_slave # SlaveのJenkinsワークスペースを作成
SSH接続のための公開鍵・秘密鍵を作成
Jenkinsユーザーのまま以下を実行
$ mkdir ~/.ssh $ cd ~/.ssh $ ssh-keygen -t rsa # 公開鍵・秘密鍵を作成 Enter file in which to save the key (/home/jenkins/.ssh/id_rsa):(そのままEnter) Enter passphrase (empty for no passphrase):(適用に入力) Enter same passphrase again:(適用に入力) $ cat id_rsa.pub > ~/.ssh/authorized_keys # 公開鍵の配置 $ chmod 700 ~/.ssh # ディレクトリの権限変更 $ chmod 600 ~/.ssh/authorized_keys # ファイルの権限変更 $ cat id_rsa # 秘密鍵をクリップボードに保存
Master側でのSlave側をノードとして設定する
「http://(公開IP):8080/」に接続して[Jenkinsの管理]→[ノードの管理]を選択して
左側のノードの作成を押下 ノード名を入力して
以下のように入力する
追加ボタンを押下後、以下を入力する。
ログ確認
上手くいくとこんな感じになる
ジョブ実行
Jenkinsホーム画面より[新規ジョブ作成]、[フリースタイル・プロジェクトのビルド]を選択
[General]→[実行するノードを制限]にチェックし、 ジョブを実行するSlaveノードのラベルを入力
[ビルド]→[ビルドの手順]→[ビルド手順の追加]より シェルスクリプトに適当なシェルスクリプトを入力する
ジョブ作成後、[ビルド実行]よりジョブを手動で実行すると コンソール出力画面でSlave側でのジョブ実行が確認できる
参考
How to Connect to Remote SSH Agents? – CloudBees Support
How to Setup Jenkins Slaves Using Password and Keys
雑感
日本語のページを参照して進めたら、思いのほか情報が古くてはまった。今後は英語サイトを参考に進めたい。