热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

看官_在GitHubActions上进行Flutter的测试和部署

篇首语:本文由编程笔记#小编为大家整理,主要介绍了在GitHubActions上进行Flutter的测试和部署相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了在GitHub Actions上进行Flutter 的测试和部署相关的知识,希望对你有一定的参考价值。


GitHub Actions可轻松实现所有软件工作流程的自动化。直接从GitHub构建,测试和部署代码。使代码审查,分支机构管理和问题分类工作按您想要的方式进行。

记得在19年底的时候,我看到了Run Flutter Driver tests on GitHub Actions这篇文章,随即就开始在flutter_deer中去使用,因为当时项目中刚好就有写好的集成测试。

当时在flutter_deer中会有许多issue都是关于项目运行的问题,许多同学反映运行不起来,各种报错。说实话无法确定是环境问题还是本身代码问题。有了GitHub Actions这个工具,就可以在GitHub上构建运行测试,只要测试通过,可以保证在代码在相应的flutter版本上运行没有问题。

GitHub Actions的功能非常强大,同时提供有actions市场,我们在上面可以搜索使用他人写好的各种功能的 action。水平有限,这里我只做简单的使用介绍,详细可以看官方文档。


1.添加GitHub Actions到项目中

首先在项目中添加.github / workflows目录。然后创建.yml格式的工作流文件。比如:flutter-drive.yml。它的基础格式如下:

# workflow 的名称
name: flutter_deer driver
# 触发 workflow 的条件
on: [push, pull_request]
# workflow执行的一项或多项任务
jobs:
...

触发workflow 的条件也可以根据情况定制。比如指定推送到某一分支、指定某些文件修改时触发。例如:

# push 提交中修改`pubspec.yaml`触发
on:
push:
paths:
- 'pubspec.yaml'
...

详细见文档Workflow syntax for GitHub Actions


2.编写任务

任务的结构如下:

简单解释就是jobs下是job(任务),job下是step(步骤),step下是action(动作)。

下面举一个执行flutter单元测试的例子:

jobs:
# 任务id,必须是jobs下唯一的
accessibility_test:
# 运行所需要的虚拟机环境。例如 windows-2019, macOS-latest、macOS-10.14
runs-on: macos-latest
# job的运行步骤
steps:
# 便于获取flutter源码
# https://github.com/actions/checkout
- uses: actions/checkout@v2
# 设置flutter环境
# https://github.com/marketplace/actions/flutter-action
- uses: subosito/flutter-action@v1
with:
flutter-version: '2.0.2'
channel: 'stable' # or: 'dev' or 'beta'
# 运行的命令
- run: "flutter pub get"
# 步骤名称
- name: "Run Flutter Accessibility Tests"
run: "flutter test test/accessibility_test.dart"

上面的注释解释的很清楚了,其中用到了两个action,使得整个脚本的书写简单了很多。下面再贴上几个flutter_deer中用到的job,基本可以无脑使用,只需修改自己的运行命令即可。


3.实例


ios设备运行集成测试

drive_ios:
# 创建一个构建矩阵
strategy:
# 设置一组虚拟环境的不同配置
matrix:
device:
- "iPhone 8 (14.4)"
- "iPhone 11 Pro Max (14.4)"
# 设置为true时,如果任何矩阵job失败,GitHub将取消所有正在进行的job。
fail-fast: false
runs-on: macOS-latest
steps:
- name: "List all simulators"
run: "xcrun instruments -s"
- name: "Start Simulator"
run: |
UDID=$(
xcrun instruments -s |
awk \\
-F ' *[][]' \\
-v 'device=$ matrix.device ' \\
'$1 == device print $2 '
)
xcrun simctl boot "$UDID:?No Simulator with this name found"

- uses: actions/checkout@v2
- uses: subosito/flutter-action@v1
with:
flutter-version: '2.0.2' # 指定flutter环境
channel: 'stable'
- name: "Run Flutter Driver tests"
run: "flutter drive --target=test_driver/driver.dart"

2021-05-13更新:

发现一款action可以便捷的启动iOS模拟器,不需要指定系统版本。

drive_ios:
strategy:
matrix:
device:
- "iPhone 8"
- "iPhone 11 Pro Max"
fail-fast: false
runs-on: macos-latest
steps:
- name: "Start Simulator"
# https://github.com/futureware-tech/simulator-action
uses: futureware-tech/simulator-action@v1
with:
model: $ matrix.device
erase_before_boot: true
shutdown_after_job: true
- uses: actions/checkout@v2
- uses: subosito/flutter-action@v1
with:
flutter-version: '2.0.6'
channel: 'stable'
- name: "Run Flutter Driver tests"
run: "flutter drive --target=test_driver/driver.dart"

android设备运行集成测试

