GitHub Actions入门

Wesley13
• 阅读 685

一、一些概念

持续集成(Continuous integration)

频繁地向一个共享仓库提交少量代码变更的软件开发实践。 使用 GitHub Actions,可以创建自定义的 CI 工作流,以自动构建并测试你的代码。 从你的仓库中,你可以查看代码变更的状态和工作流中每个操作的详细日志。 CI 通过提供代码变更的及时反馈来更快地检测并解决 bugs,从而节省开发人员的时间。

持续部署(Continuous deployment)

持续部署建立在持续集成的基础上。 当提交新代码和通过你的 CI 测试时,代码将自动部署到生产环境中。 使用 GitHub Actions,可以创建自定义的 CD 工作流,以便从你的仓库自动部署代码到任何云、自托管服务或平台。 CD 通过自动化部署过程节省开发人员的时间,并更快地向你的客户部署经过测试的、稳定的代码变更。

GitHub Actions 的一些术语

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

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

(3)step(步骤):每个 job 由多个 step 构成,一步步完成。 一个工作中的每个步骤都在相同的虚拟环境中执行,从而允许使用文件系统共享信息。

(4)action (动作):每个 step 可以依次执行一个或多个命令(action)。 你可以创建自己的action、使用 GitHub 社区共享的action。

二、workflow文件

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

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

先贴一个完整的示例(没啥实际作用):

name: CI

on: 
  push:
    branches: 
      - master
      - release/*
  
jobs:
  build:
    name: My Test
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
      
    - name: Run a one-line script
      run: echo Hello, world!
      
    - name: Run a multi-line script
      run: |
        echo Add other actions to build,
        echo test, and deploy your project.
        
    - name: Setup Node
      uses: actions/setup-node@v1
      with:
        node-version: '10.x'

1. name

name 定义工作流的名称,对该工作流要完成的任务进行简单的描述.

2. on

on 设置工作流的触发条件,一般指定为 push,表示在每次 git push 操作后自动触发该项目的工作流。

on: [push]

可以让工作流在 master 和 release 分支的 push 事件上运行:

on:
  push:
    branches:
    - master
    - release/*

或只在 master 分支的 pull_request 事件上运行:

on:
  pull_request:
    branches:
    - master

也可以设置定时运行计划,在周一到周五每天的 02:00 运行:

on:
  schedule:
  - cron: 0 2 * * 1-5

3. runs-on

runs-on 指定运行所在操作系统的类型。GitHub Actions 提供 Linux、Windows 和 macOS 来构建运行。 

jobs:
  build:

    runs-on: ubuntu-latest # 表示工作流将在 ubuntu 的最新版本上运行

可用的虚拟机类型如下:

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

4. checkout

这是github官方的一个action,用于clone该仓库的源码到工作流中。

- uses: actions/checkout@v1

在本例中使用 v1 可以确保你使用的是签出操作的一个稳定版本。

要浅层克隆你的仓库或只复制你仓库的最新版本,使用下面的语法设置提取深度(fetch-depth):

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

5. run

也是一种acton,即在终端中执行的 shell 命令。

    - name: make # 定义命令的名称
      run: make # 使用 Makefile 来构建项目

    - name: dependencies
      run: |
        sudo apt install mysql-server mysql-client
        sudo apt install libmysqlclient-dev

等各种各样的命令,docker命令也可。

workflow 文件的配置字段非常多,详见官方文档

三、应用实例

使用Nodejs + Github Actions实现一个Weather-Bot,能够自动将当日天气发送到邮箱。

项目地址

 参考链接:

1. mistydrew's Blog-GitHub Action工作流入门

2. GitHub Actions官方文档

3. miyouluo-50行实现定时发送天气预报提醒邮件

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
待兔 待兔
2个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Tommy744 Tommy744
3年前
DevOps简介
DevOps是一个完整的面向IT运维的工作流,以IT自动化以及持续集成(CI)、持续部署(CD)为基础,来优化程式开发、测试、系统运维等所有环节。DevOps的概念DevOps一词的来自于Development和Operations的组合,突出重视软件开发人员和运维人员的沟通合作,通过自动化流程来使得软件构建、测试、发布更加快捷、频繁和可靠。
Karen110 Karen110
3年前
​一篇文章总结一下Python库中关于时间的常见操作
前言本次来总结一下关于Python时间的相关操作,有一个有趣的问题。如果你的业务用不到时间相关的操作,你的业务基本上会一直用不到。但是如果你的业务一旦用到了时间操作,你就会发现,淦,到处都是时间操作。。。所以思来想去,还是总结一下吧,本次会采用类型注解方式。time包importtime时间戳从1970年1月1日00:00:00标准时区诞生到现在
Stella981 Stella981
2年前
DevOps简介
DevOps是一个完整的面向IT运维的工作流,以IT自动化以及持续集成(CI)、持续部署(CD)为基础,来优化程式开发、测试、系统运维等所有环节。DevOps的概念DevOps一词的来自于Development和Operations的组合,突出重视软件开发人员和运维人员的沟通合作,通过自动化流程来使得软件构建、测试、发布更加快捷、频繁和
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Stella981 Stella981
2年前
DevOps简单介绍
jenkins作为测试环境代码发布工具,sonar作为静态代码检查工具,idea作为开发工具,jira作为缺陷管理平台,upstream作为codereview工具(正在研究)。DevOps最近比较火热,但是核心貌似都是jenkinsDevOps是一个完整的面向IT运维的工作流,以IT自动化以及持续集成(CI)、持续部署(CD)为基础,来优化程式
Stella981 Stella981
2年前
Jenkins安装使用教程
一、说明持续集成:Continuousintegration,CI。包括两层含义,一是指项目的每个开发人员每天都向项目代码仓库要通过git等提交他们的代码,二是指在代码提交后实现自动化的构建、部署、测试确保提交的代码没有错误或及早发现提交代码中的错误。Jenkins是一个使用java开发、开源、免费、强大的web式持续集成应用程序;常用于