主要更新: - 使用SSH私钥认证替代用户名密码认证 - 配置deploy-server-ssh-key凭据ID - 修复Jenkinsfile格式和缩进问题 - 添加SSH配置指南和企业级部署文档 技术改进: - 使用sshagent进行安全的SSH连接 - 移除sshpass依赖,提升安全性 - 统一使用root@116.62.163.84进行部署 - 优化Docker镜像传输和部署流程 新增文档: - SSH_CONFIG_GUIDE.md - SSH私钥配置指南 - ENTERPRISE_JENKINS_GUIDE.md - 企业级Jenkins部署 - jenkins-docker/ - Jenkins Docker化部署方案
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')
|
||
}
|
||
}
|
||
}
|
||
}
|