登陆

GitHub Actions 入门教程

admin 2019-10-31 243人围观 ,发现0个评论

GitHub Actions 是 GitHub 的继续集成服务,于2018年10月 推出

这些天,我一直在试用,觉得它十分强壮,有构思,比Travis CI 玩法更多。

本文是一个简略教程,演示怎么运用 GitHub Actions 主动发布一个 React 运用到GitHub Pages。

一、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..

指定触发事情时,能够限制分支或标签。

on:
push:
branches:
- master

上面代码指定,只要 master 分支发作 push 事情时,才会触发 workflow。

(4) jobs..name

workflow 文件的主体是 jobs 字段,表明要履行的一项或多项使命。

jobs 字段里边,需求写出每一项使命的 job_id ,详细称号自定义。 job_id 里边的 name 字段是使命的阐明。

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

上面代码的 jobs 字段包含两项使命, job_id 分别是 my_first_job 和 my_second_job 。

(5) jobs..needs

needs 字段指定当时使命的依靠联系,即运转次序。

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

上面代码中, job1 有必要先于 job2 完结,而 job3 等候 job1 和 job2 的完结才干运转。因而,这个 workflow 的运转次序顺次为: job1 、 job2 、 job3 。

(6) jobs..runs-on

runs-on 字段指定运转所需求的虚拟机环境。它是必填字段。现在可用的虚拟机如下。

  • ubuntu-latest , ubuntu-18.04 或 ubuntu-16.04
  • windows-latest , windows-2019 或 windows-2016
  • macOS-latest 或 macOS-10.14

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

runs-on: ubuntu-18.0GitHub Actions 入门教程4

(7) jobGitHub Actions 入门教程s..steps

steps 字段指定每个 Job 的运转过程,能够包含一个或多个过程。每个过程都能够指定以下三个字段。

jobs..steps.name
jobs..steps.run
jobsGitHub Actions 入门教程..steps.env

下面是一个完好的 workflow 文件的典范。

name: Greeting from Mona
on: push
jobs:
my-job:
name: My Job
runs-on: ubuntu-latest
steps:
- name: Print a greeting
env:
MY_VAR: Hi there! My name is
FIRST_NAME: Mona
MIDDLE_NAME: The
LAST_NAME: Octocat
run: |
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-latest
steps:
- name: Checkout
uses: actions/checkout@master
- name: Build and Deploy
uses:GitHub Actions 入门教程 JamesIves/github-pages-deploy-action@master
env:
ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }}
BRANCH: gh-pages
FOLDER: build
BUILD_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 都会主动运转,将构建产品发布到网页。

请关注微信公众号
微信二维码
不容错过
Powered By Z-BlogPHP