Jenkinsfile 4.81 KB
pipeline {
    agent any

    triggers {
        cron('0 10 * * *')
    }

    environment {
        PYTHON_VERSION = '3.8'
        PROJECT_NAME = 'api_test'
        // 根据 Jenkins Job 名称自动识别环境
        // Job 名称格式: APITEST-test / APITEST-uat / APITEST-prod
        // 提取最后一个 "-" 后面的部分作为环境名
        DEPLOY_ENV = "${env.JOB_NAME.split('-').last()}"
        IP_HOST_TEST = 'ai-test.hikoon.com'
        IP_HOST_UAT = 'ai-uat.hikoon.com'
        IP_HOST_PROD = 'ai.hikoon.com'
        // 企微Webhook URL - 包含完整的webhook地址和key
        WECOM_WEBHOOK_URL = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=77f8f0d5-243a-442a-8946-bc713be7bf65'
    }

    stages {
        stage('检出代码') {
            steps {
                echo "开始检出代码..."
                checkout scm
            }
        }

        stage('环境准备') {
            steps {
                echo "准备Python环境..."
                sh '''
                    python3 --version
                    if [ ! -d "venv" ]; then
                        python3 -m venv venv
                    fi
                    . venv/bin/activate
                    pip install --upgrade pip -q
                    pip install -r requirements.txt -q
                    echo "依赖安装完成"
                '''
            }
        }

        stage('执行测试') {
            steps {
                echo "开始执行API自动化测试 (环境: ${DEPLOY_ENV})..."
                script {
                    def ipHost = env.IP_HOST_TEST
                    if (env.DEPLOY_ENV == 'uat') {
                        ipHost = env.IP_HOST_UAT
                    } else if (env.DEPLOY_ENV == 'prod') {
                        ipHost = env.IP_HOST_PROD
                    }
                    env.IP_HOST = ipHost
                    echo "IP_HOST: ${env.IP_HOST}"
                }
                // 使用 catchError 让测试失败时也继续执行后续阶段
                catchError(buildResult: 'FAILURE', stageResult: 'UNSTABLE') {
                    sh '''
                        . venv/bin/activate
                        export DEPLOY_ENV="${DEPLOY_ENV}"
                        export IP_HOST="${IP_HOST}"
                        echo "当前执行环境: ${DEPLOY_ENV}"
                        echo "IP_HOST: ${IP_HOST}"
                        python3 api_test.py
                    '''
                }
            }
        }

        stage('生成报告') {
            steps {
                echo "正在生成测试报告..."
                sh '''
                    echo "查找报告文件..."
                    if [ -d "reports/${DEPLOY_ENV}" ]; then
                        ls -lh reports/${DEPLOY_ENV}/
                    else
                        echo "未找到报告目录: reports/${DEPLOY_ENV}/"
                    fi
                '''
            }
        }
    }

    post {
        always {
            echo "正在收集测试结果..."

            // 调试信息:打印环境变量
            sh '''
                echo "=== Jenkins 环境变量调试信息 ==="
                echo "JENKINS_URL: ${JENKINS_URL}"
                echo "JOB_NAME: ${JOB_NAME}"
                echo "BUILD_NUMBER: ${BUILD_NUMBER}"
                echo "BUILD_URL: ${BUILD_URL}"
                echo "==============================="
            '''

            // 列出所有报告文件(调试用)
            sh '''
                echo "=== 报告文件清单 ==="
                if [ -d "reports" ]; then
                    find reports -type f -name "*.html" -o -name "*.xlsx" | sort
                else
                    echo "reports 目录不存在"
                fi
                echo "===================="
            '''

            // 归档报告文件
            archiveArtifacts artifacts: 'reports/**/*',
                            allowEmptyArchive: true,
                            fingerprint: true

            echo "报告已归档到 Jenkins Artifacts"
        }

        success {
            echo "[SUCCESS] [${DEPLOY_ENV}环境] 所有测试用例运行成功!"

            script {
                sh '''
                    . venv/bin/activate
                    export WECOM_WEBHOOK_URL="${WECOM_WEBHOOK_URL}"
                    export BUILD_STATUS=success
                    python3 send_wecom_notification.py
                '''
            }
        }

        failure {
            echo "[FAILURE] [${DEPLOY_ENV}环境] 有测试用例执行失败!"

            script {
                sh '''
                    . venv/bin/activate
                    export WECOM_WEBHOOK_URL="${WECOM_WEBHOOK_URL}"
                    export BUILD_STATUS=failure
                    python3 send_wecom_notification.py
                '''
            }
        }
    }
}