Jenkins

jenkins.png

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

不要になったプロジェクトを非表示にする

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

デフォルトビューの変更

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