使用Jenkins+Gitlab集成Flutter自动化打包(Android),并发布到蒲公英

2023-11-19

本文记录一下使用Jenkins+Gitlab集成Flutter自动化打包的过程。

在集成时,Jenkins和Gitlab是已经搭建好的,并且Gitlab上已经上传了Flutter项目。

Jenkins自动构建打包

安装Gitlab插件

因为Jenkins默认使用的是Github仓库,所以需要安装Gitlab的插件才可以实现配合工作。

根据路径打开页面 首页 -> Manage Jenkins -> Manage Plugins

选择可选插件选项卡,搜索gitlab一般第一项就是我们要安装的Gitlab插件。(因为我已经安装完了,所有没有搜索到)。安装完成后,会在已安装中出现,如下图

Jenkins上创建视图及任务

跳过创建视图的操作,创建一个名为XX_Android_Test的任务,创建任务的名称时,最好把环境带上。选择Freestyle project

配置任务

点开刚才创建的任务的配置选项,按照如下步骤配置任务。

配置源码管理

源码选择Git选项,需要填写其中的三项,项目地址,登录账号和指定分支。
可以发现登录账号我们之前并没有配置过,点击添加按钮,进入配置页,并且按照如下图片配置

源码管理至此配置完成。配置完可以点击保存,然后在任务视图的工作空间选项中查看是否已经能看到代码,能查看到说明已经配置成功。

配置自动构建

Jenkins的自动构建触发机制有很多种,这里就不多说了。我想要实现的是当Gitlab的代码有变化时,自动触发构建。

可以看到我选择的构建触发条件是Build when a change is pushed to GitLab。如果没有安装Gitlab Plugin插件,是没有这个选项的。

接下来一步就是要配置Gitlab Webhook,这一步的目的是让gitlab主动通知Jenkins进行构建。

记住Gitlab Webhook Url这个地址。
点击高级选项,点击generate生成secret token

登录Gitlab网页,找到对应的项目,进入项目视图,根据下图配置Gitlab Webhook UrlSecret token

点击增加Web钩子,后会在下方生成一条记录

Test处可以手动触发钩子操作,比如点击Push Events,切换到Jenkins页面后就会发现 开始构建了

配置构建脚本

构建模块中选择Execute Shell使用脚本构建,写入flutter打包命令,并在打包完成之后,打印产物目录。

flutter build apk --release -v --split-per-abi
ls build/app/outputs/apk/release/

到这里就配置完成了,让我们来试一下!

测试自动构建

在IDE中随便修改下,push到远程的test分支,切换到Jenkins控制台,发现触发自动构建了,可是却是一个红色的X~~

点开日志,看到是:

+ flutter build apk --release -v --split-per-abi
/home/jenkins/apache-tomcat-8.5.69/temp/jenkins4951377557025618866.sh:行2: flutter: 未找到命令
Build step 'Execute shell' marked build as failure
Finished: FAILURE

服务器安装Flutter环境

错误信息很明确,处理方式也非常简单,直接上官网链接入门: 在Linux上搭建Flutter开发环境

Jenkins配置环境变量

在配置好Flutter环境且在服务器端使用flutter doctor能正常使用flutter命令之后,还需要给Jenkins配置环境变量,否则Jenkins依然会报错。

在Jenkins首页 -> Manage Jenkins -> Configure System -> Global Properties(全局属性)中,勾选Environment variables,键填写为"PATH",值填写在服务器端执行命令echo $PATH输出的值,点击保存后即可生效。如下图:
在这里插入图片描述

服务器安装Android环境

配置好Flutter环境后,再次尝试,发现还是报错了。Android Sdk环境还没有!可以参考我的另一篇Linux安装Android Sdk

测试成果

各种环境都配置好后,重启执行一次构建,等待日志输出。
在这里插入图片描述
在日志中可以发现,第一次构建时,会自动下载gradle环境。
在这里插入图片描述
最终打包成功,并且执行了我们的打印输出目录的命令,登录服务器查看workspace中的输出目录,确实生成了打包后的产物。

第一步完成!

打包产物自动上传到蒲公英

Jenkins安装蒲公英插件

上传到蒲公英需要Jenkins安装Upload to pgyer插件,按照下图操作
在这里插入图片描述

配置构建后操作

