AWS環境でJenkinsを利用してビルドとかしているのですけど
ビルドサーバ1台じゃさばききれねえ〜
重めの処理するためにインスタンスタイプあげたい〜
でも常に使いたいわけじゃなし〜ビルドサーバ増やしても管理めんどいし〜
みたいな悩みありませんか、私はあります
そんな悩みをJenkinsのスレーブを使い捨てることで解決します
かんたんにいうと
- マスターJenkins君が
- EC2インスタンスを自動で立てて
- ssh経由でジョブ実行させて
- 使い終わったらインスタンスターミネートしてくれる
環境
EC2
Amazon Linux AMI 2017.09.1.20180307 x86_64 HVM GP2
Jenkins
ver. 2.111
こんな構造にしました
ネットワーク設定についてはこちら
手順
- マスターJenkinsの初期設定
- スレーブになるインスタンスのAMIを用意
- マスターJenkinsからスレーブ作成する設定
- マスターJenkinsからスレーブでビルドするテスト
詳しく
1. マスターJenkinsの初期設定
1.1. このあたりを参考にJenkinsのインストール
Installing Jenkins on Red Hat distributions - Jenkins - Jenkins Wiki
1.2. webサーバーたてて8080ポートからまわしてあげる
これやったら Jenkins > Jenkinsの管理 > システム設定 > Jenkinsの位置 > Jenkins URL
からポート番号を抜く
「リバースプロキシの設定がおかしいようです。」と出てしまうので、、
1.3. gitの設定
ビルド用のソースはgitから落としてくるつもりなので、、
なにはなくともgitインストール
httpsでユーザー名とパスワード使う方式でcredential登録
認証情報 > グローバルドメイン > 認証情報の追加
- 種類:ユーザー名とパスワード
- スコープ:グローバル
- ユーザー名:githubアカウントのメールアドレス
- パスワード:githubアカウントのパスワード
- ID:わかりやすい名前をつけます(例 github)
- description:わかりやすい説明をつけます(例 xxxx's github account)
2. スレーブになるインスタンスのAMIを用意
2.1. スレーブ用のセキュリティグループを作成
マスターのセキュリティグループに対してssh許可します
あと自分のIPにもssh許可
2.2. インスタンスを新規作成
t2.microとかでいったんok
Jenkinsジョブが動くようにJava8の実行環境は用意
スレーブでの実行ユーザーになるec2-userに/var/jenkins以下のパーミッションを与える
sudo mkdir /var/jenkins sudo chown ec2-user:ec2-user -hR /var/jenkins
時計もしかと合わせます
こちらにもgitインストール
スレーブ側には認証情報を持たせる必要ないです
他、npmとかビルド内容の必要に応じて入れときましょう
2.3. インスタンスを停止し、AMI作成
型をとってやる
この型を使ってマスターはインスタンス作成します
Amazon EBS-Backed Linux AMI の作成 - Amazon Elastic Compute Cloud
型って何、、
AMIが定まったらこのインスタンス自体は削除してしまってok
3. マスターJenkinsからスレーブ作成する設定
こちらの説明が大変詳しくわかりやすいです
最終的にはこんなかんじの設定で使ってます
4. マスターJenkinsからスレーブでビルドするテスト
テストじゃ〜〜ドンドンパフパフ
てきとうなジョブを新規作成!
general > 実行するノードを制限
でさっき設定に書いたラベルを入力!
ビルド > シェルの実行
でてきとうなシェルを書く!
echo "$(date) : $(hostname)" >> /tmp/hostname
実行!
インスタンスたちあがった〜
ノードに追加された〜
ジョブが通った〜
ウオオアア〜〜〜
これでやりたい放題だ!!!!!やったぜ!!
完