使用 GitHub Actions 通过 CI/CD 简化 Flutter 应用程序开发

在快节奏的移动应用程序开发世界中,速度、可靠性和效率是决定项目成功或失败的关键因素。持续集成和持续部署 (CI/CD) 实践已成为确保满足这些方面的强大工具。当与流行的跨平台框架 Flutter 和 GitHub Actions 的自动化功能相结合时,开发人员可以创建无缝管道,加速开发生命周期并确保交付高质量的应用程序。在本文中,我们将探讨如何使用 GitHub Actions 为 Flutter 应用程序设置 CI/CD。

我正在为客户开发一个长期项目,每次我进行一些更改或将功能分支合并到开发时,我都必须手动构建并将更新的 apk 发送给我的客户或团队,以便他们可以审核。我进行了一些搜索,发现了一个很棒的工具,可以使用 GitHub Actions 自动执行此操作。现在,每次我向开发人员推送或创建 PR 时,GitHub Actions 都会自动构建、测试工件并将其上传到 Github,以便我的团队或客户可以从 GitHub Actions 获取更新的 APK。

这非常简单,只需 5 到 10 分钟即可实现。

了解 CI/CD 和 GitHub Actions

持续集成(CI)是指每天多次将代码更改集成到共享仓库中。主要目的是尽早发现并解决集成问题,确保代码库保持功能性和一致性。持续部署(CD)通过将代码变更自动部署到生产或暂存环境,对这一流程进行了扩展。这种方法最大限度地减少了人工干预,降低了人为错误的风险。

GitHub Actions 是 GitHub 提供的多功能自动化平台。它允许开发人员将工作流程定义为代码,自动执行任务,例如直接从存储库构建、测试和部署代码。通过 GitHub Actions,开发人员可以设置由代码推送、拉取请求或发布等事件触发的自定义工作流程。

使用 GitHub Actions 为 Flutter 应用程序设置 CI/CD

第 1 步:创建工作流程文件

  1. 导航到 GitHub 上的 Flutter 应用程序存储库。
  2. 创建一个名为 .github/workflows 的新目录(如果尚不存在)。
  3. 在此目录中,创建一个新的 YAML 文件,例如 main.yml 。 (见下图)。

第 2 步:定义工作流程

在 main.yml 文件中,定义您的工作流程。这是我在我的用例中使用的一个示例。

on:pull_request:branches:- dev
name: Test, Build and Release apk
jobs:build:name: Build APKruns-on: ubuntu-lateststeps:- uses: actions/checkout@v3- uses: actions/setup-java@v2with:distribution: 'zulu'java-version: '11'- uses: subosito/flutter-action@v2with:flutter-version: '3.7.7'- run: flutter pub get- run: flutter test- run: flutter build apk --release- uses: actions/upload-artifact@v1with:name: release-apkpath: build/app/outputs/apk/release/app-release.apk

在本示例中,工作流是在向 dev 分支提出 pull_request 时触发的。您可以根据需要在任何 github action(如推送等)上运行此工作流。它执行以下任务:

  • 检查存储库代码。
  • 使用 flutter pub get 安装依赖项。
  • 使用 flutter test 运行测试(如果您已定义任何测试)。
  • 使用 flutter build apk 构建 APK。
  • 使用上传工件将开发好的 apk 上传到工件。

可从 Github Actions 详情中找到上传的工件(见下图)。

您还可以集成您的 Play 控制台或 Firebase 帐户,以便在完成该功能后立即部署您的应用程序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/751890.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL_数据库图形化界面软件_00000_00001

目录 NavicatSQLyogDBeaverMySQL Workbench可能出现的问题 Navicat 官网地址: 英文:https://www.navicat.com 中文:https://www.navicat.com.cn SQLyog 官网地址: 英文:https://webyog.com DBeaver 官网地址&…

RabbitMQ——死信队列和延迟队列

文章目录 RabbitMQ——死信队列和延迟队列1、死信队列2、基于插件的延迟队列2.1、安装延迟队列插件2.2、代码实例 RabbitMQ——死信队列和延迟队列 1、死信队列 死信队列(Dead Letter Queue,DLQ)是 RabbitMQ 中的一种重要特性,用…

【HTML】HTML表单8.2(表单标签2)

目录 接上期,大致实现效果 文章简要 注释:这一次介绍的很多效果需要后期与服务器配合,但我们这里先只介绍效果 ①提交按钮 ②获取验证码 ③上传文件 ④还原所有表单内容 ⑤下拉表单 ⑥文字域 接上期,大致实现效果 文章简要 注…

matlab中Signal Editor定义梯形信号输出矩形信号

matlab中Signal Editor定义梯形信号输出矩形信号,可以通过如下勾选差值数据实现梯形信号输出。

GPT-1, GPT-2, GPT-3, InstructGPT / ChatGPT and GPT-4 总结

1. GPT-1 What the problem GPT-1 solve? 在 GPT-1 之前,NLP 通常是一种监督模型。 对于每个任务,都有一些标记数据,然后根据这些标记数据开发监督模型。 这种方法存在几个问题:首先,需要标记数据。 但 NLP 不像 CV&…

云原生部署手册02:将本地应用部署至k8s集群