在任务的配置视图中,我们在最后一项"构建后操作"中添加一步操作。蒲公英对v1版本的api不再维护,因此建议选择v2进行集成。
在这里插入图片描述

在这里插入图片描述
api_key在蒲公英的Api信息中复制过来,安装包位置默认为${WORKSPACE}/build/app/outputs/apk/release,安装包选择更加通用的v7版本app-armeabi-v7a-release.apk

在右下角的高级设置中,可以实现更多的功能。

  • buildName:指定上传后的App name
  • buildInstallType: (选填)应用安装方式,值为(1,2,3,默认为1 公开安装)。1:公开安装,2:密码安装,3:邀请安装
  • buildPassword:(选填) 设置App安装密码,密码为空时默认公开安装
  • buildUpdateDescription:(选填) 版本更新描述,请传空字符串,或不传。
  • buildChannelShortcut: (选填)所需更新的指定渠道的下载短链接,只可指定一个渠道,字符串型,如:abcd。渠道需在蒲公英平台提前创建。
  • qrcodePath:(选填)可以选择把二维码下载下来,这是下载路径
  • envVarsPath:(选填)存储上传日志的地址,不填表示不存

测试结果

执行构建,一次成功!查看蒲公英平台也已经更新版本。
在这里插入图片描述

结束

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用Jenkins+Gitlab集成Flutter自动化打包(Android),并发布到蒲公英 的相关文章

  • 添加对 json 数据的“Future”api 调用作为无限滚动 Flutter Gallery 示例项目

    尝试学习新的 flutter 框架 看起来非常有前途 完成所有在线演示后 我现在尝试将外部数据添加到 pesto 部分中的 flutter gallery 示例项目中 这些数据可以通过每 10 个项目调用一次新的 Future 数据来无限滚
  • 如何阻止 Jenkins 中的 CI 构建意外发布到发布存储库?

    有时 开发人员会不小心签入 POM 中没有 SNAPSHOT 的版本 这将构建 Maven 项目并将工件发布到发布存储库 我怎样才能避免这种情况呢 我只想发布构建工件以发布存储库 而不是 CI 构建 我考虑了以下问题 但它们都不是一个简单的
  • Hudson 和电子邮件通知

    我可以覆盖每个作业的 Hudson 设置 系统管理员电子邮件地址 吗 阅读了一些源代码http sorcerer jenkins ci org http sorcerer jenkins ci org and hudson tasks Ma
  • 当模拟器存在时 Flutter 应用程序不运行

    模拟器在那里 但当我启动应用程序时它不起作用 请帮忙 我已经尝试了一切 Cal Flutter 新手 我已遵循安装指南并尝试了其他堆栈流答案的修复 我正在运行 Windows 8 1 单一用户 我已经从命令提示符和 android 终端中尝
  • VSCode和flutter,如何连接多个设备?

    我在 macOS 上使用 Visual Studio Code 来开发 Flutter 应用程序 我可以在 VSC 左下角选择一个设备 我还可以使用在多个设备上运行flutter run d all 我想知道如何使用 VSC 中的调试控制台
  • 使用 Ruby 验证 Jenkins 插件表单

    我正在用 Ruby 开发一个 Jenkins 插件 您应该能够配置连接到服务器的每个节点 以便在该节点失去与主服务器的连接时将电子邮件发送到指定的地址 EmailNodeProperty添加一个字段来输入电子邮件地址 Save an ema
  • 如何取消配置 flutterfire?

    我们在 CLI 中使用以下命令将 flutter 应用程序与 firebase 连接 flutterfire configure 如文档中所述 https firebase flutter dev docs overview https f
  • Flutter MacOs 访问文件

    我正在尝试在 Flutter 中构建一个自定义桌面应用程序 以便能够加载图片 例如图库 为此 我将要求用户选择一个文件夹 它会自动显示图片 现在 从简单的事情开始 由于这是第一次为 Mac 开发 我只是尝试通过Image file new
  • 使用 flutter 处理 Appcheck 时出错

    我想在 firebase 存储中上传文件 但经过多次研究后出现了 appcheck 错误 我发现我必须在 firebase 上激活 Appcheck 而且还要在我的应用程序上激活它 在 youtube 上的谷歌视频中 我看到我必须在构建我的
  • Flutter:BottomNavigationBar 在选项卡更改时重建页面

    我在 Flutter 中的 BottomNavigationBar 有问题 如果我更改选项卡 我想让我的页面保持活动状态 这是我的实现 底部导航 class Home extends StatefulWidget override Stat
  • 在 ListView 上构建期间调用 setState() 或 markNeedsBuild()

    所以我试图重构我的 listView 逻辑 基本上我的 ListView 的 UI 逻辑变得很麻烦 所以我决定 为什么不将 UI 逻辑的某些部分移动到另一个类 这是我的代码 列表页 dart import package flutter m
  • PushReplacement 或 PushAndRemoveUntil(Route 路线) => false 不工作

    基于页面的路由无法使用命令式 api 完成 而是提供一个没有相应页面的新列表到 Navigator pages 包 flutter src widgets navigator dart 断言失败 第 3075 行 pos 7 hasPage
  • 将“Map>”转换为“Map>”

    我想投一个Map
  • 使用功能分支时避免 Maven 存储库版本冲突

    Question 如何处理 Maven 多项目构建的功能分支 Jenkins 构建和部署这些分支 以将开发人员的构建开销降至最低 但开发和功能分支无法构建相同的 Maven 版本 否则我们将面临工件和源代码之间不匹配的风险 我们有一个脚本来
  • 如何更改文本字段颤动内部的值?

    我有一个TextEditingController如果用户单击按钮 它就会填写信息 我似乎不知道如何更改 a 中的文本Textfield or TextFormField 有解决办法吗 只需更改text财产 TextField contro
  • Flutter:如何移动文本字段字符计数器?

    标题很好地总结了这个问题 我有一个TextField with a maxLength 250这就是它的样子 有没有办法把柜台放在其他地方 最好位于发送按钮的左侧 但也可能位于发送按钮的上方和左侧TextField 有任何想法吗 谢谢 可能
  • 打开键盘会导致有状态小部件重新初始化

    我在 Stable 分支中使用 Flutter 1 2 1 为了说明我的问题 假设我有页面 A 和 B A 使用以下命令导航到 BNavigator pushB 使用以下命令导航回 ANavigator pop 两者都是有状态的小部件 当我
  • Flutter 中的 Android 许可证

    4 天前一切正常 我进行了更新 许可证停止通过 我到目前为止所做的事情 检查了工具过时的东西 gt 不起作用 flutter doctor android licenses gt 不起作用 sdkmanager licenses gt 不起
  • 颤振预览图标在代码完成时显示损坏的资源图像

    当我第一次安装 flutter 和 dart 扩展时 图标预览工作正常 但是当我在没有 wi fi 的环境中开发时 图标预览损坏了 不确定这是问题所在 我尝试重新安装所有与 flutter 和 dart 相关的扩展 但问题仍然存在 如果有任
  • 如何在flutter项目中使用http拦截器?

    我必须向我的所有 Api 添加标头 有人告诉我为此使用 http 拦截器 但我无法理解如何做到这一点 因为我是颤振的新手 谁能帮我举个例子吗 您可以使用http 拦截器 https pub dev packages http interce

