refactor(executeFreeleapsPipeline): enhance stage definitions with podTemplate for build agent and dependencies resolver

Signed-off-by: 孙振宇 <>
This commit is contained in:
孙振宇 2025-02-04 14:55:48 +08:00
parent 9cb3ea18f6
commit a3e3788ee1

View File

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