major.io words of wisdom from a systems engineer

Get colorful ansible output in Jenkins

Working with ansible is enjoyable, but it’s a little bland when you use it with Jenkins. Jenkins doesn’t spawn a TTY and that causes ansible to skip over the code that outputs status lines with colors. The fix is relatively straightforward.

First, install the AnsiColor Plugin on your Jenkins node.

Once that’s done, edit your Jenkins job so that you export ANSIBLE_FORCE_COLOR=true before running ansible:

export ANSIBLE_FORCE_COLOR=true
ansible-playbook -i hosts site.yml

If your ansible playbook requires sudo to run properly on your local host, be sure to use the -E option with sudo so that your environment variables are preserved when your job runs. For example:

export ANSIBLE_FORCE_COLOR=true
sudo -E ansible-playbook -i hosts site.yml

HOLD UP: As Sam Sharpe reminded me, the better way to handle environment variables with sudo is to add them to _envkeep in your sudoers file (use visudo to edit it):

Defaults        env_reset
Defaults        env_keep += "ANSIBLE_FORCE_COLOR"

Adding it to _envkeep is a more secure method and you won’t need the -E any longer on the command line.

While you’re on the configuration page for your Jenkins job, look for Color ANSI Console Output under the Build Environment section. Enable it and ensure xterm is selected in the drop-down box.

Save your new configuration and run your job again. You should have some awesome colors in your console output when your ansible job runs.