github action自动部署构建入门(1)

简介: github action自动部署构建入门(1)

Github Action自动部署构建

文章目录

Github Action自动部署构建

1. 简介

2. 基础概念

3. workflow 文件

3.1 触发事件

3.2 job任务

3.3 运行主机环境

3.4 运行步骤

3.5 引用action

3.6 显示workflow status

3.7 with传参

3.8 env环境变量

3.9 secrets引用

3.10 action/checkout检查

4. 获取token

5. 示例

5.1 一条命令的action

5.2 React 项目发布到 GitHub Pages

1. 简介

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


GitHub Actions 帮助您自动完成软件开发周期内的任务。 GitHub Actions 是事件驱动的,意味着您可以在指定事件发生后运行一系列命令。


工作流程是您添加到仓库的自动化过程。 工作流程由一项或多项作业组成,可以计划或由事件触发。 工作流程可用于在 GitHub 上构建、测试、打包、发布或部署项目。


GitHub 官方市场,我们除了自己编写action,也可以借用别人的。

1832b220aa754cd18c504acc7686a560.png

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


actions 也有版本的概念,下面都是合法的 action 引用,用的就是 Git 的指针概念,详见官方文档。

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

2. 基础概念

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

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

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

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

GitHub Ac­tions 为每个任务 (job) 都提供了一个虚拟机来执行,每台虚拟机都有相同的硬件资

  • 2-core CPU
  • 7 GB RAM 内存
  • 14 GB SSD 硬盘空间

使用限制:

每小时可以调用1000次 GitHub API 。

每个 job 最多可以执行6个小时。

免费版的用户最大支持20个 job 并发执行,macOS 最大只支持5个。

私有仓库每月累计使用时间为2000分钟,超过后$ 0.008/分钟,公共仓库则无限制。

操作系统方面可选择 Win­dows server、Linux、ma­cOS,并预装了大量软件包和工具。

虽然名称叫持续集成,但当所有任务终止和完成时,虚拟环境内的数据会随之清空,并不会持续。即每个新任务都是一个全新的虚拟环境。

3. workflow 文件

GitHub Ac­tions 的配置文件叫做 work­flow 文件(官方中文翻译为 “工作流程文件”),存放在代码仓库的.github/workflows 目录中。work­flow 文件采用 YAML 格式,文件名可以任意取,但是后缀名统一为.yml,比如 p3terx.yml。一个库可以有多个 work­flow 文件,GitHub 只要发现.github/workflows 目录里面有.yml 文件,就会按照文件中所指定的触发条件在符合条件时自动运行该文件中的工作流程。在 Ac­tions 页面可以看到很多种语言的 work­flow 文件的模版,可以用于简单的构建与测试。

1832b220aa754cd18c504acc7686a560.png

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

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

3.1 触发事件

#push事件触发 workflow。
on: push
#on字段也可以是事件的数组。`push`事件或`pull_request`事件都可以触发 `workflow`。
on: [push, pull_request]
#只有`master`分支发生`push`事件时,才会触发 workflow
on:
  push:
    branches:    
      - master
#push tag 时触发
on:
  push:
    tags:
    - 'v*'
#发布 re­lease 触发
on:
  release:
    types: [published]
定时触发
  on:
  schedule:
    - cron:  '0 * * * *'

3.2 job任务

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

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

#job_id分别是my_first_job和my_second_job
jobs:
  my_first_job:
    name: My first job
  my_second_job:
    name: My second job
#`needs`字段指定当前任务的依赖关系,即运行顺序。`job1`必须先于job2完成,而job3等待`job1`和`job2`的完成才能运行
#因此,这个 workflow 的运行顺序依次为:`job1、job2、job3`。
jobs:
  job1:
  job2:
    needs: job1
  job3:
    needs: [job1, job2]

3.3 运行主机环境

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

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

3.4 运行步骤

#`steps`字段指定每个 `Job` 的运行步骤,可以包含一个或多个步骤。每个步骤都可以指定以下三个字段。
jobs.<job_id>.steps.name:步骤名称。
jobs.<job_id>.steps.run:该步骤运行的命令或者 action。
jobs.<job_id>.steps.env:该步骤所需的环境变量。
steps:
 - uses: actions/setup-node@74bc508 # Reference a specific commit
 - uses: actions/setup-node@v1      # Reference the major version of a release
 - uses: actions/setup-node@v1.2    # Reference a minor version of a release
 - uses: actions/setup-node@master  # Reference a branch

示例:

jobs:
    build:
      # Job name is Greeting
      name: Greeting
      # This job runs on Linux
      runs-on: ubuntu-latest
      steps:
        # This step uses GitHub's hello-world-javascript-action: https://github.com/actions/hello-world-javascript-action
        - name: Hello world
          uses: actions/hello-world-javascript-action@v1
          with:
            who-to-greet: 'Mona the Octocat'
          id: hello
        # This step prints an output (time) from the previous step's action.
        - name: Echo the greeting's time
          run: echo 'The time was ${{ steps.hello.outputs.time }}.'

