持续集成(Continuous Integration)在很多单位都有现成的系统,但是作为一名工程师,我们还是要了解其原理,可以自己尝试做一下。经过本人的尝试,发现功能并不复杂。这里把持续集成实践经验总结与大家分享。

持续集成用的比较多的是jenkins。后来在网上搜索发现github也有这个功能,就想着用github来实现。github功能的确十分强大,我们平时用到的github功能主要是托管代码等很小一部分功能。本文持续集成android项目实现的功能主要有以下两个:

1.在有新提交时自动编译打包。

2.将打包生成的apk上传至github的文件存储artifact,这样我们就能随时想用的时候就去下载对应的apk。

Step 1:新建workflow

点击自己的github项目,平时我们选择的标签页是Code,这里我们选择action。

Android github 仓库 github action android_持续集成系统

 

Android github 仓库 github action android_Android github 仓库_02

 

点击New workflow的按钮。

Step2:选择Anroid CI.

在workflow页面选择Android CI。这时会提供给我们一个通用的模板。我们选中这个Android CI,点击Set up this workflow.

Android github 仓库 github action android_持续集成系统_03

选中后在代码在项目 "根目录/.github/workflows" 会生成如下yml文件。

Android github 仓库 github action android_github_04

 

当然,如果不通过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寻找自己需要的插件,并查看对应的语法。

Android github 仓库 github action android_Android github 仓库_05

这里我们从上图的"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绑定的邮箱。