WerckerでGitHubのビルド結果をS3へデプロイする

Werckerを使用してGitHubで管理しているブログのビルド結果をS3にデプロイする設定を行いました。

Werckerの公式ドキュメントにしたがってwerkcer.ymlを記述します。

deploy:
    steps:
    - s3sync:
        source_dir: build/
        delete-removed: true
        bucket-url: $AWS_BUCKET_URL
        key-id: $AWS_ACCESS_KEY_ID
        key-secret: $AWS_SECRET_ACCESS_KEY

wercker / s3sync

stepsで使用しているs3syncwerkcer/s3syncと思われます。

wercker / s3syncで発生した問題

このs3syncで複数のエラーに苦しめられました。

発生した問題は以下の3つです。

  1. bucket-urls3://{bucket name}
  2. opts--acl-publicがデフォルト
  3. エラーが発生してもWerckerのパイプラインが正常終了

1. bucket-urlはs3://{bucket name}

当初、http://始まりのURLを記載していたため、Unrecognizable URLのエラーが発生しました。

bucket-urls3://{bucket name}の形式で記載する必要があります。

公式ドキュメントの下の方に”The url should be in the following format: s3://example.com.“と記載されています。

2. optsは–acl-publicがデフォルト

--acl-publicはパブリックアクセス許可でオブジェクトをアップロードしようとします。

対象バケットのPublic access settingsでBlock new public ACLs and uploading public objects (Recommended)Trueになっているとアップロードが拒否されます。

opts--acl-privateを指定することでプライベート設定のオブジェクトをアップロードします。

3. エラーが発生してもWerckerのパイプラインが正常終了

s3syncステップでエラーが発生してもWerckerのパイプライン上はステップが正常終了と判定されます。

Slack等へ正常終了の結果通知を受け取っていても、S3へデプロイできていない可能性があります。

以上の問題を乗り越えて無事にS3へビルドできるようになりました。