As I already mention already in my previous story that I will implement Fastlane with CircleCI for Android App Development. So in this story I will implement it as an example from steps by steps so you can keep it as references for your next project.
In this example, I’m going to implement CircleCI + Fastlane to android application. Instead of using CircleCI to build and test android app, I will use CircleCI to called Fastlane build, test and deploy when it is triggered build.
I will separate android build variants to 3 different type:
- dev variant: With this variant I will do the jobs as:
- Build Application
- Run Unit Test
- Run Instrumentation Test with Firebase Test Lab
- Send debug or release apk to Slack
2. beta variant: With this variant I will do the jobs like in dev variant but to add:
- Deploy to Crashlytics (Fabric)
- Deploy to Google Play with Beta track
3. pro variant: With this variant I will do the jobs like in beta variant but change from Deploy to Google Play with Beta track to Deploy to Google Play with Production track.
I will have 3 branches in Github repository:
- master (pro variant)
- beta (beta variant)
- dev (dev variant)
Let’s start create new android project and config CircleCI and Fastlane as I mention above.
We will start config with
Fastfile first. If you are not clear about how to add fastlane into your project, you can look at this story.
Since we have different
build variants so our
build.gradle file should look like:
Now let’s start config
Fastfile . We will create lane to run build, test and deploy. Then every lane should have parameters for build type (Debug, Release) and build flavor (dev, beta, pro).
we will create lane name
assemble_build to build our app.
|options| is your lane parameters. For more about lane parameter, you look at Advance Lanes.
assemble_build lane with parameters above we can run:
$ bundle exec fastlane assemble_build build_flavor:"YourBuildFlavor" build_type:"YourBuildType"
We will create lane name
unit_tests to run unit test of app
We will create lane name
instrumentation_test_testlab to run UI test. We will use Firebase Test Lab to run UI test. To use Firebase Test Lab in your project:
- Set up Firebase following this Instruction.
- Go to Google Cloud Console.
- Select your project
- Click on IAM & admin > Service accounts
- Click on CREAET SERVER ACCOUNT > fill in Servcie Account Name > CREATE
6. Select Project Owner > Continue
7. Click on CREATE KEY > Choose JOSN > Create
Now that we have JSON file from Google Cloud, then we just need to add and configure the Fastlane plugin.
- Add the plugin:
$ bundle exec fastlane add_plugin run_tests_firebase_testlab
- Create new lane in Fastfile
Now, to run the tests in Firebase TestLab, the plugin need three things: app apk, android test apk and account auth key.
Since we have created
assemble_build , so we can build both app apk and android test apk.
Now let’s take a look at code below:
@android_test_apk : are variables to store apk after we build app
Actions.lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH] : It’s fastlane gradle output variable. We can get apk path from it. For more detail you can run:
$ bundle exec fastlane action gradle
To run Firebase Test Lab with fastlane, we have another step to finish:
- Enable Cloud tools result API for your project.
- Install Google Cloud SDK on your computer (If you want to run it locally without CircleCI)
- Provide Google Auth Key:
run_tests_firebase_testlabplugin have created an environment variable name
GCLOUD_SERVICE_KEYso we can use it in CircleCI environment variable. You will see soon when we implement CircleCI in this example, so don’t worry. But if you want to run it locally, you can create
.envfile in your root project and add
Note: Don’t commit your
.envfile to your repository.
So now you can run Instrumentation Test via:
$ bundle exec fastlane instrumentation_tests_testlab .
When the tests finish running, you will have folder called
firebase/ . 🎺
That’s all for now! In the next blog, I will continue implement this example by integrating fastlane to Slack so you can send message or your apk to slack. 😎 If you have any question or problem, please let me know! ⭐️ Thanks 👍