当前位置: 首页 > news >正文

使用 Github Actions 工作流自动部署 Github Pages

GitHub-Actions

actions顾名思义就是一堆动作,是一个持续集成服务,持续集成包含了拉代码、运行测试、编译代码、登录远程服务器,发布到第三方服务等等的操作,GitHub将这些操作称为actions。

概念:Workflows, Events, Jobs, Actions, Runners

  • Workflows 工作流

一个 Workflow 由多个 Jobs 组成

  • Events

定义哪些事件可以触发 Workflow

  • Jobs

一条 Job 由多个 step 组成,每个步骤可以是一条可执行的 shell 脚本或者是一个 action

  • Actions

一个 Action 是一个复杂且重复的任务,可以看成是多个job的组合

  • Runners

跑工作流的 server,由 Github 提供
一个工作流可以由一个或者多个 Job 组成,每个 Job 可以由一个或者多个 Step 和 Action 组成。工作流需要被一个或多个 Event 触发,并由 Runner 执行,执行成功后,最终实现工作目标。

一、建立仓库

首先在github上创建仓库,如果建立的仓库名称是username.github.io,则最后访问的地址username.github.io/。 如果不是这个名称,则最后访问的地址是username.github.io/repo/ ,repo就是仓库名字。

二、添加.github相关配置文件

在项目的根目录下新建.github/workflows目录,workflow就是GitHub Actions 的配置文件。随便新建.yml文件就是一个flow,github会自动运行workflows目录下所有的yml文件。介绍下workflow最重要的几个配置和概念。

  • name

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

  • on

on字段指定触发 workflow 的条件,通常是某些事件。在本文实例里用的是push,指的就是当git push事件发生时触发该workflow。

  • jobs

jobs是workflow最重要的部分,表示workflow要执行的任务,可以是一个或者多个。

接下里开始就是本文示例的部署内容。我们希望的流程是,本地改完代码,上传到github后能自动打包部署到gh-pages分支。
在项目根目录新建.github/workflows/page.yml文件

// workflows/pages.yml
name: Deploy Pageson:push:branches:- master # 这里只配置了master分支,所以只有推送master分支才会触发以下任务jobs:pages:runs-on: ubuntu-latestpermissions:contents: writesteps:- uses: actions/checkout@v2- name: Use Node.js 16.15.0uses: actions/setup-node@v2with:node-version: "16.x"- name: Cache NPM dependenciesuses: actions/cache@v2with:path: node_moduleskey: ${{ runner.OS }}-npm-cacherestore-keys: |${{ runner.OS }}-npm-cache- name: Install Dependenciesrun: npm install- name: Buildrun: npm run build- name: Deployuses: peaceiris/actions-gh-pages@v3with:github_token: ${{ secrets.GITEE_TOKEN }}publish_dir: ./dist

首先job里配置运行这个脚本需要的虚拟机环境,这个虚拟机环境由github提供,可用的包括windows、linux、macos等环境,具体看官方文档。在此示例中其实不论哪个系统都是可以的,因为我们需要的是node环境,而node本身就是跨平台的。
接下里设置获取源码、需要的node版本、增加缓存依赖,这里使用官方提供的actions/setup-node@v1、setup-node@v1、cache@v2。这里的@表示版本,使用别人的action时最好都加上版本,以防后面更新的action不兼容当前的脚本。最后会自动部署到gh-pages分支,因为要更新github代码,所以还需要配置github_token
在这里插入图片描述
我这里写的是GITEE_TOKEN,名字随便写都行,手动配置不能以GITHUB_xxx开头。变量和yml里的github_token保持一致。
GITEE_TOKEN:复制下面的token配置在仓库GITEE_TOKEN变量里面

在这里插入图片描述
配置也可以这样写:

github_token: ${{ secrets.GITHUB_TOKEN }} 
//请注意这里的,GITHUB_TOKEN令牌不是个人访问令牌。github操作运行者会自动创建一个GITHUB_TOKEN 令牌秘密,以在您的工作流中进行身份验证。
//因此,您可以立即开始部署,而无需进行任何配置。 

