https://jiangren.com.au/blog/github-actions

一、GitHub Actions 是什么?

大家知道,持续集成由很多操作组成,比如抓取代码、运行测试、登录远程服务器,发布到第三方服务等等。GitHub 把这些操作就称为 actions。

很多操作在不同项目里面是类似的,完全可以共享。GitHub 注意到了这一点,想出了一个很妙的点子,允许开发者把每个操作写成独立的脚本文件,存放到代码仓库,使得其他开发者可以引用。

如果你需要某个 action,不必自己写复杂的脚本,直接引用他人写好的 action 即可,整个持续集成过程,就变成了一个 actions 的组合。这就是 GitHub Actions 最特别的地方。

GitHub 做了一个官方市场,可以搜索到他人提交的 actions。另外,还有一个 awesome actions 的仓库,也可以找到不少 action。

上面说了,每个 action 就是一个独立脚本,因此可以做成代码仓库,使用userName/repoName的语法引用 action。比如,actions/setup-node就表示github.com/actions/setup-node这个仓库,它代表一个 action,作用是安装 Node.js。事实上,GitHub 官方的 actions 都放在 github.com/actions 里面。

既然 actions 是代码仓库,当然就有版本的概念,用户可以引用某个具体版本的 action。下面都是合法的 action 引用,用的就是 Git 的指针概念,详见官方文档。

actions/setup-node@74bc508 # 指向一个 commit
actions/setup-node@v1.0    # 指向一个标签
actions/setup-node@master  # 指向一个分支

二、基本概念

GitHub Actions 有一些自己的术语。

(1)workflow (工作流程):持续集成一次运行的过程,就是一个 workflow。

(2)job (任务):一个 workflow 由一个或多个 jobs 构成,含义是一次持续集成的运行,可以完成多个任务。

(3)step(步骤):每个 job 由多个 step 构成,一步步完成。

(4)action (动作):每个 step 可以依次执行一个或多个命令(action)。

三、workflow 文件

GitHub Actions 的配置文件叫做 workflow 文件,存放在代码仓库的.github/workflows目录。

workflow 文件采用 YAML 格式,文件名可以任意取,但是后缀名统一为.yml,比如foo.yml。一个库可以有多个 workflow 文件。GitHub 只要发现.github/workflows目录里面有.yml文件,就会自动运行该文件。

workflow 文件的配置字段非常多,详见官方文档。下面是一些基本字段。

(1)name

name字段是 workflow 的名称。如果省略该字段,默认为当前 workflow 的文件名。

name: GitHub Actions Demo

(2)on

on字段指定触发 workflow 的条件,通常是某些事件。

on: push

上面代码指定,push事件触发 workflow。

on字段也可以是事件的数组。

on: [push, pull_request]

上面代码指定,push事件或pull_request事件都可以触发 workflow。

完整的事件列表,请查看官方文档。除了代码库事件,GitHub Actions 也支持外部事件触发,或者定时运行。

(3)on.<push|pull_request>.<tags|branches>

指定触发事件时,可以限定分支或标签。

on:push:branches:    - master

上面代码指定,只有master分支发生push事件时,才会触发 workflow。

(4)jobs.<job_id>.name

workflow 文件的主体是jobs字段,表示要执行的一项或多项任务。

jobs字段里面,需要写出每一项任务的job_id,具体名称自定义。job_id里面的name字段是任务的说明。

jobs:my_first_job:name: My first jobmy_second_job:name: My second job

上面代码的jobs字段包含两项任务,job_id分别是my_first_jobmy_second_job

(5)jobs.<job_id>.needs

needs字段指定当前任务的依赖关系,即运行顺序。

jobs:job1:job2:needs: job1job3:needs: [job1, job2]

上面代码中,job1必须先于job2完成,而job3等待job1job2的完成才能运行。因此,这个 workflow 的运行顺序依次为:job1job2job3

(6)jobs.<job_id>.runs-on

runs-on字段指定运行所需要的虚拟机环境。它是必填字段。目前可用的虚拟机如下。

  • ubuntu-latestubuntu-18.04ubuntu-16.04
  • windows-latestwindows-2019windows-2016
  • macOS-latestmacOS-10.14

下面代码指定虚拟机环境为ubuntu-18.04

runs-on: ubuntu-18.04

