JenkinsがIOSを自動パッケージングしてモミを配布
週末に"ビッグトークテスト2"を見て、急に会社のIOSの自動パッケージングと配布をすることを思いつき、今日から始めました!。
背景
CI(継続的インテグレーション)は、コードやインストールパッケージの継続的なパッケージングとデプロイを自動化し、手作業を減らして生産性を大幅に向上させる、現在非常に人気のあるソフトウェア開発手法であり、ともかく理解し実践する必要があります。
開発のたびにやらなければならないのは、開発にパッケージングしてもらい、パッケージングが終わったらfir.imに持ってきて、QRコードを生成して、最後に社内配布サイトで公開してからテストに入ることです。この一連の作業はとても長く、小さな問題がその日のうちにどんどん修正されてしまうと、本当に間抜けな気分になってしまい、この作業に1~2時間の時間を浪費してしまうのです。CIを使えば、この問題は非常によく解決されます。
環境について
最近よく使われるようになったJenkinsを使い、パッケージはIOS用なので、まずはMacが必要です。
OS:Mac OS X EI Caption 10.11.5
Jenkins バージョン: 2.17
インストール方法
Jenkinsのインストールは非常に簡単で、DMGを直接インストールするだけです。インストールが完了したら http://localhost:8080 Jenkinsの設定インターフェースが表示されますが、Webベースの設定なので非常に使い勝手が良いです。
次の2つのコマンドはよく使うかもしれません。Jenkinsはインストールするとデフォルトで自動的に起動するので、時にはJenkinsを終了して不要なリソース消費を抑えましょう。
Start Jenkins: sudo launchctl load /Library/LaunchDaemons/org.jenkins-ci.plist
Stop Jenkins: sudo launchctl unload /Library/LaunchDaemons/org.jenkins-ci.plist
最初のコマンドはスタート、2番目のコマンドはシャットダウンです。
ワークフロー
今回のJenkinsの使い方のワークフローは以下の通りです(Jenkinsにはこれ以外にも様々な機能があり、今回使用したのはこれらの機能のみです)。
プロジェクトの構築
Jenkinsでパッケージ化されたIOSアプリケーションをデプロイするための最大の前提条件の1つは、Macを持っていなければならないことです。
Jenkinsのインストールは、Baiduからは遠いので割愛しますが、まず、フリースタイルのプロジェクトを新規に作成する必要があります。
プロジェクトの設定
プロジェクト名と説明は自分の目で見るためのものなので、読める範囲であれば好きなように記入してください。次のビルド方法は本当に使えないので使わず、アプリをパッケージ化してfir.imにアップロードした後は、パッケージは基本的に捨てても大丈夫です。必要ならオンデマンドで選べばいいのです。
ソース管理はSVNを選択し、あとはリポジトリのアドレスやアカウントの設定など同じです。
認証情報 はユーザーで、右側のADDボタンでユーザーを追加でき、その他の項目はデフォルトで設定されています。
ビルドトリガーも必須ではありませんが、設定されていない場合は手動でトリガーする必要があります。
具体的な設定ルールはBaiduから入手可能です。
次に、Xcodeの設定です。IOSのパッケージングには2つの方法があり、1つはコマンドラインパッケージングで、パッケージングスクリプトを直接書けばよい。もう一つは、Jenkins用のXcodeプラグインでパッケージングを実装する方法です。私は、開発者がプロジェクトのアーキテクチャを変更したと言っていたので、Xcodeプラグインを使って設定し、コマンドラインを使おうとしましたが、シェルのことを全く知らないのであきらめました。
- Xcodeプラグイン - 一般的なビルド設定
Target
はビルドするターゲットです。空白のままだと、すべてのターゲットがビルドされます。
Clean before build
このオプションはチェックすることをお勧めします、ビルド前にCleanする方が良いです、なぜかというと、開発前にパッケージングするときにCleanしなかったので、時々不可解なバグが出ます。
Configuration
IOSのパッケージの種類、Debug版とRelease版を指して、ReleaseまたはDebugと記入します。
Pack application and build .ipa
インストールするためにipaファイルとしてパッケージする必要があるため、チェックが必要です。
ipa filename pattern
ipaファイルにパッケージされる名前は、最終的にxxx.ipaになります。
Output directory
ここに記入した、パッケージ化された出力へのパス
${WORKSPACE}
を参照しています。
/Users/Shared/Jenkins/Home/workspace
その他、私が使っているものはデフォルトのものなので、必要であれば自分で調べてください。プロジェクトの右側にあるクエスチョンマークは非常にわかりやすいヒントがありますが、唯一不快なのは、ヒントがすべて英語なことです。
- Xcodeプラグイン - コードサイニングとOS Xキーチェーンオプション
この部分は、パッケージ署名を設定する場所であるため、より重要視されるべきです。
まず、キーチェーンアクセスで開発者証明書を見つけて、証明書へのアクセス権を開く必要があります。そうしないと、Jenkinsは証明書を取得できません。
次に、設定項目で以下のような設定を行います。
Keychain path
で固定されています。
HOME}/Library/Keychains/login.keychainを使用します。
Keychain password
証明書のパスワードではなく、認証パスワードのことを指します。
注意 ${HOME} ディレクトリは、Jenkinsのルートディレクトリを参照し /ユーザー/共有/Jenkins Jenkinsを新規にインストールした場合、LibraryディレクトリにKeychainsディレクトリが存在しないことがわかります。次の場所に移動する必要があります。 /ユーザー/SvenWeng/ライブラリ ディレクトリを作成し、Keychains ディレクトリをコピーしてください。
- Xcodeプラグイン - Advanced Xcodeビルドオプション
Xcode Project File
はプロジェクトのアドレス、xxx.xcodeprojです。
Build output directory
はビルドの出力アドレスで、ipaファイルと同じアドレスに設定しました。
注:プロジェクトで
.ワークスペース
. を使用してください。
Xcode Workspace File
で、空白にしてください。
Xcode Project File
.
この時点で、Xcodeプラグインの設定は完了です。
ビルド後の実行
ここでは
Post-Build Script Plug-in
プラグインを使用します。
ビルドしたディレクトリに移動し、パッケージ化したipaファイルをfir-cliコマンドでfir.imにアップロードします。
-T
引数はfir.imを使用するためのトークンです。fir.imに登録しログインすると、トークンを確認することができます。
-Q
引数は、アップロード終了後、対応するQRコードをカレントディレクトリにダウンロードするためのものです。
の下にはチェックボックスのオプションもあります。
Execute script only if build succeeds
. このコマンドはビルドが成功した場合のみ実行されるため、重複してアップロードされる問題を回避できます。
メール通知
Jenkins独自のメール機能を使っているのですが、チェックボックスの結果、ビルドに失敗してメールが送信されるのを確認しています。私自身のテストの後、私は成功したビルドでメールを受信することもできますが、私の設定された163サービスのメールボックスはしばしば哀れにもsmtpを使用してメールを送信することを拒否しています。
メールの内容はまだ比較的ユーザーフレンドリーで、例えばファイルビルドのSVNに変更があった場合、Jenkinsはパッケージングログと一緒に変更ログを以下のように送ってくれます。
この時点で、すべてのビルドが終了し、手動でトリガーして結果を確認することができます。
青色はビルドに成功した場合、赤色はビルドに失敗した場合を示します。
注意事項
設定作業でいつもあれやこれやと変なエラーが出る。私自身が遭遇した問題をまとめてみました。
- スキーム名って一体なんですか?
えーと、実はよくわからないんですが、訳すとスキーム名です。これは実はXcodeの設定なんです(正確かどうかは不明ですが)。アクセスは Xcodeメニュー > 製品 > スキーム > スキームの編集 をクリックします。 スキームの管理
箱詰めして塗り潰した部分がScheme名です。
- コードサインエラーです。一致するプロビジョニングプロファイルが見つかりませんでした。ビルド設定では、UUID "XXXXX " を持つプロビジョニング プロファイルが指定されていますが、そのようなプロビジョニング プロファイルは見つかりませんでした。
このエラーは、やはり証明書の問題で、Xcodeプロジェクトの証明書を /Users/SvenWeng/Library/MobileDevice/Provisioning Profiles (モバイルデバイス/プロビジョニングプロファイル) Jenkinsのルートディレクトリにはなく、以前間違った証明書を入れてしまったため、このエラーが報告されています。プロジェクトの証明書をJenkinsのルートディレクトリにコピーして ライブラリ の中にある。
- FATAL: キーチェーンのロックを解除できません。
このエラーは、ロックを解除した際に キーチェーン パスワードが間違っています。証明書のパスワードではなく、認証パスワード(macのログインパスワードです)を設定項目で設定する必要があります。
- xcodebuild: error: '. /workspace/.xcworkspace' が存在しません。
私のプロジェクトでは、このエラーは明らかです。
.xcodeproj
の代わりに
.scworkspace
ということで、Xcodeのプラグイン設定には
Xcode Project File
ではなく
Xcode Workspace File
-
ERROR: svn://xxxx の更新に失敗しました。
SVNException: svn: E204899: 新しいファイル '/Users/Shared/Jenkins/Home/workspace/HLSC/. xcodeproj/.svn/lock' を作成することができません。そのようなファイルやディレクトリはありません
また、このエラーはSVNの設定に問題があることは明らかです。
- xcodebuild: エラーです。プロジェクト 'xxx.xcodeproj' には 'XXX' という名前のターゲットがありません。
このエラーはターゲット名のエラーで、Xcodeプロジェクトに該当する設定があるかどうかを確認してください。正しい名前はxxx_iOSで、xxx_IOSと入力したため、このエラーを報告しましたが、これは大文字小文字の違いです。
フォローアップ
ローカルファイルを扱うPythonスクリプトを書いたり、パッケージ化した内容をアーカイブしたり、生成したQRコードをFTPで社内配布サイトにアップロードしたりと、後々できることはたくさんあります。自動化されたユニットテストを書く、コードが変更されるたびに自動テストを行う、Androidクライアントをこのようにパッケージ化する、などなど。。。。。
概要
継続的インテグレーションは壮大に見えますが、そのプロセスを歩むのはそれほど難しくありませんし、難しい部分はJenkinsが代わりにやってくれます。
IOSの開発者であるか、IOSをある程度理解しているのであれば、設定するのは非常に速いはずです。そうでない場合は、誰かに指導してもらうのが一番です。そうでなければ、誰かに指導してもらうのが一番です。
忍耐、忍耐、忍耐。設定作業中にいろいろと変なエラー報告があり、時には迷惑に思えることもありますが、忍耐強く、もっと考え、もっとログを見てください。ログは概して非常に明確で正確です。
もっと試してみてください。コンフィグ後に一度ビルドしてください。とにかくビルドは失敗します。コンピュータは爆発しませんし、世界は終わりません。全体の設定作業で30回ビルドに失敗し、30回目までビルドが成功しなかった。
それが終わると、これらの雑用に対処する時間がたくさんたくさん節約できます。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ハートビート・エフェクトのためのHTML+CSS
-
HTML ホテル フォームによるフィルタリング
-
HTML+cssのボックスモデル例(円、半円など)「border-radius」使いやすい
-
HTMLテーブルのテーブル分割とマージ(colspan, rowspan)
-
ランダム・ネームドロッパーを実装するためのhtmlサンプルコード
-
Html階層型ボックスシャドウ効果サンプルコード
-
QQの一時的なダイアログボックスをポップアップし、友人を追加せずにオンラインで話す効果を達成する方法
-
sublime / vscodeショートカットHTMLコード生成の実装
-
HTMLページを縮小した後にスクロールバーを表示するサンプルコード
-
html のリストボックス、テキストフィールド、ファイルフィールドのコード例