With GitLab CI it is incredibly easy to build a Hugo website (like mine); you can even host it there. But in my case I use AWS S3 and Cloudfront because it is cheap and easy to setup. The CI pipeline to build and upload the static website is also straightforward with the following .gitlab-ci.yml
:
variables:
GIT_SUBMODULE_STRATEGY: recursive
stages:
- build
- upload
build:
stage: build
image: monachus/hugo
script:
- hugo version
- hugo
only:
- master
artifacts:
paths:
- ./public
upload:
stage: upload
dependencies:
- build
image: dobdata/primo-triumvirato:v0.1.7
script:
- aws --version
- aws configure set region $AWS_DEFAULT_REGION
- aws s3 sync --delete ./public s3://$S3_BUCKET
only:
- master
The build stage generates the static website, which is shared with successive stages as an artifact. The upload stage uses my primo-triumvirato image, but this can be any image that has the aws cli installed. The sync --delete ...
command recursively copies new and updated files from the source directory to the destination and deletes files that exist in the destination but not in the source.
Make sure you add the following variables in your GitLab CI project:
S3_BUCKET
: the name of the S3 bucketAWS_ACCESS_KEY_ID
: provided by AWSAWS_SECRET_ACCESS_KEY
: provided by AWSAWS_DEFAULT_REGION
: the bucket region