#!groovy import com.freeleaps.devops.EnvironmentVars 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() def environmentVars = new EnvironmentVars(this) 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("Prepared Environment Variables") { steps { script { environmentVars.injectVars(configurations) } } } stage("Commit Linting If Enabled") { steps { script { def enabled = configurations.commitMessageLintEnabled if (enabled != null && enabled == "true") { print("Commit Linting is enabled") } } } } stage("Build Agent Setup") { steps { script { def buildAgentImage = configurations.buildAgentImage if (buildAgentImage == null || buildAgentImage.isEmpty()) { echo "Not set buildAgentImage, using default build agent image" def language = env.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") } echo "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 = env.serviceLang def depManager = DependenciesManager.parse(configurations.dependenciesManager) if (depManager == DependenciesManager.UNKNOWN) { error("Unknown dependencies manager") } def dependenciesResolver = new DependenciesResolver(this, language) dependenciesResolver.useManager(depManager) if (configurations.BUILD_CACHE_ENABLED == "true") { dependenciesResolver.enableCachingSupport() } else { dependenciesResolver.disableCachingSupport() } dependenciesResolver.resolve(configurations) } } } } } }