Skip to content

前言

一开始闲着没事,想着给自己的网站加一个搜索框。前几天,终于搞好了algolia,但是博客是静态的,是由许多静态网页组成,每次更新博客的时候,algolia那边也要更新。也就是,解决这个问题,让我体会到了什么是cicd。我之前说过,计算机里很多术语听着很高大尚,唬人。真正了解的话,就是那回事。

algolia工作原理

当用户在搜索框搜索内容时候,这时候会发送一个请求到algolia那边,algolia再返回来该内容对应的网页链接(不是网页)。因为algolia那边有我网站链接的索引数据。这也就是搜索实现的原理了,毕竟静态网页连自己的数据库都没有,还想要搜索,只能通过这种方式实现了。也正是这样,你打开我的博客后,就算打开几个网页有缓存,然后断网,去搜索是空的。这也就验证了发送的不是本地的请求。

解决同步更新问题

那么每次我的静态网页更新内容,或者又多出来几个新的网页,algolia那边是不知道的,需要手动登陆他的官网,点一下重新爬去我的网页对应链接的索引更新同步一下。algolia作为专门是一款专门做高性能搜索的云服务,他大多自然也是为了那些静态网页服务的,他自然很好做了api接口配置,用户不用手动取登陆官网点一下了。需要将这一块给连起来,这是个问题。

github的action原理

一开始我的代码托管在github,上面的action功能就很好解决这一点,也叫工作流,即cicd。其实原理很简单,每次更新好代码,将本地代码推送到github的时候,这个action就会执行,当然你可以设置action触发的方式,一般都是推送即执行action。action这时候会生成一个临时虚拟的云电脑,将你的代码再次clone到这个虚拟runner里面,再此之前你需要根据一定语法给这个action写命令,提前告诉他应该干什么。因为action一旦执行就不会停了,他不是交互式的,你需要把整个流程告诉他,让他跑,而且命令不能错。如果你给的前提给的命令有错误,中途会直接停止,需要重新配置命令。这个runner跑完就消失了,就是临时的。这就很好可以在action放入一个脚本,这个脚本就是触发更新algolia那边了。
总结:本地代码 github action algolia

what is cicd

工作流,cicd,runner以及github的action,其实都是一个东西。其实说白了cicd啥也不是,就是把写好的代码,最后一步需要打包,测试,部署服务器。这大致几个步骤交给云端的机器来干,只需要前提写好命令给机器,以后再次更新网站,在本地写好代码就点一下最后一步推送,后面一连串都自动化了。这就是cicd!!! 但是cicd并不好配置,特别是那些不大不小的项目,如果是简单跑一下小脚本,类似我上面说的,还非常合适,不需要对一个全新的虚拟云端设备进行复杂配置依赖环境,像大项目,需要复杂环境,就直接指定自己的云来跑cicd。

实现自己的工作流(云自动化部署)

我之前写过一个本地自动化部署vitepress的脚本,当然是用ai来写的,挺不错的,其实就是把脚本里的内容实现的东西,分成多个交给了云端来实现。

回到时间线整algolia时候,体会到了action的作用。我想每次我的本地化部署脚本,直接跑云上岂不是,只需要点一下就行了,网站和搜索一块更新,不用再手动去algolia官网在点重新爬去。之前是需要点两下的。😋

思路

在runner里自动克隆后,提前写好命令打包,打包后,链接自己服务器,直接进行上传,最后触发algolia的更新搜索脚本。

遇到的issues

思路确实挺简单,但是实现起来会遇到各种麻烦,依赖问题。一个多米诺骨牌效应我是体会到了,有一次我发现algolia不能搜索部分网页内容,一开始以为是官方网站爬去索引规则问题,debug很多次最后发现是之前构建vitepress遗留的问题,有些文件夹里面我放的是index.html,这样vitepress它自己是能是能识别的,但是algolia默认不会将爬取index主页的内容,然后我修改了很多不同文件夹的index网页,只保留一个主页。但是,重命名一改,你懂的,其他网页有引用这个网页也需要修改,于是就是牵一发而动全身。我看着报错日志改了很多很多,不改的话,vitepress对失效,有问题的东西非常苛刻的,会导致主页打开空白,甚至跑不来项目。真的体会到,屎山代码,能跑起来,就不要动他。一开始想着在github跑cicd,但是我发现在链接自己的服务器上传包的时候,上传非常慢,github的服务器在国外。我不得不把项目搬到gitee,这里吐槽一嘴,gitee是我用过最拉的代码托管平台。最后,折腾了3天差不多才把cicd给打通,还是很有成就感的。

补上

写完这篇准备push一下,看一下跑一下整体。我nm,gitee工作流不自动执行,我再三确认我配置的没毛病是push自动触发工作流。没反应!!!!真的low爆了。最后又好了,卡回来了,连着一堆工作流同时触发,就像你双击某个程序没反应,你连着点上几十次,后面蹦出重叠的窗口一样。又过了一会,我看懂了,gitee的工作流有延迟的,不会立马cicd,因为我连续提交了很多次,最后跑起来cicd同时30多次!!!,最后我删了工作流,重新建。还有其他bug,在配置可视化工作流,有选项选完之后保存不了,也没有具体说明,有的模板给了保存上去,执行的时候报错系统级错误,也不会有日志,就给你一个跳转超链接联系官方,进去是一个手机截屏二维码,gitee的QQ交流群,而且还进不去人满了,就很头大。