LoginSignup
1
2

More than 5 years have passed since last update.

JenkinsfileでIRCへ通知を仕込む

Posted at

背景

職場ではオフライン環境で開発作業を実施している。
なので、開発資産(ソースコード)をGitで管理し、
GitのプラットホームにGitBucketを導入した。
そしてCI用に、Jenkinsも導入。
ここで、GitBucketとJenkinsを連携させて、ブランチやPRを自動ビルドしてくれるようにしたい。
そしてビルド結果を通知(メールかIRC)してほしい。
そんな仕組みを作ろうと試みた。
 #土台はCentOS6.5

GitBucketとJenkinsの連携

GitBucketとJenkinsを連携させるために、Jenkinsfileを作りました。
仕組みについては以下を参照・参考にしました。
https://jenkins.io/doc/book/pipeline/jenkinsfile/
https://qiita.com/kounoike/items/52fa35ca5813d0edc7b7
これで、Jenkinsfileをプロジェクト直下に配置するだけで、GitBucketとJenkinsが連携してくれます。
Jenkins側のプロジェクトの起動トリガーはWebHooksで設定。

JenkinsfileからIRCへの通知の発信

JenkinsfileによってJava/Mavenプロジェクトを自動でチェックアウト・ビルドするところまではすんなり。
CheckstyleやFindbugsを実行して実行結果を収集するのもできた。
(新規警告の検出ができてないけど・・・)
で、IRCにビルド結果を通知させたい。
GitBucketのPRにビルド結果は出るけど、何回もブラウザ更新するのも微妙だし。
IRCにJenkinsからの通知を垂れ流ししておきたい。
で、調べた結果以下が参考になった。

まず、
http://b-side.work/2017/04/jenkins-pipeline-post-notification/
https://jenkins.io/doc/pipeline/tour/post/
この2つのサイトで、email/hipchat/slackは標準対応されているけどIRCは無い、ということを知った。

そこからさらに調べて調べて、やっと以下のサイトにたどり着く。
https://wilsonmar.github.io/jenkins2-pipeline/
https://github.com/jenkinsci/pipeline-examples/blob/master/pipeline-examples/ircnotify-commandline/ircNotify.groovy

どうやらnetchatを使って実行できるようだ。
ただし、私の環境では上記リンク先のサンプルのようにシングルクォーテーションではうまく動作しなかった。
なので、最終的には以下のようなスクリプトに落ち着いた。

pipeline {
    agent any
    tools {
        maven 'apaceh-maven-3.3.9'
        jdk 'jdk1.8.0_131'
    }
    stages {
        stage ('build') {
            steps {
                sh 'mvn clean package'
            }
        }
    }
    post {
        always {
            ircnotice("sending notifications...")
        }
    }
}

def ircnotice(param_msg) {
    def MSG = "Project: ${env.JOB_NAME}, Build: ${env.BUILD_NUMBER}, Author: ${env.CHANGE_AUTHOR}, Result: ${currentBuild.currentResult}, Time: ${currentBuild.duration}, ${env.BUILD_URL} ."
    sh """
        (
        echo "NICK bot"
        echo "USER bot 8 * : bot"
        sleep 1
        echo "JOIN #jenkins"
        echo "PRIVMSG #jenkins" :${MSG}
        echo QUIT
        ) | nc localhost 6667
    """
}

IRCはngircdを使用しており、ポート番号は6667。
IRCもJenkinsも同一サーバー上に構築したのでホストはlocalhostで成功。
チャンネル名は #jenkins というものを作成。
これで通知に成功した。

以上。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2