Hugo | iii threetreeslight

April 30, 2018

build hugo on ci

deployに備えてblogのci環境を構築する。 stackshare - ci を見る限りcircleciがshare的にも無難。 とはいえ、使い慣れたツールっていうのも味気ないが、将来的にはconcourse ci に載せ替えるとしてとりあえずはcircleciを利用する。 circleciで準備されたimageを利用するのだが、その中でやれ何かをinstallするとか辛いし時間がもったいない。 速さは正義なので、imageをpullしてcodeをmountし、buildするという流れが望ましい。 create docker image まずhugoが稼働するdocker imageをつくる。 世にあるやつがメンテナンスされていないのと、host側の設定をcopyするようなものだったので、動きやすさを含めて自分で作成。 https://hub.docker.com/r/threetreeslight/docker-hugo/ executer type どうするか? executerをdockerで動かしたときに、container内にcheck-outしたfileをどうやってmountするか。 circleciを見る限りvolumeを共有することは困難である。そりゃそうだよね。 https://circleci.com/docs/2.0/executor-types/#using-docker とはいえmachineを使うと Start time が 30-60 sec という。 このリードタイムは許せない。 Remote Docker そこで見つけたのがRemote Dockerという機能 https://circleci.com/docs/2.0/building-docker-images/ To build Docker images for deployment, you must use a special setup_remote_docker key which creates a separate environment for each build for security. This environment is remote, fully-isolated and has been configured to execute Docker commands. ... Read more

April 30, 2018

build hugo on ci

deployに備えてblogのci環境を構築する。 stackshare - ci を見る限りcircleciがshare的にも無難。 とはいえ、使い慣れたツールっていうのも味気ないが、将来的にはconcourse ci に載せ替えるとしてとりあえずはcircleciを利用する。 circleciで準備されたimageを利用するのだが、その中でやれ何かをinstallするとか辛いし時間がもったいない。 速さは正義なので、imageをpullしてcodeをmountし、buildするという流れが望ましい。 create docker image まずhugoが稼働するdocker imageをつくる。 世にあるやつがメンテナンスされていないのと、host側の設定をcopyするようなものだったので、動きやすさを含めて自分で作成。 https://hub.docker.com/r/threetreeslight/docker-hugo/ executer type どうするか? executerをdockerで動かしたときに、container内にcheck-outしたfileをどうやってmountするか。 circleciを見る限りvolumeを共有することは困難である。そりゃそうだよね。 https://circleci.com/docs/2.0/executor-types/#using-docker とはいえmachineを使うと Start time が 30-60 sec という。 このリードタイムは許せない。 Remote Docker そこで見つけたのがRemote Dockerという機能 https://circleci.com/docs/2.0/building-docker-images/ To build Docker images for deployment, you must use a special setup_remote_docker key which creates a separate environment for each build for security. This environment is remote, fully-isolated and has been configured to execute Docker commands. ... Read more

April 30, 2018

Don't work hugo autorebuild with dinghy

host側のvolumeをmountしているのだが、その変更をwatcherが補足しない = LiveReloadが動かないのはかなり辛い。 そのため、hugoとdinghyのコードを追う。 そもそもdinghyがmountしたhostのfseventを伝搬できているのか? dinghyは fsevent を vmに伝搬しているはず。 そのため、 inotify-tools を使ってどのようなeventとして伝搬されているのか確認する。 $ docker run -it --rm -v $PWD:/app debian:latest sh % apt-get update && apt-get install -y inotify-tools % cd /app % inotifywait -rme modify,attrib,move,close_write,create,delete,delete_self . Setting up watches. Beware: since -r was given, this may take a while! Watches established. # fileをcontainer内で作成するとcreateのeventを補足する $ docker exec 2a5e08389e9b touch /app/foo.md ./ CREATE foo.md ./ ATTRIB foo.md ./ CLOSE_WRITE,CLOSE foo.md . ... Read more

April 29, 2018

Dockerize hugo on local

blogをtumblerからhugo に移す。 それにともない、まずはlocal開発環境のdockerize。 ちょっとはまったところ そりゃそうだよねってところなのですが dinghy(docker-machine)経由でアクセスするので、assetsの表示を直す hugoの組み込みサーバーはlocalhostをdefaultでbindしている ここらへんはbaseURLとbindを指定することで解決。 # docker-compose.ymlversion:"3"services:blog:build:context:.volumes:-.:/appports:-"1313:1313"command:["hugo","server","--baseURL=http://${DOCKER_HOST_IP}:1313","--bind=0.0.0.0"] watcherが期待通り動いていないので、そこは後日