Today on a slack, this happened.
AFAIK, GHActions Docker support is “build a docker image from a dockerfile each time”, so you have auditability and a few other things, but you don’t have “very fast reuse”. Whereas CircleCI orbs are Docker images. No rebuilds at invocation time.
Wait, what? Lets read that again.
CircleCI orbs are Docker images.
No, definitely not! Not at all, not even close!
The poster’s comment stemmed from a small discussion about CircleCI from a frustrated user.
Hopefully I can clarify a bit more what an orb is and why you might use it.
Orbs are JUST yaml that you inject into your process (your
config.yml) - you consume that yaml as
executors (and MAYBE a few other things if you’re deep in the weeds).
CircleCI themselves define it:
Ok, great - but can we break that down into something that someone who has used a little bit of CircleCI can grok?
job you consume (yours or one from an orb) consumes an
executor - that executor might come from an orb, or be defined by you inline.
executor defines what execution environment the
commands inside the
job run in - a full virtual machine, or a docker container. A well-defined job in an orb might make these configurable via
job is filled with
steps - and each of those steps are
commands. All commands inside a single job run in the same instance of the defined executor. Other jobs run in different instances, even if they use the same definition.
command you consume is also a series of
commands). There are 3 types of
commands: defined by you, defined in an orb, or a circleci builtin.
So how do we make a job, command, or executor something we can reuse in multiple projects (or make available to the public to use)?
That’s where the orb comes in.
These same (hopefully) familiar concepts are published in a library that CircleCI calls an
If you have more questions, I’m happy to dig deep into this! Schedule a free 30 minute call
A CircleCI orb is just a library of reusable yaml in a specific structure with a distribution mechanism. And like any library, it has it’s own build/test/publish cycle, has expectations of dependancies, and has it’s own level of “code quality” - so always review the code before you use it!