(7)jobs.<job_id>.steps

steps字段指定每个 Job 的运行步骤,可以包含一个或多个步骤。每个步骤都可以指定以下三个字段。

  • jobs.<job_id>.steps.name:步骤名称。
  • jobs.<job_id>.steps.run:该步骤运行的命令或者 action。
  • jobs.<job_id>.steps.env:该步骤所需的环境变量。

下面是一个完整的 workflow 文件的范例。

name: Greeting from Mona
on: pushjobs:my-job:name: My Jobruns-on: ubuntu-lateststeps:- name: Print a greetingenv:MY_VAR: Hi there! My name isFIRST_NAME: MonaMIDDLE_NAME: TheLAST_NAME: Octocatrun: |echo $MY_VAR $FIRST_NAME $MIDDLE_NAME $LAST_NAME.

上面代码中,steps字段只包括一个步骤。该步骤先注入四个环境变量,然后执行一条 Bash 命令。

四、实例:React 项目发布到 GitHub Pages

下面是一个实例,通过 GitHub Actions 构建一个 React 项目,并发布到 GitHub Pages。最终代码都在这个仓库里面,发布后的参考网址为ruanyf.github.io/github-actions-demo。

第一步,GitHub Actions 目前还处在测试阶段,需要到这个网址申请测试资格。申请以后,可能需要几天才能通过。据说,2019年11月就会放开。

获得资格后,仓库顶部的菜单会出现Actions一项。

第二步,这个示例需要将构建成果发到 GitHub 仓库,因此需要 GitHub 密钥。按照官方文档,生成一个密钥。然后,将这个密钥储存到当前仓库的Settings/Secrets里面。

上图是储存秘密的环境变量的地方。环境变量的名字可以随便起,这里用的是ACCESS_TOKEN。如果你不用这个名字,后面脚本里的变量名也要跟着改。

第三步,本地计算机使用create-react-app,生成一个标准的 React 应用。

$ npx create-react-app github-actions-demo
$ cd github-actions-demo

第四步,在这个仓库的.github/workflows目录,生成一个 workflow 文件,名字可以随便取,这个示例是ci.yml

我们选用一个别人已经写好的 action:JamesIves/github-pages-deploy-action,它提供了 workflow 的范例文件,直接拷贝过来就行了(查看源码)。

name: GitHub Actions Build and Deploy Demo
on:push:branches:- master
jobs:build-and-deploy:runs-on: ubuntu-lateststeps:- name: Checkoutuses: actions/checkout@master- name: Build and Deployuses: JamesIves/github-pages-deploy-action@masterenv:ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }}BRANCH: gh-pagesFOLDER: buildBUILD_SCRIPT: npm install && npm run build

上面这个 workflow 文件的要点如下。

  1. 整个流程在master分支发生push事件时触发。
  2. 只有一个job,运行在虚拟机环境ubuntu-latest
  3. 第一步是获取源码,使用的 action 是actions/checkout
  4. 第二步是构建和部署,使用的 action 是JamesIves/github-pages-deploy-action
  5. 第二步需要四个环境变量,分别为 GitHub 密钥、发布分支、构建成果所在目录、构建脚本。其中,只有 GitHub 密钥是秘密变量,需要写在双括号里面,其他三个都可以直接写在文件里。

第五步,保存上面的文件后,将整个仓库推送到 GitHub。

GitHub 发现了 workflow 文件以后,就会自动运行。你可以在网站上实时查看运行日志,日志默认保存30天。

等到 workflow 运行结束,访问 GitHub Page,会看到构建成果已经发上网了。

以后,每次修改后推送源码,GitHub Actions 都会自动运行,将构建产物发布到网页。

