GitHub Actions 指南(下)

简介: GitHub Actions 指南

steps

steps 的通用格式类似于:

steps:
  - name: <step_name>
    uses: <action>
    with:
      <parameter_name>: <parameter_value>
    id: <step_id>
    continue-on-error: true
  - name: <step_name>
    timeout-minutes:
    run: <commands>

每个 step 步骤可以有:

  • id : 每个步骤的唯一标识符
  • name : 步骤的名称
  • uses : 使用哪个 action
  • run : 执行哪些指令
  • with : 指定某个 action 可能需要输入的参数
  • continue-on-error : 设置为 true 允许此步骤失败 job 仍然通过
  • timeout-minutes : step 的超时时间

action

action 动作通常是可以通用的,这意味着你可以直接使用别人定义好的 action 。

checkout action

checkout action 是一个标准动作,当以下情况时必须且需要率先使用:

  • workflow 需要项目库的代码副本,比如构建、测试、或持续集成这些操作。
  • workflow 中至少有一个 action 是在同一个项目库下定义的。

使用示例:

- uses: actions/checkout@v1

如果你只想浅克隆你的库,或者只复制最新的版本,你可以在 with 中使用 fetch-depth 声明,例如:

- uses: actions/checkout@v1
  with:
    fetch-depth: 1

引用 action

  • 官方 action 标准库: github.com/actions
  • 社区库: marketplace

1、引用公有库中的 action

引用 action 的格式是 {owner}/{repo}@{ref}{owner}/{repo}/{path}@{ref} ,例如上例的中 actions/checkout@v1 ,你还可以使用标准库中的其它 action ,如设置 node 版本:

jobs:
  my_first_job:
    name: My Job Name
      steps:
        - uses: actions/setup-node@v1
          with:
            node-version: 10.x

2、引用同一个库中的 action

引用格式:{owner}/{repo}@{ref}./path/to/dir

例如项目文件结构为:

|-- hello-world (repository)
|   |__ .github
|       └── workflows
|           └── my-first-workflow.yml
|       └── actions
|           |__ hello-world-action
|               └── action.yml

当你想要在 workflow 中引用自己的 action 时可以:

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      # This step checks out a copy of your repository.
      - uses: actions/checkout@v1
      # This step references the directory that contains the action.
      - uses: ./.github/actions/hello-world-action

3、引用 Docker Hub 上的 container

如果某个 action 定义在了一个 docker container image 中且推送到了 Docker Hub 上,你也可以引入它,格式是 docker://{image}:{tag} ,示例:

jobs:
  my_first_job:
    steps:
      - name: My first step
        uses: docker://alpine:3.8

更多信息参考: Docker-image.yml workflow 和 Creating a Docker container action 。

构建 actions

请参考:building-actions


env

环境变量可以配置在以下地方:

  • env
  • jobs.<job_id>.env
  • jobs.<job_id>.steps.env

示例:

env:
  NODE_ENV: dev
jobs:
  job1:
    env:
      NODE_ENV: test
    steps:
      - name:
        env:
          NODE_ENV: prod

如果重复,优先使用最近的那个。


if & context

你可以在 job 和 step 中使用 if 条件语句,只有满足条件时才执行具体的 job 或 step :

  • jobs.<job_id>.if
  • jobs.<job_id>.steps.if

任务状态检查函数:

  • success() : 当上一步执行成功时返回 true
  • always() : 总是返回 true
  • cancelled() : 当 workflow 被取消时返回 true
  • failure() : 当上一步执行失败时返回 true

例如:

steps:
  - name: step1
    if: always()
  - name: step2
    if: success()
  - name: step3
    if: failure()

意思就是 step1 总是执行,step2 需要上一步执行成功才执行,step3 只有当上一步执行失败才执行。

${{<expression>}}

上下文和表达式: ${{<expression>}}

有时候我们需要与第三方平台进行交互,这时候通常需要配置一个 token ,但是显然这个 token 不可能明文使用,这种个情况下我们要做的就是:

  1. 在具体 repository 库 SettingsSecrets 中添加一个密钥,如 SOMEONE_TOKEN
  2. 然后在 workflow 中就可以通过 ${{secrets.SOMEONE_TOKEN}} 将 token 安全地传递给环境变量。
steps:
  - name: My first action
    env:
      SOMEONE_TOKEN: ${{ secrets.SOMEONE_TOKEN }}

这里的 secrets 就是一个上下文,除此之外还有很多,比如:

  • github.event_name : 触发 workflow 的事件名称
  • job.status : 当前 job 的状态,如 success, failure, or cancelled
  • steps.<step id>.outputs : 某个 action 的输出
  • runner.os : runner 的操作系统如 Linux, Windows, or macOS

这里只列举了少数几个。

另外在 if 中使用时不需要 ${{}} 符号,比如:

steps:
 - name: My first step
   if: github.event_name == 'pull_request' && github.event.action == 'unassigned'
   run: echo This event is a pull request that had an assignee removed.

上下文和表达式详细信息请参考:contexts-and-expression


结语

最后给个自己写的示例,仅供参考:

name: GitHub Actions CI
on: [push]
jobs:
  build-test-deploy:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [8.x, 10.x, 12.x]
    steps:
    - uses: actions/checkout@v1
    - name: install linux packages
      run:  sudo apt-get install -y--no-install-recommends libevent-dev
    - name: install memcached
      if: success()
      run: |
        wget -O memcached.tar.gz http://memcached.org/files/memcached-1.5.20.tar.gz
        tar -zxvf memcached.tar.gz
        cd memcached-1.5.20
        ./configure && make && sudo make install
        memcached -d
    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v1
      if: success()
      with:
        node-version: ${{ matrix.node-version }}
    - name: npm install, build, and test
      env:
        CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
      if: success()
      run: |
        npm ci
        npm test
        npm run report-coverage


目录
相关文章
|
监控 安全 机器人
通过GitHub Actions给微信公众测试号和钉钉群定时推送消息(Python)
通过GitHub Actions给微信公众测试号和钉钉群定时推送消息(Python)
231 0
|
存储 Ubuntu 持续交付
GitHub Actions 指南(上)
GitHub Actions 指南
162 0
|
2月前
|
JavaScript API 开发工具
使用GitHub Actions自动发布electron多端安装程序
使用GitHub Actions自动发布electron多端安装程序
45 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`注解可指定特定环境下的配置生效,同时支持通过命令行参数或环境变量覆盖配置值,确保应用稳定性和可靠性。
65 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 项目的自动化流程。选择合适的工具可显著提高开发效率并确保高质量标准。
23 0
|
4月前
|
数据采集 JSON 小程序
零成本 API 服务搭建,用 GitHub Actions 自动爬取文章?
本着将成本降到最低,我目前做的应用或小程序都是单机的,也就是不用请求接口,只要一上架就没有任何支出。但是写死的数据毕竟有限,应用的内容单一无法紧跟时事热点,每次打开一个样,自然就没有留存。遇到有错字啥还要更新版本,那有没有方法既能丰富应用内容,又不用增加成本呢?
34 0