らくとん倶楽部
ラクトンC10(γ-デカラクトン)とラクトンC11(γ-ウンデカラクトン)の香りに魅了された日々の備忘録

【Jenkins Declarative Pipeline】AnsiColorプラグインによるコンソール出力の色付け方法

【Jenkins Declarative Pipeline】AnsiColorプラグインによるコンソール出力の色付け方法

Jenkinsのコンソール出力はデフォルト状態では「色の無い世界」で全く味気がありません。このコンソール出力に様々な色を付けたり、太字にしたり、色を反転させたりと非常にカラフルにしてコンソール出力の視認性を大幅に向上させる方法があります。

百聞は一見にしかず。実際にコンソール出力画面例をお見せしましょう。

通常のコンソール出力例
lactone@Jenkins:~/tmp$ ls -la
合計 8
drwxrwxr-x  2 lactone lactone 4096  5月 26 00:16 .
drwxrwxr-x 20 lactone lactone 4096  5月 26 00:16 ..
-rwxrwxr-x  1 lactone lactone    0  5月 26 00:24 executable
lrwxrwxrwx  1 lactone lactone   10  5月 26 00:16 symlink.txt -> lactone.txt
lrwxrwxrwx  1 lactone lactone    8  5月 26 00:16 missing.txt -> hoge.txt
-rw-rw-r--  1 lactone lactone    0  5月 26 00:15 lactone.txt

上記はUbuntuでls -laコマンドを実行した結果をそのままJenkinsのコンソール出力に表示させた場合の例です。これが色付き表示になると以下のようになります。

色付きコンソール出力例
lactone@Jenkins:~/tmp$ ls -la
合計 8
drwxrwxr-x  2 lactone lactone 4096  5月 26 00:16 .
drwxrwxr-x 20 lactone lactone 4096  5月 26 00:16 ..
-rwxrwxr-x  1 lactone lactone    0  5月 26 00:24 executable
lrwxrwxrwx  1 lactone lactone   10  5月 26 00:16 symlink.txt -> lactone.txt
lrwxrwxrwx  1 lactone lactone    8  5月 26 00:16 missing.txt -> hoge.txt
-rw-rw-r--  1 lactone lactone    0  5月 26 00:15 lactone.txt

ここではコンソール出力の色付き表示を可能にするAnsiColorプラグインを紹介し、Jenkins Declarative PipelineにおけるAnsiColorプラグインの有効化方法および色付けするために必要な記述方法を解説します。最後に色付きコンソール出力の意外な効果についていくつかご紹介しましょう。

AnsiColorプラグインのインストール

AnsiColorプラグインはデフォルトではインストールされていないので、プラグイン管理画面でインストールして下さい。プラグインの具体的なインストール手順の説明はここでは省略します。

Jenkins Declarative PipelineにおけるAnsiColorプラグインの有効化方法

Jenkins Declarative PipelineにおけるAnsiColorプラグインの有効化は非常に簡単で、optionsセクションにたった一行追加するだけでOKです。

pipeline {
    agent any
    options {
        ansiColor('xterm')
    }
}

AnsiColorじゃなくてansiColorなので注意して下さい。

色変更の記述方法

