diff --git a/first-class-pipeline/vars/executeFreeleapsPipeline.groovy b/first-class-pipeline/vars/executeFreeleapsPipeline.groovy index e462e8e6..d2ff3075 100644 --- a/first-class-pipeline/vars/executeFreeleapsPipeline.groovy +++ b/first-class-pipeline/vars/executeFreeleapsPipeline.groovy @@ -9,81 +9,150 @@ import com.freeleaps.devops.ChangedComponentsDetector def generateComponentStages(component) { return [ - stage("${component.name} :: Build Agent Setup") { - steps { - script { - if (env.executeMode == "fully" || env.changedComponents.contains(component.name)) { - def buildAgentImage = component.buildAgentImage - if (buildAgentImage == null || buildAgentImage.isEmpty()) { - log.warn("Pipeline", "Not set buildAgentImage for ${component.name}, using default build agent image") - - def language = ServiceLanguage.parse(configurations.serviceLang) - switch(language) { - case ServiceLanguage.PYTHON: - buildAgentImage = "python:3.10-slim-buster" - break - case ServiceLanguage.JS: - buildAgentImage = "node:lts-alpine" - break - default: - error("Unknown service language") + stage("${component.name} :: Build Agent Setup") { + podTemplate( + label: "build-agent-${component.name}", + containers: [ + containerTemplate( + name: 'build-agent', + image: component.buildAgentImage ?: 'python:3.10-slim-buster', + ttyEnabled: true, + command: 'cat' + ) + ] + ) { + node("build-agent-${component.name}") { + steps { + script { + if (env.executeMode == "fully" || env.changedComponents.contains(component.name)) { + def buildAgentImage = component.buildAgentImage ?: "python:3.10-slim-buster" + log.info("Pipeline", "Using ${buildAgentImage} as build agent image for ${component.name}") + env.buildAgentImage = buildAgentImage + } } } - log.info("Pipeline", "Using ${buildAgentImage} as build agent image for ${component.name}") - env.buildAgentImage = buildAgentImage } } - } - }, + }, - stage("${component.name} :: Dependencies Resolving") { - agent { - kubernetes { - defaultContainer 'dep-resolver' - yaml """ -apiVersion: v1 -kind: Pod -metadata: - labels: - freeleaps-devops-system/milestone: dependencies-resolving -spec: - containers: - - name: dep-resolver - image: ${env.buildAgentImage} - command: - - sleep - args: - - infinity -""" - } - } - steps { - script { - if (env.executeMode == "fully" || env.changedComponents.contains(component.name)) { - log.info("Pipeline", "Build Agent sets to: ${env.buildAgentImage}") - def sourceFetcher = new SourceFetcher(this) - sourceFetcher.fetch(configurations) + stage("${component.name} :: Dependencies Resolving") { + podTemplate( + label: "dep-resolver-${component.name}", + containers: [ + containerTemplate( + name: 'dep-resolver', + image: env.buildAgentImage, + ttyEnabled: true, + command: 'sleep', + args: 'infinity' + ) + ] + ) { + node("dep-resolver-${component.name}") { + steps { + script { + if (env.executeMode == "fully" || env.changedComponents.contains(component.name)) { + log.info("Pipeline", "Using ${env.buildAgentImage} as build agent image for dependencies resolving") + def sourceFetcher = new SourceFetcher(this) + sourceFetcher.fetch(configurations) - def language = ServiceLanguage.parse(component.language) - def depManager = DependenciesManager.parse(component.dependenciesManager) + def language = ServiceLanguage.parse(component.language) + def depManager = DependenciesManager.parse(component.dependenciesManager) - def dependenciesResolver = new DependenciesResolver(this, language, env.workspace + "/" + component.root + "/") - dependenciesResolver.useManager(depManager) - - if (component.buildCacheEnabled) { - dependenciesResolver.enableCachingSupport() - } else { - dependenciesResolver.disableCachingSupport() + def dependenciesResolver = new DependenciesResolver(this, language, env.workspace + "/" + component.root + "/") + dependenciesResolver.useManager(depManager) + + if (component.buildCacheEnabled) { + dependenciesResolver.enableCachingSupport() + } else { + dependenciesResolver.disableCachingSupport() + } + + dependenciesResolver.resolve(component) + } + } } - - dependenciesResolver.resolve(component) } } } - } - ] + ] } +// def generateComponentStages(component) { +// return [ +// stage("${component.name} :: Build Agent Setup") { +// script { +// if (env.executeMode == "fully" || env.changedComponents.contains(component.name)) { +// def buildAgentImage = component.buildAgentImage +// if (buildAgentImage == null || buildAgentImage.isEmpty()) { +// log.warn("Pipeline", "Not set buildAgentImage for ${component.name}, using default build agent image") + +// def language = ServiceLanguage.parse(configurations.serviceLang) +// switch(language) { +// case ServiceLanguage.PYTHON: +// buildAgentImage = "python:3.10-slim-buster" +// break +// case ServiceLanguage.JS: +// buildAgentImage = "node:lts-alpine" +// break +// default: +// error("Unknown service language") +// } +// } +// log.info("Pipeline", "Using ${buildAgentImage} as build agent image for ${component.name}") +// env.buildAgentImage = buildAgentImage +// } +// } +// }, + +// stage("${component.name} :: Dependencies Resolving") { +// agent { +// kubernetes { +// defaultContainer 'dep-resolver' +// yaml """ +// apiVersion: v1 +// kind: Pod +// metadata: +// labels: +// freeleaps-devops-system/milestone: dependencies-resolving +// spec: +// containers: +// - name: dep-resolver +// image: ${env.buildAgentImage} +// command: +// - sleep +// args: +// - infinity +// """ +// } +// } +// steps { +// script { +// if (env.executeMode == "fully" || env.changedComponents.contains(component.name)) { +// log.info("Pipeline", "Build Agent sets to: ${env.buildAgentImage}") +// def sourceFetcher = new SourceFetcher(this) +// sourceFetcher.fetch(configurations) + +// def language = ServiceLanguage.parse(component.language) +// def depManager = DependenciesManager.parse(component.dependenciesManager) + +// def dependenciesResolver = new DependenciesResolver(this, language, env.workspace + "/" + component.root + "/") +// dependenciesResolver.useManager(depManager) + +// if (component.buildCacheEnabled) { +// dependenciesResolver.enableCachingSupport() +// } else { +// dependenciesResolver.disableCachingSupport() +// } + +// dependenciesResolver.resolve(component) +// } +// } +// } +// } +// ] +// } + def call(Closure closure) { def configurations = [:] closure.resolveStrategy = Closure.DELEGATE_FIRST