Using an external blobstore for your BOSH release is considered a best practice, since you don’t want to pollute your git repo with big files. However there are some downsides to this approach:
- Need a AWS or GCP account; or need an internal compatible blobstore
- Sharing manage credentials to upload blobs (private.yml)
- Restricted environments sometimes don’t allow access to Internet
- Pull Requests to update blobs might not be possible for people without accsss to secret credentials
Luckily there is another option, Git Large File Storage (LFS). It works with GitHub and GitLab. Using it with your newly created boshrelease is really easy. We switch to the local
blobstore provider:
DIR=foo-boshrelease
bosh init-release --git --dir=${DIR}
cat <<EOT >> ${DIR}/config/final.yml
blobstore:
provider: local
options:
blobstore_path: final_blobs
EOT
cat <<EOT > ${DIR}/.gitattributes
/blobs/** filter=lfs diff=lfs merge=lfs -text
/final_blobs/** filter=lfs diff=lfs merge=lfs -text
EOT
After this, files created by bosh add-blobs
and bosh create-release --final
can be committed to your repo with git commit
and will be stored with git lfs. No more need for bosh sync-blobs
, instead just git commit && git push
.