From 908735112a8688b6f0ad4acec0a1e113b6220dc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=99=E6=8C=AF=E5=AE=87?= <> Date: Tue, 4 Feb 2025 14:38:58 +0800 Subject: [PATCH] refactor(executeFreeleapsPipeline): extract component stages into a separate function for improved readability and structure MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 孙振宇 <> --- .../vars/executeFreeleapsPipeline.groovy | 153 +++++++++--------- 1 file changed, 77 insertions(+), 76 deletions(-) diff --git a/first-class-pipeline/vars/executeFreeleapsPipeline.groovy b/first-class-pipeline/vars/executeFreeleapsPipeline.groovy index e0c79f4f..69e2a49b 100644 --- a/first-class-pipeline/vars/executeFreeleapsPipeline.groovy +++ b/first-class-pipeline/vars/executeFreeleapsPipeline.groovy @@ -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) } } }