资讯

精准传达 • 有效沟通

从品牌到营销,从策略到执行的一站式服务

首页   |   资讯>文库 > 内容浏览 > Github Actions 入门指南及实践

Github Actions 入门指南及实践

来源:网站建设 | 人气:3802 次   Time  : 12-05

作者:山月行来源:全栈成长之路

自从 github 提供了 github actions 后,个人或者依赖于 github 的公司可以考虑把持续集成方案迁到 github actions。

github 会提供一个以下配置的服务器做为 runner,可以说相当良心了。

  • 2-core CPU
  • 7 GB of RAM memory
  • 14 GB of SSD disk space

另外如果你有网络时延的需求,(比如推送及拉取镜像时产生的网络时延),你也可以自建 runner。

本文将介绍 github actions 的用法,以及如何使用它自动部署个人博客或者前端应用

快速开始

在 github 上进入个人仓库,找到 Actions 的标签页

Actions

如果你是一个前端项目,可以使用 Node.js 的模板,点击 Set up this workflow

Actions Setup

此时生成了一个文件 .github/workflows/nodejs.yaml,修改内容如下

  1. name: Git Action Test 
  2.  
  3. on: [push] 
  4.  
  5. jobs: 
  6.   build: 
  7.  
  8.     runs-on: ubuntu-latest 
  9.  
  10.     steps: 
  11.     - uses: actions/checkout@v1 
  12.     - name: Use Node.js 10.x 
  13.       uses: actions/setup-node@v1 
  14.       with
  15.         node-version: 10.x 
  16.     - name: npm install, build 
  17.       run: | 
  18.         npm install 
  19.         npm run build --if-present 
  20.       env: 
  21.         CI: true 

执行 git push 操作,此时可以在 github 的 Actions 标签页看到执行结果

Actions Start

术语

runner: github 分配的用来执行 CI/CD 的构建服务器 (也可以自建 runner)

workflow: CI/CD 的工作流

job: 任务,比如构建,测试和部署。每个 workflow 由多个 job 组成

step: 每个 job 由多个 step 组成

配置

参考官方文档: Workflow syntax for GitHub Actions[1]

以下是常用到的配置

on

该 CI/CD 触发时的事件。如果需要上传代码自动部署的功能时,应该选择 on: push

  1. on: push 

更多事件可以参考官方文档 Events that trigger workflows[2]

另外,我们可以利用 issues 事件做很多事情,如邮件通知之类

如果是 Issue 类博客,则可以通过监听 issues.opened 事件,调用 github api,自动生成网址博客

  1. on
  2.   issues: 
  3.     types: [opened, edited, milestoned] 

jobs

一个 CI/CD 的工作流有许多 jobs 组成,比如最典型的 job 是 lint,test,build 或者 deploy。

  1. jobs: 
  2.   test: 
  3.   build: 
  4.   deploy: 

所有的 job 都是并行的,但往往会有依赖关系:「你总得通过测试了,才能再去部署吧」

jobs.<job_id>.needs

needs 确定 job 的依赖关系

  1. jobs: 
  2.   test: 
  3.   deploy: 
  4.     needs: test 

jobs.<job_id>.runs-on

当你使用 github actions 时,github 会十分大方的给你分配一个配置还不错的服务器作为构建服务器,用来跑你的 workflow

  • 2-core CPU
  • 7 GB of RAM memory
  • 14 GB of SSD disk space

恩,比我自己的服务器要强

使用 runs-on 指定服务器系统,用的最多的应该就是 ubuntu-latest 了

  1. runs-on: ubuntu-latest 
  2.  
  3. runs-on: windows-latest 

jobs.<job_id>.steps

即某个任务的一系列动作,如部署一个前端需要安装依赖,编译代码等等

jobs.<job_id>.steps.name

为 step 指定一个名称,将会在 github action 的控制台中显示

jobs.<job_id>.steps.run

该 step 需要在 shell 中执行的命令

  1. # 单行 
  2. name: Install Dependencies 
  3.   run: npm install 
  4.  
  5. # 多行 
  6. name: Install and Build 
  7.   run: | 
  8.     npm install 
  9.     npm run build 

jobs.<job_id>.steps.uses

选择一个 action,可以理解为若干 steps.run,有利于代码复用。这也是 github action 最主要的功能。

如果你想找一个好用的 github action,可以在 github marketplace 浏览并检索

