Hugoで作ったサイトをCircleCI 1.0でAWSにデプロイする

CircleCIのバージョン

CircleCIのバージョンには1.0と2.0がありますが今回は1.0で行なっています。

2.0だと自分でカスタマイズしたDockerfileを使えますが、Hugoをビルドしてデプロイするくらいであれば事前に入れておくものがほとんどないので設定が簡単な1.0を使いました。

AWSの設定

IAMユーザーの作成

DeleteObject、ListBucket、PutObjectへアクセスできるユーザーを作成します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "aehwzxuew",
            "Effect": "Allow",
            "Action": [
                "s3:DeleteObject",
                "s3:ListBucket",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::example.com",
                "arn:aws:s3:::example.com/*"
            ]
        }
    ]
}

バケットポリシーの設定

匿名ユーザーへの読み取り専用アクセス許可の設定をします。

{
  "Version":"2012-10-17",
  "Statement":[
    {
      "Sid":"AddPerm",
      "Effect":"Allow",
      "Principal": "*",
      "Action":["s3:GetObject"],
      "Resource":["arn:aws:s3:::example.com/*"]
    }
  ]
}

CircleCIの設定

AWSにアクセスするための設定をCircleCIにします。AWS Permissionsを選択して

AWS permissions


IAMユーザーを作った時に表示されるAccessKeyとSecretAccessKeyを入力します。

AWS keys

circle.ymlの設定

circle.ymlを↓のように記入してgit管理しているルートディレクトリに置きます。
そして、hugoとswscliをインストールしてhugoコマンドでpublic以下に書き出してs3のバケットにアップロードします。

machine:
  timezone: Asia/Tokyo

dependencies:
  pre:
    - go get -v github.com/spf13/hugo
    - pip install awscli

test:
  override:
    - hugo

deployment:
  master:
    branch: master
    commands:
      - aws s3 sync public/ s3://example.com