惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
U
Unit 42
IT之家
IT之家
Y
Y Combinator Blog
T
Tailwind CSS Blog
B
Blog
大猫的无限游戏
大猫的无限游戏
博客园 - 叶小钗
Jina AI
Jina AI
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
I
InfoQ
J
Java Code Geeks
F
Fortinet All Blogs
T
The Blog of Author Tim Ferriss
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
H
Hackread – Cybersecurity News, Data Breaches, AI and More
人人都是产品经理
人人都是产品经理
腾讯CDC
Hugging Face - Blog
Hugging Face - Blog
GbyAI
GbyAI
博客园 - 司徒正美
The GitHub Blog
The GitHub Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
L
LangChain Blog

Sehnsucht

记一次博客换图床的过程 观《花束般的恋爱》 读《活过》 东京 旅行篇 亲人逝去 我为什么想养鱼 防止AI爬取你的博客 「monthly 」博客重构 游戏全成就 好看的小说 人生的每一步都不会是浪费-2024年终 「weekly」星期五综合征 「weekly」听播客 杂谈 读《美丽新世界》 「weekly」社交媒体 恶性事件 新世界 「weekly」认知觉醒 美丽新世界 follow 「weekly」独立博客9问题 双十一买书 读《惊呆了!原来这就是社会学》 一次聊天与自我建设 2024-09月记 补番《relife》 树状数组简单理解 lvm简单使用 某公众号废案 fail2ban基本使用 Podman 环境使用 Nginx Proxy Manager 最佳实践 2024-07同学聚会 vps使用podman部署freshrss Gitlab CICD 实践,思考与记录 装备升级:新的PC gitlab局域网搭建流程 FastMail迁移至GMail+Cloudflare Email Routing
博客自动发布方案
2024-08-01 · via Sehnsucht

我想了一套obsidian与博客的同步方案,在obsidian里写文章,提交到github后blog自动更新

前情提要

我的博客一般是先在obsidian里写,位置放在public/blog/中,已经用obsidian的模板插入了frontmatter,然后直接复制到blog中,因为文章需要d2所以需要blog项目在本地生成svg后再上传

一般来说比较繁琐,但是文章其实我之前写的并不多,而较为繁琐的过程反而加深了”仪式感”,对此我并没有异见,反而滋滋有味

但是在写gitlab ci脚本的时候突然想到github action似乎是可以跨仓库访问推送的,那么完全可以用github action自动完成上面的事情

流程

由于我的blog是发布到serverless平台的,d2部分就不放在github action中了

Diagram

blog 仓库配置

我的两个仓库都是私有的

为了让ob仓库访问到blog仓库,需要提前创建用于访问的token

  1. SettingsDeveloper Settings中创建对blog仓库的访问token,并设置对仓库的读写权限
  2. 在ob仓库中,在Settings中,secrets and variables下,设置action的单独的 secrets 变量(就是步骤1中获得的token),命名为BLOG_ACCESS_TOKEN

这样就行了,BLOG_ACCESS_TOKEN在下一步要用到,而token最长时间也就1年,到时候需要更新

github action 配置

在ob仓库中创建.github/workflows/sync-blog.yml,并写入

name: 博客文章同步

on:
  push:
    branches:
      - master # 当本仓库的master分支push的时候触发

jobs:
  build:
    runs-on: ubuntu-latest # 使用ubuntu容器
    
    steps:
      - name: 拉取docs代码
        uses: actions/checkout@v4 # 拉取ob仓库的master分支代码,置于./下
        with:
          ref: master

      - name: 拉取blog代码
        uses: actions/checkout@v4
        with:
          repository: <<you/blog-repo>> # 拉取blog仓库的master分支代码,置于./blog-dir下
          token: ${{ secrets.BLOG_ACCESS_TOKEN }}
          path: blog-dir
          ref: master

      - name: 同步文章
        run: cp -r ./public/blog/* ./blog-dir/src/content/posts/

      - name: 更新到blog仓库 # 如果发现了有更新再提交,没有更新就不提交
        run: |
            cd blog-dir
            if [ -n "$(git status --porcelain)" ]; then
                git config --global user.name "github-actions[bot]"
                git config --global user.email "github-actions[bot]@users.noreply.github.com"
                git add .
                git commit -m "docs: 从docs同步文章"
                git push
            else
                echo "No changes to commit"
            fi
        env:
            GITHUB_TOKEN: ${{ secrets.BLOG_ACCESS_TOKEN }}

需要设置自己的you/blog-repo

这个yml就不再赘述了,不熟悉的可以查阅文档

关于d2

我是将服务部署到了云平台,如果是部署到自己的web服务器那就直接在服务器上安装d2就行了,剩下的就可以用github action自动同步编译后的文件

部署到了云平台的话,由于d2的安装命令只需一行,无需编译安装,故只需要在npm run build之前执行curl -fsSL https://d2lang.com/install.sh | sh -s --就行了。也就是说,构建命令由npm run build变成curl -fsSL https://d2lang.com/install.sh | sh -s -- && npm run build

总结

我其实还想了别的同步方案:

  • 子模块,将博客文章专门放到一个子模块(缺点是麻烦
  • 通过headless cms,blog站点远程获取(对现在的文章结构改变太大,还要改blog代码
  • 写一个插件,当带有”blog”标签的文章都自动发布到网站

在我看来还是直接用github action省心的多