Androidの統合と展開チュートリアル
それは単純なプロセスのようですが、パッケージに署名して、バージョンコードと名前を更新するように、いくつかの他のステップが関係しています.
しばらくして、手動で非常に退屈で疲れるので、このプロセスを自動化できますか?
セマフォに入る
Semaphore あなたが構築、テスト、およびあなたのAndroidプロジェクトを展開することによって、ワークフローを自動化するのに役立ちます最速とサービスです.何が問題に焦点を当てることができますこの方法:あなたのコード.
このチュートリアルでは、ネイティブのAndroidプロジェクトのセマフォを設定する方法について説明します.
必要条件
このチュートリアルについては、次の手順を実行します.
Git と
GitHub アカウント.
semaphoreci.com .
アプリを公開します.
1分でこのチュートリアルを終える方法
すぐに始めるには、次のようにします.
セマフォで、一番上のナビゲーションのリンクに従って、新しいプロジェクトを作成します.
例リストから、Androidを選択します.
Semaphoreはデモプロジェクトをforkします.
セマナギデモス / セマフォデモ
そして1分以下で完全なCI/CDパイプラインを設定します.
それです.お済みです.マイクドロップ
デモは、すべてのオープンソースのリストはシンプルなアプリですSemaphore demo projects Githubについてこれは、ユニットとの統合テストを含むGradle Play Publisher プラグインは、あなたのアプリケーションをストアに公開するためにGradleタスクを追加します.
このアプリライブを見ることができますon the Play Store .
しかし、私はあなたがここでどのようにあなた自身のAndroidプロジェクトの連続的な統合を設定する方法を学ぶ可能性が高いことを知っている.それでは、プロジェクトとしてデモプロジェクトを使用する方法を見てみましょう.
これらの指示をプロジェクトに適応させるのは難しすぎる.しかし、チャレンジに実行する場合は、コメントのセクションで質問をすること自由に感じなさい.💬
からのセマフォへのCI / CDの設定
セマフォアカウントを作成した後にcreate your first Semaphore project . セマフォ設定は、リポジトリのルートディレクトリに格納されます
.semaphore
. あなたのエントリポイントはsemaphore.yml
ファイル.このチュートリアルでは、構成ファイルを読み込むことによって、AndroidのCI/CDワークフローを設定する方法を説明します.あなたはセマフォと一般的なAndroidの連続の統合について最も学びますその方法.
しかし、あなたは手でYAMLを書く必要はありません.また、セマフォのgraphical workflow builder より視覚的なアプローチのために.
👉 See this public workflow to get a taste of Semaphore’s UI and the final project running.
あなたのAndroidプロジェクトのためのセーフティネット
我々は、リンギングツールを実行し、プロジェクトのテストを実行することによって、コードの定期的なチェックを実行し、それらを自動化する必要があります.セマフォで何ができるかチェックしましょう
semaphore.yml
設定ファイル.👉 You can see the full file of the demo project on GitHub.
あなたのコードが走るところ
agent:
machine:
type: e1-standard-2
os_image: ubuntu1804
containers:
- name: main
image: registry.semaphoreci.com/android:29
ここでビルドを実行する環境を定義します.私たちは2つのVCPA、Ubuntu 18.04 OSを実行するRAMの4 GBのLinuxマシンが欲しい.また、私たちの仕事を実行するには、最新の(時点で)を書いているAndroid SDKがインストールされているコンテナにSemaphore Container Registry .Semaphore always caches the two latest stable versions of Android SDK to ensure that the machine is ready in no time, making our builds faster.
グローバルジョブの設定
global_job_config:
env_vars:
- name: ADB_INSTALL_TIMEOUT
value: "10"
secrets:
- name: android_keys
prologue:
commands:
- checkout
- mv ~/release-keystore.jks ~/$SEMAPHORE_GIT_DIR/app/release-keystore.jks
- cache restore gradle-wrapper
- cache restore gradle-cache
- cache restore android-build
セマフォのGlobal Job Config パイプライン全体で共有される構成のセットを定義できます.これは私たちが1つですべてを定義することができますので、非常に有用です代わりにすべてのタスクでそれを繰り返すの場所.
ここでは、新しい環境変数
ADB_INSTALL_TIMEOUT
それでadb
エミュレータをセットアップしている間はタイムアウトしないでください統合テスト.
私たちはまた、私たちはglobal secrets
android_keys
これにより、キーとパスワードを秘密として定義することができます.具体的にはdemo project 我々は、次の秘密を保存している
android_keys
:release-keystore.jks
: リリースビルドに署名するキーストアファイルRELEASE_KEYSTORE_PASSWORD
: 当社のkeystoreパスワード;RELEASE_KEY_ALIAS
: キーストアのキー別名RELEASE_KEY_PASSWORD
: 当社のkeystoreキーパスワード;service-account-key.json
: the service account
key ,デモアプリケーションを展開するために使用Play Store .
The prologue セクションでは、ジョブの開始前にコマンドセットを実行できます.Gitリポジトリからコードをチェックアウトし、keystoreファイルを正しいパスに移動し、ビルドを高速にするためにキャッシュを復元します.
パイプラインブロック
ここでは、実行するすべてのビルドタスクを追加できます.仕事を定義する
それぞれのタスクのうち、このパイプラインで実行するコマンド.始めましょう
トップで.
ビルドブロック
- name: 'Build'
task:
jobs:
- name: 'Build Project'
commands:
- ./gradlew bundle
epilogue:
on_pass:
commands:
- cache clear
- cache store gradle-wrapper ~/.gradle/wrapper
- cache store gradle-cache ~/.gradle/caches
- cache store android-build ~/.android/build-cache
まず最初にやりたいことは、実行してプロジェクトを構築することです./gradlew
bundle
すべてがOKであることを確認する.では、epilogue , このジョブが成功した場合にのみ実行されます.検証ブロック
- name: 'Verification'
skip:
when: "pull_request !~ '.*'"
task:
jobs:
- name: 'Analyze Code'
commands:
- ./gradlew lint
- name: 'Unit Tests'
commands:
- ./gradlew test
- name: 'Integration Tests'
commands:
# Install the required tools and the emulator itself
- sdkmanager "platform-tools" "platforms;android-29" "build-tools;30.0.0" "emulator"
# Install system images for the emulator
- sdkmanager "system-images;android-29;google_apis;x86"
# Create an emulator with the installed system images
- echo no | avdmanager create avd -n test-emulator -k "system-images;android-29;google_apis;x86"
# Start the emulator with no audio, boot animation, window, and with GPU acceleration off
- emulator -avd test-emulator -noaudio -no-boot-anim -gpu off -no-window &
# Wait for the emulator to boot completely
- adb wait-for-device shell 'while [[ -z $(getprop sys.boot_completed) ]]; do sleep 1; done;'
# Dismiss the emulator lock screen and wait 1 second for it to settle
- adb shell wm dismiss-keyguard
- sleep 1
# Disable window and transition animations. This is required to run UI tests correctly
- adb shell settings put global window_animation_scale 0
- adb shell settings put global transition_animation_scale 0
- adb shell settings put global animator_duration_scale 0
- ./gradlew connectedAndroidTest
epilogue:
always:
commands:
- artifact push job --expire-in 2w --destination reports/ app/build/reports/
現在、本当の仕事は始まります.これは、我々がAをしている検証ブロックですlintチェックと実行をテストします.また、私たちはskip condition これはセマフォに対し、プルリクエストが
オープン.
何が起こっているのか
./gradlew lint
はAndroid
Lint それはコードを分析する問題があるかどうかチェックする.
./gradlew test
はUnit
Tests 我々のプロジェクトで../gradlew connectedAndroidTest
はIntegration
Tests , アフターセットエミュレータを起動します.
Usually, this is enough to verify the code and should always be checked/ran before merging and deploying a new app version so that we're sure that we're not introducing bugs or bad code into the project. You can add more jobs here if you need to perform additional checks.
すべてが完了した後、エピローグでは、我々はテストレポートをアップロードしているartifacts それで、何かが我々のテストで間違っているならば、我々はより多くの詳細を見るためにレポートに相談することができます.
👉 It's important to note that every thing will run in parallel making Semaphore builds extremely fast.
プロモーション
Promotions 私たちが特定の条件が満たされるとき、我々が我々のパイプラインを分岐させたいとき、使われます.これは展開に最適です.
promotions:
- name: Internal Deploy
pipeline_file: deploy-internal.yml
auto_promote:
when: "result = 'passed' AND branch = 'dev'"
- name: Beta Deploy
pipeline_file: deploy-beta.yml
auto_promote:
when: "result = 'passed' AND branch = 'master'"
我々は2つの他のパイプラインを持っているので、2つのプロモーションのように.我々は、我々は新しいコードをプッシュするときに内部トラックに我々のアプリを展開するパイプラインに促進したいdev
, そして、我々が新しいコードをプッシュするとき、ベータトラックにmaster
.それが完全な栄光であるパイプラインは、ここにあります.どのように迅速に通知します.
連続展開:あなたもAndroidでそれを行うことができます!
プロジェクトがすべてOKであることを確認した後、展開を自動化したい.
Check the full configurations for the internal pipeline and beta pipeline.
ほとんどの構成は前に説明したものと同じである.我々は、グローバルな設定には、アプリケーションを展開し、新しいブロックを追加する必要があるとして、正しいアカウントにサービスアカウントのキーを移動するコマンドを追加しました.
展開ブロック
- name: 'Internal Deployment'
task:
jobs:
- name: "Deploy to Play Store - Beta Track"
commands:
- ./gradlew publishReleaseBundle --track beta
ここでは、単にGoogle Play Publisher Gradleプラグイン.内部パイプラインと異なる唯一のものは引数ですtrack
これはinternal
代わりにトラック.また、我々は増加することについて心配する必要はありませんversionCode
セマフォワークフロー番号を使用しているので、毎回environment variable そのため、新しいビルドが実行されているときは常にインクリメントされます.あなたに
完全なデモプロジェクトをチェックしてくださいGitHub 完全な例については、自分でコードを探索することを確認してください.お気軽にフォークして、次の基地として使用するSemaphore プロジェクト
あなたが追加するようにワークフローを改善するためにできることがまだありますSlack notifications , 使用webhooks , ChangeLogファイルを更新したり、Githubのリリースを作成しても、セマフォについての良いこと、一般的なCI/CDツールは、あなたが次のAndroidアプリのコード:最終的に問題に焦点を当てることができることです.
このチュートリアルについて質問がありますか?あなたの結果を披露したいですか?コメントを残す.🙇♂️
Reference
この問題について(Androidの統合と展開チュートリアル), 我々は、より多くの情報をここで見つけました https://dev.to/semaphore/android-continuous-integration-and-deployment-tutorial-g7aテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol