CircleCIに移行

Ken published on
4 min, 631 words

Categories: blog

ブログの管理をBitbucketからGitHubに移行した。ついでにWerckerからCircleCIに移行することにした。Werckerに不満があるわけでもないんだけど、ORACLEに買収されてしまったのでなんとなく不安が…。

これを機に、ブログのテーマの扱いも変更。

ブログのテーマ

ブログはHugoで生成している。テーマはTranquilpeakを使っている。テーマは変更したいんだけど、他に気に入ったテーマがないのでもうしばらくはこのままかな。

このテーマ、少し修正したいところがある。

  • カテゴリ名がURLエンコードされる
  • タイトルを記事名 | ブログ名にしたい
  • RSSを変更したい

テーマそのものを更新するとテーマの管理が大変になるが、Hugoはテーマの部分を上書きする仕組みが存在する。

config.tomlと同じ場所にlayoutsディレクトリを作成することで、テーマのlayoutsディレクトリを上書きしてくれる。

今回はこのようなファイルを追加した。

layouts
├── _default
│   └── rss.xml
├── partials
│   └── head.html
└── taxonomy
    └── category.terms.html

rss.xml
ファイル全体。
URLは/index.xmlになるので注意。

<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>{{ .Site.Title }}</title>
		<link>{{ .Permalink }}</link>
		<description>Recent content on {{ .Site.Title }}</description>
		<generator>Hugo - gohugo.io</generator>
		{{ with .Site.LanguageCode }}
		<language>{{.}}</language>
		{{end}}{{ with .Site.Author.email }}
		<managingEditor>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</managingEditor>
		{{end}}{{ with .Site.Author.email }}
		<webMaster>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</webMaster>
		{{end}}{{ with .Site.Copyright }}
		<copyright>{{.}}</copyright>
		{{end}}{{ if not .Date.IsZero }}
		<lastBuildDate>{{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</lastBuildDate>
		{{ end }}
		<atom:link href="{{.URL}}" rel="self" type="application/rss+xml" />
		{{ range first 15 .Data.Pages }}
		<item>
			<title>{{ .Title }}</title>
			<link>{{ .Permalink }}</link>
			<pubDate>{{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</pubDate>
			{{ with .Site.Author.email }}
			<author>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</author>
			{{end}}
			<guid>{{ .Permalink }}</guid>
			<description>{{ .Summary | html }}</description>
		</item>
		{{ end }}
	</channel>
</rss>

head.html
変更部分のみ表示。

	<title>{{ if eq .Title .Site.Title }}{{ .Site.Title }}{{ else }}{{ .Title }} | {{ .Site.Title }}{{ end }}</title>
	...
	<meta property="og:title" content="{{ if eq .Title .Site.Title }}{{ .Site.Title }}{{ else }}{{ .Title }} | {{ .Site.Title }}{{ end }}">

category.terms.html
変更部分のみ表示。

      {{ $categories := .Params.categories }}

CircleCI

CircleCI用に.circleci/config.ymlを作成する。

version: 2
jobs:
  build:
    docker:
      - image: jnyo/docker-hugo-firebase:latest
    working_directory: ~/blog.teapla.net
    steps:
      - checkout
      - run:
          name: Hugo
          command: |
            git submodule init
            git submodule update
            hugo
      - deploy:
          branch: master
          command: firebase deploy --project "$FIREBASE_PROJECT" --token "$FIREBASE_TOKEN"
          filters:
            branches:
              only: master

git submoduleしているのはテーマをsubmodule化しているため。

$FIREBASE_PROJECT$FIREBASE_TOKENはあらかじめCircleCIの設定を行っておく。

Environment Variables

ブランチ指定、2か所いらないような…。ひとつめのbranch: masterは削除しても大丈夫そうだな。

[-] Sample 2.0 config.yml Files - CircleCI
https://circleci.com/docs/2.0/sample-config/