(一)部署集群镜像仓库 1. 集群配置 首先看一下集群配置: (base) ➜ ~ multipass ls Name State IPv4 Image master Running 192.168.64.5 Ubuntu 22.04 LTS1…

一. 并行处理与GPU体系架构-GPU并行处理

目录 前言0. 简述1. 这个小节会涉及到的关键字2. CPU与GPU在并行处理的优化方向3. Summary总结参考 前言 自动驾驶之心推出的 《CUDA与TensorRT部署实战课程》,链接。记录下个人学习笔记,仅供自己参考 本次课程我们来学习下课程第一章——并行处理与GPU体…

Google云计算原理与应用(三)

目录 五、分布式存储系统Megastore(一)设计目标及方案选择(二)Megastore数据模型(三)Megastore中的事务及并发控制(四)Megastore基本架构(五)核心技术——复制…

pom.xml中的配置无法被yaml读取

问题描述 项目中指定了多个profiles, 但是application.yaml读取报错,报错信息如下 Standard Commons Logging discovery in action with spring-jcl: please remove commons-logging.jar from classpath in order to avoid potential conflicts 12:41:52.325 [mai…

使用 pnpm 搭建 monorepo 项目

引言 在我之前的开发经历中,并没有实际使用过 Monorepo 管理项目,尽管之前对此有所了解,但并未深入探究。然而,如今许多开源项目都采纳了 Monorepo 方式,对于不熟悉它的开发者来说,阅读和理解这些项目的源…

【HarmonyOS】ArkUI - 向左/向右滑动删除

核心知识点:List容器 -> ListItem -> swipeAction 先看效果图: 代码实现: // 任务类 class Task {static id: number 1// 任务名称name: string 任务${Task.id}// 任务状态finished: boolean false }// 统一的卡片样式 Styles func…

C语言快速入门之内存函数的使用和模拟实现

1.memcpy 它可以理解为memory copy的组合,memory有记忆的意思,这里指的是内存,copy是拷贝,这个函数是针对内存块进行拷贝的 函数原型 void* memcpy(void* destination,const void* source, size_t num); 从source位置开始&am…

ChatGPT国内镜像站大全

#今天在知乎看到一个问题:“平民不参与内测的话没有账号还有机会使用ChatGPT吗?” 从去年GPT大火到现在,关于GPT的消息铺天盖地,真要有心想要去用,途径很多,别的不说,国内GPT的镜像站到处都是&…

基于sortablejs实现拖拽element-ui el-table表格行进行排序

可以用原生的dragstart、drag、dragend、dragover、drop、dragleave实现这个效果&#xff0c;但是有现成的轮子就不要重复造了&#xff0c;看效果&#xff1a; <template><el-table :class"$options.name" :data"tableData" ref"table"…

Docker进阶教程 - 1 Dockerfile

更好的阅读体验&#xff1a;点这里 &#xff08; www.doubibiji.com &#xff09; 1 Dockerfile Dockerfile 是做什么的&#xff1f; 我们前面说到&#xff0c;制作镜像的方法主要有两种方式&#xff1a; 使用 docker commit 命令&#xff1b;使用 Dockerfile 文件。 但是…

leetcode每日一题310.最小高度树

目录 一.题目原型 二.题目思路 三.代码实现 一.题目原型 二.题目思路 首先&#xff0c;我们看了样例&#xff0c;发现这个树并不是二叉树&#xff0c;是多叉树。 然后&#xff0c;我们可能想到的解法是&#xff1a;根据题目的意思&#xff0c;就挨个节点遍历bfs&#xff0c;…

瑞_Redis_短信登录_Redis代替session的业务流程

文章目录 项目介绍1 短信登录1.1 项目准备1.2 基于Session实现登录流程1.3 Redis代替session的业务流程1.3.1 设计key的结构1.3.2 设计key的具体细节1.3.3 整体访问流程1.3.4 代码实现 &#x1f64a; 前言&#xff1a;本文章为瑞_系列专栏之《Redis》的实战篇的短信登录章节的R…

springboot项目读取excel表格内容到数据库,excel表格字段为整数的读取方法

在我昨天的项目中&#xff0c;我需要把excel表格中字段为整数的字段读取到数据库中进行保存&#xff0c;但是在内置方法中并没有读取整数的方法&#xff08;也有可能是我没发现&#xff0c;太菜了~~&#xff09;&#xff0c;那接下来我就提供给大家一个简单地方法来读取excel表…

Apache-Doris基础概念

OLAP数据库Doris 一、Doris架构二、基本概念1. Row & Column2. Partition & Tablet3. 建表示例&#xff08;1&#xff09;列的定义&#xff08;2&#xff09;分区分桶&#xff08;3&#xff09;多列分区&#xff08;4&#xff09;PROPERTIES&#xff08;5&#xff09;E…

【LabVIEW FPGA入门】单周期定时循环

单周期定时循环详解 单周期定时环路是FPGA编程中最强大的结构之一。单周期定时循环中的代码更加优化&#xff0c;在FPGA上占用更少的空间&#xff0c;并且比标准While循环中的相同代码执行得更快。单周期定时环路将使能链从环路中移除&#xff0c;以节省FPGA上的空间。…