Jenkins の変更点


#ref(jenkins.png);

* Jenkinsとは [#mc39baf8]
 JenkinsとはJavaで書かれたオープンソース継続的インテグレーションツール
 (Wikipediaより引用)

----
#contents
----

* セットアップ手順 [#y20f0895]
MacOSX環境でのセットアップ手順のメモ

** インストール方法 [#q8f0b918]
Homebrewが入っていれば、以下のコマンドでインストールできる
 $ brew install jenkins

*** 起動コマンド [#ud6e5faa]
 $ java -jar /usr/local/opt/jenkins/libexec/jenkins.war

※Javaのバージョンが古いと起動できない。JDK8をインストールしたところ動作を確認できた

*** 設定ファイルのコピー [#nd88bc93]
起動設定ファイルのコピー
 $ cp -p /usr/local/opt/jenkins/*.plist ~/Library/LaunchAgents
自動起動するには

 $ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist
自動起動の解除は

 $ launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist

- 参考: [[OS XにJenkinsをHomebrewでセットアップする>http://qiita.com/makoto_kw/items/cbe93d4ebbc35f3b43fd]]

*** workspaceの場所 [#v31d6135]
workspaceはMacOSXだと、/Users/ユーザ名/.jenkins/jobs/ジョブ名/workspace

*** GitHubとの連携 [#x9e28140]
GitHub pluginで githubへのプッシュ時に自動デプロイできるみたい

- [[JenkinsでGitHubのプッシュ時に自動デプロイする>http://sil.hatenablog.com/entry/jenkins-github-auto-deploy]]

でもGitHubからpush通知するには公開サーバーにしないとできないかも? push通知がうまく行かない場合はポーリングしてビルドしてもあまり問題ない気がする

*** WebからJenkinsの再起動 [#p758e075]
コマンドでもできるけど、WebからもURLアクセスで再起動できる

- http://{JENKNS_HOST}/safeRestart


*** FTPへの自動アップロード [#k17d956e]
以下のシェルスクリプトで自動アップロードできる

 #!/bin/sh
 
 /usr/bin/ftp -n -v [ホスト名] << EOF
 user [ユーザ名] [パスワード]
 put [アップロードするファイル]
 quit
 EOF

ただセキュリティに問題があるので、できればSCPコマンドで ssh で転送した方がよい

* IPAファイル(iOS)をコマンドからビルドする方法 [#z876689d]
「lime build ios」の後に、 export/ios フォルダに移動して、以下のシェルスクリプトを実行すると IPA ファイルが作られる

#geshi(bash){{
#!/bin/sh
 
SDK="iphoneos"
CONFIGURATION="Release"
PROJECT_FILE="SampleApp.xcodeproj"
TARGET_NAME="SampleApp"
SCHEME_NAME="SampleApp"
PRODUCT_NAME="SampleApp"
IPA_FILE_NAME="SampleApp"
OUT_APP_DIR="out"
OUT_IPA_DIR="out"
PROVISIONING_PATH="${HOME}/Library/MobileDevice/Provisioning\ Profiles/VVVVVVVV-WWWW-XXXX-YYYY-ZZZZZZZZZZZZ.mobileprovision"
if [ ! -d ${OUT_IPA_DIR} ]; then
    mkdir "${OUT_IPA_DIR}"
fi

## when using xcworkspace 
# WORKSPACE_File="SampleApp.xcworkspace"
# xcodebuild clean -workspace "${WORKSPACE_FILE}" -scheme "${SCHEME_NAME}"
# xcodebuild -workspace "${WORKSPACE_FILE}" -scheme "${SCHEME_NAME}" -sdk "${SDK}" -configuration "${CONFIGURATION}" install DSTROOT="${OUT_APP_DIR}"

xcodebuild clean -project "${PROJECT_FILE}" -scheme "${SCHEME_NAME}"
xcodebuild -project "${PROJECT_FILE}" -scheme "${SCHEME_NAME}" -sdk "${SDK}" -configuration "${CONFIGURATION}" install DSTROOT="${OUT_APP_DIR}"
xcrun -sdk "${SDK}" PackageApplication "${PWD}/${OUT_APP_DIR}/Applications/${PRODUCT_NAME}.app" -o "${PWD}/${OUT_IPA_DIR}/${IPA_FILE_NAME}.ipa" -embed "${PROVISIONING_PATH}"
}}

「Sample App」はプロジェクト名に置き換えて使う。プロビジョニングプロファイルのパス(PROVISIONING_PATH)も適切に置き換える。出力先は「out」フォルダ。

- 参考: [[ipa書き出しをxcodebuildとxcrunで自動化する>http://xoyip.hatenablog.com/entry/2014/03/21/195304]]

** Schemeの設定について [#n6a78f70]
「lime build ios」で出力した *.xcodeproj は、一度Xcodeで開かないと Schemeの設定が書き込まれないようです。そのため以下のシェルを実行して Scheme設定を書き込む必要があります。

#geshi(bash){{
#!/bin/sh

# プロジェクトファイルのパス
PROJECT_FILE="SampleApp.xcodeproj"

# Xcodeを終了しておく
pgrep -f "/Applications/Xcode.app" | xargs kill

# いったんXcodeを起動しないとSchemeの設定が書き込まれない
open ${PROJECT_FILE}

# Scheme設定の書き込み完了待ち
sleep 10

# Xcodeを終了する
pgrep -f "/Applications/Xcode.app" | xargs kill

}}

注意点は以下のとおりです。

- Xcodeを終了せずに open すると、再読み込みチェックが走りビルドできなくなるので「pgrep -f "/Applications/Xcode.app" | xargs kill」でXcodeを強制終了する必要がある
- Scheme設定の書き込み完了待ちのために「sleep」を入れる
-- ただし Jenkins でのシェル実行時の「sleep」がうまく行かない場合はファイルを分ける (sleepするだけのシェルスクリプトを作る)

※参考: [[jenkinsでXcode(+cocoapods)向けのビルド環境を構築する(無理矢理な方法)>http://hikaruworld.bitbucket.org/blog/html/2012/12/07/jenkins_and_xcode_with_cocoapods_how_to_build_rst.html]]


* Deploy Gateに アプリを自動アップロードする [#r0448e1d]
Deploy Gateを使うと、アプリのアップロードや管理が楽になる

- [[DeployGate>https://deploygate.com]]

ただし、非公開アプリにするには 月1500円〜 が必要

** Deploy Gateに自動アップロードする方法 [#c06f0377]

*** Deploy Gateコマンドラインツールのインストール方法 [#p1176968]
このコマンドでインストールできる

 $gem install dgate

gemコマンドが失敗する場合は、Command Line Tool がインストールされていない可能性を疑う

インストールできれば、以下のコマンドでアップロード可能(初回アップロードは手動でやらないといけないかも?)

 $dgate ユーザ名 *.ipa

*** Jenkinsプラグインをインストールする [#md91241a]
Jenkinsプラグインからアップロードすることも可能

- [[deploygate for iOS に Jenkinsからアップロードする>http://qiita.com/ginrou@github/items/498d02acbbe9e1327bb7#3-1]]


* Tips [#k29306f1]
** 不要になったプロジェクトを非表示にする [#ic3c7794]
+ 対象のプロジェクトを選び、「プロジェクトの無効化」ボタンをクリックして無効にする
+ ビューのタブの「+」をクリックして新規ビューを作成
+ ビュー名に「有効なプロジェクト」と入力して「リストビュー」を選択、OKボタンを押す
+ ビューの詳細設定を以下のように設定
++ ジョブフィルター > ステータスフィルター > 「有効なジョブのみ」
++ ジョブフィルター > 正規表現でジョブを指定 > 「.*」
++ 「保存」ボタンをクリックして保存する

** デフォルトビューの変更 [#t3f1973b]
「Jenkinsの管理 > システム設定 > デフォルトビュー」からデフォルトで表示するビューを変更することができる