java_demo/jenkins-docker/pipeline-templates/universal-pipeline.groovy
wangtianqi 7b8bd55554 feat: 完善Jenkins流水线配置
主要更新:
- 使用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化部署方案
2025-06-23 21:14:09 +08:00

252 lines
7.1 KiB
Groovy
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 企业级通用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')
}
}
}
}