#!groovy import com.freeleaps.devops.SourceFetcher import com.freeleaps.devops.DependenciesResolver import com.freeleaps.devops.enums.DependenciesManager import com.freeleaps.devops.enums.ServiceLanguage def call(body) { def configurations = [:] body.resolveStrategy = Closure.DELEGATE_FIRST body.delegate = configurations body() pipeline { agent any options { buildDiscarder(logRotator(numToKeepStr: '25')) timeout(time: 30, unit: 'MINUTES') } stages { stage("Source Codes Checkout") { steps { script { def sourceFetcher = new SourceFetcher(this) sourceFetcher.fetch(configurations) } } } stage("Commit Linting If Enabled") { steps { script { def enabled = configurations.commitMessageLintEnabled if (enabled != null && enabled == "true") { log.info "Commit Line has enabled" } } } } stage("Build Agent Setup") { steps { script { def buildAgentImage = configurations.buildAgentImage if (buildAgentImage == null || buildAgentImage.isEmpty()) { log.warn "Not set buildAgentImage, 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.NODE: buildAgentImage = "node:lts-alpine" break default: error("Unknown service language") } log.info "Using ${buildAgentImage} as build agent image" env.buildAgentImage = buildAgentImage } } } } stage("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: - cat tty: true volumeMounts: - name: workspace mountPath: /workspace volumes: - name: workspace emptyDir: {} """ } } steps { script { def language = ServiceLanguage.parse(configurations.serviceLang) def depManager = DependenciesManager.parse(configurations.dependenciesManager) def dependenciesResolver = new DependenciesResolver(this, language) dependenciesResolver.useManager(depManager) if (configurations.buildCacheEnabled) { dependenciesResolver.enableCachingSupport() } else { dependenciesResolver.disableCachingSupport() } dependenciesResolver.resolve(configurations) } } } } } }