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

118 lines
3.0 KiB
Groovy

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