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

Github Action 自动部署更新静态网页服务

本文首发于 Anyeの小站,点击跳转 获得更优质的阅读体验

前言

贴一段胡话

|50%x50%

在用过 应用:静态网页服务 之后,事实证明:

|50%x50%
总而言之,自动化是一个很令人着迷的东西,摆脱重复繁琐的工作,解放了双手的同时更是善待了自己。

简介

本文将会以 Github Action 结合 Ryan 大佬 的 Halo 插件 应用:静态网页服务 来实现自动将 Github 上的开源项目 CorentinTh/it-tools 自动更新同步部署。

原理

  1. Fork 原项目,有微修需求的在 Fork 后的项目中做出修改
  2. Fork 的项目添加 Upstream Sync · Actions · GitHub 这一 Action,该 Action 可以实现同步自己的分支和上游分支,并输出一个是否有新提交的变量 has_new_commits 供我们使用,使用 corn 计划任务实现定时查询更新。
  3. 为项目添加 Actions,在 has_new_commits 或者 commits 或者手动触发的时候执行构建推送(按需添加)。

快速使用(以 it-tools 项目为例)

Fork 我已经修改好的项目 Anyexyz/it-tools ,然后按照 此处 操作。

实现(以 it-tools 项目为例)

Fork 项目

点击 CorentinTh/it-tools 直达。

对项目源码进行修改

在这里我对项目做出修改:

  • (必要) 修改项目的 web 访问路径为 /tools

vite.config.ts:19process.env.BASE_URL ?? '/'; 改为 process.env.BASE_URL ?? '/tools';

  • 修改项目的默认访问语言为中文:

src/plugins/i18n.plugin.ts:8en 改为 zh

  • 其他个性化修改

添加工作流

Deploy to Halo

用于构建并部署到 Halo 静态网页服务。

name: Deploy to Haloon:push:branches: [main]repository_dispatch:types: [deploy]workflow_dispatch:jobs:deploy:runs-on: ubuntu-lateststeps:- name: Checkoutuses: actions/checkout@v4- uses: pnpm/action-setup@v3with:version: 8- uses: actions/setup-node@v4with:node-version: '20'cache: 'pnpm'- name: Install dependenciesrun: pnpm install- name: Buildrun: pnpm build- name: Deploy to Halorun: |npx halo-static-pages-deploy-cli deploy -e ${{ secrets.ENDPOINT }} -i ${{ secrets.ID }} -t ${{ secrets.PAT }} -f dist

我在这里添加了三个触发条件:

  • 响应 push 事件到 main 分支。
  • 响应 repository_dispatch 事件,类型为 deploy
  • 手动触发。
Upstream Sync

用于同步上游 commits 并检查是否有更新。

name: Upstream Syncpermissions:contents: writeissues: writeactions: writeon:schedule:- cron: '0 * * * *' # 每小时执行一次workflow_dispatch:    # 手动触发jobs:sync_latest_from_upstream:name: Sync latest commits from upstream reporuns-on: ubuntu-latestif: ${{ github.event.repository.fork }}steps:- uses: actions/checkout@v4- name: Clean issue noticeuses: actions-cool/issues-helper@v3with:actions: 'close-issues'labels: '🚨 Sync Fail'- name: Upstream Syncid: syncuses: aormsby/Fork-Sync-With-Upstream-action@v3.4.1with:target_sync_branch: maintarget_repo_token: ${{ secrets.GITHUB_TOKEN }} # 自动生成的 GitHub token,无需手动设置upstream_sync_repo: CorentinTh/it-toolsupstream_sync_branch: maintest_mode: false- name: New commits detected actionif: steps.sync.outputs.has_new_commits == 'true'uses: actions/github-script@v7.0.1with:script: |github.rest.repos.createDispatchEvent({owner: context.repo.owner,repo: context.repo.repo,event_type: 'deploy'})- name: Sync checkif: failure()uses: actions-cool/issues-helper@v3with:actions: 'create-issue'title: '🚨 同步失败 | Sync Fail'labels: '🚨 Sync Fail'body: |由于上游仓库的 workflow 文件变更,导致 GitHub 自动暂停了本次自动更新,你需要手动 Sync Fork 一次

