First the good:
- Circle 2.0 is blazing fast. This solves a big pain point for me, as my old Circle builds were getting kinda slow. I especially like how fast all of the pre-build steps run.
- Being able to build locally is really great.
- Having more control over the cache is great. I need to investigate it more, but I think this might be able to significantly speed up ClojureScript boot builds, as they’ll be able to cache a lot of intermediate results.
Now the not so good:
- The new Circle setup is significantly more complex. I’ve spent around 2 hours setting up a single build, and I’m not even finished. With Circle 1, I could get started in 2 minutes, and incrementally add stuff as I went. With 2.0, I need to put a lot more time up front in.
- I really liked having a defined structure to do my tests in, and the inference was really helpful.
- Setting up a Docker container is something I never used to need to think about. I needed to find one that matched mostly what I needed, and then add more stuff to it to get back up to the rough state of my Circle 1 VM. Having a “CircleCI everything container” would be a big help for getting started.
- Setting up gcloud was quite tricky as the Google docs for non-interactive installs don’t seem to work, and the path updating didn’t seem to work. This wasn’t something I needed to think about in 1.
- While I love the control over caching, it takes a bit more thought to get it right now that caches are immutable. This seems like it’s going to be a big pain point for people as they upgrade.
- The Docker container runs the user as root (by default?). Clojure build tools don’t like being run as root, so you need to work around that. I’m not very familiar with Docker so I don’t know if there’s a way for me to change this. Circle 1 didn’t have this problem.
- The best practices discourage mutable tags, but some of the language guides use them.
- The caching docs should make it very clear that caches are immutable, and also show the trick for caching on partial keys.
- I wanted to SSH into my Docker container locally to check some things out, but I couldn’t see any docs or instructions in the CLI for this.
Overall, I feel like Circle 2.0 is like doing CI on hard mode. I really appreciate the speed improvements, but I wouldn’t recommend migrating the rest of our companies builds just yet. I’m sure it will get better over time, but at the moment it feels like I’ll need to do a lot of manual labour and thinking to get it right.
I just remembered, one of the big reasons why we used Circle was that there was nothing to setup to get a headless Chrome running for browser testing. Doing the same in a Docker container seems quite difficult.