package Ġcom . code 4 2 . jenkins . pipeline kt . dsl . step . custom Ċ Ċ import Ġcom . code 4 2 . jenkins . pipeline kt . core . agent . Docker Agent Ċ import Ġcom . code 4 2 . jenkins . pipeline kt . core . step . Step Ċ import Ġcom . code 4 2 . jenkins . pipeline kt . core . vars . Var Ċ import Ġcom . code 4 2 . jenkins . pipeline kt . core . vars . ext . str Single Ċ import Ġcom . code 4 2 . jenkins . pipeline kt . dsl . Dsl Context Ċ import Ġcom . code 4 2 . jenkins . pipeline kt . dsl . Singleton Dsl Context Ċ import Ġcom . code 4 2 . jenkins . pipeline kt . dsl . step . script ed . Docker Var Ċ import Ġcom . code 4 2 . jenkins . pipeline kt . dsl . step . script ed . docker Build Ċ import Ġcom . code 4 2 . jenkins . pipeline kt . dsl . step . script ed . docker Image Ċ import Ġcom . code 4 2 . jenkins . pipeline kt . dsl . step . script ed . with Docker Registry Ċ import Ġjava . util . UUID Ċ Ċ sealed Ġclass ĠSide Car Ġ{ ĊĠĠĠ Ġabstract Ġval Ġcontainer Variable : ĠVar . Variable ĊĠĠĠ Ġabstract Ġval Ġcontainer Link Name : ĠString ĊĠĠĠ Ġabstract Ġval Ġrun Args : ĠVar . Literal . Str ĊĠĠĠ Ġabstract Ġval Ġrun Command : ĠVar . Literal . Str ? ĊĊĠĠĠ Ġdata Ġclass ĠImage ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠName Ġof Ġthe Ġvariable Ġin Ġthe Ġgro ovy Ġwith Run Ġclosure ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġcontainer Variable : ĠVar . Variable , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠName Ġof Ġthe Ġcontainer Ġfor Ġhost Ġlinking Ġ( i . e . Ġthe ĠDNS Ġby Ġw ich Ġother Ġcontainers Ġwill Ġcall Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcontainer Ġon Ġthe Ġnetwork ) ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġcontainer Link Name : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġimage Ġto Ġuse , Ġin her ites Ġregistry Ġfrom Ġparent Ġif Ġdefined ĊĠĠĠĠĠĠĠ Ġval Ġimage : ĠVar . Literal . Str , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġinclude Ġany Ġexpose Ġpos r ts Ġhere ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġrun Args : ĠVar . Literal . Str , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcustom Ġcontainer Ġcommand ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġrun Command : ĠVar . Literal . Str ? Ġ= Ġnull ĊĠĠĠ Ġ) Ġ: ĠSide Car () Ċ } Ċ Ċ data Ġclass ĠDocker Dsl ( ĊĠĠĠ Ġval Ġdefault Docker Build Args : ĠString , ĊĠĠĠ Ġval Ġbefore Container : ĠD sl Context < Step >. () Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRun Ġsome Ġsteps Ġinside Ġof Ġa Ġcontainer , Ġinject Ġ" before Container " Ġand Ġuse Ġ" default Docker Build Args " Ġif Ġusing Ġa ĊĠĠĠĠ Ġ* Ġdocker Ġcontainer Ġagent . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠD sl Context < Step >. inside Container ( ĊĠĠĠĠĠĠĠ Ġdocker Agent : ĠSingleton Dsl Context < Docker Agent >. () Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠ Ġside C ars : ĠList < Side Car > Ġ= Ġempty List (), ĊĠĠĠĠĠĠĠ Ġsteps : ĠD sl Context < Step >. () Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdocker Agent Ġ= ĠSingleton Dsl Context . into ( docker Agent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalStateException (" Must Ġdefine Ġa Ġdocker Ġagent ") ĊĊĠĠĠĠĠĠĠ Ġval Ġside Car Args Ġ= Ġside C ars ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ"-- link Ġ${ it . container Variable . access Member (" id ") }:${ it . container Link Name }" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ToString (" Ġ") ĊĠĠĠĠĠĠĠ Ġval Ġmain Container Run Args Ġ= Ġ(" ${ docker Agent . args Ġ?: Ġ"". str Single ()} Ġ" Ġ+ Ġside Car Args ) ĊĠĠĠĠĠĠĠ Ġval Ġmain Container Id Ġ= ĠUUID . randomUUID (). toString (). replace ("[ ^ A - Za - z 0 - 9 Ġ] ". to Regex (), Ġ"") ĊĊĠĠĠĠĠĠĠ Ġapply Registry Settings ( docker Agent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Side C ars ( side C ars ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbefore Container () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Or Pull ( docker Agent , Ġmain Container Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. inside ( main Container Run Args , Ġsteps ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠD sl Context < Step >. apply Registry Settings ( agent : ĠDocker Agent , Ġsteps : ĠD sl Context < Step >. () Ġ-> ĠUnit ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġagent . registry Url ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġwith Docker Registry ( it , Ġagent . registry Credentials Id , Ġsteps ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġsteps () ĊĊĠĠĠ Ġprivate Ġfun ĠD sl Context < Step >. side Car ( side Car : ĠSide Car , Ġsteps : ĠD sl Context < Step >. () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( side Car ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSide Car . Image Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdocker Image ( side Car . image ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Run ( args Ġ= Ġside Car . run Args , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommand Ġ= Ġside Car . run Command , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer Variable Ġ= Ġside Car . container Variable , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsteps Ġ= Ġsteps ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠD sl Context < Step >. with Side C ars ( side C ars : ĠList < Side Car >, Ġsteps : ĠD sl Context < Step >. () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfn Ġ= Ġside C ars . fold ( steps , Ġ{ Ġbuild Steps , Ġside Car Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġit : ĠD sl Context < Step >. () Ġ-> ĠUnit Ġ= Ġ{ Ġside Car ( side Car , Ġbuild Steps ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġthis . fn () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠD sl Context < Step >. build Or Pull ( agent : ĠDocker Agent , Ġimage Name : ĠString ): ĠDocker Var Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( agent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠDocker Agent . File Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuild Args Ġ= Ġ"-- file Ġ${ agent . filename } Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ default Docker Build Args Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ agent . additional Build Args Ġ?: Ġ"" } Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ agent . dir Ġ?: Ġ"." }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdocker Build ( image Name , Ġbuild Args ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠDocker Agent . Image Ġ-> Ġdocker Image ( agent . image ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ } Ċ