refactor(executeFreeleapsPipeline): extract component stages into a separate function for improved readability and structure

Signed-off-by: 孙振宇 <>
This commit is contained in:
孙振宇 2025-02-04 14:38:58 +08:00
parent 79c9c845b0
commit 908735112a

View File

@ -7,6 +7,81 @@ import com.freeleaps.devops.enums.ServiceLanguage
import com.freeleaps.devops.CommitMessageLinter
import com.freeleaps.devops.ChangedComponentsDetector
def generateComponentStages(component) {
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")
}
}
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
@ -109,84 +184,10 @@ spec:
return env.executeMode == "fully" || env.changedComponents.size() > 0
}
}
stages {
steps {
script {
configurations.components.each { component ->
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")
}
}
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)
}
}
}
}
generateComponentStages(component)
}
}
}