简单记一下hugo和主题的使用方法
安装
最简单常用的方法(官网https://gohugo.io/ 安装指引) 方法1:下载可执行文件,然后设置PATH环境变量 方法2:管理包方式安装,但我一直没安装管理包工具
go程序一般不用安装,除非主题需要用go模块
主题
方式1: 添加git子模块
git submodule add https://github.com/reponame/theme-name.git themes/theme-name
更新
git submodule update --remote
或
cd themes/hugo-theme-luna
git pull
方式2: 直接clone主题仓库到themes目录 更新:
cd themes/hugo-theme-luna
git pull
配置
hugo.toml是hugo的配置文件、主题配置文件一般是config.toml或config.yaml。 主题配置一般会替代hugo配置,如果要同时存在的话要在hugo上设置(还不了解), 一般用主题配置就行,如何配置详看主题说明,每个主题不一样。
语言配置
如果站点有多种语言,要把文章分开放在不同的文件夹里,可以配置默认语言和文章目录
内容
参考文档:大概了解就行
目录结构一目了然
文档索引有两种方式,一是 path/target/index.md
,二是 path/target.md
.
└── content
└── about
| └── index.md // <- https://example.com/about/
├── posts
| ├── firstpost.md // <- https://example.com/posts/firstpost/
| ├── happy
| | └── ness.md // <- https://example.com/posts/happy/ness/
| └── secondpost.md // <- https://example.com/posts/secondpost/
└── quote
├── first.md // <- https://example.com/quote/first/
└── second.md // <- https://example.com/quote/second/
hugo通过检测文档的layout方式来把文档渲染成目标html,如文章、主页、分类页、标签页、归档页、搜索页,以及主题定制的页面等。
要访问分类、标签、归档、搜索页面,需在访问路径对应的目录下创建index.md文件:(以下例子是单语言环境下的说明)
content/categories/index.md
content/tags/index.md
content/archives/index.md
content/search/index.md
或
content/categories.md
content/tags.md
content/archives.md
content/search.md
并在md元数据中写明layout: "categories"
等
---
layout: "categories"
---
腾讯云cos-cdn刷新
腾讯云COS可以便捷地创建一个cdn自动刷新的云函数,但是云函数是收费服务,只要调用一次以上,下个月就得扣12元月费,不划算,可以自己使用腾讯的sdk来做这件事。
sdk文档 https://cloud.tencent.com/document/sdk 示例 https://console.cloud.tencent.com/api/explorer?Product=cdn&Version=2018-06-06&Action=PurgePathCache
Coding自动构建hugo并上传COS刷新CDN
创建项目 -> 持续集成 -> 构建计划(自定义构建过程)
需要用到腾讯云API密钥,把它们设置为环境变量:“SECRET_ID”和“SECRET_KEY”。
构建流程文本:Jenkinsfile
(复制到构建计划配置文本中,可转为图形编辑界面)
pipeline {
agent any
stages {
stage('检出') {
steps {
checkout([
$class: 'GitSCM',
branches: [[name: GIT_BUILD_REF]],
userRemoteConfigs: [[
url: GIT_REPO_URL,
credentialsId: CREDENTIALS_ID
]]])
}
}
stage('Hugo构建') {
steps {
echo '自定义构建过程开始'
sh '''#echo "获取hugo压缩包 ####### 不稳定,改为仓库上传"
#curl -LO https://github.com/gohugoio/hugo/releases/download/v0.116.1/hugo_extended_0.116.1_linux-amd64.tar.gz
echo "解压hugo程序 #######"
#tar -xf hugo_extended_0.116.1_linux-amd64.tar.gz
tar -xf hugo.tar.gz
echo "给予hugo执行权限"
chmod +x hugo
echo "开始构建..."
#./hugo
./hugo -v --minify --cleanDestinationDir'''
}
}
stage('上传COS并刷新CDN') {
steps {
useCustomStepPlugin(key: 'SYSTEM:cos_upload', version: 'latest', params: [local:'public/',remote:'/',secret_id:'$SECRET_ID',secret_key:'$SECRET_KEY',region:'ap-guangzhou',bucket:'xxxxx-1258145685'])
useCustomStepPlugin(key: 'SYSTEM:exec_py_script', version: 'latest', params: [script:"""""",script_path:'./cos-cdn-flush.py',requirements:"""tencentcloud-sdk-python-cdn""",site_packages:true])
}
}
}
}
要填好COS存储桶信息,把CDN刷新代码放在仓库目录下
刷新CDN的python代码:cos-cdn-flush.py
import os
import json
from tencentcloud.common import credential
from tencentcloud.common.profile.client_profile import ClientProfile
from tencentcloud.common.profile.http_profile import HttpProfile
from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException
from tencentcloud.cdn.v20180606 import cdn_client, models
try:
# 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密
# 代码泄露可能会导致 SecretId 和 SecretKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议采用更安全的方式来使用密钥,请参见:https://cloud.tencent.com/document/product/1278/85305
# 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取
#cred = credential.Credential("SecretId", "SecretKey")
# 从控制台(Conding控制台)设置一组凭证类变量
cred = credential.Credential(
os.environ.get("SECRET_ID"),
os.environ.get("SECRET_KEY"))
# 实例化一个http选项,可选的,没有特殊需求可以跳过
httpProfile = HttpProfile()
httpProfile.endpoint = "cdn.tencentcloudapi.com"
# 实例化一个client选项,可选的,没有特殊需求可以跳过
clientProfile = ClientProfile()
clientProfile.httpProfile = httpProfile
# 实例化要请求产品的client对象,clientProfile是可选的
client = cdn_client.CdnClient(cred, "", clientProfile)
# 实例化一个请求对象,每个接口都会对应一个request对象
req = models.PurgePathCacheRequest()
params = {
"Paths": [ "https://oulh.top" ],
"FlushType": "flush"
}
req.from_json_string(json.dumps(params))
# 返回的resp是一个PurgePathCacheResponse的实例,与请求对象对应
resp = client.PurgePathCache(req)
# 输出json格式的字符串回包
print(resp.to_json_string())
except TencentCloudSDKException as err:
print(err)