好奇心の赴くままに

好奇心の赴くままに

やりたいことを書いています。

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

Docker/Kubernetes 実践コンテナ開発入門

Docker/Kubernetes 実践コンテナ開発入門

目次

ローカル開発環境

Windows10

Jenkins(Master)環境

CentOS7
Java8

Jenkins(Slave)環境

CentOS7
Java8

前提

今回のゴール

MasterからSlaveに接続してSlave側で簡単なジョブを実行できる

f:id:kamada-math:20191231203502p:plain

手順

AWSインフラ構築

f:id:kamada-math:20191231203511p:plain

上記環境を構築する

Jenkinsサーバ(Master)の構築

CentOS7のAMIを選択して、CentOS7サーバを構築する f:id:kamada-math:20191229193903p:plain

※セキュリティグループは以下のように設定する

タイプ プロトコル ポート範囲 ソース 用途
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/」に接続して画面に沿って初期設定を進める

f:id:kamada-math:20191209005536p:plain

この画面まで進めれば完了 f:id:kamada-math:20191209010248p:plain

Jenkinsサーバ(Slave)の構築

Master側と同様にCentOS7のAMIを選択して、CentOS7サーバを構築する f:id:kamada-math:20191229193839p:plain ※セキュリティグループは以下のように設定する

タイプ プロトコル ポート範囲 ソース 用途
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の管理]→[ノードの管理]を選択して

f:id:kamada-math:20191231173149p:plain f:id:kamada-math:20191231173046p:plain

左側のノードの作成を押下 f:id:kamada-math:20191231173252p:plain ノード名を入力して

f:id:kamada-math:20191231173346p:plain

以下のように入力する

f:id:kamada-math:20191231211019p:plain

追加ボタンを押下後、以下を入力する。 f:id:kamada-math:20191231202707p:plain

ログ確認

上手くいくとこんな感じになる f:id:kamada-math:20191231173824p:plain

ジョブ実行

Jenkinsホーム画面より[新規ジョブ作成]、[フリースタイル・プロジェクトのビルド]を選択

f:id:kamada-math:20191231205353p:plain

[General]→[実行するノードを制限]にチェックし、 ジョブを実行するSlaveノードのラベルを入力 f:id:kamada-math:20191231210722p:plain

[ビルド]→[ビルドの手順]→[ビルド手順の追加]より シェルスクリプトに適当なシェルスクリプトを入力する

f:id:kamada-math:20191231205807p:plain

ジョブ作成後、[ビルド実行]よりジョブを手動で実行すると コンソール出力画面でSlave側でのジョブ実行が確認できる

f:id:kamada-math:20191231210815p:plain

参考

How to Connect to Remote SSH Agents? – CloudBees Support

How to Setup Jenkins Slaves Using Password and Keys

雑感

日本語のページを参照して進めたら、思いのほか情報が古くてはまった。今後は英語サイトを参考に進めたい。