One IT Thing

IT業界で飯を食う為の学習系雑記

CI jenkins mattermost nodejs

Nodeアプリが依存するnpmモジュールライセンスをlicense-checker & Jenkinsで自動チェック(2)

投稿日:

目的

前回の続き。

license-checkerを使用したライセンスサマリ出力をJenkinsに行わせ、出力結果をMattermostに送信します。想定していないライセンスが含まれていた場合はJenkinsジョブを失敗させ、これもMattermostに送信します。

動作イメージ

Jenkinsジョブを設定

前提

  • 新規Jenkinsジョブを作成済み
  • Gitに登録されているプロジェクトをJenkinsジョブでclone設定済み
  • Mattermostで通知受信用のincoming web hookが設定済み

Jenkins「シェルの実行」を設定

ライセンスサマリ結果をmattermostチャンネルに送信します。
(以下送信されるlicens-checker結果サマリテキスト)

├─ MIT: 129
├─ Apache-2.0: 20
├─ ISC: 11
├─ MIT*: 4
├─ BSD: 4
├─ Unlicense: 2
├─ BSD-3-Clause: 2
├─ Apache*: 2
├─ UNKNOWN: 1
├─ LGPL: 1
├─ BSD-3-Clause OR MIT: 1
├─ BSD*: 1
└─ Apache: 1

mattermostへメッセージ送信する時のHTTP POSTボディ内容は「payload={“text”, “メッセージ内容”}」になります。ですが”メッセージ内容”に入れるべき先のサマリ結果は改行コードを含んでいて、json内のtextノードデータが改行されてしまう為、curlコマンドの実行時にエラーになってしまいます。こういう場合は一度ファイルに吐き、–data-binaryオプションで送信すると楽に送信することが出来ます。

# Mattermostで設定済みのincoming web hookのURL
mattermost=http://{MattermostのIP:PORT}/hooks/5yndrqbgybd4mpjfwxstfs739o

# npmモジュールインストール
npm install

# ライセンスサマリをシェル変数に代入
summary=`license-checker --production --summary`

# Mattermostに送るデータを一旦ファイルに吐く
echo 'payload={"text": "'"$summary"'"}' > payload

# Mattermostへ送信
curl -i -X POST --data-binary @payload $mattermost

Jenkinsジョブを実行するとライセンスサマリがincoming web hook対象のMattermostチャンネルに送信されたと思います。

想定外ライセンスが含まれていた場合の通知

前項までだとライセンス情報が届くだけで人の目によるチェックになり、誰も見なくなって近日に形骸化されてしまいます。含ませたくないライセンスのモジュールが混在している場合はJenkinsジョブをエラーにすることで開発陣に通知を行います。

デフォルト動作としてjenkinsはbashを-xeオプションで実行しています。(-eは戻り値が0以外のコマンドが有った場合は即シェルを終了させます)

この為ライセンス違反のgrepに引っ掛かった数をexitに渡してやればエラーになりジョブがこけます。先のシェルの末尾に以下を追加します。

# 禁止するライセンスを増やす場合、「-e ライセンス名」で追加する
ret=`cat payload | grep -v LGPL | grep -e GPL | wc -l`

# 0以外ならジョブ失敗
exit $ret

後は「ビルド後の処理」でMattermostに送信する設定をしておけば、ライセンス違反が有った時はMattermostにビルド失敗した旨が送信されてくるようになります。

まとめ

うっかりソース提示が必要なライセンスを組み込んでしまったことにリリース後に気付いた、などということが無いように日頃からセーフティを作っておけば安心です。またリリース前に知財部に使用ライブラリのライセンス一覧を提出しなければいけないルールの会社さんも多いです。その場合は前回のCSVを提出すれば手間が省けます。

-CI, jenkins, mattermost, nodejs

執筆者:

関連記事

GitLab Omunibus版のPostgreSQLに普通のpsqlコマンドで接続

GitLab Omunibus版でインストールされるビルトインPostgreSQLは、 TCP:5432ではなくホスト内でしか接続出来ないUnix Domain Socketで待機ローカルホストからO …

ionicアプリを多言語化する

目次1 目的2 環境3 手順1.インストール4 手順2.src/assets/i18nに翻訳ファイルを作成する5 手順3.app.module.tsにngx-translate関連のモジュールを登録す …

社内プライベートMattermostを立ち上げてChatOpsする

社内開発チーム内のコミュニケーション、上手く行っていますか?メンバーが世界各地に散らばってないなくても、意外と心は離れているかも知れません。 プライベートなGitLab12をCentOS7にインストー …

GitLabのIPを変更したらMattermostにログイン出来なくなった話「the redirect uri included is not valid. 」

目次1 発端2 環境3 GitLabのIP変更設定を開始4 そしてハマる5 解決6 結局どこに設定が保存されていたか7 まとめ 発端 先日オフィスの引っ越しが有りネットワークセグメントが変わる為、Gi …

ブラウザから起動したカメラの撮影画像をjavascriptで圧縮【Compressor.js】

「モバイル用Webアプリで撮影したカメラ画像のファイルサイズが大きすぎる・・・」 そんな悩みは無いですか? 昨今カメラ会社の経営が傾くほどスマホのカメラ性能が向上、それに応じて年々ファイルサイズも増大 …

 

sin7k24
 

東京在勤、職歴20年越え中年ITエンジニアです。まだ開発現場で頑張っています。

19歳(1996年)から書き始めた個人日記が5,000日を超え、残りの人生は発信をして行きたいと思い、令和元日からこのサイトを開始しました。勉強と試行錯誤をしながら、自分が経験したIT関連情報を投稿しています。

私と同じく、今後IT業界で生計を立てて行きたいと考えている方や、技術共有したいけどフリーランスで孤独、といった方と一緒に成長、知識共有して行けたら楽しいな、と思っています。