この土日、定期的に動かしているブログのビルドが失敗するようになりました。調べてみるとブログのリンクカードみたいなのを作るために自前のサーバーにOGPを取りに行く際、とあるリンク先のドメインが見つからずに500エラーで返って来ていることが原因でした。ドメインの有効期限が切れたか何かだと思われます。

ちなみにリンクカードやサーバーについてはこのへんとか、

このへんとかに、書いてあります。

というわけでサーバー側のコードを修正しました。エラーで失敗したときに400番台、500番台を返すとビルドが止まるようだったので、OGPの取得に失敗したとしても200を返すようにしました。

対応前

1og, err := opengraph.Fetch(url)
2if err != nil {
3	return ctx.String(http.StatusInternalServerError, fmt.Sprintf("Error: %s", err.Error()))
4}

対応後

1og, err := opengraph.Fetch(url)
2if err != nil {
3	m := map[string]string{"error": fmt.Sprintf("Error: %s", err.Error())}
4	return ctx.JSON(http.StatusOK, m)
5}

元々はFetchでエラーが返ってきたときは500エラーで文字列を返していたのを、200でエラーのJSONを返すように変更。そして、Hugo側のHTML(というかテンプレート)でerrorの有り無しで分岐をすることに。

1{{- $json := getJSON .Site.Params.OgpJsonBaseUrl $url -}}
2{{- $error := $json.error -}}
3{{ if eq $error  nil }}
4  元々のHTML
5{{ else }}
6  <a href="{{ $url }}" target="_blank">
7    {{$url}}
8  </a>
9{{ end }}

エラー有りで返ってきた場合は単にURLの文字列のリンクとするように変えました。これで無事ビルドできるようになりました。