随机推荐

  • 基于Java实现的DES加密算法

    1 总结DES原理 DES算法为密码体制中的对称密码体制 又被称为美国数据加密标准 是1972年美国IBM公司研制的对称密码体制加密算法 明文按64位进行分组 密钥长64位 密钥事实上是56位参与DES运算 第8 16 24 32 40 4
  • fiddler APP抓包设置

    IOS设置 http t istester com 3000 istester 21Day src master Fiddler V1 0 21Day Fiddler 13 md 安卓设置 http t istester com 3000
  • Spring容器和应用上下文理解

    有了Spring之后 通过依赖注入的方式 我们的业务代码不用自己管理关联对象的生命周期 业务代码只需要按照业务本身的流程 走啊走啊 走到哪里 需要另外的对象来协助了 就给Spring说 我想要个对象 于是Spring就很贴心的给你个对象 听
  • 一文学会Canal怎么用

    文章目录 一 概念 1 什么是Canal 2 Canal的基本原理 二 Mysql配置 1 安装 2 开启mysql的binlog 3 mysql创建cannl用户并授权 三 安装配置ES kibana 四 安装canal server 五
  • jsp page 提示[page] is not properly terminated

    今天在编写jsp 页面 引入其他的jsp 的方式如下
  • 批量将xls转换成xlsx

    转载 https blog csdn net weixin 44674885 article details 88669259 1 xls和xlsx区别 xls格式 最大行数为65535 xlsx格式 最大行数为1048576 2 xls批
  • 海康、大华IpCamera RTSP地址和格式

    大家注意 我下面文章描述的都是海康老款摄像机的RTSP规则 现在新的DS 系列 摄像机型号为DS 开头的 的摄像机RTSP规则为 http blog csdn net xiejiashu article details 71786187 海
  • CentOS7编译内核

    下面记录了我在CentOS7上编译新内核的过程 背景 实验室的一台服务器上装且仅装了CentOS7 内核版本为3 10 0 327 el7 x86 64 我要在当前系统上 编译 安装内核4 1 16 搭建编译环境 sudo yum inst
  • 区块链学习笔记(六)——区块链的分类

    文章目录 一 强调 二 公有链 联盟链 私有链 1 公有链 2 联盟链 3 私有链 总结 一 强调 先做一下重复强调 区块链技术是集分布式存储 点对点传输 共识机制 加密算法 数据区块等概念于一体的新兴技术集合 二 公有链 联盟链 私有链
  • 基于ETest的航电系统通用测试平台

    随着电子技术的发展 航电系统在飞机整机中的重要性飞速提升 据统计 近年来航电系统在飞机出厂成本中的比例直线上升 航电系统研发成本已占飞机研制总成本的近30 并保持着持续扩大的趋势 测试保障作为航电产业链至关重要的一环 贯穿航空电子设备 研发
  • SpringBoot读取Resource下文件的四种方式

    SpringBoot读取Resource下文件的四种方式 1 ClassPathResource classPathResource new ClassPathResource static image a jpg InputStream
  • connect函数的用法

    作者 曾宏安 华清远见嵌入式学院讲师 在网络编程中 connect函数经常用来在套接字上初始化连接 无论是流式套接字还是数据报套接字都可以使用connect函数 但含义却不一样 下面我们分别来讨论一下 一 流式套接字 流式套接字通常使用的是
  • CSS字体样式属性(字体设置)

    font size 字号大小 font size属性用来设置字符 该属性的值有两种单位 1 相对长度单位 像素单位 px 2 绝对长度单位 使用非常少 font family 字体 font family属性用于设置字体 网页常用的字体 宋
  • 学习太极创客 — ESP8226 (十三)OTA

    视频链接 https www bilibili com video BV1L7411c7jw p 23 vd source b91967c499b23106586d7aa35af46413 资料链接 http www taichi make
  • bazel构建使用clang工具链

    最近使用clang工具构建bazel项目 官方文档给的step较为繁琐 这里暂时记录一下 以便后期可以直接去用 这里具体的规则不进行详细解释 具体看官方文档有关描述 查看预定义变量列表 使用如下命令 bazel info show make
  • 【华为OD统一考试A卷

    在线OJ 已购买本专栏用户 请私信博主开通账号 在线刷题 运行出现 Runtime Error 0Aborted 请忽略 华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一
  • module ‘tensorflow‘ has no attribute ‘global_variables_initializer‘(问题已解决)

    最近在学深度学习 一开始就遇到了个很狗血的问题 总会报出例如下面的这种错误 y hat tf constant 36 name y hat y tf constant 39 name y loss tf Variable y y hat 2
  • xpath通过text()方式获取div节点下的文本存在bug

    环境 scrapy1 8 python3 7 3 div块如下 div class li b l span class money 12k 20k span 经验3 5年 大专 div 用形如 x response xpath div cl
  • sparkstreamming 消费kafka(2)

    spark streaming提供了两种获取方式 一种是同storm一样 实时读取缓存到内存中 另一种是定时批量读取 这两种方式分别是 Receiver base Direct 一 Receiver base Spark官方最先提供了基于R
  • 使用Jenkins+Gitlab集成Flutter自动化打包(Android),并发布到蒲公英

    本文记录一下使用Jenkins Gitlab集成Flutter自动化打包的过程 在集成时 Jenkins和Gitlab是已经搭建好的 并且Gitlab上已经上传了Flutter项目 Jenkins自动构建打包 安装Gitlab插件 因为Je