package Ġcom . tencent . devops . art ifactory . service Ċ Ċ import Ġcom . tencent . devops . art ifactory . constant . Push Message Code Ċ import Ġcom . tencent . devops . art ifactory . pojo . Env Set Ċ import Ġcom . tencent . devops . art ifactory . pojo . Fast Push File Request Ċ import Ġcom . tencent . devops . art ifactory . pojo . File Resource Info Ċ import Ġcom . tencent . devops . art ifactory . pojo . vo . Push Result VO Ċ import Ġcom . tencent . devops . art ifactory . pojo . Push Status Ċ import Ġcom . tencent . devops . art ifactory . pojo . Remote Resource Info Ċ import Ġcom . tencent . devops . common . api . exception . Permission Forbidden Exception Ċ import Ġcom . tencent . devops . common . api . pojo . Result Ċ import Ġcom . tencent . devops . common . auth . api . Auth Permission Ċ import Ġcom . tencent . devops . common . auth . api . Auth Permission Api Ċ import Ġcom . tencent . devops . common . auth . api . Auth ResourceType Ċ import Ġcom . tencent . devops . common . auth . code . Pipeline Auth Service Code Ċ import Ġcom . tencent . devops . common . service . utils . Message Code Util Ċ import Ġorg . slf 4 j . Logger Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . stereotype . Service Ċ import Ġjava . io . File Ċ Ċ @ Service Ċ class ĠPush File Service Ext Ġ@ Autowired Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġauth Permission Api : ĠAuth Permission Api , ĊĠĠĠ Ġprivate Ġval Ġpipeline Auth Service Code : ĠPipeline Auth Service Code , ĊĠĠĠ Ġprivate Ġval Ġenv Service : ĠEnv Service Ext , ĊĠĠĠ Ġprivate Ġval Ġjob Service : ĠJob Service Ext , ĊĠĠĠ Ġprivate Ġval Ġfile Service : ĠFile Service Ċ ) Ġ: ĠPush File Service Ġ{ ĊĊĠĠĠ Ġval Ġjob Instance Map Ġ= Ġmutable Map Of < String , ĠList < String >>() ĊĊĠĠĠ Ġoverride Ġfun Ġpush File By Job ( ĊĠĠĠĠĠĠĠ ĠuserId : ĠString , ĊĠĠĠĠĠĠĠ Ġpush Resource Info : ĠRemote Resource Info , ĊĠĠĠĠĠĠĠ Ġfile Resource Info : ĠFile Resource Info ĊĠĠĠ Ġ): ĠResult < Long > Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info (" push File By Job Ġuser [$ userId ], Ġpush Resource Info [$ push Resource Info ] Ġfile Resource Info [$ file Resource Info ]") ĊĠĠĠĠĠĠĠ Ġvar Ġjob InstanceId Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠ Ġval ĠprojectId Ġ= Ġfile Resource Info . projectId ĊĠĠĠĠĠĠĠ Ġval Ġpipeline Id Ġ= Ġfile Resource Info . pipeline Id ĊĠĠĠĠĠĠĠ Ġval Ġbuild Id Ġ= Ġfile Resource Info . build Id ĊĠĠĠĠĠĠĠ Ġ// Ġ æł¡éªĮ çĶ¨æĪ· æĺ¯åĲ¦ æľī æĿĥéĻĲ ä¸ĭè½½ æĸĩä»¶ ĊĠĠĠĠĠĠĠ Ġval Ġvalidate Permission Ġ= Ġauth Permission Api . validate User Resource Permission ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠuserId , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpipeline Auth Service Code , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAuth ResourceType . PIPELINE _ DEFAULT , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠprojectId , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpipeline Id , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAuth Permission . DOWNLOAD ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! validate Permission ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠPermission Forbidden Exception ( Message Code Util . getCode Message ( Push Message Code . F USH _ FILE _ VALIDATE _ FAIL , Ġnull )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġdownload Files Ġ= Ġmutable ListOf < File >() ĊĠĠĠĠĠĠĠ Ġ// Ġ è§£æŀĲ çĽ®æłĩ æľºåĻ¨ ï¼Į éľĢ æł¡éªĮ çĶ¨æĪ· æĺ¯åĲ¦ æľī æĿĥéĻĲ æĵįä½ľ çĽ®æłĩ æľº ĊĠĠĠĠĠĠĠ Ġval Ġenv Set Ġ= Ġenv Service . parsing And Validate Env ( push Resource Info , ĠuserId , ĠprojectId ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ä¸ĭè½½ çĽ®æłĩ æĸĩä»¶ åĪ° æľ¬åľ° ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdownload Files Ġ= Ġfile Service . download File To local ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprojectId , Ġpipeline Id , Ġbuild Id , Ġfile Resource Info . fileName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile Resource Info . is Custom !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). to Mutable List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfilePath Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdownload Files . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfilePath . add ( it . absolute Path ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocal Env Set Ġ= ĠEnv Set ( emptyList (), Ġempty List (), Ġenv Service . build Ip Dto ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Source Ġ= ĠFast Push File Request . File Source ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfiles Ġ= ĠfilePath , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenv Set Ġ= Ġlocal Env Set , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaccount Ġ= Ġpush Resource Info . account ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfast Push File Request Ġ= ĠFast Push File Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserId Ġ= ĠuserId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenv Set Ġ= Ġenv Set , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile Sources Ġ= ĠlistOf ( file Source ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile Target Path Ġ= Ġpush Resource Info . target Path , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaccount Ġ= Ġpush Resource Info . account , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimeout Ġ= Ġpush Resource Info . timeout Ġ?: Ġ 6 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġæī§è¡Į åĪĨ åıĳ åĬ¨ ä½ľ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjob InstanceId Ġ= Ġjob Service . fast Push File Dev ops ( fast Push File Request , ĠprojectId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcache Push Msg ( job InstanceId , Ġdownload Files ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn (" push Ġfile Ġby Ġjob Ġfail : Ġ$ e ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclear Tmp File ( job InstanceId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠResult ( job InstanceId ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcheck Status ( ĊĠĠĠĠĠĠĠ ĠuserId : ĠString , ĊĠĠĠĠĠĠĠ ĠprojectId : ĠString , ĊĠĠĠĠĠĠĠ Ġtask InstanceId : ĠLong ĊĠĠĠ Ġ): ĠResult < Push Result VO > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġjob Service . get Task Result ( projectId , Ġtask InstanceId , ĠuserId ) ĊĠĠĠĠĠĠĠ Ġif Ġ( result . is Finish ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( result . success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResult ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPush Result VO ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= ĠPush Status . SUCCESS , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg Ġ= Ġresult . msg ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResult ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPush Result VO ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= ĠPush Status . FAIL , Ġmsg Ġ= Ġresult . msg ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResult ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPush Result VO ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= ĠPush Status . RUNNING , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg Ġ= Ġresult . msg ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclear Tmp File ( jobId : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile List Ġ= Ġjob Instance Map [ jobId . toString ()] ĊĠĠĠĠĠĠĠ Ġif Ġ( file List Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( file List . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclear Tmp File ( file List ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclear Tmp File ( files : ĠList < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info (" start Ġclear ĠT mp File , Ġtmp File Ġcount :${ files . size }") ĊĠĠĠĠĠĠĠ Ġval ĠstartTime Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġfiles . forEach Ġ{ Ġfile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtmp File Ġ= ĠFile ( file ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tmp File . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tmp File . isDirectory ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ("[ Ġdelete Ġtemp Ġdir Ġ$ file Ġ: Ġ${ tmp File . delete Re cursively () }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ("[ delete Ġtemp Ġfile Ġ$ file Ġ: Ġ${ tmp File . delete () }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlogger . info (" delete Ġtemp Ġfile Ġtime ï¼ļ ${ System . currentTimeMillis () Ġ- ĠstartTime }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcache Push Msg ( jobId : ĠLong , Ġfiles : ĠList < File >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpath List Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠ Ġfiles . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath List . add ( it . absolute Path ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġjob Instance Map [ jobId . toString ()] Ġ= Ġpath List ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlogger : ĠLogger Ġ= ĠLoggerFactory . getLogger ( this :: class . java ) ĊĠĠĠ Ġ} Ċ }