GitHub Action入门简介

2023-11-20

1. What is GitHub Actions?

GItHub Actions是一个持续集成和持续交付的平台,能够让你自动化你的编译、测试和部署流程。

GitHub 提供 Linux、Windows 和 macOS 虚拟机来运行您的工作流程,或者您可以在自己的数据中心或云基础架构中托管自己的自托管运行器。

2. Github Actions 的组成?

整体流程:

在github repo中特定事件发生时,workflow会被触发。

一个workflow由若干个job组成,这些job可以顺序运行,也可以并行运行。

每个job运行在自己的虚拟机runner或者容器中。

每个job由若干个step组成,这些step可以是运行脚本或者 执行一个action。

action是可以复用的拓展,用来简化workflow 。

          --------- job1
         |
         |
workflow ---------- job2
  			 |               ------- step1
  			 |              |
  			  --------- job3 ------- step2 
  			  							|
  			  							 ------- step3
  • Workflows

Workflow是可配置的自动化进程,它会运行一个或多个Jobs。

Workflow通过yaml配置文件来定义

Worklofw的触发方式有两种:1.手动触发 2. 通过定义触发事件自动触发 3. 通过Post 一个Rest API请求。

一个repo可以有多个Workflow

可以在一个Workflow中引用另一个Workflow

  • Events

Events是一种能够触发Workflow运行的特定的活动,包括创建pull请求,开启一个issue或者进行一次commit

  • Jobs

Job是Step的集合,一个Job包含若干个Steps。

每个Steps可以是将被执行的Shell命令或脚本。

不同的Jobs可以在不同的虚拟环境runner上执行若干个命令或脚本。

但一个Job只能在相同的runner上执行workflow的一系列步骤,正因如此,一个Job中的若干个Steps可以共享数据。

Job之间可以配置依赖,默认情况下Jobs彼此之间没有依赖且并行执行。

在配置了依赖的情况下,一个Job需要等待它所依赖的Job运行完成后才能运行。

  • Acitons

Action是Github Acitons 平台自定义的应用,可以执行复杂但频繁重复的任务。

也就是说将重复使用的Workflow抽象成一个模块,方便重复使用,减少重复性代码。

  • Runners

Runner是在workflow被触发时用来运行workflow的服务器。

每个Runner每次只能运行一个Job

Github提供了Ubuntu Linux,Microsoft Windows, macO runner来运行workflows。

每个workflow在全新的初始化的虚拟机上执行。

如果有需要,还可以使用自己的服务器主机来运行workflow。自定义主机

Example:helloWorkflow.yaml

name: learn-github-actions
on: [push]
jobs:
  check-bats-version:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v2
        with:
          node-version: '14'
      - run: npm install -g bats
      - run: bats -v

name : Workflow的名字

on: 触发的Events,可以是一个Events数组

jobs :指定这个Workflow包含的Jobs

Check-bats-version:job的名字

runs-on:指定运行的Runner

steps:Job中包含的Steps

uses:使用某个action

run:执行某个shell命令或脚本

with:指定需要传入的参数

使用限制

如果使用Github提供的Runners,使用限制如下:

  • 工作流程运行时间 - 每个工作流程的运行时限为 72 小时。 如果工作流程运行时间达到此限制,其运行将被取消。
  • API 请求 - 在一个仓库的所有操作中,一个小时内最多可执行 1000 个 API 请求。 如果超出,额外的 API 调用将失败,这可能导致作业失败。

详细限制请查看:Usage limits, billing, and administration

