118 lines
3.0 KiB
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)
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
} |