• 作者:老汪软件技巧
  • 发表时间:2024-09-13 17:01
  • 浏览量:

Github Actions是一个 CI/CD 工具,可以自动执行代码仓库中的任务,比如构建、测试和部署等。

一张图看懂 github actions 的工作流程:

它被定义在仓库的.github/workflows目录下,每个流程对应一个YAML文件。可以是.yml或.yaml后缀。

根据流程图我们可以知道需要定义一些关键性字段,我们以前端项目为例。定一个工作流在推送代码后执行构建。

任务触发器,监听到推送push事件后触发。定义执行的任务,最终执行构建.拉取代码设置 node 环境安装依赖npm install执行脚本npm run build

工作流文件命名为actions-test.yml,可以直接将内容复制到仓库的.github/workflows目录下,文件名可以自定义。保存后,点击仓库的Actions选项卡,即可看到该任务执行情况。:

on: [push]
jobs:
  build-test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
      - run: npm install
      - run: npm run build

在一个流程里可以配置多个任务,并行执行。任务之间也可以设置依赖关系,比如任务 A 执行完毕后,任务 B 才能开始。

也可以配置多个流程,并行执行。如果流程之间有依赖关系,则可以配置一个流程引用另一个流程,那么这个流程将会等待被引用的流程执行完毕后再执行。

基础语法

包括 YAML 语法中使用的关键字及其作用。

branches 指定分支,而branches-ignore 排除分支。不能同时使用,在使用branches可以使用!进行排除,并且必须包含一个不使用!的分支。

on:
  pull_request:
    - "releases/**"
    - "!releases/v1"

paths 指定文件路径,而paths-ignore排除文件路径。

可以同时使用branches和paths,需要同时满足才会触发。

on:
  push:
    branches:
      - "main"
    paths:
      - "src/**"

匹配定义模式可以使用符号* \ ** \ + \ ? \ !

而对于branches和tags的使用,它们是或的关系。代码推送或者有新的 tag 标签都会触发。

on:
  push:
    branches:
      - "main"
    tag: "*"

permissions 定义工作流的操作权限。在修改仓库内容以及仓库设置等都需要设置操作权限。

defaults 定义工作流中默认设置。比如定义执行脚本语言环境、执行脚本目录等。

jobs 定义任务定义一个或多个任务。默认所有任务是并行的,可以通过jobs..needs指定任务依赖关系。

学会Github Actions自动发布版本__学会Github Actions自动发布版本

每个任务要在run-on指定的容器环境中运行。

jobs:
  build-test:
    runs-on: ubuntu-latest

build-test就是定义的任务 id;ubuntu-latest就是runs-on指定的任务运行环境。

.timeout-minutes 指定任务执行超时时间

可以看到有些配置字段一样,但它们所在的作用域不一样。所以文件特别注重书写,根据层级缩进来定义配置字段。注意键值对之间必须要有空格

除了上述列出的常见配置字段,还有一些特殊配置,比如workflow_call定义工作流的输入和输出;.outputs定义任务输出,可以在另一个任务里使用;.strategy可以定义在多个策略下的版本或者系统里运行任务。

使用变量

除了执行操作,还可以使用上下文环境提供的变量。比如前面使用过的always()表达式,不管依赖的任务执行是否成功,都会执行当前任务。

jobs:
  job1:
  job2:
    needs: job1
  job3:
    if: ${{ always() }}
    needs: [job1, job2]

默认环境变量

默认环境变量由 GitHub 设置,不能直接被工作流访问,但是可以通过所处的上下文可访问变量访问这些变量。这些以GITHUB_*和RUNNER_*开头的变量,不可以覆盖这些变量。

GITHUB_* 可以由上下文变量github.*访问;RUNNER_* 可以由上下文变量runner.*访问。

等等

下面的工作流会输出当前操作名称,因为我们没有定义操作name,会输出__run

on:
  push:
jobs:
  build-test:
    runs-on: ubuntu-latest
    steps:
      - run: echo ${{ github.action }}

自定义变量

定义自己的变量,可以使用env字段。每个部分都可以定义自己的变量,比如整个工作流、某个任务、某个步骤。

变量命名规则:包含字母、数字、下划线,不允许空格。不能以数字开头。不区分大小写。

on:
  push:
env:
  name: hboot
jobs:
  build-test:
    runs-on: ubuntu-latest
    env:
      age: 18
    steps:
      - run: echo "Say $val to $name. you are $age "
        env:
          val: hello

除了直接通过$访问变量外,还可以通过上下文变量evn访问。比如env.name,此时则需要使用${{}}包裹,有些情况下必须这样访问,比如使用if表达式。

表达式

之前已经使用过always()表达式。表达式一般用来条件判断,常与if字段结合使用。

通过${{}}对表达式求值。假值(false \ 0 \ -0 \ "" \ '' \nul)都会被转为 false;

evn:
  isSave: ${{ "" }}
  isSame: ${{ null }}

可以通过运算符进行求值,比如> \ < \ >= \


上一条查看详情 +支付安全体系概要;
下一条 查看详情 +没有了