Jenkinsによるビルド自動化とTestFlightアップロードはよくWeb上にも情報があるのですが、大概プロジェクトごとにジョブを作る必要があって煩雑でした。
なので、簡単なセットアップで任意のiOSプロジェクトでビルドできる仕組みを作りました!
GitHub(GitHub Enterprise)必須です
TestFlightにDeveloperというListを作っておきます。
あとは、
- GitHubでWebhookを設定
- プロジェクトにTestFlight用Schemeを追加
- git push origin Developer-new_feature (List名-機能名)
以上!
以後はpushするだけでJenkinsでビルドされてTestFlightアップロードまで完了します。
GitHub -> AutoFlightProxy -> Jenkins -> TestFlight
AutoFlightProxyがWebHookの内容を元にパラメータを作成しJenkinsにリクエスト
require 'sinatra'
require 'json'
JENKINS_URL = "http://jenkins.example.com"
BUILD_PATH = "/job/autoflight/buildWithParameters"
def jenkins_build_query(params)
payload = JSON.parse(params['payload'])
if payload['deleted']
nil
else
branch = payload['ref'].sub(%r{refs/heads/}, '')
team = branch.split('-')[0] if branch =~ %r{-}
if team
owner = payload['repository']['owner']['name']
name = payload['repository']['name']
{
repository: "#{owner}/#{name}",
branch: branch,
team: team,
project_name: name
}
end
end
end
def request_jenkins(path, query)
p query
`curl -s "#{JENKINS_URL}#{path}?#{Rack::Utils.build_query(query)}"`
end
post '/hook' do
query = jenkins_build_query(params)
request_jenkins(BUILD_PATH, query) if query
[201, {}, 'ok']
end
-
ビルドスクリプトを「ビルド」→「シェルの実行」に貼り付け https://gist.github.com/y310/10240631#file-build-sh
-
上記のビルドスクリプトに設定してあるSCRIPT_DIR以下に以下の2スクリプトと画像を設置
-
「ビルドのパラメータ化」から以下のパラメータを作成
- repository
- branch
- project_name
- team
-
「プロジェクトの高度なオプション」からカスタムワークスペースを使用にチェック
- リポジトリごとに違うディレクトリを作るため
- /Users/jenkins/jenkins/autoflight/$repository など
-
「ソースコード管理」を設定
- Repository URL: git@github.com:$repository.git
- Branch Specifier: $branch
-
Upload to TestFlight
- Distribution Lists: $team
こっそりアイコンを自動的にテスト用のものに変換する機能も入っています。