ローカルマシンから Bitbucket のリポジトリにプッシュした時に Hugo を自動ビルドして VPS へ自動デプロイする.リポジトリの監視とビルドを Wercker で行う.
最終的な wercker.yml
Hugo を VPS へ自動デプロイ(rsync) するための最終的な wercker.yml
は次.自動デプロイの概要とハマった所を紹介する
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
box: debian
build:
steps:
- script:
name: install git
code: |
apt-get update
apt-get install -y git
- script:
name: initialize git submodules
code: |
git submodule update --init --recursive
# Install hugo binary and run hugo
- arjen/hugo-build:
version: 0.14
- script:
name: gzip html/xml/css/js
code: |
apt-get update
apt-get install -y gzip
find . -type f -name '*.html' -exec gzip --keep --best "{}" \;
find . -type f -name '*.xml' -exec gzip --keep --best "{}" \;
find . -type f -name '*.css' -exec gzip --keep --best "{}" \;
find . -type f -name '*.js' -exec gzip --keep --best "{}" \;
deploy:
steps:
- script:
name: install ssh and rsync
code: |
apt-get update
apt-get install -y ssh
apt-get install -y rsync
- add-to-known_hosts:
hostname: ghent.mano.xyz
- mktemp:
envvar: PRIVATEKEY_PATH
- create-file:
name: write key
filename: $PRIVATEKEY_PATH
content: $VPS_KEY_PRIVATE
overwrite: true
hide-from-log: true
- script:
name: rsync Hugo generated files
code: |
rsync -avzr --delete -e "ssh -i $PRIVATEKEY_PATH -o StrictHostKeyChecking=no -o UserKnownHostsFile=no" ${WERCKER_SOURCE_DIR}/public/ [email protected]:~/public/
|
自動デプロイの概要
通常(Wercker なしの場合)ブログに投稿する際は次のような流れとなる.
- ローカルにある Hugo ディレクトリ(リポジトリ)に変更を加える
- ローカルでビルドして,変更点を確認後,Bitbucket にプッシュする
- ローカルでデプロイ用にビルドする
- ローカルで html/css/js などを高速化のため gzip で圧縮する
- 必要なファイルだけリモートのVPSへコピーする
Wercker を利用する場合,次のような操作に短縮される.
- ローカルにある Hugo ディレクトリ(リポジトリ)に変更を加える
- ローカルでビルドして,変更点を確認後,Bitbucket にプッシュする
ステップ 3, 4, 5 が Wercker 上で自動で実行される.ステップ 3, 4 が wercker.yml
の build
にステップ 5 が deploy
にそれぞれ対応している.
Hugo のサイト生成は arjen/hugo-build
を利用する.具体的な処理内容は https://github.com/ArjenSchwarz/wercker-step-hugo-build で確認できる.
Git のサブモジュール
リポジトリの中に git のサブモジュールがあるので git submodule update
しなくてはビルドが成功しない.そして素の debian には git
がインストールされていないので, まず apt-get
で git
をインストールする.
1
2
3
4
5
6
7
8
9
|
- script:
name: install git
code: |
apt-get update
apt-get install -y git
- script:
name: initialize git submodules
code: |
git submodule update --init --recursive
|
rsync によるデプロイ
rsync
と ssh
でビルドしたファイルをリモートのVPSにコピーするが,素の debian には ssh
と rsync
が含まれていなようなので追加する.リモートのVPSでも rsync
が必要なのでインストールしておくこと.また,リモートのVPS側でデプロイ専用ユーザ wercker
を作成しておく.
1
2
3
4
5
6
|
- script:
name: install ssh and rsync
code: |
apt-get update
apt-get install -y ssh
apt-get install -y rsync
|
Wercker での ssh の使い方は下記が詳しい.
参考リンク
- Hugo の Wercker に関するドキュメント
- Hugo ではなく Jekyll の場合
- VPS ではなく GitHub Page の場合
作成者
Toru Mano
最終更新時刻
2023-01-01
(c70d5a1)