三、推送代码,

打开 Github 仓库 Actions 标签页,可以看到workflow 已经开始执行。
在这里插入图片描述

执行完成后,发现多了一个 gh-pages 分支。

设置 Settings/Pages, 将 Source 设置为 gh-pages 分支并保存。等待两三分钟后,打开 Settings/Pages 中提示的url,即可看到项目页面。

运行完后访问 username.github.io/repo 就能看到部署后的效果了。
因为设置了on: push所以以后每当由代码 push 到 master 分支上,都会触发此工作流执行。

源码

gitHub: https://github.com/ytking/ytking
github pages: ytking.github.io/ytking/

有什么说的不对或者有疑问的,欢迎在下面留言交流~~

参考

GitHub Actions 入门教程-阮一峰
Github Actions 官方文档

Github Actions 是 Github 的持续集成服务,和 Gitlab 的 CI/CD 如出一辙。

相关文章:

使用 Github Actions 工作流自动部署 Github Pages

GitHub-Actions actions顾名思义就是一堆动作,是一个持续集成服务,持续集成包含了拉代码、运行测试、编译代码、登录远程服务器,发布到第三方服务等等的操作,GitHub将这些操作称为actions。 概念:Workflows, Events,…...

Xposed hook 抖音账户信息

本篇主要讲下hook获取 抖音账户的相关信息,直接上代码。 public class DouHook {private static final String TAG "DouHook";public static void hook(XC_LoadPackage.LoadPackageParam lpparam) {Log.e(TAG, "DouHook start");if (lpparam …...

回顾 | E³CI效能认知与改进论坛,助力企业研发效能度量和提升

2023年8月,TiD质量竞争力大会组委会和ECI专家委员会成功举办TiD大时段课程“度量驱动研发效能提升”与“ECI效能认知与改进论坛”。与会专家以《ECI软件研发效能度量规范》团体标准为要点,为企业研发效能度量和提升分享诸多实践成果与经验。 《ECI软件研…...

科技的成就(五十二)

405、微信公众平台正式上线 "1995 年 8 月 24 日,微软发布 Windows 95。Windows 95 极大地改进了前续系统的图形用户界面,首次推出了开始菜单、任务栏、最大化、最小化窗口以及关闭按钮。此外,Windows 95 最大程度兼容当时的 MS-DOS 和 …...

【23种设计模式】装饰器模式

个人主页:金鳞踏雨 个人简介:大家好,我是金鳞,一个初出茅庐的Java小白 目前状况:22届普通本科毕业生,几经波折了,现在任职于一家国内大型知名日化公司,从事Java开发工作 我的博客&am…...

解决IDEA中SpringBoot项目创建多个子模块时配置文件小绿叶图标异常问题

在新建子模块下创建配置文件: 在子模块gateway中新建的配置文件,正常情况下配置文件左侧是小树叶标识,而这次新建application-dev.yml是个小树叶标识,bootstrap.yml是个方框。 看其他方案都是在project structure中设置,但未显示…...

【马蹄集】—— 概率论专题

概率论专题 目录 MT2226 抽奖概率MT2227 饿饿!饭饭!MT2228 甜甜花的研究MT2229 赌石MT2230 square MT2226 抽奖概率 难度:黄金    时间限制:1秒    占用内存:128M 题目描述 小码哥正在进行抽奖,箱子里有…...

Spring 6整合单元测试JUnit4和JUnit5

单元测试:JUnit 在之前的测试方法中,几乎都能看到以下的两行代码: ApplicationContext context new ClassPathXmlApplicationContext("xxx.xml"); Xxxx xxx context.getBean(Xxxx.class);这两行代码的作用是创建Spring容器&…...

【好书推荐】深入理解现代JavaScript

作者介绍 T. J. Crowder是一位拥有30年经验的软件工程师。在他的整个职业生涯中,他至少有一半时间是在使用JavaScript从事开发工作。他经营着软件承包和产品公司Farsight Software。他经常在Stack Overflow上为人们提供帮助,他是十大贡献者之一和JavaScr…...

高效协同: 打造分布式系统的三种模式

在构建分布式系统时,分布式协调是否总是必要选项?本文通过一些实际的例子讨论了这一问题,并通过把问题区分为是否具有单调性做为是否需要分布式协调的标准。原文: Avoiding Coordination Cost: Three Patterns for Building Efficient Distri…...

机器学习-无监督学习之聚类

文章目录 K均值聚类密度聚类(DBSCAN)层次聚类AGNES 算法DIANA算法 高斯混合模型聚类聚类效果的衡量指标小结 K均值聚类 步骤: Step1:随机选取样本作为初始均值向量。 Step2:计算样本点到各均值向量的距离,…...

智能垃圾桶丨悦享便捷生活

垃圾桶是人们日常生活所必不可少的必需品,它让生活中所产生的垃圾有了一个正确的存放地方。随着生产技术的迅速发展,垃圾桶也得以更新换代。由最初的简单式的圆筒式垃圾桶,到现在出现的感应式垃圾桶、智能语音控制垃圾桶,垃圾桶也…...

【数据结构】线性表(一)线性表的定义及其基本操作(顺序表插入、删除、查找、修改)

目录 一、线性表 1. 线性表的定义 2. 线性表的要素 二、线性表的基本操作 三、线性表的顺序存储结构 1. 定义 2. 顺序表的操作 a. 插入操作 b. 删除操作 c. 查找操作 d. 修改操作 e. 代码实例 一、线性表 1. 线性表的定义 一个线性表是由零个或多个具有相同…...

MyBatis的自定义插件

MyBatis的自定义插件 前置知识 MyBatis 可以拦截的四大组件 Executor - 执行器StatementHandler - SQL 语句构造器ParameterHandler - 参数处理器ResultSetHandler - 结果集处理器 自定义 MyBatis 插件 /*** 打印 sql 执行的时间插件*/ Intercepts(// 指定拦截器拦截的对象…...

生物制剂\化工\化妆品等质检损耗、制造误差处理作业流程图(ODOO15/16)

生物制剂、化工、化妆品等行业,因为产品为液体,产品形态和质量容易在各个业务环节发生变化,常常导致实物和账面数据不一致,如果企业业务流程不清晰,会导致系统大量的库存差异,以及财务难以核算的问题&#…...

vbv介绍

VBV模型 VBV即Video Buffer Verifier(视频缓冲区校验器)。 本质是encoder端的一个虚拟buffer,可以将VBV当做一个容量受限的管道,有一个上限容量值和下限容量值,在经过此管道的调节之后能限制编码码率在上限容量值和下限容量值之间。VBV对标NetEq中的那几个buffer(decoder b…...

Linux CentOS 8(网卡的配置与管理)

Linux CentOS 8(网卡的配置与管理) 目录 一、项目介绍二、命令行三、配置文件四、图形画界面的网卡IP配置4.1 方法一4.2 方法二 一、项目介绍 Linux服务器的网络配置是Linux系统管理的底层建筑,没有网络配置,服务器之间就不能相互…...

python -m pip install 和 pip install 的区别解析

python -m pip install 和 pip install 的区别解析 python -m pip install 使用了 -m 参数来确保以 Python 模块的形式运行 pip,适用于确保在不同的环境中正确使用 pip,这篇文章主要介绍了python -m pip install 和 pip install 的区别,需要的朋友可以参…...

深度解读js中数组的findIndex方法

js中数组有一个findIndex方法,这个方法是一个让人感到很困惑的方法。 首先来看看MDN对这个方法的解释:Array.prototype.findIndex() - JavaScript | MDN The findIndex() method of Array instances returns the index of the first element in an arra…...

ICML2021 | RSD: 一种基于几何距离的可迁移回归表征学习方法

目录 引言动机分析主角(Principal Angle)表征子空间距离正交基错配惩罚可迁移表征学习实验数据集介绍 实验结果总结与展望 论文链接 相关代码已经开源 引言 深度学习的成功依赖大规模的标记数据,然而人工标注数据的代价巨大。域自适应&…...

推理服务为什么一上自动 Prompt 优化就开始成本失控:从 Prompt 版本爆炸到在线 A/B 收敛的工程实战

一、自动 Prompt 优化的成本幻觉 不少团队上线推理服务后,发现同一任务换句 Prompt 输出质量可提升 20%。🚀 自动 Prompt 优化因此成了香饽饽——系统同时维护几十个版本在线分流。但两周后账单涨了 40%。⚡️ 问题不在 Prompt,而是版本爆炸把…...

STM32F103C8T6 Bootloader分区与跳转详解:手把手配置64KB Flash的16+48分配方案

STM32F103C8T6 Bootloader分区与跳转实战:64KB Flash的1648分配方案深度解析 在嵌入式开发中,Bootloader的设计往往是项目成败的关键一环。对于资源受限的STM32F103C8T6这类仅有64KB Flash的MCU来说,如何在Bootloader和应用程序之间合理分配这…...

SAP SD新手避坑指南:交货工厂和装运点配置错了,小心订单发不出去!

SAP SD配置实战:交货工厂与装运点配置错误的深度排查手册 当销售订单在SAP系统中卡在发货环节时,背后往往隐藏着交货工厂(Plant)与装运点(Shipping Point)的配置逻辑问题。这类错误不仅会导致业务流程中断&…...

云深处冲刺科创板:年营收3.4亿,净利2868万 拟募资25亿 又一杭州6小龙拟IPO

雷递网 雷建平 5月19日杭州云深处科技股份有限公司(简称:“云深处”)日前递交招股书,准备在科创板上市。云深处计划募资25亿元,其中,11.7亿元用于具身算法及模型研发项目,5.54亿用于机器人本体与…...

拯救者工具箱终极指南:3大场景化解决方案提升笔记本使用体验

拯救者工具箱终极指南:3大场景化解决方案提升笔记本使用体验 【免费下载链接】LenovoLegionToolkit Lightweight Lenovo Vantage and Hotkeys replacement for Lenovo Legion laptops. 项目地址: https://gitcode.com/gh_mirrors/le/LenovoLegionToolkit 联想…...

正交张量、正定张量与材料稳定性:在有限元分析ABAQUS中的实际应用与参数设置

正交张量、正定张量与材料稳定性:在有限元分析ABAQUS中的实际应用与参数设置 当工程师在ABAQUS中遇到材料刚度矩阵非正定警告时,往往意味着仿真结果可能失去物理意义。这种警告背后隐藏着深刻的张量数学原理——正定张量的性质直接决定了材料本构模型的稳…...

【DC实战】时序约束文件编写:从理论到实践

1. 时序约束文件的重要性 在数字电路设计中,时序约束文件就像是给电路设计的一本"交通规则手册"。想象一下,如果没有红绿灯和限速标志,城市交通会乱成什么样子?时序约束文件的作用就是告诉DC(Design Compile…...

毕业设计:基于springboot的林业产品推荐系统(源码)

4 系统设计当前,系统的类型有很多,从系统呈现的内容来看,系统的类型有社交类,有商业类,有政府类,有新闻类等。那么,在众多系统类型中,先明确将要设计的系统的类型才是系统设计的首要…...

Keil C51评估版SRC指令限制解析与解决方案

1. 问题现象与背景解析最近在调试一个基于8051架构的嵌入式项目时,遇到了一个令人困惑的编译错误。当我在Keil C51开发环境中使用SRC指令时,编译器突然报出致命错误(Fatal Error),但检查代码语法看起来完全正确。这个SRC指令是用来控制编译器…...

CANN/cannbot-skills模型推理融合算子优化

【免费下载链接】cannbot-skills CANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体,本仓库为其提供可复用的 Skills 模块。 项目地址: https://gitcode.com/cann/cannbot-skills name: model-infer-fusion description: 基于 PyTorch 框架的昇腾 NPU…...