drive_android:
runs-on: macos-latest
strategy:
matrix:
api-level: [21, 29]
target: [default]
steps:
- uses: actions/checkout@v2
- uses: subosito/flutter-action@v1
with:
flutter-version: '2.0.2'
channel: 'stable'
- name: "Run Flutter Driver tests"
# 用于安装,配置和运行Android模拟器的操作(仅适用于Mac OS)
# https://github.com/marketplace/actions/android-emulator-runner
uses: reactivecircus/android-emulator-runner@v2
with:
api-level: $ matrix.api-level
target: $ matrix.target
arch: x86_64
profile: Nexus 6
script: "flutter drive --target=test_driver/driver.dart"

Flutter Web的构建及部署

web_build_and_deploy:
runs-on: macos-latest
steps:
- uses: actions/checkout@v2.3.1
- uses: subosito/flutter-action@v1
with:
flutter-version: '2.0.2'
channel: 'stable'
- name: "Web Build 🔧"
run: |
flutter pub get
flutter build web

- name: "Web Deploy 🚀"
# https://github.com/JamesIves/github-pages-deploy-action
uses: JamesIves/github-pages-deploy-action@4.0.0
with:
token: '$ secrets.GITHUB_TOKEN '
branch: gh-pages
folder: build/web

最近flutter发布了2.0,在stable渠道就可以构建Web了。使用这个job我们就可以轻松将自己的Web版代码部署在Github的page上了。

这里需要注意,部署完成后,需要我们去设置GitHub Pages后才可以访问。设置位置在项目主页的Settings菜单里。


4. 其他


  1. 当我们推送代码到GitHub上时,任务就会自动执行,详细信息可以在项目的Actions菜单中看到。

    上图就是其中一次的执行结果,可以看到有成功的、取消的、失败的。

  2. 我们可以创建workflows执行状态的徽章,添加到项目的Markdown中。

    展示效果:



当然用法也不止我上面说到的这些,你也可以做打包、自动发布这些功能,也不止Flutter可以用到。一切看你的需求。最后奉上本篇的完整代码。

最后的最后,如果本篇对你有所帮助,不妨点赞收藏一波。


5.参考


  • Run Flutter Driver tests on GitHub Actions

  • CI_CD_Flutter_Demo


推荐阅读
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 本文探讨了如何在 PHP 的 Eloquent ORM 中实现数据表之间的关联查询,并通过具体示例详细解释了如何将关联数据嵌入到查询结果中。这不仅提高了数据查询的效率,还简化了代码逻辑。 ... [详细]
  • 深入理解Tornado模板系统
    本文详细介绍了Tornado框架中模板系统的使用方法。Tornado自带的轻量级、高效且灵活的模板语言位于tornado.template模块,支持嵌入Python代码片段,帮助开发者快速构建动态网页。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • VSCode与Gitee集成:项目提交的高效实践
    本文介绍如何利用VSCode内置的Git工具将项目提交到Gitee,简化Git命令的使用,提升代码管理效率。同时分享一些常见的踩坑经验和解决方案。 ... [详细]
  • 本题探讨如何通过最大流算法解决农场排水系统的设计问题。题目要求计算从水源点到汇合点的最大水流速率,使用经典的EK(Edmonds-Karp)和Dinic算法进行求解。 ... [详细]
  • 本题旨在通过给定的评级信息,利用拓扑排序和并查集算法来确定全球 Tetris 高手排行榜。题目要求判断是否可以根据提供的信息生成一个明确的排名表,或者是否存在冲突或信息不足的情况。 ... [详细]
  • 算法题解析:最短无序连续子数组
    本题探讨如何通过单调栈的方法,找到一个数组中最短的需要排序的连续子数组。通过正向和反向遍历,分别使用单调递增栈和单调递减栈来确定边界索引,从而定位出最小的无序子数组。 ... [详细]
  • 如何将本地Docker镜像推送到阿里云容器镜像服务
    本文详细介绍将本地Docker镜像上传至阿里云容器镜像服务的步骤,包括登录、查看镜像列表、推送镜像以及确认上传结果。通过本文,您将掌握如何高效地管理Docker镜像并将其存储在阿里云的镜像仓库中。 ... [详细]
  • C#设计模式学习笔记:观察者模式解析
    本文将探讨观察者模式的基本概念、应用场景及其在C#中的实现方法。通过借鉴《Head First Design Patterns》和维基百科等资源,详细介绍该模式的工作原理,并提供具体代码示例。 ... [详细]
  • 2018-2019学年第六周《Java数据结构与算法》学习总结
    本文总结了2018-2019学年第六周在《Java数据结构与算法》课程中的学习内容,重点介绍了非线性数据结构——树的相关知识及其应用。 ... [详细]
  • 全面解析运维监控:白盒与黑盒监控及四大黄金指标
    本文深入探讨了白盒和黑盒监控的概念,以及它们在系统监控中的应用。通过详细分析基础监控和业务监控的不同采集方法,结合四个黄金指标的解读,帮助读者更好地理解和实施有效的监控策略。 ... [详细]
  • 使用 NDB 提升 Node.js 应用调试体验
    本文介绍了由 Google Chrome 实验室推出的新一代 Node.js 调试工具 NDB,旨在为开发者提供更加高效和便捷的调试解决方案。 ... [详细]
author-avatar
立案whan_597
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有