Jenkins
Jenkinsとは
JenkinsとはJavaで書かれたオープンソース継続的インテグレーションツール (Wikipediaより引用)
セットアップ手順
MacOSX環境でのセットアップ手順のメモ
インストール方法
Homebrewが入っていれば、以下のコマンドでインストールできる
$ brew install jenkins
起動コマンド
$ java -jar /usr/local/opt/jenkins/libexec/jenkins.war
※Javaのバージョンが古いと起動できない。JDK8をインストールしたところ動作を確認できた
設定ファイルのコピー
起動設定ファイルのコピー
$ 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
workspaceの場所
workspaceはMacOSXだと、/Users/ユーザ名/.jenkins/jobs/ジョブ名/workspace
GitHubとの連携
GitHub pluginで githubへのプッシュ時に自動デプロイできるみたい
でもGitHubからpush通知するには公開サーバーにしないとできないかも? push通知がうまく行かない場合はポーリングしてビルドしてもあまり問題ない気がする
WebからJenkinsの再起動
コマンドでもできるけど、WebからもURLアクセスで再起動できる
- http://{JENKNS_HOST}/safeRestart
FTPへの自動アップロード
以下のシェルスクリプトで自動アップロードできる
#!/bin/sh /usr/bin/ftp -n -v [ホスト名] << EOF user [ユーザ名] [パスワード] put [アップロードするファイル] quit EOF
ただセキュリティに問題があるので、できればSCPコマンドで ssh で転送した方がよい
IPAファイル(iOS)をコマンドからビルドする方法
「lime build ios」の後に、 export/ios フォルダに移動して、以下のシェルスクリプトを実行すると IPA ファイルが作られる
#!/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」フォルダ。
Schemeの設定について
「lime build ios」で出力した *.xcodeproj は、一度Xcodeで開かないと Schemeの設定が書き込まれないようです。そのため以下のシェルを実行して Scheme設定を書き込む必要があります。
#!/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)向けのビルド環境を構築する(無理矢理な方法)
Deploy Gateに アプリを自動アップロードする
Deploy Gateを使うと、アプリのアップロードや管理が楽になる
ただし、非公開アプリにするには 月1500円〜 が必要
Deploy Gateに自動アップロードする方法
Deploy Gateコマンドラインツールのインストール方法
このコマンドでインストールできる
$gem install dgate
gemコマンドが失敗する場合は、Command Line Tool がインストールされていない可能性を疑う
インストールできれば、以下のコマンドでアップロード可能(初回アップロードは手動でやらないといけないかも?)
$dgate ユーザ名 *.ipa
Jenkinsプラグインをインストールする
Jenkinsプラグインからアップロードすることも可能
Tips
不要になったプロジェクトを非表示にする
- 対象のプロジェクトを選び、「プロジェクトの無効化」ボタンをクリックして無効にする
- ビューのタブの「+」をクリックして新規ビューを作成
- ビュー名に「有効なプロジェクト」と入力して「リストビュー」を選択、OKボタンを押す
- ビューの詳細設定を以下のように設定
- ジョブフィルター > ステータスフィルター > 「有効なジョブのみ」
- ジョブフィルター > 正規表現でジョブを指定 > 「.*」
- 「保存」ボタンをクリックして保存する
デフォルトビューの変更
「Jenkinsの管理 > システム設定 > デフォルトビュー」からデフォルトで表示するビューを変更することができる