package Ġcom . life co sys . jenkins . plugin Ċ Ċ import Ġh udson . Extension Ċ import Ġh udson . FilePath Ċ import Ġh udson . Launcher Ċ import Ġh udson . model .* Ċ import Ġh udson . scm . Change Log Set Ċ import Ġh udson . tasks . Build Step Descriptor Ċ import Ġh udson . tasks . Notifier Ċ import Ġh udson . tasks . Publisher Ċ import Ġjenkins . model . J enkins Ċ import Ġjenkins . tasks . Simple Build Step Ċ import Ġorg . ko hs uke . st ap ler . Data Bound Constructor ĊĊ Ċ /** Ċ Ġ* Ċ Ġ* Ġ@ author Ġ[ Yo ung ĠGu ]( mailto : hy ys gu yang @ gmail . com ) Ċ Ġ*/ Ċ Ċ class ĠWork We chat Notifier Ġ@ Data Bound Constructor Ġconstructor ( val Ġwork We chat Robot Key : ĠString , Ġval Ġnotify Every Un stable Build : ĠBoolean , Ġval Ġsend To Individual s : ĠBoolean ) Ġ: ĠNot ifier (), ĠSimple Build Step Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġperform ( build : ĠRun < *, Ġ* >, Ġworkspace : ĠFilePath , Ġlauncher : ĠLaunch er , Ġlistener : ĠTask Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlistener . logger . println (" Running Ġlife co sys Ġjenkins ĠWork ĠWe chat Ġnotification Ġ ........ .... ...") ĊĠĠĠĠĠĠĠ Ġbuild Ġas ĠAbstract Build < *, Ġ*> ĊĠĠĠĠĠĠĠ Ġif Ġ( build . getResult () !!. is W orse Than ( Result . SUCCESS )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġusers Ġ= Ġbuild . getC ul pr its () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchange Set Lines Ġ= Ġbuild . getC umulated Change Set Since Previous Success Build (). map Ġ{ Ġ"${ it . author } Ġ--> Ġ${ it . commit Id }: Ġ${ it . msg Esc aped }" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchange Logs Ġ= Ġchange Set Lines . join ToString ("\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . logger . println (" Build Ġfailed Ġby Ġusers : Ġ${ users . map Ġ{ Ġit . displayName Ġ}. join ToString () }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . logger . println ("\ n \ n Build Ġfailed Ġby ĠCommit : Ġ${ change Logs }\ n \ n ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwork We chat Robot Client Ġ= ĠWork We chat Robot Client ( work We chat Robot Key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmention Users Ġ= Ġif Ġ( users . isEmpty ()) Ġ" all " Ġelse Ġusers . map Ġ{ Ġ"@ " Ġ+ Ġit . displayName Ġ}. join ToString (" Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwork We chat Robot Client . send Build Message ( build . getProject (). get DisplayName (), Ġmention Users , Ġbuild . get Absolute Url (), Ġchange Set Lines . take ( 5 ). join ToString ("\ n ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwork We chat Robot Client . send File Message ( build . get LogFile (), Ġ"${ build . getProject (). getName ()} - build -${ build . getNumber ()}. log ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . logger . println (" Work ĠWe chat Ġnotify Ġcompleted ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdescriptor (): ĠDescriptor Impl Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjenkins Ġ= ĠJenkins . getInstance () Ġ?: Ġthrow ĠIllegalStateException (" J enkins Ġinstance Ġis Ġnot Ġready ") ĊĠĠĠĠĠĠĠ Ġreturn Ġjenkins . get Descriptor ByType ( Descriptor Impl :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Extension ĊĠĠĠ Ġclass ĠDescriptor Impl Ġ: ĠBuild Step Descriptor < Publisher >() Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget DisplayName (): ĠString Ġ= Ġ" Work ĠWe chat ĠNotification " ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġis Applicable ( job Type : ĠClass < out ĠAbstract Project < *, Ġ*> ?> ?): ĠBoolean Ġ= Ġtrue ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠAbstract Build < *, Ġ* >. getC umulated Change Set Since Previous Success Build (): ĠList < Change Log Set . Entry > Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( this . getResult () !!. is Better OrEqualTo ( Result . SUCCESS )) Ġempty List () ĊĠĠĠĠĠĠĠ Ġelse Ġprevious Build Change Set () Ġ+ Ġthis . get Change Set (). toList () Ċ Ċ fun ĠAbstract Build < *, Ġ* >. previous Build Change Set (): ĠList < Change Log Set . Entry > Ġ{ ĊĠĠĠ Ġthis . get Previous Build () Ġas ĠAbstract Build < *, Ġ*> ĊĠĠĠ Ġreturn Ġget Previous Build ()?. getC umulated Change Set Since Previous Success Build ()?. toList < Change Log Set . Entry >() Ġ?: Ġempty List () Ċ } ĊĊ