3.5 引用action

#public repo
{owner}/{repo}@{ref} or {owner}/{repo}/{path}@{ref}. 
#same repo
  {owner}/{repo}@{ref} or ./path/to/dir
   |-- hello-world (repository)
   |   |__ .github
   |       └── workflows
   |           └── my-first-workflow.yml
   |       └── actions
   |           |__ hello-world-action
   |               └── action.yml
   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
#docker container
docker://{image}:{tag}
示例:
  jobs:
  my_first_job:
    steps:
      - name: My first step
        uses: docker://gcr.io/cloud-builders/gradle
      - name: Install Dependencies
        run: npm install
        shell: bash

3.6 显示workflow status

![](https://github.com/actions/hello-world/workflows/Greet Everyone/badge.svg)
相关文章
|
2月前
|
对象存储
一个通过 GitHub Action 将 GitHub 仓库与阿里云 OSS 完全同步的脚本
一种将 GitHub 仓库完全同步到阿里云 OSS 的方法。
|
4月前
|
安全 网络安全
GitHub星标4000!清华大牛的CTF竞赛入门指南,真的太香了!
想进入网络安全行业、实现从学校到职场的跨越,参加CTF竞赛是很好的成长途径。 通俗而言,CTF是模拟“黑客”所使用的技术、工具、方法等手段发展出来的网络安全竞赛,有了手段之后需要的就是经验与黑客感(HackorFeel)。 CTF赛题涉及的领域很广,市面上也早有在知识广度上均有所覆盖的CTF书籍,但没有深入单一领域的内容,尤其是Pwn方向的。 Pwn是网络安全攻防最有魅力的部分,对于原教旨攻防人士来说,Pwm才是原汁原味的技术体现。二进制Pwn一直是CTF比赛的热点和难点。
|
4月前
|
数据采集 数据可视化 算法
GitHub星标68K!Python数据分析入门手册带你从数据获取到可视化
Python作为一门优秀的编程语言,近年来受到很多编程爱好者的青睐。一是因为Python本身具有简捷优美、易学易用的特点;二是由于互联网的飞速发展,我们正迎来大数据的时代,而Python 无论是在数据的采集与处理方面,还是在数据分析与可视化方面都有独特的优势。我们可以利用 Python 便捷地开展与数据相关的项目,以很低的学习成本快速完成项目的研究。
|
4月前
|
数据采集 数据可视化 算法
GitHub星标68K!Python数据分析入门手册带你从数据获取到可视化
Python作为一门优秀的编程语言,近年来受到很多编程爱好者的青睐。一是因为Python本身具有简捷优美、易学易用的特点;二是由于互联网的飞速发展,我们正迎来大数据的时代,而Python 无论是在数据的采集与处理方面,还是在数据分析与可视化方面都有独特的优势。我们可以利用 Python 便捷地开展与数据相关的项目,以很低的学习成本快速完成项目的研究。 今天给小伙伴们分享的这份Python数据分析入门手册本着实用性的目的,着眼于整个数据分析的流程,介绍了从数据采集到可视化的大致流程。
|
4月前
|
程序员 开发工具 git
Github入门10问,收藏~
Github入门10问,收藏~
|
4月前
|
Linux C++ Docker
【Azure Developer】在Github Action中使用Azure/functions-container-action@v1配置Function App并成功部署Function Image
【Azure Developer】在Github Action中使用Azure/functions-container-action@v1配置Function App并成功部署Function Image
|
4月前
|
数据安全/隐私保护
【Azure Developer】Github Action使用Azure/login@v1插件登录遇见错误的替代方案
【Azure Developer】Github Action使用Azure/login@v1插件登录遇见错误的替代方案
|
4月前
|
存储
【Azure Developer】Github Action部署资源(ARM模板)到Azure中国区时,遇见登录问题的解决办法
【Azure Developer】Github Action部署资源(ARM模板)到Azure中国区时,遇见登录问题的解决办法
|
4月前
|
Java 网络安全 开发工具
新手入门Java。如何下载Eclipse、写出最基本的“Hello word”以及如何连接github并且上传项目。
新手入门Java。如何下载Eclipse、写出最基本的“Hello word”以及如何连接github并且上传项目。
62 0
|
6月前
|
程序员 Python
GitHub爆赞!最适合新手入门的教程——笨方法学Python 3
“Python 是一门既容易上手又强大的编程语言。”这句话本身并无大碍,但需要注意的是,正因为它既好学又好用,所以很多 Python 程序员只用到了其强大功能的一小部分。 今天给小伙伴们分享的这份手册以习题的方式引导读者一步一步学习编程,从简单的打印一直讲到完整项目的实现。