Test Kitchen on Travis CI
The world of Chef cookbook development and testing has improved a ton in the last year or two. We can be far more confident in our configuration quality since we run them via Test Kitchen using our internal custom AMIs.
At this point, Berkshelf can't directly index cookbooks hosted in chef-server and a Berkshelf API server is required. We had need for multiple configurations during development and I wanted to save every engineer on the team from running their own API server locally.
We use Travis CI to test our cookbooks and why not have the server running right where the information is needed. To simplify this example, I replaced hosted chef in the config.json
with the Supermarket configuration but this would work with any of the supported endpoints.
ENV['BERKSHELF_API_PATH']
is set to the root of the repository to override the default of~/.berkshelf/api-server
- Travis encrypted environment variables are provided for
aws_access_key_id
andaws_secret_access_key
- The SSH private key is added via
travis encrypt-file
- Cache for APT and Bundler are both enabled to speed up test runs
- Package containing
libarchive.so
installed forberks-api
dependency - AWS resource tags are applied to the EC2 instances to help identify them
After figuring out the Bundler cache hiccups, I ran into an issue that one of my coworkers had reported earlier this year. As pointed out there, uploading compressed tarballs or switching to sftp
may be the best course of action but for now removing the empty directories results in a massive performance improvement.
The trickiest part of this test was getting the IAM configuration correct, so I'll explain that in another post.