概要
wercker.yml で docker コンテナを利用して Jekyll をビルドし、それをデプロイする方法を解説します。あとちょいちょいエラーではまったのでそのあたりはエラーメッセージとともに補足します。
結論(wercker.yml)
wercker.yml はこんな感じ。
build と deploy で使う box を分けています。 build は jekyll/jekyll で deploy は alpine を利用しています。 ビルド用で デプロイ
build:
box:
id: jekyll/jekyll
username: $DOCKER_USERNAME
password: $DOCKER_PASSWORD
steps:
- script:
name: preparation
code: |
mkdir _site
mkdir .jekyll-cache
jekyll build --trace
deploy:
box:
id: alpine
username: $DOCKER_USERNAME
password: $DOCKER_PASSWORD
steps:
- script:
name: preparation
code: |
apk add openssh
apk add rsync
mkdir ~/.ssh/
touch /etc/ssh/ssh_known_hosts
chmod 644 /etc/ssh/ssh_known_hosts
- mktemp:
envvar: PRIVATEKEY_PATH
- create-file:
name: write key
filename: $PRIVATEKEY_PATH
content: $VPS_KEY_PRIVATE
overwrite: true
hide-from-log: true
- script:
name: transfer application
code: |
pwd
ls -la
ls _site
rsync -avzr -e "ssh -i $PRIVATEKEY_PATH -o StrictHostKeyChecking=no -o UserKnownHostsFile=no" $WERCKER_ROOT/_site/* youruser@hostname:/path/your/site_dir/
ハマりどころ
docker コンテナへのリクエストが多すぎると怒られる
fetch failed to pull image ruby-node: API error (500): {"message":"toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit"}
docker のコンテナを利用するにあたって docker hub のユーザーIDやパスワードを指定しない場合、上記のエラーにひっかかります(dockerhub は未ログインユーザーの APIアクセスレートは IP で判断している模様)。そこで box で docker のユーザーIDとパスワードを指定します。
box:
id: jekyll/jekyll
username: $DOCKER_USERNAME
password: $DOCKER_PASSWORD
$DOCKER_USERNAME
と $DOCKER_PASSWORD
は wercker の Environment タグから設定しておいてください。
build 時にディレクトリ作成権限がないといわれる
build を実行すると .jekyll-cache
や _site
の作成権限がないといわれます。
`mkdir': Permission denied @ dir_s_mkdir - /pipeline/source/.jekyll-cache (Errno::EACCES)
wercker.yml を通して事前に作っておけば問題ないです。
steps:
- script:
name: preparation
code: |
mkdir _site
mkdir .jekyll-cache
jekyll build --trace
alpine での rsync について
alpine はほぼ何も入っていないので ssh client からインストールする必要があります。
/root/.ssh does not exists, creating it
failed: /etc/ssh does not exist. Cause: ssh-client software probably not installed.
とか
/root/.ssh does not exists, creating it
/etc/ssh/ssh_known_hosts does not exists, touching it and chmod it to 644
とかのエラーメッセージですね。
これも事前に準備してしまいましょう。
- script:
name: preparation
code: |
apk add openssh
apk add rsync
mkdir ~/.ssh/
touch /etc/ssh/ssh_known_hosts
chmod 600 /etc/ssh/ssh_known_hosts
ってここまで書きましたが、近いうちに bitbucket pipline に移行します。