git pushを行ったら自動でipaファイルを生成してDeployGateに配布する

最近iOSアプリの配布にはDeployGateを使用しています。簡単に配布できて便利です!

今回はgit pushを使って自動でDeployGateに登録する方法を確立したのでその手順をメモしておきます。

ターミナルからipa を生成する

まずはターミナルからipaファイルを生成してみます。普通にやると面倒なのでshenzhenというライブラリを使ってipaを生成してみます。

`$gem install shenzhen

を入力してインストールしたあと、

$cd /path/to/xcode_project
$ipa build

を入力するとipaファイルが作成されるかと重います。

DeployGateにターミナルからpushしてみる

次に deploygateのコマンドを$curl https://deploygate.com/install.sh | /bin/shでインストールします。

インストールが終了したら

$dgate push your_app_name your_app.ipa

を入力してください。これだけでアプリがDeployGateに配布されます。

Bitbucketにレポジトリを登録

BitbucketにiOSプロジェクトのレポジトリを登録します。

Bitbucketにプッシュしたかどうかをローカルホストでも受け取れるようにする

このようなフックは標準だとローカルホストでは受け取れないので、UltraHookというサービスを使用してローカルホストでも受け取れるようにします。

$ gem install ultrahook
$ ultrahook github 8001

と入力すると

Forwarding activated...
http://github.furodrive.ultrahook.com -> http://localhost:8001

のような結果が表示されたらOKです!

これでhttp://github.furodrive.ultrahook.comで受け取ったWebHooksはlocalhost:8001に転送されます。

Bitbucketにwebhooksを登録

次にBitbucketのページにて APP → Settings → Hooks → Add hook を選択した後、hookのタイプをPOSTにして以下の様なURLを入力します。

 http://github.furodrive.ultrahook.com/push?group=your_group_name&path=/path/to/ios_project&app=your_ipa_name

以下はパラメータの説明です。

  • group: 配布先のグループ名
  • path: iosのプロジェクトのパス
  • app: ipaの名前(例: hoge.ipa)

これでBitbucketにPUSHしたら上のURLにPOSTリクエストが送信されます。

FlaskでAPIサーバーを書く

次にこのPOSTリクエストを受け取るサーバーをFlaskで作成します。

次にFlaskを使ってサーバーを作成します。

flask_app/app.py

from flask import Flask,request
import os

app = Flask(__name__)

@app.route("/")
def index():
    return "index"

@app.route("/push",methods=['POST'])
def push():
    if request.method == 'POST':
        data = request.data
        group = request.args.get("group")
        app = request.args.get("app")
        path = request.args.get("path")
        os.system("""cd {};
                        ipa build;
                        dgate push {} {};
                  """.format(path,group,app))
        return 'success'

if __name__ == '__main__':
    app.run(port=8001)

ここまでですべての手順は完了です。お疲れ様でした。

UltraHooksとflaskのサーバーを起動させたままiOSプロジェクトに対して git pushを実行してみると無事にipaファイルが作成されDeployGateにUploadされます!

おまけ: LaunchAgentsを使ってサーバーの起動を自動化する

(注意) おまけ編はMac OSの方のみとなります。

このままだと、毎回UltrahooksとFlaskのサーバーを立ち上げないと行けないのでMacにログインしたらこれらのサーバーが自動で起動するようにしておきます。

Ultrahooksを起動

/Library/LaunchAgents/com.furodrive.ultrahooks.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>EnableGlobbing</key>
    <true/>
    <key>KeepAlive</key>
    <true/>
    <key>Label</key>
    <string>com.furodrive.watch</string>
    <key>ProgramArguments</key>
    <array>
        <string>ultrahook</string>
        <string>github</string>
        <string>8001</string>
    </array>
    <key>StandardErrorPath</key>
    <string>/tmp/com.furodrive.watch.err</string>
    <key>StandardOutPath</key>
    <string>/tmp/com.furodrive.watch.out</string>
</dict>
</plist>

Flaskを起動

/Library/LaunchAgents/com.furodrive.server.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>EnableGlobbing</key>
<true/>
<key>Label</key>
<string>run_watch_server.job</string>
<key>ProgramArguments</key>
<array>
<string>python</string>
<string>/Users/haradashinya/project/watchman/manage.py</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>StandardErrorPath</key>
<string>/tmp/run_watch_server.job.err</string>
<key>StandardOutPath</key>
<string>/tmp/run_watch_server.job.out</string>
</dict>
</plist>

後はこれらのplistファイルを launchctl load …で読みこめばMacにログインするだけで 自動的にサーバーが起動するようになります。

Related Contents

Pickup Contents