这是一个在当前操作系统中安装 node:10 的 action 示例

  1. name: use Node.js 10.x 
  2.   uses: actions/setup-node@v1 
  3.   with
  4.     node-version: 10.x 

当然,这里怎么能少得了 docker 的身影呢,在 actions 中也可以使用 docker。如果对 docker 不太了解,可以看我的文章: docker 简易入门[3]

以下是 npm install 的一个示例

  1. jobs: 
  2.   build: 
  3.     steps: 
  4.       - name: Install 
  5.         uses: docker://node:alpine 
  6.         with
  7.           args: npm install 

secret and context

如何在 github action 上访问敏感数据?如使用 ssh 登录时如何维护密码。

我们可以在 github repo 上依次点击 Settings -> Secrets 设置 secret

Actions Secrect

  1. name: setup aliyun oss 
  2.   uses: manyuanrong/setup-ossutil@master 
  3.   with
  4.     endpoint: oss-cn-beijing.aliyuncs.com 
  5.     access-key-id: ${{ secrets.OSS_KEY_ID }} 
  6.     access-key-secret: ${{ secrets.OSS_KEY_SECRET }} 

这里的 secret 就是一种 context,描述 CI/CD 一个 workflow 中的上下文信息,使用 ${{ expression }} 语法表示。除了 secret,还有

  • github: workflow 的信息,如 github.sha 可以获取当前的 commit SHA,我们可以利用它为 sentry 或者 docker image 打入版本号
  • env: 环境变量
  • job: 当前执行 job 的信息,如 job.status 表示当前 job 的执行状态
  • matrix: 描述一些构建信息,如 node 以及 os 版本号

更多 context 信息可以参考官方文档 Contexts and expression syntax for GitHub Actions[4]

实践一:博客自动部署

我的博客目前托管在阿里云 OSS 上,以下 action.yaml 描述了自动部署的流程。可以参考我的配置 shfshanyue/blog[5]

「关于托管在阿里云 OSS 的细节,可以参考 在阿里云 OSS 托管你的前端应用[6]」

  1. name: deploy to aliyun oss 
  2.  
  3. on: [push] 
  4.  
  5. jobs: 
  6.   build: 
  7.  
  8.     runs-on: ubuntu-latest 
  9.  
  10.     steps: 
  11.     # 切代码到 runner 
  12.     - uses: actions/checkout@v1 
  13.       with
  14.         submodules: true 
  15. 来源:

—— Webmeng微信公众号 ——

上一条———————

没有了

下一条———————

2020-12-05 09:13:52 ——— Github Actions 入门指南及实践
2019-07-29 06:17:44 ——— 有15种语言
2019-07-29 05:45:18 ——— 自由编辑模板
2019-07-25 09:00:04 ——— 特价活动 | 微信公众微网站建设、微店装修
2019-07-23 02:48:25 ——— phpStudy 2018版本下载及更新日志
2019-06-29 04:04:37 ——— WebMeng需要这样的电商软件代理合作伙伴
2019-05-30 02:40:10 ——— WebmengWeb V10.3.1 用户体验与使用推广
2019-05-09 11:47:32 ——— 搜寻云计算 全球多个地区免费空间测试开启!
2019-05-07 01:54:40 ——— 网红经济进化史 流量之后出路在哪?
2019-05-07 01:44:57 ——— 【创业论】30余位创始人的经验汇总,不创业绝对想象不到...
2019-03-21 02:59:55 ——— Webmeng升级|Webmeng V10.2.9 更...
2019-03-20 11:21:13 ——— 建立一个要素品牌需经历哪些阶段
2019-03-20 10:46:00 ——— Webmeng推荐网站内容定位重在关注这几个方面 ...
2019-03-16 03:23:21 ——— 升级 | 与世界同步:Webmeng V10.2 重大...
2019-02-21 07:41:05 ——— 今日话题丨《流浪地球》被打一星,豆瓣背锅冤不冤?
2019-02-21 07:26:06 ——— 网络话题|紫禁城夜游一票难求 打造文旅IP不能只靠故宫
2019-01-28 07:38:05 ——— 创梦科技2019春节Webmeng促销动动
2019-01-26 02:46:08 ——— 2019年网站设计趋势前瞻
2019-01-25 10:07:31 ——— 网络营销的发展前景怎么样?
2019-01-25 10:05:45 ——— 网络营销是什么?网络营销的优势有哪些?