本文用于记录将hugo博客部署至github托管过程中遇到的问题及解决办法,希望能帮助和我一样的萌新避坑
托管过程(github action教程)
创建仓库
首先在github创建两个仓库,一个用于存储博客源文件,文件名随意,这里用blog-file
,这个设置为private私密;另一个仓库用github官方托管域名username.github.io
来命名,设置为公开,如下图所示:
本地获取ssh密钥
终端输入命令:
1git config --global user.email "you@example.com" #you@example.com替换为你的邮箱并回车
2git config --global user.name "Your Name" #Your Name替换为你的名字并回车
生成ssh key,在git bash中输入以下命令:
1ssh-keygen -t rsa
mac生成的密钥将存储在~/.ssh
路径下
打开公钥文件 id_rsa.pub/id_rsa_work.pub
,
复制所有内容,在GitHub上打开Setting -> SSH and GPG keys -> add SSH key
,将复制的内容粘贴在里边,保存。
创建github token
在 GitHub 账户下 Setting - Developer setting - Personal access tokens(classic)
下创建一个不过期(no expiration)的 Token,权限需要开启 repo
与 workflow
。
(注意:token只会显示一次,请及时保存)
私密源仓库设置token
在博客源仓库(blog-file)的 Settings - Secrets - Actions
中添加 PERSONAL_TOKEN
环境变量为刚才的 Token,这样 GitHub Action 就可以获取到 Token 了。
创建workflows发布文件
在本地博客主目录下创建 .github/workflows
目录,然后创建deploy.yml
文件。我的 GitHub Action 配置为,自动发布示例配置如下:
1name: deploy
2
3on:
4 push:
5 workflow_dispatch:
6 # schedule:
7 # Runs everyday at 8:00 AM
8 # - cron: "0 0 * * *"
9
10jobs:
11 build:
12 runs-on: ubuntu-latest
13 steps:
14 - name: Checkout
15 uses: actions/checkout@v2
16 with:
17 submodules: true
18 fetch-depth: 0
19
20 - name: Setup Hugo
21 uses: peaceiris/actions-hugo@v2
22 with:
23 hugo-version: "latest"
24 extended: true
25 # 这里最好与本机hugo版本一致,例如:hugo-version: "0.121.2"
26 # 有时github部署会自动更新hugo版本导致部署失败
27 # extended来控制是否为扩展版本
28
29 - name: Build Web
30 run: hugo
31
32 - name: Deploy Web
33 uses: peaceiris/actions-gh-pages@v3
34 with:
35 personal_token: ${{ secrets.PERSONAL_TOKEN }}
36 external_repository: Bla1n/Bla1n.github.io
37 publish_branch: main
38 publish_dir: ./public
39 commit_message: ${{ github.event.head_commit.message }}
external_repository
替换为自己的公开博客git
本地快捷push文件
在本地博客根目录文件夹下新建一个名为deploy.sh
的文件用于一键部署博客,在deploy.sh
中填入如下内容,其中最后一行代码里的git@github.com:Bla1n/blog-file.git
需要更改为你自己仓库的地址:
1hugo #构造你的blog
2
3git init #初始化git
4
5git add -A
6
7git commit -m 'deploy'
8
9git push -f git@github.com:Bla1n/blog-file.git main #向存储库推送
初次使用
之后再本地调试完博客后,即可在终端运行如下命令则可以一键部署到github
1bash deploy.sh
配置自己的域名
等待Github Action
完成后,我们需要开启GitHub page
,首先进入公开博客仓库,然后打开设置,在如图示位置进行设置(不会的可以自行搜索)
生效结果
push仓库会重置域名问题
每次push后会发现公开博客仓库设置的自己的域名会被重置为默认域名
解决方法:在content目录下创建一个名为CNAME的文件,内容填入自己的域名即可
本地push失败彻底解决办法
在本地push几次后,突然有一天push不成功了,报错类似如下(忘记截图了)
1ssh: connect to host github.com port 22: Connection timed out fatal: Could not read from remote repo
解决办法:在~/.ssh
路径下,创建一个名为config的文件,内容如下:
1Host github.com
2User xxxxqq.com(这里换成自己的邮箱)
3Hostname ssh.github.com
4PreferredAuthentications publickey
5IdentityFile ~/.ssh/id_rsa
6Port 443
这样默认push使用https协议,即可成功。
deploy突然失败
平常更新都能deploy成功,但有一次上传文章突然就失败了。起初以为是文章的原因,结果回退commit版本依然是部署失败,报错如下:
1ERROR TOCSS: failed to transform "/scss/style.scss" (text/x-scss). Check your Hugo installation; you need the extended version to build SCSS/SASS with transpiler set to 'libsass'.: this feature is not available in your current Hugo version, see https://goo.gl/YMrWcn for more information
2Total in 539 ms
3Error: error building site: TOCSS: failed to transform "/scss/style.scss" (text/x-scss). Check your Hugo installation; you need the extended version to build SCSS/SASS with transpiler set to 'libsass'.: this feature is not available in your current Hugo version, see https://goo.gl/YMrWcn for more information
4Error: Process completed with exit code 1.
按照报错信息把网上的教程都试了一遍,都不行,然后仔细看了一眼报错,说我没使用扩展版本的hugo,但是我本地是用的扩展版本,于是检查配置文件。发现wordflows的配置文件关于hugo版本是这样写的:
1- name: Setup Hugo
2 uses: peaceiris/actions-hugo@v2
3 with:
4 hugo-version: "lastest"
日志上的hugo版本果然不对:
随即查看hugo action官方使用指南,正确写法应该如下:
1- name: Setup Hugo
2 uses: peaceiris/actions-hugo@v2
3 with:
4 hugo-version: "0.121.2"
5 # 这里最好与本机hugo版本一致,例如:hugo-version: "0.121.2"
6 # 有时github部署会自动更新hugo版本导致部署失败
7 extended: true
8 # extended来控制是否为扩展版本