IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    如何使用 Gitlib 持续发布 Flutter 应用

    冷石发表于 2022-08-29 09:01:22
    love 0

    本文介绍如何使用 Gitlib CI/CD 构建发布 Flutter 应用

    前言

    前一篇文章介绍了使用 Github Actions 持续发布 Flutter 应用,本文分享下如何使用 Gitlib 的 CI/CD 功能同样实现发布 Flutter 应用,因为有很多公司是用自己搭建的 Gitlab 来管理代码的。

    要使用 Gitlib 的 CI/CD 功能首先需要在项目根目录创建一个 yml 格式的配置文件 .gitlab-ci.yml,这个配置文件会定义一个流水线 Pipeline。一个 Pipeline 由多个任务 Job 组成,任务就是具体要做的事情,如代码编译或测试; Pipeline 里的 stages 决定了任务何时以及如何运行。以下就是一个 Pipeline 有 3 个 stage,依次执行 build,test 和 deploy 任务。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    stages:
    - build
    - test
    - deploy

    job01:
    stage: build
    script: echo 'build job'
    job02:
    stage: build
    script: echo 'test job'
    job03:
    stage: deploy
    script: echo 'deploy job'

    配置

    要在 Pipeline 里构建打包 Flutter 应用的 apk,首先需要在流水线里配置 Android 以及 Flutter 环境,搜索一番后发现了一个 Github 上的 Flutter 镜像 docker-images-flutter 很适合,看这个镜像的 Dockerfile 可以发现它是从 cirrusci/android-sdk:29 这个 Android sdk 镜像开始,然后下载 Flutter SDK,这样就有了了 Android 和 Flutter 环境,接下来只需要运行测试和打包命令即可

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    stages:
    - build
    - release

    // build 阶段使用拥有 Android 以及 Flutter 环境的镜像,进行测试打包
    build:
    stage: build
    image: cirrusci/flutter:stable
    only:
    - tags
    script:
    // 下载依赖包
    - flutter packages get
    // 执行测试
    - flutter test
    // 打包 apk
    - flutter build apk --release
    // 这里定义任务生成的文件
    artifacts:
    expire_in: 1 hour
    paths:
    - build/app/outputs/apk/release/*.apk
    interruptible: true

    发布

    要发布 apk 文件到仓库的 release 还需要使用 gitlab-release 这个镜像进行发布操作

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    stages:
    - build
    - release

    // build 阶段使用拥有 Android 以及 Flutter 环境的镜像,进行测试打包
    build:
    stage: build
    image: cirrusci/flutter:stable
    only:
    - tags
    script:
    - flutter packages get
    - flutter test
    - flutter build apk --release
    artifacts:
    expire_in: 1 hour
    paths:
    - build/app/outputs/apk/release/*.apk
    interruptible: true

    // 发布到仓库的 release
    release:
    image: inetprocess/gitlab-release
    stage: release
    only:
    - tags
    dependencies:
    - build
    script:
    // 使用打包好的 apk 文件路径
    - gitlab-release --message '自动发布' build/app/outputs/apk/release/*.apk

    发布还需要一个 Personal Access Token 给 release 任务提供 api 权限,有了 api 权限就可以请求 Gitlab 的 release 接口上传 apk 了

    token

    使用刚才创建的 token 在项目仓库里配置流水线的环境变量 GITLAB_ACCESS_TOKEN

    var

    最后创建一个版本标签推送到 Gitlab 仓库,就可以看到运行中的流水线了

    1
    2
    3
    git tag v1.0.0

    git push --tag

    var

    流水线运行完毕,一个版本发布成功。

    var

    上传

    蒲公英 平台可以对应用进行内测分发,使用蒲公英提供的上传应用包的接口,将 CI/CD 构建出来的应用 apk 直接上传,免去手动去网页上上传的麻烦

    添加一个 upload 任务,依赖于 build 任务,向蒲公英的上传接口发送一个请求,$APK_PATH 是应用打包出来的路径,定义为一个变量方便使用;

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    stages:
    - build
    - release
    - upload
    ......
    upload:
    stage: upload
    only:
    - tags
    dependencies:
    - build
    script:
    - curl -S "http://www.pgyer.com/apiv2/app/upload" -F "file=@$APK_PATH" -F "_api_key=$PGY_API_KEY"
    - echo uploaded

    $PGY_API_KEY 是蒲公英平台的 API Key,需要添加到 CI/CD 的环境变量中

    api-key

    在仓库的设置那里添加新的环境变量

    variable

    总结

    1. 添加流水线配置 .gitlab-ci.yml
    2. 创建 Personal Access Token
    3. 设置环境变量 GITLAB_ACCESS_TOKEN
    4. 推送版本标签

    参考

    Gitlab Release

    Getting started with GitLab CI/CD

    使用 Travis CI 实现持续集成 (Android)



沪ICP备19023445号-2号
友情链接