你好!随着Github Actions的出现,他主动采取了行动,并将简单(但非常有效)的CI / CD集成到了我们规模很小但已经有2年历史的Flowwow项目中。做什么的?
也许有些开发人员没有犯错误,但是在这里我不是其中的一个,因此偶尔会发生如此小的崩溃,因此您必须紧急发布一个新版本并进行编辑或回滚到以前的版本。但是,在用户偶然发现应用程序崩溃的那些小时中,客户之间以及负责任的开发人员的心情都不会消失。我将在下面介绍如何最小化生产中的fakapy。为什么我个人有这样的fakap?- 不安全的代码段
- 他们带来了一些图书馆,图书馆偶尔崩溃
- 将某些库(通常是分析库)更新为不稳定版本
只需1分,代码审查,单元测试,静态代码分析,UI测试,手动测试将为我们提供帮助。2-3分-仅UI测试和手动测试。仍然仅是要使它自动化。在这个阶段,选择权落在了刚刚出现的Github Actions上,收益和项目代码都在Github上。我必须马上说,对于一个免费的github帐户,每月有2,000分钟的免费操作。从哪儿开始?
它充满了各种语言和框架的现成示例。这是通过位于项目存储库中的YAML配置文件配置的。
Android的最小示例:name: Android CI
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: set up JDK 1.8
uses: actions/setup-java@v1
with:
java-version: 1.8
- name: Build with Gradle
run: ./gradlew assembleDebug
描述:对于每次推送,在使用ubuntu OS 的github虚拟机上的任何分支上都会启动一个任务。任务步骤:签出我们的代码,配置jdk,运行gradle任务进行汇编。如果没有成功通过某个步骤,我们将
在您看到日志的地方看到这样的图片。方便的是,通过Pull Request,我们会立即看到我们的测试序列已失败。
而且,如果您将github与Slack集成在一起,那么它也会
现在一点一点
1.单元测试您使用junit,mockito等编写了单元测试。现在,通过添加适当的gradle任务,您的测试将包括在测试序列中。- name: Run some unit tests
run: ./gradlew testStageDebugUnitTest
2.静态代码分析,您可以使用简单的棉短绒(detekt -为科特林,pmd的 -对Java)。或者更复杂的选择是sonarqube。对于简单的lint(例如,我们同时拥有java和kotlin):task("checkAll") {
group "Verify"
description "Runs all static checks on the build"
dependsOn "pmd", "detekt"
}
- name: Run some unit tests
run: ./gradlew checkAll
如果是声纳曲比 -有关调整的更多信息- 这里- uses: actions/checkout@v1
- name: SonarCloud Scan
run: ./gradlew jacocoUnitTestReport sonarqube -Dsonar.login=${{ secrets.SONAR_TOKEN }} --stacktrace
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Link to SonarCloud Report
run: echo "https://sonarcloud.io/dashboard?id=.."
3. UI测试编写UI测试是您的想象力,我的方法是模拟应用程序中用户的标准操作的“冒烟”测试-登录,选择产品,下订单,跟踪订单。您可以使用UIAutomator,Espresso,Kaspresso。还有两个可供选择的启动选项-github虚拟机上的仿真器或Firebase Test Lab等云服务。要在github中使用仿真器,有现成的实现:一个和两个。对于Firebase测试实验室,您必须通过gcloud CLI使用Google Cloud Platform- name: prepare gcloud
uses: GoogleCloudPlatform/github-actions/setup-gcloud@master
with:
version: latest
service_account_email: ${{ secrets.SA_EMAIL }}
service_account_key: ${{ secrets.GOOGLE_APPLICATION_CREDENTIALS }}
- name: gcloud Set up project
run: |
gcloud config set project ${{ secrets.PROJECT_ID }}
- name: Assemble apks for smoke test
run: ./gradlew Smoke
- name: Run tests in test lab
run: |
gcloud firebase test android run \
--app app/build/outputs/apk/production/debug/app.apk \
--test app/build/outputs/apk/androidTest/production/debug/appTest.apk \
--device model=Nexus6P,version=25,orientation=portrait,locale=en_US \
--device model=athene,version=23,orientation=portrait,locale=en_US \
--device model=sailfish,version=26,orientation=portrait,locale=en_US
为此,您需要在Firebase中创建一个项目,在Google Cloud Console中创建一个具有管理员权限的服务帐户,并将接收到的json密钥上传到github机密中的 base64 以便在gcloud中进行授权。在我的情况下,常规配置如下所示。任务由主服务器中的PR事件触发name: Android CI
on:
pull_request:
branches:
- 'master'
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: set up JDK 1.8
uses: actions/setup-java@v1
with:
java-version: 1.8
- name: Run static checks
run: ./gradlew checkAll
- name: Run some unit tests
run: ./gradlew testStageDebugUnitTest
- name: prepare gcloud
uses: GoogleCloudPlatform/github-actions/setup-gcloud@master
with:
version: latest
service_account_email: ${{ secrets.SA_EMAIL }}
service_account_key: ${{ secrets.GOOGLE_APPLICATION_CREDENTIALS }}
- name: gcloud Set up project
run: |
gcloud config set project ${{ secrets.PROJECT_ID }}
- name: Assemble apks for smoke test
run: ./gradlew Smoke
- name: Run tests in test lab
run: |
gcloud firebase test android run \
--app app/build/outputs/apk/production/debug/app.apk \
--test app/build/outputs/apk/androidTest/production/debug/appTest.apk \
--device model=Nexus6P,version=25,orientation=portrait,locale=en_US \
--device model=athene,version=23,orientation=portrait,locale=en_US \
--device model=sailfish,version=26,orientation=portrait,locale=en_US
看起来很简单。效率取决于书面测试和所选的代码分析规则。您可以编写几个独立的任务(作业)以并行运行它们。就我而言,一切都是按顺序进行的。在我们的项目(虚拟机github 2核CPU,7 GB RAM,14 GB SSD)上,验证过程大约需要15分钟,但这并不是很关键,只要您用眼睛对它进行“编码”,这些测试的结果也会到来。UI测试最有帮助-碰巧,在更新库之后,分析会崩溃,而您只是知道不应该更新它。通过gcloud,您还可以将构建版本交付给Firebase App Distribution,发布到Google Play等。在这里和这里可以看到许多有用的示例。我希望本文对某人有用。祝您好运,减少生产崩溃!