背景
在使用 vuepress
来搭建一个静态文档博客时,想要实现每次提交代码到 github
时源码自动同步到gitee
平台对应仓库。
由于第一次使用遇到了一些问题,经过一路踩坑最终解决,谨以此篇记录自己学习的过程,同时也希望能帮助到其他同学。
vuepress使用遇到问题
本地页面404问题
创建好一个目录,目录下再创建一个分类的目录,然后创建 xx.md 文件,配置好导航栏路径,访问跳转页面时提示 404。仔细检查了路径是没有问题的。
其实这个问题是因为你的404页面对应的根目录,也就是第一个目录文件夹下缺少一个 xxx.md 文件。
部署相关
半自动部署
也就是在根目录写一个 .sh
脚本去执行一些命令,打包、提交代码、发布到远程库分支来部署。
package.json中配置:
"scripts": {
"d": "bash deploy.sh"
},
每次需要发布时本地执行 yarn d
遇到问题
我的编辑器打开终端默认是 cmd, 执行命令直接报错了,而node、npm都是可以访问的,我尝试了网上很多方法都没解决。最后发现 执行sh文件需要在 git bash
下执行
-
git bash里执行脚步后push报错
仔细排查发现问题在push这段代码:
git push -f git@github.com:<USERNAME>/<REPO>.git master:gh-pages
原因是github默认分支已经变成了
main
,这里提交的还是master
只需要修改成main
重新执行就可以了
自动部署
使用Github工作流部署,每当push代码后就会自动部署更新。
actions步骤报错问题
自动部署时报错:Action failed with "The process '/usr/bin/git' failed with exit code 128"
解决:
-
设置工作流权限
首先打开Actions报错的仓库,找到仓库下的 settings->Actions->General 查看是否有权限。找到
Workflow permissions
,勾选下面的选项后重新执行actions如果上述配置了还不行继续尝试下面的方法
-
创建新token,删除旧 secrets
来到用户 settings 页面创建一个新的token
settings 中找到如下设置
删除原来的
Repository secrets
,新建填入上面刚创建的token后,重新执行 actions 后成功此时,查看github远程仓库 gh-pages分支发现已经是打包好的产物了
然后访问你的 pages 就会发现是最新内容。
例如我的站点: silin001.github.io/docs
github代码同步gitee
使用 github actions
来实现 github 提交代码后且自动同步gitee (gitee的actions是需要开通pro会员的)
别人造好的轮子,直接拿来使用 Gitee Pages Action · Actions · GitHub Marketplace
actions同步gitee报错
-
错误1
Load key "/root/.ssh/id_rsa": error in libcrypto git@github.com: Permission denied (publickey). fatal: Could not read from remote repository.
翻译: 意思是说加载密钥错误、公钥权限被拒绝,无法从远程存储库中读取。
由于最开始我没仔细去看这个提示再加上我一直坚信我之前配置过的密钥和公钥是没有问题的,所以我就直接跳过这个提示,而关注了下面的这段话:
Please make sure you have the correct access rights and the repository exists. fatal: detected dubious ownership in repository at '/github/workspace' To add an exception for this directory, call: git config --global --add safe.directory /github/workspace
翻译: 请确保您拥有正确的访问权限,并且存储库存在。 致命:在“/github/workspace”的存储库中检测到可疑的所有权 要为此目录添加异常,请调用
git config --global --add safe.directory /github/workspace
我调用了上述指令,重新提交测试发现没啥用。期间浪费不少时间,上网查询及请教他人都没能解决。
-
错误2
某天的晚上11点多,看着报错信息沉思了一会后,突然发现yml配置文件中使用的是 ssh的仓库地址,我想的改成https地址尝试一下呢?
然后提交测试报错如下:
fatal: could not read Username for '[https://gitee.com](https://gitee.com/)': No such device or address
ps: 致命:无法读取“”的用户名 gitee.com':没有这样的设备或地址
仔细查看发现我少写了个
.git
啊啊啊,真的要裂开了啊!!!但是修改测试后还是失败。此时这个
username
引起我的注意,我在想难道是我的git全局配置的name 有问题吗?
查看:git config --global user.name
name没问题
查看:git config --global user.email
wc???为什么是 11.com 不应该是
qq.com
吗!!!于是赶紧修正!此时的我已经不再坚信我的密钥设置是没问题的了, 顺便查看下私钥:
cat ~/.ssh/id_rsa
-----BEGIN OPENSSH PRIVATE KEY----- ... xxxxxxxxxxxxxxxxb3BlbnNzaCs21rZXktdaxjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcnxxxxxxxxxxx1rZXktdaxjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAA ... -----END OPENSSH PRIVATE KEY-----
大致是这样一个内容,此时我模糊的想起来,在项目下配置
secrets.GITEE_RSA_PRIVATE_KEY
时我好像是没复制上这个东西:于是乎赶紧重新修改
secrets.GITEE_RSA_PRIVATE_KEY
的值,提交代码测试。
双平台代码同步成功
-
github仓库代码
-
gitee仓库代码
此时发现,github提交代码后,gitee对应仓库就自动同步了。达到了双平台仓库代码同步的目的。
总结
遇到问题不要着急盲目的去解决,一定要仔细查看关键信息,然后要思考,这个过程务必要认真仔细。当一个方法行不通就要考虑换个方式、方向去思考、尝试。