こんにちは親愛なる読者。 継続的インテグレーション(CI)、継続的デリバリー(CD)の概念に精通していない場合、またはそれらを使用する方法や理由が分からない場合は、Androidプロジェクトでこれらのサービスを構成する方法の簡単な説明と、その結果、ボーナスを受け取ります。
はじめに
親愛なる読者、この記事にたくさんのコードがあると思うなら、あなたは間違っています。 最小限のコードがありますが、CIの機能の一部を示すことができます。 この記事の主な部分は、サービスバンドルを構成する方法です。 ジュニア/ミドル開発者にとって、この記事が非常に興味深く有用であることを願っています。
背景
それはすべてスタートアップから始まりました。 次の2年間に十分な資金と計画がありました。 2人がAndroidプロジェクトに取り組みました。 私たちの方法論は、gitflowを使用したアジャイルに似ていました。 2か月の開発の後、コードは部分的にテストでカバーされ、小さなプロジェクトのプロセスはデバッグされたように見えますが、何かが忘れられませんでした。
大企業ではなく、スタートアップ(無数)で働いている場合、CI CDサービスを使用する利点についても考えていないという前提があります。 ただし、時間の節約に役立ちます。
私は開発者なので、この立場から何が起こっているのかを説明します。
猫があなたに近づいてくる状況だと思います(この言葉で言うと、QAの製品を求めるあなたのチームの非開発者の立場は絶対に意味します)。 最初は、これは深刻な困難なタスクとして認識されていません。 ただし、これにより次の問題が発生します。
- おそらく最も重要なことは、現在のタスクから脱却することです
- 最新のコンパイル済みapkをお探しですか
- 最後にコンパイルされたapkは開発アセンブリであり、うまく表示できません
- 猫の携帯電話をケーブルで接続し、アセンブリをインストールします
- しかし、現在のブランチにコモンズの変更がない場合はどうでしょうか? (-a \ stashを助けてコミットしますが、今回もまだです)
- 実行したタスクに戻る時間を費やす
これは氷山の一角にすぎません。 あなたが多くの異なる猫を飼っている場合はどうですか? 二次的な性質のタスクを完了するためにより多くの時間を費やし始めます。
私たちと他の人の時間を節約する方法の小さな例を考えてみましょう。
少し先に進むと、プロジェクトの開発に1か月以上かかる場合、Ci + Cdを設定します。これにより、顧客の関与がさらに促進され、開発に関するフィードバックをすぐに受け取ることができます。
目標
結果を得るために必要なアクションのキューの例について、この記事を作成することに興味がありました。 さらに、各目標は個別のコミットで割り当てられます。 何が起こっているのかを理解するのがより面白く、簡単になると思います。
これまでのところ、ToDoには3つの主要な段階があります。
- プロジェクトを作成
- CIをカスタマイズ
- CDをカスタマイズする
早すぎる最適化は、すべての悪の根源です。 (早すぎる最適化はすべての悪の根源です。D。クヌース)
プロジェクトを作成
この段階が最も簡単だと思います。 VCS(Github / Bitbucket)に新しいリポジトリを作成します。 私は個人的にGitHubを選択しています-それはただの習慣の問題です。 コミットにより、それ以降のすべての変更を追跡できます。
次に、 最初のコミットを行います
今、新しい機能の開発を開始し、猫が近づいてきて最新のビルドを要求したとしても、マスターヘッドにロールバックする必要があります。 一般に、問題に取り組みました。
CIをカスタマイズ
誰かに何かを送るためには、どこかでそれを集める必要があります。 そして、開発の主なタスクからの注意散漫を最小限に抑えることが望ましい。
Ciサービスとして、 CircleCIを好みます 。 また、 代替手段もあり、プロジェクトで複数のCiサービスを使用することを禁止する人はいません。
私たちの目標は小さなステップで移動することであるため、Ciでリポジトリのアセンブリを開始するだけの目標を設定しました。
ステップバイステップで始めましょう:
1. GitHubを介してCiCircleにログインします
2.サイドバーで[プロジェクト]を見つけて、新しいプロジェクトに移動します([プロジェクトのビルド]をクリックすると、プロジェクトが構成されていないためにアセンブリが失敗します)
3. [統合とサービス]カテゴリのGitHubのリポジトリ設定に移動し、[サービスの追加]をクリックします。
4.今後、CiCircleのプロジェクト設定で、プル要求(PR)の監視をオンにすることをお勧めします。これにより、同僚がマスターの動作不能なコードを点滅させないようにできます。 (おそらくこれは私のトラブルの別の1つですが、マスターブランチは常に収集されるべきだと思います)
5.おそらく、Ciを設定する最も重要な部分は、プロジェクトで設定することです。
build.gradleに変更を加え、cicircle.gradle(基本的にテンプレート)とcircleci.yml(基本CI設定を保持)を追加する必要があります。 私はPRのみでmasterブランチに変更を加えることを支持しています。そのため、Ciプリセットを使用してブランチを作成し、PRを実行します。
すべてが正しく行われた場合、PRの下で同様のものが表示されます
Ciに移動すると、プロジェクトの進行状況が表示されます
しばらくしてから(通常、アセンブリにかかる時間は5分以内です。ほとんどの場合、肯定的な結果が得られます)
続行して、大胆に[マージ]をクリックしてください。 (そして、マスターブランチのアセンブリはCiで始まります)
自分にとっての利点は何ですか?
- アセンブリはクラウド内で私たちとは独立して行われます
- これで、PRを行うたびに、アセンブリを組み立てるかどうかが確実にわかります。 これにより、ウィザードから動作しないアセンブリに関する問題がスローされる可能性がなくなります。
- テストを実行することが可能です
素晴らしい、私たちは取り組んでいます!
アセンブリはクラウドで行われるため、一部のアーティファクトがapkの形のままであると想定するのは論理的です。
このイテレーションの良い目標はapkを取得することであると思われますが、これは市場に出すことができます。 したがって、マスターブランチ(PRではなく)の各アセンブリで、完成品が得られます。
1. release.apkを削除するには、署名キーを生成する必要があります。 これは、Android Studioを介して1回行われます。
2.次に、build.gradleに変更を加えます
signingConfigs { release { def signFile = project.rootProject.file('./release.keystore') if (signFile.exists()) { storeFile signFile storePassword "qweqwe" keyAlias "habrcicdcat" keyPassword "qweqwe" } } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' signingConfig signingConfigs.release } }
ファイルrelease.keystoreはプロジェクトフォルダーにあります。
3.収集したファイルを成果物ディレクトリに転送するbashスクリプトを作成します
#/bin/bash GRADLE="./gradlew" $GRADLE assembleRelease RELEASEFILE="${CIRCLE_ARTIFACTS}/habrcicdcat-release-${CIRCLE_BUILD_NUM}-${CIRCLE_SHA1}.apk" cp ./app/build/outputs/apk/app-release.apk ${RELEASEFILE}
これらの定数はデフォルトで使用可能です。
CIRCLE_BUILD_NUM-ビルド番号
CIRCLE_SHA1-コミットキー
CIRCLE_ARTIFACTS-cicircle.ymlに設定します
general: artifacts: - /home/ubuntu/HabrCiCdCat/app/build/outputs/apk/
4.デプロイを担当する部分をcicircle.ymlに追加します
deployment: beta: branch: master commands: - cd scripts && ./build.sh
マスターブランチを変更するときにスクリプトを実行するだけです
5. masterブランチでPRを実行し、すべてがうまくいっていることを待ち、マージを実行します。 Ciコンソールに移動すると、masterブランチがどのようにアセンブルし始めたかがわかります。
しばらくすると、アセンブリが成功したことがわかります。 Ciのコンソールから、収集されたAPKを確認できます
実際、これでapkの作成を閉じることができます。 APKをダウンロードしてすぐに市場にアップロードしたり、猫にメールを送信したりできます。 しかし、まだ何かが欠けています。 この記事の主な目的は実現されておらず、現在のタスクから引き離されます。 CDが助けになります。
Fabric Betaのセットアップ
CDサービスとして、Fabricのベータ版を検討します。 繰り返しますが、多くの選択肢がありますが、記事の本質はホリバーではなく、プロセスの説明にあります。
だから。 猫の餌の準備ができたら、それを伝えます。 ベータサービスはこれに役立ちます。
セットアップを始めましょう:
1.まず、プロジェクトをFabricに登録する必要があります。FabricPluginをAndroid Studioに追加するなど、いくつかの方法があります。 build.gradleファイルを変更する必要があります。 これらの操作を完了すると、新しいアプリケーションがクラッシュリティクスでコンソールに表示されます。
2. Fabricアカウントの設定で、新しい組織を作成し、そこからapiSecretとapiKeyを取得する必要があります
3. FabricからBetaサービスのセットアップを始めましょう
最初に、テスターのグループを作成し、少なくとも自分自身を追加する必要があります
ここで覚えておくべき主なものはエイリアスです:habrcicdcat
たくさんの組織とテスターのグループを作ります
グループのすべてのテスターは、電話から開く必要があるメール通知を受信し、レター内のリンクに従ってベータ版アプリケーションをダウンロードまたは確認します。
次に、サービスとアプリケーションのバンドルのセットアップを開始します。
buildTypesにエイリアスを追加する
buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' signingConfig signingConfigs.release ext.betaDistributionGroupAliases = "habrcicdcat" } }
appフォルダーに、次のコンテンツ(項目2の定数)のfabric.propertiesを追加します
apiSecret=23167a9cd00cb83f9dab952b47e7350e19dd7693071ceb2abe2d56dbfc6e1318
apiKey=3915c7e9ffe661c44a4db3935d34a5a8da525b9c
次に、PRを作成し、マスターアセンブリを監視できます。 すべてがうまくいった場合、ベータ版アプリケーションで通知を受け取り、ダウンロードしてインストールできます。
最終目標を達成
記事の冒頭で設定した目標は満たされています。 これで、masterブランチが変更されると、アプリケーションがビルドされ、apkが猫のグループに送信されます。 そして、私たちは常に公開のためのアセンブリを手元に持っています。
今、彼らがワークフローからあなたを引き裂くとき、あなたはいつでも答えることができます:「最新のビルドは常にベータで利用可能です」-そしてその結果、現在のタスクで安全に作業を続けることができます。
背後にあるもの:
- フレーバーを構築する(複数の猫を飼う方法の例を示すため)
- アセンブリ作成時に起こりうる問題
この記事では、CIとCDのセットアップはそれほど怖くないが、非常に便利であることを示したかった。 フリーランスプロジェクト用にこのシステムをセットアップするのに1時間を費やすことは、2週間後にはこの時間を超えるため、私は問題とは考えていません。 この記事がCIとCDをあなたのプロジェクトにもたらすことを願っています。そうでなければ、少なくともあなたにとって興味深いものでした。
この記事の各反復がステップごとに説明されているGitHubプロジェクトへのリンク 。