如果使用自己的云服务器,使用限制如下:

  • 工作流程运行时间 - 每个工作流程的运行时限为 72 小时。 如果工作流程运行时间达到此限制,其运行将被取消。
  • 工作队列时间 :每个自己服务器上的Job最大可以排队24的消失。如果在此限制内还没有开始执行,那么这个Job就会终止,宣告执行失败。
  • API 请求 - 在一个仓库的所有操作中,一个小时内最多可执行 1000 个 API 请求。 如果超出,额外的 API 调用将失败,这可能导致作业失败。
  • Job matrix - 作业矩阵在每次工作流程运行时最多可生成 256 个作业。 此限制也适用于自托管运行器。
  • 工作流程运行队列 - 每个仓库在 10 秒的间隔内可排队的工作流程运行不超过 500 个。 如果工作流程运行达到此限制,该工作流程运行将会终止而无法完成。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GitHub Action入门简介 的相关文章

  • 从命名管道读取

    我必须实现一个 打印服务器 我有 1 个客户端文件和 1 个服务器文件 include
  • 在开始工作之前忘记在 GitHub 上进行 fork

    假设我将 C 公司的 X 项目存储库从 github 克隆到我的本地计算机 我在本地为自己创建一个分支 对其进行一些工作并在本地提交到我的分支 现在我想向 C 公司发出拉取请求 但我意识到我应该在 gitub 上进行分叉以创建我自己的项目
  • 不同GIT版本的GIT合并结果不同

    在不同的 GIT 版本上运行 merge 命令我们得到不同的结果 命令是 git merge no ff origin master codeline Results 版本2 1 4 gt 合并成功 版本1 7 1 gt 同一提交上的同一合
  • 将用户添加到组但运行“id”时未反映

    R 创建了一个名为 Staff 的组 我希望能够在不以 sudo 身份启动 R 的情况下更新软件包 所以我使用以下方法将自己添加到员工中 sudo usermod G adm dialout cdrom plugdev lpadmin ad
  • 访问 Linux 线程(pthreads)的本地堆栈

    我目前正在实现一个使用多线程但对总内存消耗有要求的应用程序 我希望有一个主线程执行 I O 并有几个工作线程执行计算 目前 我在主堆栈上有几个可供工作人员访问的数据结构 我使用 OpenMP 进行工作分配 由于主 工作者模式不能很好地与 O
  • 如何从脚本向 sudo 提供密码?

    请注意 这是在我的本地计算机上运行的来宾虚拟机 VBox 我不担心安全性 我正在编写一个将在 Linux Ubuntu VM 上执行的脚本myuser用户 该脚本将在下面创建一个非常大的目录树 etc myapp 目前我必须手动完成所有这些
  • 在 github 上查找强制推送的提交者

    在我们的项目 托管在 GitHub 上 中 每隔一段时间就会有人意外强制推送 master 没有人知道是否这样做 我想找出是谁干的 以及背后有什么样的错误配置的工具或坏习惯 那么问题来了 如何识别进行强制推送的用户呢 当我拉动时 我看到这样
  • 如何真正释放 Linux 中的大页面以供新进程使用?

    真的找不到太多关于此的信息 希望有人可以提供帮助 我正在假脱机使用 100GB java 堆作为大数据缓存 为了避免与文件系统缓存等内容发生冲突 并且因为它通常性能更好 我将其分配在大页面中 我保留了 51 200 x 2MB 大页面 一切
  • sed 仅最后一个匹配模式

    我想sed仅文本文件的最后一个匹配模式 输入文件 boy boy girl boy 输出文件 boy boy girl boys 一种方法是反转文件 仅替换第一个匹配项 然后再次反转 tac
  • 如何使用 Github Pages 分支正确提交到存储库中

    我有一个问题 情况基于gh pages https pages github com 我的项目使用预处理器和其他困难的人员 因此 我的项目结构如下所示 主分支 src node modules public js css etc index
  • 将新更新从原始 GitHub 存储库提取到分叉的 GitHub 存储库

    我在 GitHub 上分叉了某人的存储库 并希望使用原始存储库中的提交和更新来更新我的版本 这些是在我分叉我的副本后制作的 如何提取在源中所做的更改并将它们合并到我的存储库中 您必须将原始存储库 您分叉的存储库 添加为远程存储库 来自有关分
  • Alsa 带有来自调制解调器的 PCM 接口

    我有一个基于 imx28 CPU 的定制板 CPU 的串行端口连接到调制解调器的 PCM 输出 我必须为调制解调器的 PCM 接口开发一个驱动程序 使其成为 ALSA SoC 的一部分 您能指出内核树 中与我的设置重新组合的一些驱动程序吗
  • 我在哪里可以学习如何使 C++ 程序与操作系统 (Linux) 交互

    我是一个 C 初学者 我想创建与操作系统交互的小程序 使用 Kubuntu Linux 到目前为止 我还没有找到任何教程或手册来让 C 与操作系统交互 在 PHP 中 我可以使用命令 exec 或反引号运算符来启动通常在控制台中执行的命令
  • 使用 ssh 身份验证的 IntelliJ 设置存储库

    我正在尝试使用设置存储库Intellij 2017 1 中的功能 但我想使用 ssh url 作为存储库而不是 https 我不喜欢处理那些在第一次创建后无法复制的个人访问令牌 所以我尝试使用 ssh 但当我单击 覆盖本地 时 出现以下错误
  • xdotool 类型需要很长时间并导致整个桌面冻结

    我一直在使用xdotool type过去只能在快捷方式上输入耸肩xdotool type 这可行 但总是需要相当长的时间 并导致整个桌面冻结 完全冻结 而不仅仅是输入 几秒钟 不过并没有太打扰我 现在我需要一种方法来从文件中读取内容 对其进
  • 使用 MongoDB docker 镜像停止虚拟机而不丢失数据

    我已经在 AWS EC2 上的虚拟机中安装了官方的 MongoDB docker 映像 并且数据库上已经有数据 如果我停止虚拟机 以节省过夜费用 我会丢失数据库中包含的所有数据吗 在这些情况下我怎样才能让它持久 有多种选择可以实现此目的 但
  • ARM 系统调用的接口是什么?它在 Linux 内核中的何处定义?

    我读过有关 Linux 中的系统调用的内容 并且到处都给出了有关 x86 架构的描述 0x80中断和SYSENTER 但我无法追踪 ARM 架构中系统调用的文件和进程 任何人都可以帮忙吗 我知道的几个相关文件是 arch arm kerne
  • Docker DNS 设置

    我尝试使用自定义网络和 dos 设置创建 docker 容器 docker网络创建 driver bridge opt com docker network bridge enable ip masquerade true opt com
  • 在 Ubuntu 上纯粹通过 bash 脚本安装 mysql 5.7

    我想要一个无需任何手动输入即可安装 MySQL 5 7 实例的 bash 脚本 我正在关注数字海洋教程 https www digitalocean com community tutorials how to install mysql
  • 静态链接共享对象?或者损坏的文件?

    我有一个从专有来源获得的库 我正在尝试链接它 但出现以下错误 libxxx so 文件无法识别 文件格式无法识别 Collect2 ld 返回 1 退出状态 确实 ldd libxxx so statically linked 这究竟意味着

