跳至主要內容

博客订阅&推送

holic-x...大约 3 分钟运维Github Actions

博客订阅&推送

参考此前github主页抓取最新更新博客文章实现(DIY Github主页):Github Action定时更新获取hexo博客信息

方案1:定时推送

构建步骤

<1>配置博客订阅(以RSS格式或者ATOM格式输出),可通过互联网访问到相关的资源文件

​ 以vuepress-theme-hope进行参考:参考官方文档open in new windowFeed支持open in new window

# 1.安装feed插件
npm install @vuepress/plugin-feed --save-dev

// 如果提示无法安装则加入--force参数

​ 在主题配置文件theme.ts文件中设置plugins.feed:true

​ 然后设定以指定格式输出,此处以rss、atom为参考

plugins:{
	feed:{
		// atom: true,
		rss: true 
		// json: true,
	}
}

​ 通过npm run docs:build指令生成的rss.xml或者(atom.xml)会在.vuepress/dist文件夹下,上传发布部署,然后通过域名访问:https://xxx.com/rss.xml、https://xxx.com/atom.xml

<2>在个人主仓库中添加workflow(.github/workflows/xxx.yml),引入下述文件配置

name: Latest blog post workflow
on:
  schedule:
    # 定时器配置
    - cron: "0 * * * *"
jobs:
  update-readme-with-blog:
    name: Update this repo's README with latest blog posts
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: gautamkrishnar/blog-post-workflow@master
        with:
          max_post_count: "5" # 获取链接数量
          feed_list: "https://xxx.com/rss.xml" # 博客订阅地址(RSS格式/Atom格式),,以逗号间隔不同的地址

<3>编辑说明文件README.md并在相应位置添加引用

<!-- BLOG-POST-LIST:START -->
<!-- BLOG-POST-LIST:END -->

方案2:监听发布事件

​ 基于上述组件能够实现定时更新最新文章内容,如果没有实时性需求的话其实直接用该种方案足矣,可以适当增大定时刷新频率来减少误差性,但实际上这种方式相对来说不够节省资源。可以考虑设定当有新的文章更新的时候触发仓库信息自动更新。

​ 其原理大概可以梳理为:分别创建一个发送和接收事件

​ 发送事件用于“监听指定仓库分支变更(指定博客仓库的文章更新操作)”,其用到:repository_dispatchopen in new window,如何创建一个repository_dispatch事件可参考官方文档Create a repository dispatch eventopen in new window(不同技术实现方式)

# 文章发布的仓库中定义发布事件触发curl操作发送一个事件类型为[xxType]的repository_dispatch事件
name: Tigger special repository

on:
  push:
    # 当 master 分支有变更的时候触发 workflow
    branches:
      - master
  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Send repository dispatch event
        run: |
          curl -XPOST -u "${{ secrets.USERNAME}}:${{secrets.TOKEN}}" \
          -H "Accept: application/vnd.github.everest-preview+json" \
          -H "Content-Type: application/json" https://api.github.com/repos/[owner]/[repo]/dispatches \
          --data '{"event_type": "xxType"}'
          
          # 其中需要在settings的Secret中配置账号密码用于curl登录github调用api

​ 在特殊仓库自动推送的基础上定义一个接收事件

# 结合上述配置说明,将定时器概念调整为接收事件
name: Latest blog post workflow

on:
  repository_dispatch:
    # 类型可以自定义,需与发送事件匹配
    types: [xxType]
  workflow_dispatch:
  
jobs:
  update-readme-with-blog:
    name: Update this repo's README with latest blog posts
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: gautamkrishnar/blog-post-workflow@master
        with:
          max_post_count: "5" # 获取链接数量
          feed_list: "https://xxx.com/feed.xml" # 博客订阅地址(RSS格式/Atom格式),,以逗号间隔不同的地址
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v3.1.3