JenkinsでSlaveを作ってビルドする

LINEで送る
Pocket

久々にデスクトップを買ったのでUbuntuを入れてビルドマシンとして設定してみる。

Slave(Ubuntu14.0.4)

まずJenkinsをインストールする。

wget -q -O - https://pkg.jenkins.io/debian/jenkins-ci.org.key | sudo apt-key add -
sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
sudo apt-get update
sudo apt-get install jenkins

次にMaster-slave間でssh通信するために、公開鍵を受け取る必要があるので、一旦パスワード認証を有効にする。

# PasswordAuthentication yesに変更
sudo vim /etc/ssh/sshd_config
sudo /etc/init.d/ssh restart

Host(Mac)

  • MacBook Air (11-inch, Mid 2012)
  • OS X El Capitan 10.11.6
  • brew 1.1.0

Jenkinsのインストール

brew install jenkins
brew services start jenkins

brewで楽々インストール・・・と思ったらサービス開始のところで躓いた。

/Users/phicdy/Library/LaunchAgents/homebrew.mxcl.jenkins.plist: Operation not permitted

どうやらtmuxから実行したのが原因らしい。
brew servicesは中でlaunchctlを使っていて、tmux上ではnamespaceが変わってしまうため、launchctlをうまく実行できないとのこと。

参考: launchctl load で Operation not permitted(解決?)

brew install reattach-to-user-namespace

~/.tmux.confに以下を追加

set-option -g default-command "reattach-to-user-namespace -l bash"

鍵設定

scpで鍵を送って登録する。鍵送信後はパスワード認証を無効に戻しておく。

ssh-keygen
scp .ssh/id_rsa.pub slave-user@<slave IP>:/home/slave-user/
ssh slave-user@<slave IP>

# ここからSlave
cat id_rsa.pub >> ~/.ssh/authorized_keys
rm id_rsa.pub
exit

Slaveの追加

  1. Jenkinsの管理→ノードの管理→新規ノード作成
  2. リモートFSルートにリモートのワークスペースのパスを入力
  3. 起動方法を「SSH経由でUnixマシンのスレーブエージェントを起動」に変更
  4. ホストにIPを入力
  5. 認証情報を追加
  6. 種類をSSHユーザ名と秘密鍵
  7. ユーザ名をリモートのログインユーザに変更
  8. 秘密鍵を「Jenkinsマスター上の~/.sshから」に変更
  9. 保存

おわりに

Android開発のビルドはかなりCPUとメモリを使うので、スペックが低いとビルド中に何もできないことがあった。デバッグ中はAndroid Studioを使うでビルドする必要があるが、それ以外のビルドはSlaveを使うことでかなりリソースを節約できると思う。3万くらいで買えたマシンだったので有効活用していきたい。

LINEで送る
Pocket