diff --git a/first-class-pipeline/vars/executeFreeleapsPipeline.groovy b/first-class-pipeline/vars/executeFreeleapsPipeline.groovy index d2ff3075..2b521ade 100644 --- a/first-class-pipeline/vars/executeFreeleapsPipeline.groovy +++ b/first-class-pipeline/vars/executeFreeleapsPipeline.groovy @@ -7,152 +7,74 @@ import com.freeleaps.devops.enums.ServiceLanguage import com.freeleaps.devops.CommitMessageLinter import com.freeleaps.devops.ChangedComponentsDetector -def generateComponentStages(component) { +def generateComponentStages(component, configurations) { return [ - 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 - } - } - } - } - } - }, - - 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 dependenciesResolver = new DependenciesResolver(this, language, env.workspace + "/" + component.root + "/") - dependenciesResolver.useManager(depManager) - - if (component.buildCacheEnabled) { - dependenciesResolver.enableCachingSupport() - } else { - dependenciesResolver.disableCachingSupport() - } - - dependenciesResolver.resolve(component) - } - } + 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") { + 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}") { + 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 dependenciesResolver = new DependenciesResolver(this, language, env.workspace + "/" + component.root + "/") + dependenciesResolver.useManager(depManager) + + if (component.buildCacheEnabled) { + dependenciesResolver.enableCachingSupport() + } else { + dependenciesResolver.disableCachingSupport() + } + + 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 @@ -258,7 +180,7 @@ spec: steps { script { configurations.components.each { component -> - def generatedStages = generateComponentStages(component) + def generatedStages = generateComponentStages(component, configurations) generatedStages.each { stage -> stage(stage) }