/* Ċ Ġ* ĠTencent Ġis Ġplease d Ġto Ġsupport Ġthe Ġopen Ġsource Ġcommunity Ġby Ġmaking ĠB K - CI Ġ èĵĿ é² ¸ æĮģ ç»Ń éĽĨ æĪĲ å¹³åı° Ġavailable . Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 9 ĠTH L ĠA 2 9 ĠLimited , Ġa ĠTencent Ġcompany . Ġ ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠB K - CI Ġ èĵĿ é² ¸ æĮģ ç»Ń éĽĨ æĪĲ å¹³åı° Ġis Ġlicensed Ġunder Ġthe ĠMIT Ġlicense . Ċ Ġ* Ċ Ġ* ĠA Ġcopy Ġof Ġthe ĠMIT ĠLicense Ġis Ġincluded Ġin Ġthis Ġfile . Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠTerms Ġof Ġthe ĠMIT ĠLicense : Ċ Ġ* Ġ------------------------------------------------ --- Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ċ Ġ* Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ġto Ġuse , Ġcopy , Ċ Ġ* Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe Ċ Ġ* ĠSoftware Ġis Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT Ċ Ġ* ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN Ċ Ġ* ĠNO ĠEVENT ĠSHALL ĠTHE ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER ĠLIABILITY , Ċ Ġ* ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE Ċ Ġ* ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġcom . tencent . devops . misc . cron Ċ Ċ import Ġcom . tencent . devops . common . api . util . DateTime Util Ċ import Ġcom . tencent . devops . common . redis . Redis Lock Ċ import Ġcom . tencent . devops . common . redis . Redis Operation Ċ import Ġcom . tencent . devops . common . service . utils . Spring Context Util Ċ import Ġcom . tencent . devops . misc . config . Misc Build Data Clear Config Ċ import Ġcom . tencent . devops . misc . service . Pipeline History Data Clear Service Ċ import Ġorg . jooq . DSL Context Ċ import Ġorg . jooq . impl . DSL Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . context . annotation . Dep ends On Ċ import Ġorg . springframework . scheduling . annotation . Scheduled Ċ import Ġorg . springframework . stereotype . Component Ċ import Ġjava . lang . StringBuilder Ċ import Ġjava . util . Date Ċ Ċ @ Component Ċ @ Dep ends On (" spring Context Util ") Ċ class ĠPipeline Build History Data Clear Job Ġ@ Autowired Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġd sl Context : ĠDSL Context , ĊĠĠĠ Ġprivate Ġval Ġredis Operation : ĠRedis Operation , ĊĠĠĠ Ġprivate Ġval Ġmisc Build Data Clear Config : ĠMisc Build Data Clear Config Ċ ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠLoggerFactory . getLogger ( Pipeline Build History Data Clear Job :: class . java ) ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠLOCK _ KEY Ġ= Ġ" pipeline Build History Data Clear " ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġpipeline History Data Clear Service Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSpring Context Util . getBean ( Pipeline History Data Clear Service :: class . java ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġdata Base Info Ġ= Ġpipeline History Data Clear Service . getData Base Info () ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠPROJECT _ DATA _ BASE _ NAME Ġ= Ġdata Base Info [ pipeline History Data Clear Service . project Db Key ] ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠPROCESS _ DATA _ BASE _ NAME Ġ= Ġdata Base Info [ pipeline History Data Clear Service . process Db Key ] ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġtable Info Ġ= Ġpipeline History Data Clear Service . getTable Info () ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠPROJECT _ TABLE _ NAME Ġ= Ġtable Info [ pipeline History Data Clear Service . project Table Key ] ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠPI PE LINE _ INFO _ TABLE _ NAME Ġ= Ġtable Info [ pipeline History Data Clear Service . pipeline Info Table Key ] ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠPI PE LINE _ BUILD _ HISTORY _ TABLE _ NAME Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtable Info [ pipeline History Data Clear Service . pipeline Build History Table Key ] ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠPI PE LINE _ BUILD _ HISTORY _ PAGE _ SIZE Ġ= Ġ 1 0 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠPI PE LINE _ BUILD _ HISTORY _ DATA _ CLEAR _ PROJECT _ ID _ KEY Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" pipeline : build : history : data : clear : project : id " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠPI PE LINE _ BUILD _ HISTORY _ DATA _ CLEAR _ PROJECT _ LIST _ KEY Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" pipeline : build : history : data : clear : project : list " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Scheduled ( initial Delay Ġ= Ġ 1 0 0 0 0 , Ġfixed Delay Ġ= Ġ 1 2 0 0 0 ) ĊĠĠĠ Ġfun Ġpipeline Build History Data Clear () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! misc Build Data Clear Config . switch . to Boolean ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ æ¸ħ çĲĨ æŀĦå»º åİĨåı² æķ°æį® å¼Ģ åħ³ åħ³éĹŃ ï¼Į åĪĻ ä¸į æ¸ħ çĲĨ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlogger . info (" pipeline Build History Data Clear Ġstart ") ĊĠĠĠĠĠĠĠ Ġval Ġlock Ġ= ĠRedis Lock ( redis Operation , ĠLOCK _ KEY , Ġ 3 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! lock . try Lock ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" get Ġlock Ġfailed , Ġskip ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠæŁ¥è¯¢ t _ project è¡¨ ä¸ŃçļĦ é¡¹çĽ® æķ°æį® å¤ĦçĲĨ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject List Config Ġ= Ġredis Operation . get ( PIPELINE _ BUILD _ HISTORY _ DATA _ CLEAR _ PROJECT _ LIST _ KEY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ç»Ħ è£ħ æŁ¥è¯¢ é¡¹çĽ® çļĦ æĿ¡ä»¶ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject Condition Sql Builder Ġ= ĠStringBuilder (" 1 = 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! project List Config . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Condition Sql Builder . append (" Ġand Ġenglish _ name Ġin Ġ( ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject List Ġ= Ġproject List Config !!. split (",") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject List . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Condition Sql Builder . append ("' $ it ', ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠåĪłéĻ¤ æľĢåĲİ ä¸Ģä¸ª éĢ Ĺ åı· ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Condition Sql Builder . delete Char At ( project Condition Sql Builder . length Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Condition Sql Builder . append (" )") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġhandle Project Primary Id Ġ= Ġredis Operation . get ( PIPELINE _ BUILD _ HISTORY _ DATA _ CLEAR _ PROJECT _ ID _ KEY )?. to Long () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( handle Project Primary Id Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Project Primary Id Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd sl Context . select ( DSL . field (" min ( id ) ")). from ("$ PROJECT _ DATA _ BASE _ NAME .$ PROJECT _ TABLE _ NAME ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where ( project Condition Sql Builder . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fetch One ( 0 , ĠLong :: class . java ) Ġ?: Ġ 0 L ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmax Project Primary Id Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd sl Context . select ( DSL . field (" max ( id ) ")). from ("$ PROJECT _ DATA _ BASE _ NAME .$ PROJECT _ TABLE _ NAME ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where ( project Condition Sql Builder . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fetch One ( 0 , ĠLong :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( handle Project Primary Id Ġ>= Ġmax Project Primary Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ å·²ç»ı æ¸ħ çĲĨ å®Įåħ¨ éĥ¨ é¡¹çĽ® çļĦ æµģ æ°´ çº¿ çļĦ è¿ĩ æľŁ æŀĦå»º è®°å½ķ ï¼Į åĨį éĩįæĸ° å¼Ģå§ĭ æ¸ħ çĲĨ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġredis Operation . delete ( PIPELINE _ BUILD _ HISTORY _ DATA _ CLEAR _ PROJECT _ ID _ KEY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" pipeline Build History Data Clear Ġre Start ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmax Every Project Handle Num Ġ= Ġmisc Build Data Clear Config . max Every Project Handle Num . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject Base Query Step Ġ= Ġd sl Context . select (). from ("$ PROJECT _ DATA _ BASE _ NAME .$ PROJECT _ TABLE _ NAME ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmax Handle Project Primary Id Ġ= Ġhandle Project Primary Id Ġ?: Ġ 0 L ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( project List Config . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Handle Project Primary Id Ġ= Ġhandle Project Primary Id Ġ+ Ġmax Every Project Handle Num ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Condition Sql Builder . append (" Ġand Ġ( id Ġ> $ handle Project Primary Id Ġand Ġid < =$ max Handle Project Primary Id )") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Base Query Step . where ( project Condition Sql Builder . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Base Query Step . where ( project Condition Sql Builder . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject Info Records Ġ= Ġproject Base Query Step . fetch () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġæł¹æį® é¡¹çĽ® ä¾Ŀ æ¬¡ æŁ¥è¯¢ T _ PIPELINE _ INFO è¡¨ ä¸ŃçļĦ æµģ æ°´ çº¿ æķ°æį® å¤ĦçĲĨ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject Info Records . forEach Ġ{ Ġproject Info Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject Primary Id Ġ= Ġproject Info [" id "] Ġas ĠLong ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( project Primary Id Ġ> Ġmax Handle Project Primary Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Handle Project Primary Id Ġ= Ġproject Primary Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠprojectId Ġ= Ġproject Info [" english _ name "] Ġas ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpipeline Info Records Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd sl Context . select (). from ("$ PROCESS _ DATA _ BASE _ NAME .$ PIPELINE _ INFO _ TABLE _ NAME ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where (" PROJECT _ ID ='$ projectId ' "). fetch () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpipeline Info Records . forEach Ġ{ Ġpipeline Info Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġæł¹æį® æµģ æ°´ çº¿ ID ä¾Ŀ æ¬¡ æŁ¥è¯¢ T _ PIPELINE _ BUILD _ HISTORY è¡¨ ä¸Ń äºĮ ä¸ª æľĪ åīį çļĦ æŀĦå»º è®°å½ķ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpipeline Id Ġ= Ġpipeline Info [" PIPELINE _ ID "] Ġas ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Date Ġ= ĠDateTime Util . format Date ( Date ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmonth Range Ġ= Ġmisc Build Data Clear Config . month Range ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpast Condition Sql Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" PIPELINE _ ID ='$ pipeline Id ' ĠAND ĠSTART _ TIME Ġ< ĠSUB DATE ('$ current Date ', ĠINTER VAL Ġ$ month Range ĠMON TH )" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" pipeline Build History Past Data Clear Ġstart ........ ...... ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclean Build History Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpipeline Id Ġ= Ġpipeline Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcondition Sql Ġ= Ġpast Condition Sql , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprojectId Ġ= ĠprojectId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Comp let ely Delete Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠåĪ¤æĸŃ æŀĦå»º è®°å½ķ æĺ¯åĲ¦ è¶ħè¿ĩ ç³»ç»Ł å±ķç¤º çļĦ æľĢå¤§ æķ°éĩı ï¼Į å¦Ĥæŀľ è¶ħè¿ĩ åĪĻ éľĢ æ¸ħ çĲĨ è¶ħ éĩı çļĦæķ°æį® ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmax Pipeline Build Num Ġ= Ġd sl Context . select ( DSL . field (" MAX ( BUILD _ NUM ) ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. from ("$ PROCESS _ DATA _ BASE _ NAME .$ PIPELINE _ BUILD _ HISTORY _ TABLE _ NAME ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where (" PROJECT _ ID ='$ projectId ' ĠAND ĠPI PE LINE _ ID ='$ pipeline Id '") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fetch One ( 0 , ĠLong :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmax Keep Num Ġ= Ġmisc Build Data Clear Config . max Keep Num . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( max Pipeline Build Num Ġ> Ġmax Keep Num ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecent Condition Sql Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" PIPELINE _ ID ='$ pipeline Id ' ĠAND ĠBUILD _ NUM Ġ<= Ġ${ max Pipeline Build Num Ġ- Ġmax Keep Num }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" pipeline Build History Recent Data Clear Ġstart ........ ..... ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclean Build History Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpipeline Id Ġ= Ġpipeline Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcondition Sql Ġ= Ġrecent Condition Sql , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprojectId Ġ= ĠprojectId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Comp let ely Delete Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå°Ĩ å½ĵåīį å·² å¤ĦçĲĨ å®Į çļĦ æľĢå¤§ é¡¹çĽ® Id åŃĺ åħ¥ redis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġredis Operation . set ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Ġ= ĠPI PE LINE _ BUILD _ HISTORY _ DATA _ CLEAR _ PROJECT _ ID _ KEY , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġmax Handle Project Primary Id . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpired Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( t : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn (" pipeline Build History Data Clear Ġfailed ", Ġt ) ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlock . unlock () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclean Build History Data ( ĊĠĠĠĠĠĠĠ Ġpipeline Id : ĠString , ĊĠĠĠĠĠĠĠ Ġcondition Sql : ĠString , ĊĠĠĠĠĠĠĠ ĠprojectId : ĠString , ĊĠĠĠĠĠĠĠ Ġis Comp let ely Delete : ĠBoolean ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtotal Build Count Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġd sl Context . select Count (). from ("$ PROCESS _ DATA _ BASE _ NAME .$ PIPELINE _ BUILD _ HISTORY _ TABLE _ NAME ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where ( condition Sql ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fetch One ( 0 , ĠLong :: class . java ) ĊĠĠĠĠĠĠĠ Ġlogger . info (" pipeline Build History Data Clear ĠprojectId :$ projectId , pipeline Id :$ pipeline Id , total Build Count :$ total Build Count ") ĊĠĠĠĠĠĠĠ Ġvar Ġtotal Handle Num Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( total Handle Num Ġ< Ġtotal Build Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" pipeline Build History Data Clear ĠprojectId :$ projectId , pipeline Id :$ pipeline Id , total Build Count :$ total Build Count , total Handle Num :$ total Handle Num ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbase Step Ġ= Ġd sl Context . select ( DSL . field (" BUILD _ ID ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. from ("$ PROCESS _ DATA _ BASE _ NAME .$ PIPELINE _ BUILD _ HISTORY _ TABLE _ NAME ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where ( condition Sql ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Comp let ely Delete ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbase Step . limit ( PIPELINE _ BUILD _ HISTORY _ PAGE _ SIZE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbase Step . limit ( total Handle Num , ĠPI PE LINE _ BUILD _ HISTORY _ PAGE _ SIZE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpipeline History Build Ids Ġ= Ġbase Step . fetch () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpipeline History Build Ids . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuild Id Ġ= Ġit . value 1 (). toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ä¾Ŀ æ¬¡ åĪłéĻ¤ process è¡¨ ä¸ŃçļĦ çĽ¸åħ³ æŀĦå»º è®°å½ķ ( T _ PIPELINE _ BUILD _ HISTORY åģļ ä¸º åŁº åĩĨ è¡¨ ï¼Į ä¸ºäºĨ ä¿Ŀè¯ģ æŀĦå»º æµģ æ°´ è®°å½ķ åĪł å¹² åĩ Ģ ï¼Į T _ PIPELINE _ BUILD _ HISTORY è®°å½ķ è¦ģ æľĢåĲİ åĪł ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbatch SqlList Ġ= Ġpipeline History Data Clear Service . get Clear SqlList ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd sl Context Ġ= Ġd sl Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprojectId Ġ= ĠprojectId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpipeline Id Ġ= Ġpipeline Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Id Ġ= Ġbuild Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Comp let ely Delete Ġ= Ġis Comp let ely Delete ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd sl Context . batch ( batch SqlList ). execute () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Handle Num Ġ+= ĠPI PE LINE _ BUILD _ HISTORY _ PAGE _ SIZE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }