web-dev-qa-db-ja.com

Apple CI / XcodeサービスとJenkins

新しいXcodeサービスや新しいApple CIとJenkinsを統合する方法/プラグインはありますか?

どうして?

JenkinsサーバーとOSXビルドスレーブがsshを介して接続されている場合の主な問題は、iOSシミュレータにこれに存在しないグラフィカル環境が必要であるため、ユニットテストが機能しないであることです。構成。

Xcodeサービス(単体テストをサポート)をJenkinsと統合できることを願っています。

Apple CIを使用すれば十分ですが、この質問はXcodeサービスとJenkinsの統合を目的としています。

私がすでに知っていること

既存のXcode Jenkinsプラグイン の経験はありますが、まったく新しいXcodeサービスまたは新しいApple CIをサポートしていないようです。特にユニットに熱心です。 CIによるテスト(これは、古い方法のsshセッションでは適切に機能しませんでした)。

私が知りたいこと

現在Jenkinsとssh接続されたビルドスレーブで動作していない以下の問題に関する情報を教えてください。

  • ヘッドレスシステムでの単体テスト
  • Frank または同等の受け入れテスト
  • 自動プロビジョニングプロファイルの更新(Apple CIがそれを行います)

そして、現在Jenkinsとsshに接続されたビルドスレーブで正常に動作し、Xcodeサービス統合で動作するはずのものに関する情報:

  • 異なるビルド構成のビルド(リリース、デバッグ、TestFlight)/スキーム
  • 自動ビルド番号の増分
    • (Jenkinsを使用すると、プロジェクトのビルド番号を${BUILD_NUMBER}に設定できます。Jenkinsは、ビルド番号に従ってこの環境変数を設定します。Apple CIがビルドを実行すると、おそらく代わりにビルド番号を設定します。)
    • JenkinsとApple CIの間のビルド番号の処理/同期
  • Apple CIのビルド製品へのアクセス
    • 例えばジョブがTestFlightにアップロードする
  • ビルドのバックアップ
  • 特定のブランチへのgit Pushでの自動ビルド
  • 電子メール通知

追加の質問/ヒント

  • Apple CI == Xcode serviceであるかどうか、またはApple CIがでXcodeサービスを使用する)かどうかはわかりません。後者の場合、Xcodeサービスはインテリジェントなビルドスレーブのようなもので、Jenkinsはそれを使用してビルドとテストを行うことができますが、ビルド番号と製品はそれ自体で管理できます。
  • Apple CIは独立したCIであり、複数のCIを相互に統合することは、最も簡単で便利な方法ではないことを認識しています。Apple CIは私のニーズ(上記を参照)に対して十分な柔軟性を備えておらず、Jenkinsを使用した古い方法にはいくつかの問題(上記を参照)があります。
29
fabb

Jenkinsサーバーかxcodeサーバーのどちらかを選択する必要があると思います。私はxcodeサーバーについてはあまり知りませんが、ジェンキンスとxcode 5については知っています。

異なる構成のビルド

Xcodeプラグインでは、使用するスキームを設定できます。

自動ビルド番号の増分

XCODEBUILDNUMBERというパラメーターをjenkinsジョブに追加しました。そして、ビルドを開始するときはいつでも、xcodeプロジェクトからビルド番号をコピーし(手動でインクリメントします。Mineは080813Aのように見えます)、XCODEBUILDパラメーターに貼り付けます。これを使用して、出力ファイルなどに名前を付けます。jenkins用のプラグインがあり、ビルド番号を自動的にインクリメントできますが、統合しないか、xcodeと同期しません。

Jenkins間のビルド番号の処理/同期&Apple CI

前に言ったように、ビルド番号を同期する方法はわかりませんが、考えられる解決策を考えました。コマンドラインツール plistbuddy を使用して、jenkinsジョブのビルドステップとしてinfo.plistにビルド番号を設定できます。

単体テスト

単体テストをXcode5で正常に動作させることはできませんでしたが、jenkinsのxcodeプラグインがそれをサポートしていることを知っています。プロジェクト設定に「ビルド後のテスト」キーがないことは、それと何らかの関係があると思います。あなたがそれを働かせたら、私は知りたいです。 (私もこの作品を作ることに熱心です)

受け入れテスト

フランクはコマンドラインツールです。 Jenkinsジョブに簡単に統合できます。テストに合格しない場合、ビルドに失敗すると思います。

Apple CIのビルド製品へのアクセス

意味がよくわかりませんが、jenkinsを使用すると、ビルド製品(.ipa)をアーカイブして、後でダウンロードしてtestflightなどのサービスにアップロードできます。繰り返しますが、Xcodeサーバー(CI)についてはあまり知りません。

ビルドのバックアップ

前に述べたように、ジェンキンスはビルド製品をアーカイブできます。また、ビルド製品のディレクトリで$ {BUILD_NUMBER}変数を使用しているため、ビルドごとに異なるディレクトリがあります。このディレクトリは私のTime Machineにもバックアップされ、重要なビルドは私のWebディレクトリにコピーされます。

特定のブランチへのgit Pushでの自動ビルド

Jenkins gitプラグインを使用すると、jenkinsが指定した間隔でscmをポーリングし、変更時にビルドをトリガーできます。

電子メール通知

これにはプラグインがあると思います。 (ビルドが失敗/成功したときにメールで通知されます。実際、これは組み込みの可能性があります)

閉会中

Xcode CIは完全に独立したCIであり、jenkinsとの統合が難しい場合があります。個人的には、拡張性の理由からジェンキンスをお勧めします。 Xcodeサーバーについてはあまり知りません。

14
Santa Claus

OS XビルドスレーブでXcode 5を使用してJenkinsでユニットテストを実行しています。 Xcodeプラグインを使用する代わりに、実行シェルビルドステップとして実行します。

xcodebuild test -scheme <scheme> -configuration Coverage -sdk iphonesimulator7.0 -destination OS=7.0,name="iPhone Retina (4-inch)"

私のカバレッジ構成は、Generate Test Coverage Reports[〜#〜] yes [〜#〜]に設定されていることを除いて、デバッグ構成とまったく同じです計測器プログ​​ラムフロー[〜#〜] yes [〜#〜]に設定されます。これにより、テストカバレッジファイルが作成されます。 Xcode 5のバグのため、すべてのテストのtearDownで__ gcov_flush();を呼び出します。このxcodebuildコマンドの出力をocunit2junitにパイプして、Jenkinsでテストレポートを取得します。

6
Mark