在《使用Jenkins實(shí)現(xiàn)持續(xù)集成構(gòu)建檢查》一文中,寫到了這么一段話:
在這里,我們還可以通過--disable_output_color開關(guān)將輸出日志的顏色關(guān)閉。之所以實(shí)現(xiàn)這么一個(gè)功能,是因?yàn)樵贘enkins中本來也無法顯示顏色,但是如果還將Terminal中有顏色的日志內(nèi)容輸出到Jenkins中,就會(huì)出現(xiàn)一些額外的字符,比較影響日志的美觀。
非常感謝熱心的讀者,及時(shí)地為我糾正了這一點(diǎn)。事實(shí)上,當(dāng)前在Jenkins中,是可以通過安裝插件來實(shí)現(xiàn)在輸出日志中顯示顏色的。
這個(gè)插件就是AnsiColor。
安裝 && 配置
安裝的方式很簡(jiǎn)單,【Manage Jenkins】->【Manage Plugins】,搜索AnsiColor進(jìn)行安裝即可。
安裝完成后,在Jenkins Project的Configure頁面中,Build Environment欄目下會(huì)多出Color ANSI Console Output配置項(xiàng),勾選后即可開啟顏色輸出配置。

在ANSI color map的列表選擇框中,存在多個(gè)選項(xiàng),默認(rèn)情況下,選擇xterm即可。
保存配置后,再次執(zhí)行構(gòu)建時(shí),就可以在Console中看到顏色輸出了。
效果圖
使用xctool命令編譯iOS應(yīng)用時(shí),在Jenkins的Console output中會(huì)看到和Terminal中一樣的顏色效果。

補(bǔ)充說明
需要說明的是,在輸出日志中顯示顏色,依賴于輸出的日志本身。也就是說,如果輸出日志時(shí)并沒有ANSI escape sequences,那么安裝該插件后也沒有任何作用,并不會(huì)憑空給日志加上顏色。
例如,如果采用xcodebuild命令編譯iOS應(yīng)用,那么輸出日志就不會(huì)顯示顏色。
說到這里,再簡(jiǎn)單介紹下ANSI escape sequences。
ANSI escape sequences
ANSI escape sequences,也叫ANSI escape codes,主要是用于對(duì)Terminal中的文本字符進(jìn)行顏色的控制,包括字符背景顏色和字符顏色。
使用方式如下:
33[字符背景顏色;字符顏色m{String}33[0m
其中,33[字符背景顏色;字符顏色m是開始標(biāo)識(shí),33[0m是結(jié)束標(biāo)識(shí),{String}是原始文本內(nèi)容。通過這種形式,就可以對(duì)輸出的文本顏色進(jìn)行控制。
具體地,字符顏色和字符背景顏色的編碼如下:
字符顏色(foreground color):30~37
- 30:黑
- 31:紅
- 32:綠
- 33:黃
- 34:藍(lán)色
- 35:紫色
- 36:深綠
- 37:白色
字符背景顏色(background color):40~47
- 40:黑
- 41:深紅
- 42:綠
- 43:黃色
- 44:藍(lán)色
- 45:紫色
- 46:深綠
- 47:白色
需要說明的是,字符背景顏色和字符顏色并非必須同時(shí)設(shè)置,也可以只設(shè)置一項(xiàng)。
代碼示例
掌握了以上概念后,我們就可以通過對(duì)打印日志的代碼進(jìn)行一點(diǎn)調(diào)整,然后就可以讓輸出的日志更加美觀了。
以Ruby為例,在Sting基礎(chǔ)類中添加一些展示顏色的方法。
class String
# colorization
def colorize(color_code)
"\e[#{color_code}m#{self}\e[0m"
end
def red
colorize(31)
end
def green
colorize(32)
end
def yellow
colorize(33)
end
end
然后,我們?cè)诖蛴∪罩緯r(shí)就可以通過如下方式來控制日志的顏色了。
# 步驟執(zhí)行正常,輸出為綠色
step_action_desc += " ... ?"
puts step_action_desc.green
# 步驟執(zhí)行異常,輸出為紅色
step_action_desc += " ... ?"
puts step_action_desc.red
展示效果如下圖所示。

是不是好看多了?
原文鏈接:http://debugtalk.com/post/make-Jenkins-Console-Output-Colorful/