触发条件:

  • 每小时自动执行一次
  • 手动触发

检测新的提交

- name: New commits detected actionif: steps.sync.outputs.has_new_commits == 'true'uses: actions/github-script@v7.0.1with:script: |github.rest.repos.createDispatchEvent({owner: context.repo.owner,repo: context.repo.repo,event_type: 'deploy'})

如果检测到有新提交,这一步使用 actions/github-script 动作触发一个名为deploy 的事件,用于调用 Deploy to Halo 进行部署。

使用

创建一个静态网页服务

在已经安装 应用:静态网页服务 插件的前提下,添加一个静态网页服务,目录填写 tools (与 Github 项目配置相同)

|50%x100%

创建后会生成一个 ID ,保存它。

申请个人令牌

在 Halo 的 UC 页申请一个 个人令牌 ,权限选择 静态项目 - 项目资源上传

|50%x50%

保存该令牌。

Github 仓库配置

在该仓库的 Github Setting 下找到 Secrets and variables ,为 Actions 提供变量,添加 Repository secrets ,如下:

NameSecretExample
ENDPOINTHalo API endpointhttps://demo.halo.run
IDStatic Page IDproject-FRAuW
PATPersonal access tokenpat_abcd

保存,可以通过手动触发的方式来测试是否可用。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 华为机考真题 -- 密码解密
  • Spring的bean的生命周期——bean的创建与销毁
  • 灵岫科技技术二面\.(过了)
  • Go语言---文件分类、设备文件、磁盘文件、实现打开/写/读/关闭/拷贝文件
  • 20.js获取页面卷去的距离以及滚到到指定位置
  • LLaMA Pro:具有块扩展的渐进式 LLaMA[论文翻译]增量预训练 扩展transformer块
  • AI网络爬虫022:批量下载某个网页中的全部链接
  • 计算环形链表,环的长度
  • vb.netcad二开自学笔记1:万里长征第一步Hello CAD!
  • Kotlin Class
  • MQTT是什么,物联网
  • 微信小程序中wx.navigateBack()页面栈返回上一页时执行上一页的方法或修改上一页的data属性值
  • 【Sql Server修改列类型错误信息:对象名依赖于列】
  • Python从Excel表中查找指定数据填入新表
  • 对controller层进行深入学习
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • Cumulo 的 ClojureScript 模块已经成型
  • Docker: 容器互访的三种方式
  • ES6系列(二)变量的解构赋值
  • idea + plantuml 画流程图
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • JSDuck 与 AngularJS 融合技巧
  • Js基础知识(四) - js运行原理与机制
  • LeetCode18.四数之和 JavaScript
  • magento2项目上线注意事项
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • Protobuf3语言指南
  • Wamp集成环境 添加PHP的新版本
  • 当SetTimeout遇到了字符串
  • 规范化安全开发 KOA 手脚架
  • 缓存与缓冲
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 如何在GitHub上创建个人博客
  • 线性表及其算法(java实现)
  • 小程序01:wepy框架整合iview webapp UI
  • 因为阿里,他们成了“杭漂”
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 你对linux中grep命令知道多少?
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • ​经​纬​恒​润​二​面​​三​七​互​娱​一​面​​元​象​二​面​
  • ###STL(标准模板库)
  • #pragma 指令
  • #控制台大学课堂点名问题_课堂随机点名
  • ${factoryList }后面有空格不影响
  • $nextTick的使用场景介绍
  • (11)MSP430F5529 定时器B
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (第30天)二叉树阶段总结
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (四)React组件、useState、组件样式
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (转)mysql使用Navicat 导出和导入数据库
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • (转载)从 Java 代码到 Java 堆