文字の色を変更するには「\u001B[31m」などのようなエスケープシーケンスを対象文字列の直前に記述し、終わりに「\u001B[0m」のエスケープシーケンスでリセットすればOKです。赤色かつ太字などのように複数の属性を付加する場合はセミコロンで区切って「\u001B[1;31m」などのように記述します。

echo '\u001B[31mこの文字は赤色です\u001B[0m'
echo '\u001B[1mこの文字は太字です\u001B[0m'
echo '\u001B[1;31mこの文字は赤色かつ太字です\u001B[0m'

色変更するためのエスケープシーケンス一覧

主なエスケープシーケンスは以下の通りです。これ以外にも下線とかブリンク(点滅)とかもありますが色関連以外のものは省略します。

  • \u001B[0m ‥‥ リセット
  • \u001B[1m ‥‥ 太字
  • \u001B[30m ‥‥ 灰色
  • \u001B[31m ‥‥ 赤色
  • \u001B[32m ‥‥ 緑色
  • \u001B[33m ‥‥ 黄色
  • \u001B[34m ‥‥ 青色
  • \u001B[35m ‥‥ 紫色
  • \u001B[36m ‥‥ 水色
  • \u001B[37m ‥‥ 薄い灰色
  • \u001B[40m ‥‥ 灰色反転
  • \u001B[41m ‥‥ 赤色反転
  • \u001B[42m ‥‥ 緑色反転
  • \u001B[43m ‥‥ 黄色反転
  • \u001B[44m ‥‥ 青色反転
  • \u001B[45m ‥‥ 紫色反転
  • \u001B[46m ‥‥ 水色反転
  • \u001B[47m ‥‥ 薄い灰色反転

色付きコンソール出力の効果

視認性を大幅に向上する件については既に触れました。例えば私が担当しているJenkins環境のひとつではシステムが正常に動作している事や処理遅延が無いかを評価するためにpingコマンドを発行しています。とはいえ、pingの生ログをJenkinsコンソール出力に表示して、ユーザーに目視で確認しろというのは酷な話です(そもそも目視確認している時点で試験自動になってません)。そこでpingの結果を解析し、例えばパケットロス率を評価した結果、0%なら問題無しということでサマリを表示、パケットロス率が0%以外なら問題有りということで警告を表示して試験をFAILUREにして中断させるといった事をしています。

その際のコンソール出力は以下のような感じになっています。

ping 192.168.0.2 -c 60
 ping result (192.168.0.2) 
    Packet Loss : 0%
    RTT(Min)    : 17.880 ms
    RTT(Avg)    : 30.140 ms
    RTT(Max)    : 40.120 ms
ping 192.168.0.3 -c 60
 ping result (192.168.0.3) 
    Packet Loss : 1%
    RTT(Min)    : 25.042 ms
    RTT(Avg)    : 31.969 ms
    RTT(Max)    : 43.656 ms
 Ping Packet Loss Found! 

何か問題があれば赤色の反転色で警告しているので、コンソール出力を見れば、どこでテストが失敗したのか、何の要因で失敗したのかが容易に判別つくようになっています。

色付きコンソール出力の意外な効果

もう一つ、この色付きコンソール出力には意外な効果があります。それはプレゼン受けが良いということです。Jenkinsがしていることは裏方さん・縁の下の力持ち的な仕事です。人の目の届かないところで黙々とビルドし、テストを実施し、外から見えるのはせいぜい結果がメールで通知されるところや、問題管理ツールにコメントされるといったところですね。

こうしたCI/CD環境を構築・運用していくのがJenkins職人の腕の見せ所なわけですが、その成果を発表(プレゼン)するといった機会も多々ある事でしょう。でもその時多くのJenkins職人が悩むのが「何を見せたら良いのかわからない」です。そうなんです。Jenkinsは良くも悪くも「地味」なんです。

そんな時、私は良く、色付きコンソール出力が続々と流れていくのを見せながら、色付きログが表示されたタイミングで「はい、今ping打ちましたね」とか「ここで試験結果をコメントとしてJIRAに自動登録します」とか言ったりしながら動展示デモを行い、「いかにも自動で全てが動いている感」を醸し出すようにしています。これが素人目にはかなり好評で、「Jenkins凄いじゃん」「うむ、よかろう。このまま続けてくれ」といったようなポジティブな評価を得る事が出来ます。

本来、JenkinsによるCI/CD環境の評価は、試験の効率化やカバレッジ率の向上、早期問題検出率の向上などのKPIで評価されるべきなのですが、もちろんこういった事を全面的にアピールしつつ、面白いプレゼン、人を惹きつけるプレゼンをしたいのであれば、この色付きコンソール出力オススメです。

ちょっと細かなTips

反転色と太字を併用する場合、そのまま色付けすると

Ping Packet Loss Found!

となって左端と右端の文字が少し見辛くなってしまいます。そこで左右両端に空白文字を1個ずつ入れて

 Ping Packet Loss Found! 

とするといい感じになります。

残念ながら現時点ではOcean Blueは非対応

AnsiColorプラグインはJenkinsの新GUIであるOcean Blueにまだ対応しておらず、現時点ではコンソール出力をOcean Blueで見ると文字は装飾されずにエスケープシーケンスがそのまま表示されてしまいます。カラフルなコンソール出力は「プレゼン受けが良い」という話をしましたが、Ocean Blueの新型GUIほどプレゼン受けが良いユーザーインターフェイスもありません。1日でも早いAnsiColorプラグインのOcean Blue対応を願わずにはいられません。

継続的インテグレーションに欠かせないツールであるJenkins。その導入から運用管理までを解説した定番書として大好評の『Jenkins実践入門』が、ついに2系に対応しました。生みの親である川口耕介氏監修のもと、近年の開発環境の変化に合わせて内容を一新。インストールなどの基本から、JUnitによるテストといった内容はもちろんのこと、さまざまなソースコード管理システムとの連携やおすすめプラグインの紹介、さらには認定試験についても説明します。チームの一員として上手に迎えるための実開発のポイントがわかります。
Amazonで購入 楽天で購入
Amazonで購入 楽天で購入
らくとん
作成日 2018年05月26日 17時15分
更新日 2019年04月25日 00時23分
4385文字
Twitter Facebook はてなブックマーク Pocket
■ 関連記事
らくとん倶楽部らくとん倶楽部
Author: らくとん
Jenkinsでは如何に処理を高速化するかがひとつの成功のカギであり、高速化には処理の並列化が極めて有効です。並列化できるところはどんどん並列化していきましょう。 ここではJenkinsのジョブ実装方...