CircleCI CLI
The CircleCI CLI lets you run a job locally.
So if your build ever fails, you don’t have to:
- Guess what’s wrong
- Push a commit
- Wait for it to fail
- Guess what’s wrong again
- Push another commit…
For me, this makes CircleCI® the clear leader.
Here’s how to get bash access to the job locally, using the CLI.
So you’ll be able to see what’s wrong.
Real Example
We’re going to debug a failed CI/CD build:
/bin/bash: svn: command not found
Code language: Bash (bash)
The solution isn’t clear, at least to me.
We don’t know:
- What package management system does the container use?
- What package should we install to run the
svn
command?
So you’re going to get bash access to debug this.
Start by cloning the example repo, where the failed build was:
$ git clone -b add/wp-org-svn https://github.com/kienstra/adapter-responsive-video
$ cd adapter-responsive-video
Code language: Bash (bash)
Of course, you can use your own repo instead, if there was a failed build there.
Adding Time To Debug
Add this to .circleci/config.yml
, right before the step that failed:
diff --git a/.circleci/config.yml b/.circleci/config.yml
index e27995a..1c93a1d 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -9,6 +9,7 @@ jobs:
- image: cimg/base:current
steps:
- checkout
+ - run: sleep 1000
- run: svn co https://plugins.svn.wordpress.org/adapter-responsive-video --depth=empty .
workflows:
Code language: Diff (diff)
This will keep the job running, so you have time to debug it with bash access.
Installing the CircleCI CLI (if you haven’t yet)
Mac:
$ brew install circleci
Code language: Bash (bash)
Mac and Linux:
$ curl -fLSs https://raw.githubusercontent.com/CircleCI-Public/circleci-cli/master/install.sh | bash
Code language: JavaScript (javascript)
This CircleCI CLI will run the job in your local.
Please also ensure Docker is running on your machine.
Running the CLI
$ circleci local execute --job deploy
Code language: Bash (bash)
This will run the job on your machine:
You might see that pulling some images to run the job.
Getting the Job Image Name
Open a new terminal tab, and run this:
$ docker ps
Code language: Bash (bash)
That should show the image that’s running the job:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b6e09b7009ab cimg/base:current "/bin/sh" 13 seconds ago Up 10 seconds naughty_jones
b992e2d2c0a8 circleci/picard "/opt/circleci/linux…" 16 seconds ago Up 16 seconds naughty_colden
5c233ff5c3b9 cimg/base:current "/bin/sh" 6 minutes ago Up 5 minutes elastic_brattain
Code language: Bash (bash)
Look for an image right above circleci/picard
.
If you don’t see circleci/picard
, you’ll probably have to wait 10-20 seconds while the circleci local
command above pulls that image.
In this case, it’s the cimg/base:current
image.
Copy the container ID of that image to use it below.
In this example, it’s b6e09b7009ab
.
That’s the image where your job is running, and you’re going to get bash access to it.
Bash
Then, run this in your terminal to debug the job.
$ docker exec -it b6e09b7009ab /bin/sh
Code language: Bash (bash)
The argument b6e09b7009ab
is the container ID that you got above, from running docker ps
.
You should then have bash access to the container:
$ whoami
circleci
$ pwd
/home/circleci/project
Code language: Bash (bash)
Then, you can debug the container, and find out how to install the svn
command:
CircleCI CLI
This faster debugging makes CircleCI the leader, in my opinion.
No more guessing and waiting.
You can fix your CI locally.
Now that you’ve debugged your config…
Here’s a way to make it faster and simpler.