在使用Hugo发布个人博客内容时,每次都需要将写好的md文件拷贝到contents/posts
目录下,图片等静态资源拷贝到static
目录下,然后还需要人工执行hugo
命令,比较麻烦,而且写好的md文件也不易管理。鉴于以上问题,我们可以使用git管理博客文件,然后使用jenkins自动发布博客。
创建Git项目
我们可以在gitee(开源中国)或者是github上创建博客项目,至于git如何使用,怎么在上述平台创建项目不在本文的讨论范围以内,读者可以自行解决。
配置Jenkins项目
Jenkins的安装也不在本文的讨论范围内,读者可自行解决安装问题。
创建一个自由风格的Jenkins项目
配置内容来源
由于我们使用git进行源文件的管理,所以Source Code Management配置中我们选择Git。然后分别配置 Repository URL`,
Credentials,
Branch Specifier` 这三项内容:
Repository URL 表示我们的git项目路径。
Credentials 表示我们访问git项目的凭证,此项我们需要在凭据->系统
下添加域,并配置域的访问凭证。
填写完成域名称以及描述之后会出现如下页面:
需要填写用户名和密码,其他保持默认就可以了。如果我们使用的是gitee,就需要填入gitee的账号、密码了。
配置好访问凭证之后,在Credentials的选择框里就会出现刚才配置的域名称了。
Branch Specifier 表示我们使用哪个分支作为内容来源。当出发构建时,会从这个分支下拉去内容。
配置构建触发机制
常见的构建触发机制包括定时,人工,远程钩子等,这里我们选择远程钩子触发,这种方式需要git平台支持。
Authentication Token表示触发钩子需要的凭证,这里可以随便填一个字符串,此字符串在配置gitee平台时会用到。接下来我们配置gitee平台:
URL根据Jenkins平台的地址进行配置,Token和Password需要填写之前在Jenkins平台里配置的Authentication Token字段。
配置构建环境
SSH Server需要我们先配置需要远程连接的服务器(也就是最终博客文件存在的服务器)。向服务器上传文件我们需要通过Publish over SSH插件来实现,读者可以自行安装,安装完成后在Jenkins的全局配置中做如下配置:
Passphrase填写服务器的登录密码
SSH Servers.Name填写服务器的名称
SSH Servers.Hostname服务器IP地址
SSH Servers.UserName登录服务器使用的用户名,需要和上边的密码配套。
SSH Servers.Remote Directory文件存在目录,上传来的文件都会放置在这个目录下。
Transfers.Source files通过通配符配置需要传输的文件,这里我们配置为**
表示传输所有内容。
Transfers.Remote directory 文件存放的路径,相对于SSH Servers.Remote Directory里配置的路径。
发布博客
这里我们选择通过ssh远程执行脚本的方式发布博客:
SSH site这里的远程服务器需要提前在Jenkins的全局配置里配置,配置内容如下:
Hostname 远程服务器的IP地址
Port SSH链接需要的端口,一般为22
Credentials 登录凭证,需要参考上边的方式配置域,然后配置域访问凭证。
Command 需要执行的命令,这里我们选择执行脚本/home/ubuntu/scripts/blog.sh
,命令如下:
sh /home/ubuntu/scripts/blog.sh
blog.sh脚本的内容如下:
#!/bin/bash
echo "start publish..."
echo "remove old posts md files"
rm -rf /websitepath/content/posts/*.md
cd /home/ubuntu/temp/blog
echo "copy new md files to posts"
cp -rf ./*.md /websitepath/content/posts
echo "copy images to static/images"
cp -rf ./images/* /websitepath/static/images
cd /websitepath
echo "publish website"
/home/ubuntu/software/hugo/hugo
echo "publish end."
基本流程就是拷贝md和图片资源文件,然后执行hugo发布博客。详细过程可以参看echo的输出内容。
注 websitepath为实际的Hugo项目目录
错误解决方法
在整个流程中遇到了两个异常,异常内容以及解决方法如下:
1.[Jenkins]Error:403 No valid crumb was included in the request
错误的原因是因为 jenkins 默认安全设置里面开启了防止款站点请求伪造
,
取消勾选这一项就可以了,位置: Jenkins > 全局安全配置 > CSRF Protection
2.Error 403 Authentication required
<!--
You are authenticated as: anonymous
Groups that you are in:
Permission you need to have (but didn't): hudson.model.Hudson.Read
... which is implied by: hudson.security.Permission.GenericRead
... which is implied by: hudson.model.Hudson.Administer
-->
错误的原因是因为 jenkins 默认安全设置里面不允许匿名用户进行任何操作,允许就可以了, 位置: Jenkins > 全局安全配置 > Enable security > Allow anonymous read access