GitHub Actions 入门教程相关推荐

  1. GitHub Actions入门教程:自动化部署静态博客

    前天,我使用 GitHub Actions 实现了静态博客的自动化部署,觉得它非常强大,只要你提交到 GitHub,后面的部署完全由 GitHub 自动完成. 这里提的静态博客,就是通过生成工具(eg ...

  2. GitHub Actions入门教程

    GitHub Actions入门教程 GitHub Marketplace · Actions to improve your workflow · GitHub 概述 GitHub Actions ...

  3. 专为设计师而写的GitHub快速入门教程

    在互联网行业工作的想必都多多少少听说过GitHub的大名,除了是最大的开源项目托管平台,许多企业也都是用GitHub来协同开发工作,当然我们彩程也是其中之一.笔者最初决定学习Git也是因为在团队内部设 ...

  4. clone git 修改保存路径_Git和Github详细入门教程(别再跟我说你不会Git和Github)

    前言:成功不是将来才有的,而是从决定去做的那一刻起,持续累积而成.你好,我是梦阳辰,快和我一起搞定Git和Github吧. 文章目录 01.Git概述 02.Git的本地仓库操作 Git的版本回退操作 ...

  5. GitHub简单入门教程

    一.前言 GitHub 使用 git 分布式版本控制系统,可以托管各种git库,并提供一个web界面对git库进行管理.为一个项目贡献代码非常简单:首先点击项目站点的"fork"按 ...

  6. Github Pages入门教程

    一.什么是 GitHub Pages 官方给出的说明:您和您的项目的网站,直接从您的GitHub存储库托管.只需编辑,推送,您的更改就会生效. 二.为什么使用Github Pages 搭建简单而且免费 ...

  7. Hexo:语雀云端写作,Github Actions持续集成

    本文章为原创内容,只发布于我的私人博客.我的 Django 博客 和 本博客 ,转载请注明,谢谢 本文已被 yuque-hexo 的开发作者列为最佳实践典型 使用 Hexo 静态博客网站发表文章,需要 ...

  8. 工具 | 使用 arXiv API + Github Actions 实现每天自动获取arXiv论文摘要

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨Realcat 来源丨计算机视觉SLAM Hi大家好,我是Realcat,最近周末爆肝搞了个自动 ...

  9. Hexo 优化配置汇总【GitHub Actions 看板娘 数学公式 标签云 README 转义问题】

    服务器 快到期了,这几天迁移到 GitHub 上,用免费的 GitHub Pages 重新部署下 杰森的博客 .以下样式及优化配置基于 Hexo,主题 Next 文章目录 GitHub Actions ...

最新文章

  1. R语言vtreat包自动处理dataframe的缺失值、使用分组的中位数来标准化数据列中每个数据的值(和中位数表连接并基于中位数进行数据标化)、计算数据列的中位数或者均值并进行数据标准化
  2. Spring MVC拦截器
  3. Elasticsearch官档翻译——2 2 在Linux上启动服务
  4. MySql级联删除和更新
  5. 使用delphi 开发多层应用(十)安全访问服务器
  6. 计算机基础知识离线作业答案,浙大远程教育计算机离线作业1.计算机基础知识题...
  7. 【测试方法篇】效率测试
  8. jpa级联添加_JPA中的一对多双向关联与级联操作
  9. c语言程序排奇数,十个数奇数升序排列偶数降序排列,用C语言程序表示
  10. Android底层控制系统设置的命令集合
  11. Win XP 精简版安装SQL Server
  12. 职工考勤管理信息系统数据库课设_基于数据库的员工考勤系统设计与实现
  13. 【人性】豆豆三部曲之《背叛》、《遥远的救世主》和《天幕红尘》
  14. win10进程太多怎么优化_win10全能优化工具箱
  15. 以一例教你找到【无水印】【高清】【百度图片】的url
  16. H5 实现电子签名功能-VUE--12301合同签署类似功能
  17. 投稿Springer旗下Natural Hazard的时间记载
  18. 新、改、扩建项目“三同时”安全管理制度
  19. Chrome-谷歌浏览器多开教程
  20. 【收藏】计算机专业常用学习网站

热门文章

  1. v.douyin.com/xxx抖音网址官方生成制作抖音缩短口令网址php接口方法
  2. 武林传奇之七剑下天山java游戏开发商_拓展训练项目之七剑下天山
  3. 怎么用matlab进行频域分析法,如何用Matlab进行频域分析?
  4. 【django】class='btn' btn按钮样式
  5. leetcode解题思路分析(一百三十二)1111 - 1117 题
  6. stm32如何在官网下载标准函数库
  7. Java+控制台 商城销售系统
  8. 百度地图api周边搜索功能,用单选按钮切换搜索类型
  9. c#写服务程序怎么判断文件夹内子文件夹里文件的变化
  10. android网络诊断服务(ping网络的实现,判断网络是否可用)