玩转 GitHub Actions

简介: GitHub Actions 是 GitHub 中提供的自动化功能,通过它可以方便的在你提交代码、发送 PR 等各种事件触发时触发一系列自动化操作,完成 CI/CD、辅助机器人等功能,解放双手。

网络异常,图片无法展示
|

GitHub Actions 是 GitHub 中提供的自动化功能,通过它可以方便的在你提交代码、发送 PR 等各种事件触发时触发一系列自动化操作,完成 CI/CD、辅助机器人等功能,解放双手。

并且不止于此,Actions 还能在 issue、discussion 等几乎所有 GitHub 的功能的事件触发时触发。要看支持他具体支持的事件有哪些可以看下官方文档

在 Actions 出现前,GitHub 中的开源项目一般会选择使用 travis-ci、circle-ci 等工具来实现 CI/CD,而现在基本大部分新创建的开源项目都会使用 Actions 来完成。(为 circle-ci 默哀)

Actions 对开源项目全部免费,并且私有仓库也有一定的免费时长,对于开源开发者来讲,简直香的不行。

使用

首先想要在仓库中使用 Actions 需要在 .github/workflows/ 中创建相应的 {workflow}.yml 文件。(如果你的仓库启用了 pages,会存在一个隐藏的 pages workflow)

触发

创建 workflow 文件后,你需要为你的 workflow 指定一个或多个触发条件。Actions 的触发除了上面提到的通过各种事件来触发外,还包括定时触发、主动触发和间接触发。

事件触发

事件触发通过声明事件类型来表明触发时机,常见的场景如下:

在新版本 push 后通过 tag 触发:

on:
    push:
        tags:
            - 'v*'
复制代码

push 或发送 PR 至 main 时触发:

on:
    push:
        branches: [main]
    pull_request:
        branches: [main]
复制代码

在 PR 创建或重新打开时触发:

on:
    pull_request:
        types: [opened, reopened]
复制代码

还有一类比较特殊的:

on:
    workflow_run:
        workflows: [Build]
        types: [completed]
复制代码

可以通过某个 workflow 的运行状态来触发另一个 workflow。默认情况下 Actions 中的 workflow 都是对等的,相互之间没有关联,如果你的 workflow 间有编排需求,则可以借助这类事件来处理。

定时触发

定时触发使用 crontab 定时任务来描述 workflow 触发的时间点。

on:
    schedule:
        # * is a special character in YAML so you have to quote this string
        - cron: '30 5,17 * * *'
复制代码

定义后到定义的时间 workflow 便会开始执行,不过要注意一般会有几分钟的延时,执行时间不会很精确,不能依赖。

这种类型的 workflow 一般会用在一些定时任务(每日报告汇总、数据采集、签到脚本(误))上,或者一些大型项目会每周汇总自动发版等。

主动触发

主动触发即通过 Actions 界面中的按钮、API 接口等来触发 workflow 的运行,一般在测试或和其它系统集成时使用。

间接触发

间接触发指的是 workflow 被其它 workflow 引用时,在其它 workflow 中启动的情况,不在常用范围内,下面会单独说明。

任务

除了触发条件,最重要的就是定义任务,workflow 中通过 jobs 字段来定义对应的任务:

jobs:
    build:
        runs-on: ubuntu-latest
        steps:
            - uses: actions/checkout@v2
            - uses: actions/setup-node@v2
              with:
                  node-version: 12
            - run: npm install
            - run: npm run test:ci
    publish-npm:
        needs: build
        runs-on: ubuntu-latest
        steps:
            - uses: actions/checkout@v2
            - uses: actions/setup-node@v2
              with:
                  node-version: 12
                  registry-url: https://registry.npmjs.org/
            - run: npm install
            - run: npm run ci
            - run: npm publish
              env:
                  NODE_AUTH_TOKEN: ${{secrets.npm_token}}
复制代码

注意,任务本身没有先后顺序,如果你的任务间存在前后依赖关系,需要使用 needs 来定义。

任务的 key 即任务名称,也可通过任务中的 name 字段来定义,会在 workflow 运行图中进行展示。

网络异常,图片无法展示
|

此外一个任务一般至少包含两个字段:

  • runs-on: 表示任务的执行环境,除了常见的各种 linux 版本外,Actions 中还支持 macOS 和 Windows
  • steps: 表明任务要如何执行
  • uses: 使用市场上发布的 actions
  • with: 传递参数给使用的 action
  • run: 执行脚本命令

所以这里一起来解释下上面的那段 jobs 定义,这是一段很常见的自动化测试并发布的任务定义:

  • 定义了两个任务:build 和 publish-npm
  • publish-npm 依赖于 build 任务,所以会在 build 任务后执行
  • build 任务在 ubuntu-latest 镜像上运行,运行包括 4 步:
  1. 通过 actions/checkout 检出仓库代码
  2. 通过 actions/setup-node 安装配置 node 环境,版本为 node 12
  3. 执行 npm install
  4. 执行 npm run test:ci
  • build 任务完成后 publish-npm 任务开始启动,同样在 ubuntu-latest 镜像上运行,运行包括 5 步
  1. 通过 actions/checkout 检出仓库代码
  2. 通过 actions/setup-node 安装配置 node 环境,版本为 node 12,设定 registry-url
  3. 执行 npm install
  4. 执行 npm run ci
  5. 执行 npm publish,使用项目配置的 npm_token key 来发布

此外任务中还可以定义以下常见属性:

  • env: 定义环境变量
  • shell: 指定命令执行的 shell
  • timeout-minutes: 定义任务超时时长
  • permissions: 定义任务的权限
  • matrix: 定义任务执行的策略矩阵,比如定义了 version: [10, 12, 14]os: [ubuntu-latest, windows-latest] 则会组合成 6 种执行环境分别执行任务

