1. ホーム
  2. IOS

JenkinsがIOSを自動パッケージングしてモミを配布

2022-03-02 12:59:22
<パス

週末に"ビッグトークテスト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回目までビルドが成功しなかった。

それが終わると、これらの雑用に対処する時間がたくさんたくさん節約できます。