252 lines
7.1 KiB
Groovy
252 lines
7.1 KiB
Groovy
|
/**
|
|||
|
* 企业级通用CI/CD Pipeline模板
|
|||
|
* 支持多种项目类型:Java Maven/Gradle、Node.js、Python等
|
|||
|
*
|
|||
|
* 使用方法:
|
|||
|
* 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')
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|