2017年3月8日水曜日

Jenkins の Pipeline を使ってシェルの実行結果をメールで送信してみた

概要

最近 Jenkins 2.x を触っていて、少しづつ Pipeline as Code にも慣れていこうとしています
導入ってわけではないですが、少しやりたいことがあって Pipelien ジョブを作成してみたので紹介します
やったことは簡単で、実行したシェルの結果 (Ruby の結果) をメールの本文として送信してみました

環境

  • CentOS 6.7 64bit Final
  • Jenkins 2.3
  • Ruby 2.3

SMTP サーバの設定

今回は SMTP サーバに Gmail を使いました
設定方法はこのあたり を参考にしてください
Google の 2 段階認証を設定している場合はアプリパスワードの発行が別途必要になります
発行したパスワードを Jenkins に設定するようにしてください

使用する Ruby のコード

内容は何でも OK です
メール本文に記載したい文章は puts するようにしています

  • mkdir /var/lib/jenkins/work/
  • vim /var/lib/jenkins/work/test.rb
puts "hoge"

Pipeline ジョブを作成する

Pipeline ジョブを作成していきます
新規ジョブ作成から作成します
ジョブの種類は Pipeline を選択してください
try_pipeline_creating_job.png

ビルドコードを作成する

ジョブの設定で Pipeline の項目を設定しましょう
Definition は「Pipeline script」にします
で、Script は以下の通りです

node {
    stage 'Execution'
    sh 'rm -f result.txt && touch result.txt'
    sh '/usr/local/rvm/rubies/ruby-head/bin/ruby /var/lib/jenkins/work/test.rb >> result.txt'

    stage 'Reading Result'
    def result = readFile('result.txt')

    stage 'Sending email'
    mail (to: 'your.account@gmail.com',
        from: 'your.account@gmail.com',
        subject: "Job '${env.JOB_NAME}' (${env.BUILD_NUMBER})",
        body: "${result}");
}

ruby への PATH は各自の環境に合わせて適宜変更してください
流れを簡単に説明すると

  • 結果を保存するファイルを作成
  • ruby を実行して出力結果をファイルに保存
  • readFile でファイルを開き内容を変数に保存
  • mail で SMTP サーバを使ってメール送信

という感じになります
コード内ではわかりやすいように stage を使って処理をわけています
stage を使ってわけることでビルド結果が見やすくなります

動作確認する

では、実際に実行してみましょう
以下のように各 stage ごとに処理時間とエラーだったかどうかが表示されると思います
try_pipeline_showing_result.png

最後までいけばメールもちゃんと届いていると思います
メールの送信部分でエラーになる場合は SMTP の設定を見なおしてください
ビルドは成功したのにメールが届かない場合はフィルタに引っかかっていないか確認してみてください

最後に

Pipeline を使ってメールの送信をしてみました
本当はプライベートリポジトリで管理している Ruby のスクリプトを clone して実行したかったんですが、Pipeline で ID/PW を使った git clone のやり方がわからず諦めました

とりあえず Groovy が使えるようになったほうがいいのと、Jenkins が用意している sh とか mail とか stage とか git とかが使えるようにならないとダメかなと思います
その辺のリファレンス的なのってどっかにあるのかな
あると思うんだけど見つけられない、、、

0 件のコメント:

コメントを投稿