はじめに
個人でもある程度自動デプロイできるようになりたいなーってことで継続的インテグレーション(CI: Continuous Integration) の勉強始めました。
ある勉強会でテスト系専門で従事されている方に
商用アプリはがっつりやるとして,
個人だとどこまですればいいでしょうか?って聞いて
いろいろ教えていただいたので,
試行錯誤しながら環境作っていこうと思います。
今回はとりあえず,CI ツールとしては定番の Jenkins を Mac に導入してみたのでそのことについて書きます。
今回は基本的にまっさらな環境(ほぼ購入後,Xcodeのみがっつり使用)から導入を試しているので全然挙動が異なる場合があります。また,開発環境を壊してしまう可能性もあるので自己責任でお願いいたします。
Jenkins とは
- CI ツールでオープンソース
- Java で動作するので Win,Linux,Mac でも使える
- Git などの管理ツールと連携可能
- プラグインも多い
- 利用者も多い(らしい)
個人ユースでも MacBook をサーバとして使えるというのがいい。
個人でサーバ借りるのも面倒だし・・・試す程度なら全然。
執筆時の環境,バージョン情報
- MacBook Early 2016
- OS X 10.11 (El Capitan)
- Xcode 7.3.1
- Homebrew 0.9.9
- java version 1.8.0_102
- Jenkins version 2.18
Homebrew を導入
まずはパッケージツールである Homebrew をインストールします。
MacPorts とどっちがいいかはわからないですが,
まっさらな MacBook でやれたのでこっちにします。
個人的には MacPorts 派 です。
ただ最近は brew の記事の方が増えてきた印象・・・
OS X 用のパッケージマネージャー1にコマンドが書いてある。
ターミナル.app を開いてコマンド入力。
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Milanista-MacBook:~ Milanista$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
==> This script will install:
/usr/local/bin/brew
/usr/local/Library/...
/usr/local/share/doc/homebrew
/usr/local/share/man/man1/brew.1
/usr/local/share/zsh/site-functions/_brew
/usr/local/etc/bash_completion.d/brew
==> The following directories will be made group writable:
/usr/local/.
/usr/local/bin
==> The following directories will have their owner set to Milanista:
/usr/local/.
/usr/local/bin
==> The following directories will have their group set to admin:
/usr/local/.
/usr/local/bin
Press RETURN to continue or any other key to abort
==> /usr/bin/sudo /bin/chmod g+rwx /usr/local/. /usr/local/bin
Password:
==> /usr/bin/sudo /usr/sbin/chown Milanista /usr/local/. /usr/local/bin
==> /usr/bin/sudo /usr/bin/chgrp admin /usr/local/. /usr/local/bin
==> /usr/bin/sudo /bin/mkdir -p /Users/Milanista/Library/Caches/Homebrew
==> /usr/bin/sudo /bin/chmod g+rwx /Users/Milanista/Library/Caches/Homebrew
==> /usr/bin/sudo /usr/sbin/chown Milanista /Users/Milanista/Library/Caches/Homebrew
==> Downloading and installing Homebrew...
remote: Counting objects: 1030, done.
remote: Compressing objects: 100% (918/918), done.
remote: Total 1030 (delta 93), reused 697 (delta 70), pack-reused 0
Receiving objects: 100% (1030/1030), 1.03 MiB | 135.00 KiB/s, done.
Resolving deltas: 100% (93/93), done.
From https://github.com/Homebrew/brew
* [new branch] master -> origin/master
HEAD is now at 7c7e2d0 Merge pull request #768 from MikeMcQuaid/cask-man
==> Tapping homebrew/core
Cloning into '/usr/local/Library/Taps/homebrew/homebrew-core'...
remote: Counting objects: 3716, done.
remote: Compressing objects: 100% (3603/3603), done.
remote: Total 3716 (delta 15), reused 1794 (delta 4), pack-reused 0
Receiving objects: 100% (3716/3716), 2.87 MiB | 433.00 KiB/s, done.
Resolving deltas: 100% (15/15), done.
Checking connectivity... done.
Tapped 3594 formulae (3,743 files, 8.9M)
==> Installation successful!
==> Next steps
Run `brew help` to get started
Further documentation: https://git.io/brew-docs
==> Homebrew has enabled anonymous aggregate user behaviour analytics
Read the analytics documentation (and how to opt-out) here:
https://git.io/brew-analytics
Homebrew のバージョンを確認してインストール出来ているか確認します。
$ brew -v
Homebrew 0.9.9 (git revision 7c7e; last commit 2016-08-20)
Homebrew/homebrew-core (git revision 12f6; last commit 2016-08-20)
Jenkins をインストール
Homebrew がインストールされていることを確認したら,
下記コマンドを叩いて Jenkins をインストールします。
$ brew install jenkins
Milanista-MacBook:~ Milanista$ brew install jenkins
jenkins: Java 1.7+ is required to install this formula.JavaRequirement unsatisfied!
You can install with Homebrew Cask:
brew cask install java
You can download from:
http://www.oracle.com/technetwork/java/javase/downloads/index.html
Error: An unsatisfied requirement failed this build.
Java 1.7 以上が必要らしい。
$ java -version
Milanista-MacBook:~ Milanista$ java -version
No Java runtime present, requesting install.
サイトに飛んで色々導入したけどダメだったので,
とりあえずさっきのエラーの内容を確認して下記コマンドを打つ。
$ brew cask install java
Milanista-MacBook:~ Milanista$ brew cask install java
==> Tapping caskroom/cask
Cloning into '/usr/local/Library/Taps/caskroom/homebrew-cask'...
remote: Counting objects: 3380, done.
remote: Compressing objects: 100% (3362/3362), done.
remote: Total 3380 (delta 37), reused 438 (delta 12), pack-reused 0
Receiving objects: 100% (3380/3380), 1.14 MiB | 117.00 KiB/s, done.
Resolving deltas: 100% (37/37), done.
Checking connectivity... done.
Tapped 0 formulae (3,387 files, 3.5M)
==> Creating Caskroom at /usr/local/Caskroom
==> Caveats
This Cask makes minor modifications to the JRE to prevent issues with
packaged applications, as discussed here:
https://bugs.eclipse.org/bugs/show_bug.cgi?id=411361
If your Java application still asks for JRE installation, you might need
to reboot or logout/login.
Installing this Cask means you have AGREED to the Oracle Binary Code
License Agreement for Java SE at
http://www.oracle.com/technetwork/java/javase/terms/license/index.html
==> Downloading http://download.oracle.com/otn-pub/java/jdk/8u102-b14/jdk-8u102-macosx-x64.dmg
######################################################################## 100.0%
==> Verifying checksum for Cask java
==> Running installer for java; your password may be necessary.
==> Package installers may write to any location; options such as --appdir are ignored.
Password:
==> installer: Package name is JDK 8 Update 102
==> installer: Upgrading at base path /
==> installer: The upgrade was successful.
🍺 java was successfully installed!
インストール完了後,再度 java のバージョンチェック。
Milanista-MacBook:~ Milanista$ java -version
java version "1.8.0_102"
Java(TM) SE Runtime Environment (build 1.8.0_102-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)mode)
java のバージョンが 1.7 以上になったので,再度 jenkins をインストール。
Milanista-MacBook:~ Milanista$ brew install jenkins
==> Using the sandbox
==> Downloading http://mirrors.jenkins-ci.org/war/2.18/jenkins.war
==> Downloading from http://ftp.tsukuba.wide.ad.jp/software/jenkins/war/2.18/jenkins.war
######################################################################## 100.0%
==> jar xvf jenkins.war
==> Caveats
Note: When using launchctl the port will be 8080.
To have launchd start jenkins now and restart at login:
brew services start jenkins
Or, if you don't want/need a background service you can just run:
jenkins
==> Summary
🍺 /usr/local/Cellar/jenkins/2.18: 6 files, 67.4M, built in 1 minute 44 seconds
Jenkins のインストール確認
下記コマンドを打って Jenkins を立ち上げる。
$ java -jar /usr/local/opt/jenkins/libexec/jenkins.war
または
$ jenkins
なんか色々出力始まればとりあえずOK。
次にブラウザを開いて http://localhost:8080/
にアクセス。
パスワードを要求されてる。
エディタ(例えば emacs)で下記ファイルにアクセスして文字列をコピーする。
$ emacs ~/.jenkins/secrets/initialAdminPassword
再度 jenkins を実行してログイン画面を出して,先ほどのパスワードを入力。
うまくいくと,Jenkins のカスタマイズ画面に。どっちでもいい気がする。
まだまだこれからだけど今回はここまでにする。
おわりに
CI の勉強始めに Jenkins を MacBook に導入してみた。
まだジョブの追加とかいろいろあるので勉強してみる。
Homebrew とか java が最新の方はサクッといけると思う。
とりあえず,Jenkins おじさんに会えてよかった。
でも,わ,私は Jenkins おじさんにはならないんだからね。
ここまでご覧いただきありがとうございました。
CI を勉強するにあたって注意する点,ここが難しいとかあったら
ご教示いただければ幸いです。