随机推荐

  • 成员函数之析构函数

    定义 析构函数 与构造函数功能相反 析构函数不是完成对象的销毁 局部对象销毁工作是由编译器完成的 而对象在销毁时会自动调用析构函数 完成类的一些资源清理工作 特征 1 析构函数名是在类名前加上字符 2 无参数无返回值 3 一个类有且只有一个
  • Flutter入门到精通:学习路线与思路

    Flutter入门到精通 学习路线与思路 Flutter是一种跨平台的移动应用开发框架 由Google开发和维护 它可以让开发者使用一套代码构建高性能 美观且流畅的移动应用程序 无论是从入门到精通 还是从零基础到掌握 都需要有一个系统而有序
  • html页面撑满整屏幕,让div撑满整个屏幕的方法(css)

    这篇文章主要介绍了关于让div撑满整个屏幕的方法 css 有着一定的参考价值 现在分享给大家 有需要的朋友可以参考一下 在body只有一个p的时候 可以通过这样的方式让p撑满整个屏幕 1 给p设置定位 复习一下 css中position有五
  • MLIR再深入 —— CodeGen 总结

    文章目录 前言 现状 Classification Dialects of Interest 一些现存的 pipelines TensorFlow Kernel Generator IREE Compiler LLVM Target IRE
  • 【Unity步步升】监控与检测物体的各种方案,如:射线、碰撞、挂载等...

    在制作AR模型数值控制方案的时候遇到了检测的问题 学习过程受益匪浅 故今天为大家整理带来一篇监控与检测物体的参考方案集合 目录 一 射线检测 二 物体存在检测 三 碰撞检测 一 射线检测 单射线检测 首先完成搭建场景如下图1 1 我这里用到
  • 微波技术与天线_HFSS_仿真实现威尔金森(Wilkinson)功分器

    1 仿真要求 设计并建模仿真微带Wilkinson功分器 对参数L70 2进行参数优化 使其满足以下性能指标 微带Wilkinson功分器性能指标 结构概览 2 步骤 1 绘制介质基板 介质基板厚度为1 6mm 长度为60mm 宽度待定 与
  • 什么才是真正的架构设计?(一)

    一 什么是架构和架构本质 在软件行业 对于什么是架构 都有很多的争论 每个人都有自己的理解 此君说的架构和彼君理解的架构未必是一回事 因此我们在讨论架构之前 我们先讨论架构的概念定义 概念是人认识这个世界的基础 并用来沟通的手段 如果对架构
  • 7-13 图的存储 (15 分)

    7 13 图的存储 15 分 输出给定图的邻接矩阵和邻接表 输入格式 输入第一行给出三个正整数 分别表示无向图的节点数N 1
  • 华为一直响应服务器异常,服务器异常是咋回事

    服务器异常是咋回事 内容精选 换一换 虚拟私有云为弹性云服务器构建隔离的 用户自主配置和管理的虚拟网络环境 提升用户云中资源的安全性 简化用户的网络部署 当您的弹性云服务器要访问Internet时 您可使用虚拟私有云创建的弹性公网IP绑定到
  • EasyPoi导入导出(一)

    EasyPoi是一个文件导入导出的工具插件 官网 http doc wupaas com docs easypoi easypoi 1c0u4mo8p4ro8 一 EasyPoi简单应用 导出excel 1 1 创建一个普通的maven项目
  • 快速部署Ceph分布式高可用集群

    快速部署Ceph分布式高可用集群 Ceph简介 Ceph是一个PB EB级别的分布式存储系统 可以提供文件存储 对象存储 和块存储 它可靠性高 易扩展 管理简便 其中对象存储和块存储可以和其他云平台集成 一个Ceph集群中有Monitor节
  • 面试题:如何测试微信朋友圈(附图)

    如果碰到这种题目 我们可以从以下几个方面来分析 功能 界面 易用性 中断 网络 兼容性 安全性 性能测试 功能测试 1 朋友圈发送功能 1 只发送文本 a 考虑文本长度 1 1500字符 该数据为百度数据 超出最大字符长度 b 考虑文本类型
  • 用Python让奇怪的想法变成现实,2023年继续创作

    2023年继续写作 用文章记录生活 时间过得真快 一下就到2023年了 由于疫情肆虐 在网络的游弋的实现也长了 写作的自然也多了 回想一下 2018 2021年这三年时间里一篇文章也没写过为0 哈哈 没错 为0 这段时间总是忙于自己的工作
  • eclipse导入mysql jdbc驱动包的具体步骤及注意事项

    1 导入的驱动包的版本和mysql的版本是对应关系的 具体关系如下 Connector J 5 1 支持Mysql 4 1 Mysql 5 0 Mysql 5 1 Mysql 6 0 alpha这些版本 Connector J 5 0 支持
  • python使用rjust把二进制数变换成指定位宽

    首先使用bin把数转换成二进制数 然后使用rjust把该数转换为指定位宽 并且可以指定以什么数对齐 使用示例 b rjust w s 其中b是一个二进制数 w是指定位宽 s是补的数 b reverse 可以把b倒序
  • notepad++突然崩溃,保存的文件没了怎么办

    notepad还是很牛逼的 备份文件 C Users 你当前用户的用户名 AppData Roaming Notepad backup可以恢复
  • codeforces 102263 J

    题目 一开始贪心 直接枚举每个位置 一直wa 不知道错哪里了 后来才发现是dp 很多种情况是无法直接贪心的 设 d p i 0
  • 手把手教你用Python轻松玩转SQL注入——渗透利器

    前言 大家好 我是黄伟 相信大家经常有听到过SQL注入啥的 但是并不是特别了解 小编以前就是经常听别人说 但是自己啥都不懂 直到后来看了相关教材后才明白 原来是这么个东西 那么到底是什么东西了 又或者是不是个东西了 我们接着往下看 一 浅谈
  • Flutter 宽高自适应

    在Flutter开发中也需要宽高自适应 手动写一个工具类 集成之后在像素后面直接使用 px或者 rpx即可 工具类代码如下 import dart ui class HYSizeFit static double screenWidth 0
  • GitHub Action入门简介

    1 What is GitHub Actions GItHub Actions是一个持续集成和持续交付的平台 能够让你自动化你的编译 测试和部署流程 GitHub 提供 Linux Windows 和 macOS 虚拟机来运行您的工作流程