Skip to content

Instantly share code, notes, and snippets.

@y310
Last active August 29, 2015 13:58
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save y310/10244018 to your computer and use it in GitHub Desktop.
Save y310/10244018 to your computer and use it in GitHub Desktop.
potatotips #6

AutoFlight

〜簡単セットアップで自動ビルド〜

課題

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にリクエスト

AutoFlightProxyで動いているsinatraサーバのコード

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

Jenkins側のセットアップ

スクリプトの設置

ビルド設定

  • 「ビルドのパラメータ化」から以下のパラメータを作成

    • 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

おまけ

こっそりアイコンを自動的にテスト用のものに変換する機能も入っています。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment