Initial CircleCI experiments
Travis CI has long been my hosted continuous integration service of choice for my open source repos but there have been some recent [changes](https://hub.packtpub.com/idera-acquires-travis-ci-the-open- source-continuous-integration-solution/) and departures that inspired me to look around and see what else the modern world has to offer. I run a local Jenkins for my own personal use but it’s not hardened to a degree where I’d trust it to run random pull requests from the wild internet so a hosted, free, solution would be an ideal place to start from. CircleCI, having recently employed a few ex-coworkers, friends and internet acquaintances looked like a very promising candidate.
I picked one of my older repositories, that I intended to archive, as my guinea pig and logged into CircleCI. After clicking on “Add projects” and selecting my expendable repository I created a new branch and raised a pull request to add CircleCI builds.
The code itself is contained in
.circleci/config.yml and was pretty self explanatory.
version: 2.1 jobs: build: docker: - image: circleci/ruby:2.5.0 steps: - checkout - run: name: "Install the dependencies" command: bundle install --jobs=4 --retry=3 - run: name: "Run the specs" command: bundle exec rake spec
I’m not reproducing all the features I use in TravisCI, such as a multiple ruby and gem version combination build matrix, but as a starting point CircleCI does let you get up and iterating quickly. You can see an example of what the job outputs look like on the puppet-liquidtemplates job dashboard.
The initial failing builds are a good reminder not to add a new project to CircleCI before adding the actual CircleCI configuration to the repository, otherwise it’ll fail due to not knowing what to actually build.
After a few
git push && wait-for-build cycles I dug a little deeper
into the provided tooling and installed the CircleCI command line tool in
a virtual machine that has docker installed. This allows you to
process (expand to see the implicit values) your
configuration to help debug issues before they leave your local machine.
# Installing the command line tool and configuring auth $ sudo curl -fLSs https://circle.ci/cli | bash circleci setup CircleCI API Token: -------------------------- API token has been set. CircleCI Host: https://circleci.com CircleCI host has been set. Setup complete. # Check your configuration is valid and well formed. $ circleci config validate Config file at .circleci/config.yml is valid. # Show your config with all the values expanded circleci config process .circleci/config.yml
If you have docker installed and configured you can even run the build locally using the same configuration:
$ circleci local execute ====>> Spin up Environment ...snip... Using build environment variables CIRCLECI=true CIRCLE_BRANCH=master CIRCLE_BUILD_NUM= CIRCLE_JOB=build CIRCLE_NODE_INDEX=0 CIRCLE_NODE_TOTAL=1 CIRCLE_REPOSITORY_URLfirstname.lastname@example.org:deanwilson/puppet-liquidtemplates.git ...snip... Success!
I had some issues running the command line tool against config specifying
version: 2.1 but I don’t think I’m using any features that require
that exact version so changing it locally to
version: 2 allows me to
I’m not in a massive rush to move my existing projects off Travis CI, which has continued to provide me with all the features I’ve become accustomed to, but it’s always a good idea to see where the industry has moved to and know what your options are. CircleCI is a solid contender for my newer projects and if I ever do need to move it’d looks like a good home.