当前位置: 首页 > news >正文

Github Actions 使用指南和Android 持续集成示例

前言

Github Actions 官方文档(以下所有的官方文档的总入口)对很多细节都进行了详细说明,但是如果你是第一次接触,看了很多关于细节的东西,不知所云,导致很快忘记。本篇文章,从我项目的代码,从总体上,认识一下Actions。文章最后,我会把一些重要的官方文档贴出 ,学会这些基础的,再看其他的文档也就更能掌握

Github Actions

当代码push后,符合配置的条件,就会自动运行指定的操作。Github Actions 提供了免费硬件(查看配置) ,来实在持续集成的操作。

这些流程,通过项目中的yml文件来配置。

术语

  • workflow
    表示一次持续集成的过程
  • job
    表示构建任务,每个 workflow 可以由一个或者多个 job 组成,可支持并发执行 job,所有 job 执行完也就代表着 workflow 结束
  • step
    每个 job 由一个或多个 step 组成,按顺序依次执行
  • action
    每个step 由一个action组成, github 已经提供了一个[action 市场],可以搜索到各种第三方 actions,自由组合这些actions,来实现更复杂的操作

查阅了很多文章(GitHub Actions 入门教程,Github Actions 尝鲜),都说每个 step 由一个或多个 action 组成,但是在具体的开发过程中,发现steps的列表中并没有字段让我们设置多个action,uses只能设置一个action。更有文章甚至把step和action搞混

每个 step 由一个或多个 action 组成,按顺序依次执行,这里 action 需要特别说明一下,action 是可以是自定义脚本或引用第三方的脚本,依赖着 github 开源社区,许多 action 都可以直接复用(也可自己编写),github 已经提供了一个action 市场,可以搜索到各种第三方 actions,并且官方也提供了许多 actions。

示例

下面通过示例,来看看具体如何使用。下面是Android的持续集成yml文件,

# workflow的名称,会显示在github 的项目的Actions的右边列表中,如下图name:DEBUG_CI# 在满足以下条件触发这个workflowon:push:# 在指定的远程分支上,发生推送branches:-dev# 指定文件发生修改paths:-'config.gradle'jobs:# 多个job,如果有多个,每个以“-”开头first-job:# 该job 运行的系统环境,支持ubuntu 、windows、macOSruns-on:ubuntu-lateststeps:# 下面是多个step ,每个以“-”开头# step:检查分支-uses:actions/checkout@v1# step:设置jdk版本# step 名称-name:set up JDK 1.8# 引用公共actionuses:actions/setup-java@v1with:# 设置参数java-version:1.8# step:打包apk-name:Build with Gradle# 运行命令run:chmod +x gradlew&&./gradlewassembleDebug#step:上传apk 到action,在右上角查看# 官方文档 https://help.github.com/cn/actions/automating-your-workflow-with-github-actions/persisting-workflow-data-using-artifacts#uploading-build-and-test-artifacts-name:Upload APKuses:actions/upload-artifact@v1with:name:apppath:app/build/outputs/apk/debug/xw-debug.apk# step:向蒲公英上传文件-name:Upload To Pgyeruses:JantHsueh/upload-file-action@masterwith:url:https://www.pgyer.com/apiv2/app/uploadmethod:POST# ${{ secrets.pgyer_key }} 使用秘钥,如何设置下面会介绍forms:'{"_api_key":"${{ secrets.pgyer_key }}","buildInstallType":3}'fileForms:'{"file":"app/build/outputs/apk/debug/xw-debug.apk"}'#step: 获取apk版本号-name:Get Apk Info#step idid:apkuses:JantHsueh/get-apk-info-action@masterwith:apkPath:app/build/outputs/apk/debug/xw-debug.apk#获取指定时区的时间-name:Get Timeid:timeuses:JantHsueh/get-time-action@masterwith:timeZone:8# 调用接口修改数据库的版本号-name:Update SoftwareVersionuses:JantHsueh/webrequest-action@masterwith:url:https://www.adsff123.com/app/guest/updateSoftwareVersionmethod:POST# ${{ steps.apk.outputs.versionCode }} 使用id为apk的step的输出参数versionCodepayload:'{"id":1,"softwareType":1,"recommend":1,"versionDesc":"App自动发布成功,时间 ${{ steps.time.outputs.time}} \n5分钟后再点更新 \n8分钟后也可以 \n10分钟后最好","version":"${{ steps.apk.outputs.versionNum }}","versionNum":${{ steps.apk.outputs.versionCode }}}'headers:'{"Content-Type": "application/json","authorization":"${{ secrets.update_software_version_key }}","platform":"android"}'#获取git log-name:Get git logid:git_loguses:JantHsueh/get-git-log-action@masterwith:tag:release# 向钉钉发送消息-name:dingtalkuses:JantHsueh/webrequest-action@masterwith:url:${{secrets.dingtalk_webhook}}method:POSTpayload:'{"msgtype": "text", "text": {"content": "西雾代理商-测试版(debug)-App更新-版本号: ${{ steps.apk.outputs.versionNum }},可直接在App中更新到最新版 \n 距上个正式版的更新记录: \n${{ steps.git_log.outputs.log }}"}}'headers:'{"Content-Type": "application/json"}'

