Device Protection in CircleCI
CircleCI jobs run on Linux executors, so Device Protection installs the same way it does on any Linux machine. What is specific to CircleCI is where the install goes: once on a self-hosted runner that stays around, or inside each job on the Docker and machine executors.
Read Install Device Protection for Linux first for the token and the install flavors. The job-level snippets below use the container flavor, which Device Protection in Containers explains.
Docker and machine executors
Add your Device Protection token as a project environment variable, or to a context, named AIKIDO_TOKEN. Then define a reusable command and run it first in each job:
version: 2.1
commands:
start-device-protection:
steps:
- run:
name: Start Device Protection
command: |
curl -fsSL https://github.com/AikidoSec/safe-chain/raw/refs/heads/main/install-scripts/install-endpoint-linux.sh \
| sudo AIKIDO_TOKEN="$AIKIDO_TOKEN" sh -s -- --container
sudo aikido-endpoint-protection-start --wait-for-healthy
echo 'for f in /etc/profile.d/aikido-*.sh; do . "$f"; done' >> "$BASH_ENV"
jobs:
build:
docker:
- image: cimg/node:lts
steps:
- checkout
- start-device-protection
- run: npm ci
workflows:
build:
jobs:
- buildPass the token after
sudo.sudodrops the rest of your environment. On an image that runs as root withoutsudo, drop bothsudoprefixes.The
$BASH_ENVline covers every later step. CircleCI sources that file at the start of eachrunstep.The runner is a VM, but it takes
--container. A job cannot reboot the runner, and container mode needs no reboot. That is also why the agent is started explicitly. See Choose the install flavor.
Self-hosted runners
Install the agent on the runner host with --headless, then reboot. See Install Device Protection for Linux.
Verify it works
403 means the agent blocked the malware test package. 200 means the download skipped the agent.
Troubleshooting
Token is required
The job cannot see the variable. Check the job uses the right context. Fork pull requests get no variables by default
Root privileges required
Prefix the install and the start command with sudo
Test package returns 200, or SELF_SIGNED_CERT_IN_CHAIN
The step does not run in bash, so it skips $BASH_ENV. Source /etc/profile.d/aikido-*.sh in that step
Last updated
Was this helpful?