jenkins普通流水模版

pipeline {
    agent any

    environment {
        // 基础配置
        DOCKER_IMAGE = '192.168.73.100:38080/label/test-project'
        PROJECT_URL = '192.168.73.100:48080/testproject/test-project.git'
        PROJECT_BRANCH = 'main'
        REGISTRY_CREDENTIALS_ID = '3a6d2e5c-1b9f-4e8a-9c2d-7e4f6a8b9c3d'
        JENKINS_PROJECT_NAME = 'test-project-正式服'
        K8S_FILE = '/data/kubelet/test-project.yaml'
        DOCKER_FILE_PATH = './'

        // 构建信息
        BUILD_TIMESTAMP = "${new Date().format('yyyyMMdd-HHmmss')}"
        GIT_COMMIT_SHORT = ''
        GIT_TAG = ''
        IMAGE_TAG = ''
        IMAGE_FULL_NAME = ''
    }

    options {
        // 构建选项
        timeout(time: 30, unit: 'MINUTES')
        timestamps()
        ansiColor('xterm')
        disableConcurrentBuilds()
    }

    stages {
        stage('初始化') {
            steps {
                script {
                    echo "🚀 开始构建项目: ${JENKINS_PROJECT_NAME}"
                    echo "📅 构建时间: ${BUILD_TIMESTAMP}"
                    echo "🌿 目标分支: ${PROJECT_BRANCH}"
                }
            }
        }

        stage('代码检出') {
            steps {
                script {
                    withCredentials([string(credentialsId: '2b1c8d7e-9c4f-41a2-8a3b-6d5e1f4a7b8c', variable: 'GITLAB_TOKEN')]) {
                        // 检出代码
                        checkout([
                            $class: 'GitSCM',
                            branches: [[name: "*/${PROJECT_BRANCH}"]],
                            userRemoteConfigs: [[
                                url: "http://oauth2:${GITLAB_TOKEN}@${PROJECT_URL}",
                                credentialsId: '2b1c8d7e-9c4f-41a2-8a3b-6d5e1f4a7b8c'
                            ]],
                            extensions: [
                                [$class: 'CleanBeforeCheckout'],
                                [$class: 'SubmoduleOption', recursiveSubmodules: true]
                            ]
                        ])

                        // 获取Git信息
                        env.GIT_COMMIT_SHORT = sh(script: 'git rev-parse --short HEAD', returnStdout: true).trim()

                        // 检查当前提交是否有标签
                        def currentTags = sh(script: 'git tag --points-at HEAD', returnStdout: true).trim()

                        if (currentTags) {
                            // 如果有多个标签,取最新的一个
                            env.GIT_TAG = currentTags.split('\n').last()
                            env.IMAGE_TAG = env.GIT_TAG
                            echo "🏷️  当前提交有标签: ${env.GIT_TAG}"
                        } else {
                            // 检查最近的标签
                            def latestTag = sh(script: 'git describe --tags --abbrev=0 2>/dev/null || echo ""', returnStdout: true).trim()

                            if (latestTag) {
                                // 计算距离最新标签的提交数
                                def commitCount = sh(script: "git rev-list --count ${latestTag}..HEAD", returnStdout: true).trim()
                                if (commitCount == "0") {
                                    // 当前提交就是最新标签
                                    env.GIT_TAG = latestTag
                                    env.IMAGE_TAG = env.GIT_TAG
                                    echo "🏷️  使用最新标签: ${env.GIT_TAG}"
                                } else {
                                    // 有新的提交,使用commit ID
                                    env.IMAGE_TAG = env.GIT_COMMIT_SHORT
                                    echo "📝 距离最新标签 ${latestTag} 有 ${commitCount} 个提交,使用commit ID: ${env.GIT_COMMIT_SHORT}"
                                }
                            } else {
                                // 没有任何标签,使用commit ID
                                env.IMAGE_TAG = env.GIT_COMMIT_SHORT
                                echo "📝 没有找到任何标签,使用commit ID: ${env.GIT_COMMIT_SHORT}"
                            }
                        }

                        // 构建完整镜像名称
                        env.IMAGE_FULL_NAME = "${DOCKER_IMAGE}:${env.IMAGE_TAG}"

                        echo "🐳 镜像名称: ${env.IMAGE_FULL_NAME}"
                        echo "📋 Git信息:"
                        echo "   - 提交ID: ${env.GIT_COMMIT_SHORT}"
                        echo "   - 标签: ${env.GIT_TAG ?: '无'}"
                        echo "   - 镜像标签: ${env.IMAGE_TAG}"
                    }
                }
            }
        }

        stage('代码质量检查') {
            parallel {
                stage('代码规范检查') {
                    steps {
                        script {
                            echo "🔍 执行代码规范检查..."
                            // 这里可以添加具体的代码检查命令
                            // 例如: npm run lint, pylint, sonarqube等

                            // 模拟检查过程
                            sleep(5)
                            echo "✅ 代码规范检查完成"
                        }
                    }
                }

                stage('安全扫描') {
                    steps {
                        script {
                            echo "🛡️  执行安全扫描..."
                            // 这里可以添加安全扫描工具
                            // 例如: OWASP ZAP, Trivy等

                            // 模拟扫描过程
                            sleep(8)
                            echo "✅ 安全扫描完成"
                        }
                    }
                }
            }
        }

        stage('构建测试') {
            parallel {
                stage('单元测试') {
                    steps {
                        script {
                            echo "🧪 执行单元测试..."
                            // 这里添加具体的测试命令
                            // 例如: npm test, pytest等

                            // 模拟测试过程
                            sleep(10)
                            echo "✅ 单元测试完成"
                        }
                    }
                }

                stage('集成测试') {
                    steps {
                        script {
                            echo "🔗 执行集成测试..."
                            // 这里添加集成测试命令

                            // 模拟测试过程
                            sleep(12)
                            echo "✅ 集成测试完成"
                        }
                    }
                }
            }
        }

        stage('构建应用') {
            steps {
                script {
                    echo "🔨 开始构建应用..."
                    echo "📦 构建镜像: ${env.IMAGE_FULL_NAME}"

                    // 这里添加具体的构建命令
                    // 例如: docker build, npm run build等

                    // 模拟构建过程
                    sleep(15)
                    echo "✅ 应用构建完成"
                }
            }
        }

        stage('构建Docker镜像') {
            steps {
                script {
                    echo "🐳 构建Docker镜像..."
                    /*
                    withCredentials([usernamePassword(credentialsId: REGISTRY_CREDENTIALS_ID, usernameVariable: 'REGISTRY_USER', passwordVariable: 'REGISTRY_PASS')]) {
                        // 构建Docker镜像
                        sh """
                            docker build -t ${env.IMAGE_FULL_NAME} ${DOCKER_FILE_PATH}
                            docker tag ${env.IMAGE_FULL_NAME} ${DOCKER_IMAGE}:latest
                        """
                    }
                    */
                    echo "✅ Docker镜像构建完成: ${env.IMAGE_FULL_NAME}"
                }
            }
        }

        stage('推送镜像') {
            steps {
                script {
                    echo "📤 推送Docker镜像到仓库..."
                    /*
                    withCredentials([usernamePassword(credentialsId: REGISTRY_CREDENTIALS_ID, usernameVariable: 'REGISTRY_USER', passwordVariable: 'REGISTRY_PASS')]) {
                        // 登录镜像仓库
                        sh "echo '${REGISTRY_PASS}' | docker login 192.168.73.100:38080 -u ${REGISTRY_USER} --password-stdin"

                        // 推送镜像
                        sh """
                            docker push ${env.IMAGE_FULL_NAME}
                            docker push ${DOCKER_IMAGE}:latest
                        """
                    }
                    */
                    echo "✅ 镜像推送完成"
                }
            }
        }

        stage('部署到测试环境') {
            steps {
                script {
                    echo "🚀 部署到测试环境..."
                    /*
                    // 更新Kubernetes配置文件中的镜像标签
                    sh """
                        sed -i 's|image: ${DOCKER_IMAGE}:.*|image: ${env.IMAGE_FULL_NAME}|g' ${K8S_FILE}
                    """

                    // 应用Kubernetes配置
                    sh "kubectl apply -f ${K8S_FILE}"

                    // 等待部署完成
                    sh "kubectl rollout status deployment/test-project --timeout=300s"
                    */
                    echo "✅ 测试环境部署完成"
                }
            }
        }

        stage('健康检查') {
            steps {
                script {
                    echo "🏥 执行健康检查..."

                    // 等待服务启动
                    // sleep(30)

                    // 这里可以添加具体的健康检查逻辑
                    // 例如: curl检查API端点,数据库连接测试等

                    echo "✅ 健康检查通过"
                }
            }
        }

        stage('创建Git标签') {
            when {
                expression {
                    // 只有在没有标签且构建成功时才创建标签
                    return !env.GIT_TAG && currentBuild.result == 'SUCCESS'
                }
            }
            steps {
                script {
                    echo "🏷️  创建Git标签..."

                    withCredentials([string(credentialsId: '2b1c8d7e-9c4f-41a2-8a3b-6d5e1f4a7b8c', variable: 'GITLAB_TOKEN')]) {
                        // 创建新标签
                        def newTag = "v${BUILD_TIMESTAMP}"
                        sh """
                            git config user.email "jenkins@example.com"
                            git config user.name "Jenkins"
                            git tag -a ${newTag} -m "Auto-generated tag for build ${BUILD_NUMBER}"
                            git push origin ${newTag}
                        """

                        echo "✅ 创建标签: ${newTag}"
                    }
                }
            }
        }
    }

    post {
        always {
            script {
                echo "🧹 清理工作空间..."
                // 注释掉Docker镜像清理
                /*
                // 清理Docker镜像
                sh "docker rmi ${env.IMAGE_FULL_NAME} || true"
                sh "docker rmi ${DOCKER_IMAGE}:latest || true"

                // 清理未使用的Docker镜像
                sh "docker image prune -f || true"
                */

                echo "✅ 工作空间清理完成"
            }
        }

        success {
            script {
                echo "🎉 构建成功!"
                echo "📊 构建信息:"
                echo "   - 构建号: ${BUILD_NUMBER}"
                echo "   - 镜像: ${env.IMAGE_FULL_NAME}"
                echo "   - 标签: ${env.IMAGE_TAG}"
                echo "   - 耗时: ${currentBuild.durationString}"

                // 这里可以添加成功通知
                // 例如: 发送邮件、钉钉、企业微信等
            }
        }

        failure {
            script {
                echo "❌ 构建失败!"
                echo "🔍 请检查构建日志以获取详细信息"

                // 这里可以添加失败通知
                // 例如: 发送邮件、钉钉、企业微信等
            }
        }

        unstable {
            script {
                echo "⚠️  构建不稳定"
            }
        }

        aborted {
            script {
                echo "⏹️  构建被中断"
            }
        }
    }
}

// 工具函数
def notify(String message, String type = 'info') {
    def emoji = [
        'info': 'ℹ️',
        'success': '✅',
        'warning': '⚠️',
        'error': '❌'
    ]

    echo "${emoji[type]} ${message}"
}

def getBuildDuration() {
    def duration = currentBuild.duration
    def minutes = duration.intdiv(60000)
    def seconds = (duration % 60000).intdiv(1000)
    return "${minutes}分${seconds}秒"
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值