持续集成(Continuous Integration)在很多单位都有现成的系统,但是作为一名工程师,我们还是要了解其原理,可以自己尝试做一下。经过本人的尝试,发现功能并不复杂。这里把持续集成实践经验总结与大家分享。
持续集成用的比较多的是jenkins。后来在网上搜索发现github也有这个功能,就想着用github来实现。github功能的确十分强大,我们平时用到的github功能主要是托管代码等很小一部分功能。本文持续集成android项目实现的功能主要有以下两个:
1.在有新提交时自动编译打包。
2.将打包生成的apk上传至github的文件存储artifact,这样我们就能随时想用的时候就去下载对应的apk。
Step 1:新建workflow
点击自己的github项目,平时我们选择的标签页是Code,这里我们选择action。
点击New workflow的按钮。
Step2:选择Anroid CI.
在workflow页面选择Android CI。这时会提供给我们一个通用的模板。我们选中这个Android CI,点击Set up this workflow.
选中后在代码在项目 "根目录/.github/workflows" 会生成如下yml文件。
当然,如果不通过github的页面去创建workflow,直接在相应目录创建yml文件,然后推送到服务端,也可以识别。注意,通过github ui默认创建的workflow在main分支,我们可以在代码目录的自己想要CI的分支加上对应的yml文件。
yml文件目前的内容如下:
name: Android CI
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: set up JDK 11
uses: actions/setup-java@v2
with:
java-version: '11'
distribution: 'adopt'
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Build with Gradle
run: ./gradlew build
从上面的代码中我们可以看出,代码的最后一行执行的任务是build。这里我将其改为./gradlew assembleRelease。这样就可以实现打包apk。
Step3:上传apk到artifact.
为了将apk上传,我们需要使用artifact相关的命令。当执行任务的时候,github有很多种命令可以选择,可以在编辑yml文件的右边的Marketplace寻找自己需要的插件,并查看对应的语法。
这里我们从上图的"Upload a Build artifact"中,找到相应的语法将我的apk上传。最终我的完整的yml文件如下:
name: android master CI
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: set up JDK 11
uses: actions/setup-java@v2
with:
java-version: '11'
distribution: 'adopt'
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Build with Gradle
run: ./gradlew assembleRelease
- uses: actions/upload-artifact@v2
with:
name: upload-apk
path: |
${{github.workspace}}/app/build/outputs/apk/tencent/release/*.apk
${{github.workspace}}/app/build/outputs/apk/xiaomi/release/*.apk
如上图的yml文件,编辑完成后保存。这样,每次我们提交新代码的时候,github就会自动编译并将生成的apk上传。当出现编译错误时,github会自动将错误推送到github绑定的邮箱。