freeleaps-ops/first-class-pipeline/vars/executeFreeleapsPipeline.groovy

132 lines
3.3 KiB
Groovy

#!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)
}
}
}
}
}
}