-
打个分吧:

Notion到博客的自动化更新

在notion写文章,自动化更新到git 代码仓库,再自动化部署到网站

我在上周的文章程序员一定要有自己的博客中写了我博客工具链的5步:

  1. 在趁手的工具写笔记(Notion PC端、移动端)
  2. 工具将笔记转化为md文档
  3. 自动推送md文档到我的博客git仓库
  4. git仓库更新,触发部署工具(netlify、vercel、jenkins)自动部署
  5. 更新博客

当时只实现了其中1245步,经过两天的探索我完成了第3步,让这个工具链实现了完整的自动化,这篇文章大致介绍一下。

从Notion到Git仓库

我的博客代码仓库使用Github托管,Github提供了一个十分有用的自动化工作流的工具:Github Actions

Github Actions 可以定时执行我提供的脚本,通过脚本,实现了从Notion到代码仓库的更新。大致逻辑是这样的:

  1. Github Actions 负责每天凌晨00:00执行脚本
  2. 在脚本中,使用Notion API接口获取Notion特定数据库的数据,筛选出前一天更新的文章
  3. 为每一篇文章,在代码仓库创建一个md文件
  4. 将文章的attributes,转化为博客md文件的frontmatter
  5. 将文章正文的md字符串,转化为md文件的正文内容
  6. 将所有md文件通过git命令提交到github仓库中
  7. 如果脚本执行失败,github会发邮件通知我

通过以上脚本,实现了 notion文章数据库到git仓库的更新。

脚本执行的频率是可以自由更改的,我偏向于损失一些时效性,保证环境稳定性,所以选择了一天一更新。

以上脚本可以在我的博客开源仓库中看到,链接在这里这里

由于我们的notion数据库字段、md文件的frontmatter配置很可能不同,我的脚本无法直接被你复用,有几个需要考虑变更的点:

  • 在你的git仓库中,需要配置几个脚本中需要使用的secrets。配置的地方在你的github仓库首页 - settings - secrests and variables - actions,参数名是NOTION_DATABASE_IDNOTION_KEY,前者是你在Notion中文章所在数据库的id(可以通过copy link获得),后者是你开通的notion api的key(notion api的开通详见这个文档)。
  • 从notion page attributes到md frontmatter的映射,可以在这个脚本postToMDFile中找到,逻辑比较简单,按照你的需求修改即可。
  • 脚本中的git信息,例如name、email、branch 可以按照你的需求修改。
  • 按照你的需求筛选notion数据,filter写在这个脚本getPosts中。
  • 有一个可能踩坑的点在于,必须要将workflow读写仓库的权限开启,否则脚本会因为缺少git push权限而报错,开启权限的地方在:github仓库首页-settings-actions-general-workflow permission - 开启read and write permissions
  • 脚本的执行周期,可以在上述yml脚本的cron字段中配置,注意脚本中的时间使用的是UTC时间,要考虑当地时区的时间差,例如UTC=北京时间-8,我希望在凌晨0点执行,所以写的小时是16。

从Git仓库到博客网站

这一步我使用的是Vercel工具,监听Git仓库的push事件,自动拉取代码更新,打包部署到网站。

这一步Vercel的配置很简单,推荐查看官方文档,不做赘述。


本篇文章使用Notion创作,由我的自动化工具从Notion同步。

上次更新:

评论区