この記事の特徴をすぐに説明するために、私たちのチームには、すべてのプロジェクトに対して単一のプロセスを構築するタスクがあったことを説明します。 そして、私たちが持っているプロジェクトは、モバイル(iOS、Android)とWeb(組版、サービス、サイト)の両方です。
はじめに
最初に、継続的インテグレーションとは何か、それがどのように役立つかを簡単に説明させてください。
継続的インテグレーション(Eng。継続的インテグレーション)-ソフトウェア開発のプラクティス。製品の自動アセンブリを実行して、統合の問題を特定します。 ウィキペディア
さらに簡単な場合は、ボタン(または自動)をクリックするだけで、製品(アプリケーション、サイト)の既製のアセンブリを受け取ることができます。
これはどのように役立ちますか?
まず、QA部門は、テスト用のアセンブリを受け取るために1時間ごとに開発者をいじる必要がないため、感謝します。
次に、システム全体をテストする機会があります。これにより、すべての統合エラーを事前にキャッチできます。
そして第三に、顧客はプロジェクトへのリンクを受け取ったら、いつでもプロジェクトの状態とその費用を確認できることに感謝します。
したがって、目標は、さまざまなプラットフォーム(Web +モバイル)のプロジェクトを組み立てるためのシステムを作成することです。 この検索により、この分野の既存のソリューションがいくつか見つかりました。
- ハドソン
- Cruisecontrol
- Teamcity
- ファストビルダー
長所と短所を探してそれぞれを見て、ハドソンのオプションに決めました。 当時のこのツールは、私たちにとって最も柔軟でサポートされているコミュニティのように思えました。 Jenkinsブランチがあることを既に知った後、切り替えを開始しなかったのは、 ハドソンは皆と元気でした。
バージョン管理システムとして、私たちは歴史的にGitを選択し、その助けを借りて、ソースコードとアセンブリのバージョンを保存しています。 また、フックを使用して、現在のバージョンのプロジェクトをテストサーバーに公開します。
そして最後に、私たち全員が始めたのは、アセンブリへのユーザーアクセス、アセンブリ上の情報の保存、ログイン、ダウンロード、テストの機能を担当する企業のWebポータルです。 これをパブリッシャーと呼び、これはPython(Django)で記述されたシンプルなWebサービスです。 このように見えます-
実装
そして今、それがすべてどのように機能するかについての詳細:
プロジェクトが開始されると、ソースコード用のリポジトリとHudsonの新しいプロジェクトが作成されます。 プロジェクトの設定では、リポジトリのアドレスを指定し、リポジトリが5分ごとにポーリングされ、変更があった場合にアセンブリが開始されるように設定します。 さまざまなタイプのプロジェクトを自動的にアセンブルできるHudsonのプラグインは多数ありますが、すべてを試してみたかったので、アセンブリはコマンドラインスクリプトです。
アセンブリスクリプト自体はプロジェクトタイプとは異なります。
最も単純なのはWebプロジェクトです。この場合、リポジトリの現在のバージョンがアーカイブされ、アクセスのためにレイアウトされます。
次に複雑なのはAndroidプロジェクトのアセンブリです。ここでは、最初にコマンドでantスクリプト(デフォルトではAndroid SDKでサポートされています)を更新し、生成されたビルドスクリプトを実行します。 たとえば、次のように:
android update project --target 10 --name ProjectName ant debug
その結果、デバイスにダウンロードしてインストールできるapkファイルが用意されています。 この例では、GooglePlayで公開するためにプロジェクトに署名するオプションを考慮しませんでした。 ただし、これはSDKユーティリティを使用したコマンドラインツールを使用して実行できます。
そして最後に、最も興味深いオプションはiOSのビルドです。 Appleが提供する標準的な方法を使用する場合、アプリケーションをアセンブルし、開発者の証明書で署名してからインストールする必要があります(これは通常、iTunesで行われます)。 このプロセスを可能な限り簡素化することにしました。 その結果、プロジェクトは次のようにアセンブルされます。xcodebuildユーティリティを使用して、プロジェクトをコンパイルし、アプリにアセンブルします。 その後、xcrunユーティリティを使用して、(アセンブリサーバーにある)開発者証明書で署名し、完成したapkファイルを公開します。
xcodebuild -project ProjectName.xcodeproj xcrun -sdk iphoneos PackageApplication -v ProjectName.app -o ~/path/projectname.ipa -embed "~/path/provision.mobileprovision"
この場合、開発者によってxCode自体にインストールされたターゲットが収集されますが、このパラメーターは強制的に設定することもできます。
最後に、すべてのアセンブリ(ipa、apk、zip)はパブリックドメインにあり、ユーザーがそれらを検証する方法のタスクに直面しています。 Webプロジェクトに問題はありません-その隣にテストサーバーへのリンクがあります。Androidapkファイルは電話から簡単にダウンロードしてインストールできます。 そして、iOsアプリケーションのインストールの問題が残っています。 ユーザーが理想的には、デバイスからポータルに移動し、リンクをクリックしてアプリケーションをインストールするだけです。 そして、そのような機会があります。 ドキュメントを読んでインターネットを検索した後、この問題を解決しました。 iPhoneがリンクをたどってアプリケーションのインストールを開始するには、このリンクはitms-servicesの形式である必要があります://?Action = download-manifest&url = http://server/projectname.plistこのアドレスには、XMLファイルが含まれている必要があります。アプリケーションをパッケージ化するときに[エンタープライズ]チェックボックスを設定すると、xCodeでプロジェクトをビルドするときに取得できます。 このファイルの主なフィールドは次のとおりです。
<!-- ipa --> <key>url</key> <string>http://server/distribs/prokectname.ipa</string> <!-- --> <key>bundle-identifier</key> <string>ru.handh.projectname</string> <!-- --> <key>title</key> <string>ProjectName</string>
このファイルは自動的に生成されます。アセンブリが公開され、iOSデバイスからポータルのインストールリンクをたどると、アプリケーションのインストールに関する質問が表示されます。同意された場合、アプリケーションのダウンロードとインストールの方法が表示されます。
おわりに
現時点では、プロジェクトに関係するすべての人がポータルにアクセスし、プロジェクトの最新バージョンをダウンロードしてテストできます。 そして、私たちが扱うすべてのプラットフォーム(Web、iOS、Android)のプロジェクトを公開できます。 将来的には、ユニットテストの結果の公開と、失敗したビルドの通知をそこに留めたいと考えています。