每个step 使用的action 如下:

  • 编译打包
    执行命令 chmod +x gradlew &&./gradlew assembleDebug

  • 上传到蒲公英 https://github.com/JantHsueh/upload-file-action 这个action 可以上传任何文件到任何地址,可自由设置参数

  • 获取apk信息 https://github.com/JantHsueh/get-apk-info-action

  • 获取指定时区的时间 https://github.com/JantHsueh/get-time-action

  • 获取git 的提交log日志 https://github.com/JantHsueh/get-git-log-action

  • 向钉钉发送消息 https://github.com/JantHsueh/webrequest-action

每一项都给出github地址,使用方式,我在README.md都写了详细说明,欢迎大家start这些Actions项目

配置workflow

上面介绍的workflow YAML文件,需要放在项目根目录下:.github/workflows/

例如:.github/workflows/debug-workflow.yml

官方文档: 配置工作流程

不同job之间对的数据传递

官方文档: 使用构件持久化工作流程数据

action参数的输出输入

参考了 官方文档创建 JavaScript Action中 —— 在工作流程中测试您的操作 的示例

设置秘钥

官方文档: Creating and using encrypted secrets

自定义Action

有两种创建Action的方式:

  1. 创建 JavaScript Action,就是在Node.js 开发功能
  2. 创建 Docker 容器 Action,这种是创建一个docker 容器,可以实现的操作就非常自由了

Action 返回值是json如何使用:

在上面的示例中,都是返回一个参数例如一个int,一个string,那如果返回json,该如何引用呢?

官方文档没有明确的说明,我在这个项目中,看到有这样的使用,大概是下面这样,是在Ubuntu命令下解析json。但是我想把json中的指定参数作为下一个step 中action的参数传入,始终不行。

run:|$output='${{steps.webhook.outputs.output}}'|ConvertFrom-JsonWrite-Host"Time from output $($output.time) statusCode $($output.statusCode) data $($output.data)"

请点赞、收藏,感谢大家的支持,有任何疑问可在评论区回复

结语

主要的基本内容就这些,掌握这些后,再去细看官方文档,思路会更清楚。官方文档很多都是中文的,而且写得也很清楚,就不再赘述

http://www.jsqmd.com/news/1315219/

相关文章:

  • Unity UGUI动态折叠菜单的ScrollRect布局刷新Bug与解决方案
  • Czkawka终极指南:如何用这个免费开源工具彻底清理你的硬盘空间
  • 为什么NanaZip能成为Windows平台最受欢迎的免费压缩工具?5大核心优势揭秘
  • 72.华为路由器:OSPF的基本配置实验
  • Unity Addressables构建全流程解析:从本地到远程部署与热更新
  • 完整实战指南:如何高效部署企业级私有文档服务器ShowDoc
  • 应对“讲解浅”的挑战:史馆讲解机器人如何承接课程化教学价值
  • 青龙面板自动化脚本库:如何实现阿里云盘等100+服务的自动签到
  • Unity UGUI多级折叠菜单实现:解决ScrollRect动态刷新与性能优化
  • 学生近视防控眼镜推荐:各类离焦镜片选购要点参考 - 优质品牌测评
  • SolidWorks模型高效导入Unity全流程:从工业设计到实时渲染的FBX转换指南
  • 2026 深圳高端首饰变现真相!别再裸卖亏大钱 - 大牌深度测评
  • Unity2022安装DOTween报错?四种可靠解决方案与深度排查指南
  • Python键盘事件监听实战:从pynput到keyboard的完整指南
  • 设备底部检修门频繁开关,用什么锁更方便?戴乐克大盖锁让运维更简单!
  • 【20年HR总监亲授】:AI面试官已上线——3招让简历通过算法筛选率提升400%
  • 想稳定拿线索的财税公司找企跑星怎么帮,稳定线索方法 - 欢欢在创业
  • 基于GOAP的Godot游戏AI决策系统:从原理到实战实现
  • 2026新疆高端定制游行业梯队解析:6家头部机构真实实力与适配场景 - 互联网科技品牌测评
  • FFmpeg实现RTSP推拉流
  • Android 图形架构 之四——图形缓冲区的申请和消费流程及核心类
  • 用WorkBuddy 联动实时天气 · 通过一路ChipToAi开关实现自动控制开关 · 实战教程
  • C++实现2D沙盒游戏核心机制:无限地图、物理碰撞与渲染优化
  • UE5 UserWidget蓝图开发:数据驱动UI与双向通信实战指南
  • 立即执行函数模块化
  • 整体流程、Measure、Layout 详解——RecyclerView源码详解(一)
  • Unity Shader Properties深度解析:从参数绑定到性能优化的完整指南
  • 框架和流程——OkHttp 源码详解(一)
  • Godot引擎卡牌游戏开发:模块化框架与数据驱动设计实战
  • AI驱动药物研发:从生成式模型到多智能体系统的超级智能路线图