java_demo/jenkins-docker/pipeline-templates/universal-pipeline.groovy

252 lines
7.1 KiB
Groovy
Raw Normal View History

/**
* CI/CD Pipeline模板
* Java Maven/GradleNode.jsPython等
*
* 使
* 1. .ci-config.yml
* 2.
* 3. Jenkinsfile
*/
@Library('ci-cd-shared-library') _
pipeline {
agent any
options {
buildDiscarder(logRotator(numToKeepStr: '10'))
timeout(time: 30, unit: 'MINUTES')
timestamps()
skipDefaultCheckout()
}
environment {
// 动态从配置文件加载
CI_CONFIG = readFile('.ci-config.yml')
}
stages {
stage('初始化') {
steps {
script {
// 读取项目配置
def config = readYaml text: env.CI_CONFIG
env.PROJECT_TYPE = config.project?.type ?: 'java-maven'
env.PROJECT_NAME = config.project?.name ?: env.JOB_NAME
env.DEPLOY_TARGET = config.deploy?.target ?: 'test'
echo "🚀 开始构建项目: ${env.PROJECT_NAME}"
echo "📋 项目类型: ${env.PROJECT_TYPE}"
echo "🎯 部署目标: ${env.DEPLOY_TARGET}"
}
// 检出代码
checkout scm
script {
env.GIT_COMMIT_SHORT = sh(
script: "git rev-parse --short HEAD",
returnStdout: true
).trim()
}
}
}
stage('环境检测') {
steps {
script {
// 调用共享库中的环境检测方法
detectBuildEnvironment()
}
}
}
stage('代码分析') {
parallel {
stage('编译') {
steps {
script {
// 根据项目类型选择构建方法
switch(env.PROJECT_TYPE) {
case 'java-maven':
buildJavaMaven()
break
case 'java-gradle':
buildJavaGradle()
break
case 'nodejs':
buildNodejs()
break
case 'python':
buildPython()
break
default:
error "不支持的项目类型: ${env.PROJECT_TYPE}"
}
}
}
}
stage('代码质量检查') {
steps {
script {
// 执行代码质量检查
runCodeQualityCheck()
}
}
}
}
}
stage('测试') {
parallel {
stage('单元测试') {
steps {
script {
runUnitTests()
}
}
post {
always {
publishTestResults()
publishCoverageReport()
}
}
}
stage('集成测试') {
when {
expression {
return fileExists('src/test/java/integration') ||
fileExists('tests/integration')
}
}
steps {
script {
runIntegrationTests()
}
}
}
}
}
stage('SonarQube分析') {
steps {
script {
runSonarQubeAnalysis()
}
}
}
stage('构建制品') {
parallel {
stage('打包应用') {
steps {
script {
buildArtifacts()
}
}
post {
success {
archiveArtifacts artifacts: getArtifactPattern(), fingerprint: true
}
}
}
stage('构建镜像') {
when {
expression { return fileExists('Dockerfile') }
}
steps {
script {
buildDockerImage()
}
}
}
}
}
stage('安全扫描') {
parallel {
stage('依赖扫描') {
steps {
script {
runDependencyCheck()
}
}
}
stage('镜像安全扫描') {
when {
expression { return fileExists('Dockerfile') }
}
steps {
script {
runImageSecurityScan()
}
}
}
}
}
stage('部署') {
when {
anyOf {
branch 'main'
branch 'develop'
branch 'release/*'
}
}
steps {
script {
// 部署到目标环境
deployToEnvironment(env.DEPLOY_TARGET)
}
}
}
stage('部署验证') {
when {
anyOf {
branch 'main'
branch 'develop'
branch 'release/*'
}
}
steps {
script {
// 执行部署后验证
runDeploymentValidation()
}
}
}
}
post {
always {
script {
// 清理工作空间
cleanupWorkspace()
}
}
success {
script {
sendNotification('success')
}
}
failure {
script {
sendNotification('failure')
}
}
unstable {
script {
sendNotification('unstable')
}
}
}
}