还有很多的属性。如果想要具体研究可以看下官方文档

名称

workflow 的名称默认为文件名,也可通过 name 字段定义,一般直接定义在首行:

name: my-first-workflow
复制代码

名称会展示在 Actions 面板的任务列表中:

网络异常,图片无法展示
|

复用

workflow 除了可以使用官方市场提供的 Actions 外,还可直接复用自己仓库中的 workflow 文件。

首先需要定义一个可复用的 workflow 文件,该文件主要的特点是支持通过 workflow_call 来触发,即上面讲到的间接调用。

on:
    workflow_call:
        inputs:
            username:
                required: true
                type: string
        secrets:
            envPAT:
                required: true
复制代码

workflow_call 中还可定义 inputs 和 secrets 来定义参数或敏感的 token 类参数。

在需要使用的 workflow 文件中,则通过 uses 该通用 workflow 的文件路径进行调用:

jobs:
    reusable_workflow_job:
        runs-on: ubuntu-latest
        environment: production
        steps:
            - uses: ./.github/workflows/my-action
              with:
                  username: ${{ inputs.username }}
                  token: ${{ secrets.envPAT }}
复制代码

通过 with 将参数进行传递。

其它

除了上面的内容外,workflow 中还可以定义权限、环境变量等,这里就不一一细说。

相关文章
|
监控 安全 机器人
通过GitHub Actions给微信公众测试号和钉钉群定时推送消息(Python)
通过GitHub Actions给微信公众测试号和钉钉群定时推送消息(Python)
238 0
|
存储 Ubuntu 持续交付
GitHub Actions 指南(上)
GitHub Actions 指南
164 0
|
2月前
|
JavaScript API 开发工具
使用GitHub Actions自动发布electron多端安装程序
使用GitHub Actions自动发布electron多端安装程序
56 8
利用 GitHub Actions 自动化你的软件开发流程
GitHub Actions 是由 GitHub 提供的自动化工具,可让你在仓库中触发和执行自动化工作流程,如自动运行测试和部署应用。其核心概念包括工作流程(定义在 YAML 文件中的一系列自动化步骤)、作业和步骤。本文将指导你如何设置和使用 GitHub Actions,并提供实用的自动化示例,帮助你提高开发效率和代码质量。通过简单的配置文件,你可以实现自动运行测试、部署应用甚至自动合并 Pull Requests。
利用 GitHub Actions 自动化你的软件开发流程
在现代软件开发中,自动化是提升效率与质量的关键。GitHub Actions 作为 GitHub 的强大自动化工具,允许你在仓库中自动执行多种任务,如测试、打包、部署代码及自动合并 Pull Requests。本文介绍了 GitHub Actions 的核心概念、设置方法及其实用示例,帮助你快速上手并优化开发流程。通过 YAML 文件定义的工作流程可显著提高工作效率和代码质量。
|
3月前
|
开发者
利用 GitHub Actions 自动化你的软件开发流程
在快速发展的软件开发环境中,自动化对于提升效率与质量至关重要。GitHub Actions 作为一款强大的工具,能帮助开发者实现从自动运行测试到部署应用等工作的自动化。本文详细介绍了 GitHub Actions 的核心概念、设置方法及实际应用示例,如自动测试、部署和合并 Pull Requests,助力提升开发流程的自动化水平。
利用 GitHub Actions 自动化你的软件开发流程
GitHub Actions 是 GitHub 提供的自动化工具,可在仓库中触发和执行工作流程,包括自动运行测试、部署应用等。其核心概念包括工作流程(Workflow)、作业(Job)和步骤(Step),均定义在 YAML 文件中。本文将指导你如何设置和使用 GitHub Actions,并提供自动运行测试、部署应用及合并 Pull Requests 的示例,帮助提高开发效率和代码质量。
|
4月前
|
Java Spring 传感器
AI 浪潮席卷,Spring 框架配置文件管理与环境感知,为软件稳定护航,你还在等什么?
【8月更文挑战第31天】在软件开发中,配置文件管理至关重要。Spring框架提供强大支持,便于应对不同环境需求,如电商项目的开发、测试与生产环境。它支持多种格式的配置文件(如properties和YAML),并能根据环境加载不同配置,如数据库连接信息。通过`@Profile`注解可指定特定环境下的配置生效,同时支持通过命令行参数或环境变量覆盖配置值,确保应用稳定性和可靠性。
68 0
|
4月前
|
Devops 持续交付 开发者
.NET自动化之旅:是Azure DevOps还是GitHub Actions能够打造完美的CI/CD流水线?
【8月更文挑战第28天】在现代软件开发中,持续集成(CI)与持续部署(CD)是提升代码质量和加速交付的关键实践。对于 .NET 应用,Azure DevOps 和 GitHub Actions 等工具可高效构建 CI/CD 流水线,提升开发效率并确保软件稳定可靠。Azure DevOps 提供一站式全流程管理,支持 YAML 定义的自动化构建、测试和部署;GitHub Actions 则以简洁灵活著称,适用于 .NET 项目的自动化流程。选择合适的工具可显著提高开发效率并确保高质量标准。
28 0
|
4月前
|
数据采集 JSON 小程序
零成本 API 服务搭建,用 GitHub Actions 自动爬取文章?
本着将成本降到最低,我目前做的应用或小程序都是单机的,也就是不用请求接口,只要一上架就没有任何支出。但是写死的数据毕竟有限,应用的内容单一无法紧跟时事热点,每次打开一个样,自然就没有留存。遇到有错字啥还要更新版本,那有没有方法既能丰富应用内容,又不用增加成本呢?
37 0
下一篇
DataWorks