/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠTB ĠDigital ĠServices ĠGmbH Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġcloud . rio . amazon as Ċ Ċ import Ġcom . amazonaws . auth . AWSC redentials Provider Ċ import Ġcom . amazonaws . services . code pipeline . AWS Code Pipeline Ċ import Ġcom . amazonaws . services . code pipeline . AWS Code Pipeline Client Builder Ċ import Ġcom . amazonaws . services . code pipeline . model . Get Pipeline Execution Request Ċ import Ġcom . amazonaws . services . code pipeline . model . Pipeline Execution NotFoundException Ċ import Ġcom . amazonaws . services . code pipeline . model . Start Pipeline Execution Request Ċ import Ġorg . apache . logging . log 4 j . Log Manager Ċ Ċ class ĠCode Pipeline Runner ( private Ġval Ġaws Code Pipeline : ĠAWS Code Pipeline ) Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInstanti ates Ġan ĠAWS Code pipeline Client Ġwith Ġcredentials Ġand Ġregion . ĠWith Ġan Ġinstance Ġof Ġthe Ġclient Ġyou Ġstart Ġa ĊĠĠĠĠ Ġ* Ġcode pipeline Ġand Ġin Ġcase Ġof Ġa Ġfailure Ġof Ġthis Ġpipeline , Ġthe Ġinstance Ġwill Ġthrow Ġan Ġexception . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcredentials Provider Ġan ĠAW SC redentials Provider , Ġe . g . Ġthe ĠM fa Credentials Provider ĊĠĠĠĠ Ġ* Ġ@ param Ġregion ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthe ĠAWS Ġregion Ġthat Ġyou Ġwant Ġyour Ġstacks Ġto Ġbe Ġdeployed Ġto ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġconstructor ( credentials Provider : ĠAW SC redentials Provider , Ġregion : ĠString ) Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAWS Code Pipeline Client Builder ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. standard () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Region ( region ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Credentials ( credentials Provider ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠStarts Ġthe Ġspecified Ġpipeline , Ġwaits Ġuntil Ġit Ġhas Ġreached Ġits Ġfinal Ġstatus . ĠIn Ġcase Ġthis Ġis Ġa Ġfailed Ġstatus , ĊĠĠĠĠ Ġ* Ġit Ġwill Ġthrow Ġan Ġexception ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġpipeline Name ĠĠĠĠĠĠĠĠĠĠ Ġthe Ġname Ġof Ġthe Ġpipeline ĊĠĠĠĠ Ġ* Ġ@ param Ġsleep While Waiting In Sec Ġthe Ġnumber Ġof Ġseconds Ġthe ĠwaitFor Final Pipeline Status Ġmethod Ġshould Ġsleep Ġbefore ĊĠĠĠĠ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchecking Ġthe Ġpipeline Ġstatus Ġagain ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġstart Pipeline And WaitFor Success ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpipeline Name : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsleep While Waiting In Sec : ĠInt Ġ= Ġ 1 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpipeline Execution Id Ġ= Ġstart Pipeline And Return Execution Id ( pipeline Name ) ĊĠĠĠĠĠĠĠ Ġval Ġfinal Pipeline Status Ġ= ĠwaitFor Final Pipeline Status ( pipeline Name , Ġpipeline Execution Id , Ġsleep While Waiting In Sec ) ĊĠĠĠĠĠĠĠ Ġif Ġ( final Pipeline Status Ġin Ġfailed Pipeline Statuses ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠPipeline FailedException (" Pipeline Ġ$ pipeline Name Ġhas Ġfinal Ġstatus Ġ$ final Pipeline Status ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Pipeline And Return Execution Id ( pipeline Name : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstart Pipeline Execution Result Ġ= Ġaws Code Pipeline . start Pipeline Execution ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStart Pipeline Execution Request () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Name ( pipeline Name ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġstart Pipeline Execution Result . pipeline Execution Id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġretrieve Current Pipeline Status ( pipeline Name : ĠString , Ġpipeline Execution Id : ĠString , Ġloop Wait : ĠInt ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstart Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġwhile Ġ( System . currentTimeMillis () Ġ< Ġstart Ġ+ Ġretrieve Current Pipeline Status Timeout Ġ* Ġ 1 0 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep (( loop Wait Ġ* Ġ 1 0 0 0 ). to Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġget Pipeline Execution Result Ġ= Ġaws Code Pipeline . get Pipeline Execution ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGet Pipeline Execution Request () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Pipeline Name ( pipeline Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Pipeline Execution Id ( pipeline Execution Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġget Pipeline Execution Result . pipeline Execution . status ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠPipeline Execution NotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLOGGER . info ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthrow ĠPipeline Execution NotFoundException (" Can 't Ġfind Ġexecution Ġid Ġ$ pipeline Execution Id Ġfor Ġpipeline Ġ$ pipeline Name Ġafter Ġ$ retrieve Current Pipeline Status Timeout Ġsecs .") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠwaitFor Final Pipeline Status ( pipeline Name : ĠString , Ġpipeline Execution Id : ĠString , Ġloop Wait : ĠInt ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġpipeline Finished Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġfinal Pipeline Status Ġ= Ġfailed Pipeline Statuses [ 0 ] ĊĠĠĠĠĠĠĠ Ġval Ġstart Ġ= ĠSystem . currentTimeMillis () ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ(! pipeline Finished ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( System . currentTimeMillis () Ġ> Ġstart Ġ+ ĠwaitFor Final Pipeline Status Timeout Ġ* Ġ 1 0 0 0 ) Ġthrow ĠRuntimeException (" Timeout ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpipeline Status Ġ= Ġretrieve Current Pipeline Status ( pipeline Name , Ġpipeline Execution Id , Ġloop Wait ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLOGGER . info (" Current Ġstatus Ġof Ġ$ pipeline Name Ġis Ġ$ pipeline Status ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pipeline Status Ġ!= Ġwaiting Pipeline Status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpipeline Finished Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinal Pipeline Status Ġ= Ġpipeline Status ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep (( loop Wait Ġ* Ġ 1 0 0 0 ). to Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfinal Pipeline Status ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval Ġwaiting Pipeline Status Ġ= Ġ" InProgress " ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġfailed Pipeline Statuses Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Failed ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Super se ded " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠwaitFor Final Pipeline Status Timeout Ġ= Ġ 1 0 Ġ* Ġ 6 0 // sec ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval Ġretrieve Current Pipeline Status Timeout Ġ= Ġ 1 Ġ* Ġ 6 0 // sec ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠLOGGER Ġ= ĠLog Manager . getLogger ( Code Pipeline Runner :: class . java ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠPipeline FailedException Ġinternal Ġconstructor ( message : ĠString ) Ġ: ĠRuntimeException ( message ) Ċ