Jenkinsfile.docker 2.94 KB
// Docker 环境下的 Jenkins Pipeline 示例

pipeline {
    agent any

    parameters {
        choice(
            name: 'DEPLOY_ENV',
            choices: ['test', 'uat', 'prod'],
            description: '选择部署环境'
        )
    }

    environment {
        DEPLOY_ENV = "${params.DEPLOY_ENV ?: 'test'}"
        IMAGE_NAME = "api-test"
        IMAGE_TAG = "${BUILD_NUMBER}"
        WORKSPACE_REPORTS = "${WORKSPACE}/reports"
    }

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

        stage('构建镜像') {
            steps {
                echo "构建Docker镜像..."
                script {
                    sh '''
                        docker build -t ${IMAGE_NAME}:${IMAGE_TAG} .
                        docker tag ${IMAGE_NAME}:${IMAGE_TAG} ${IMAGE_NAME}:latest
                    '''
                }
            }
        }

        stage('执行测试') {
            steps {
                echo "执行API自动化测试 (环境: ${DEPLOY_ENV})..."
                script {
                    sh '''
                        mkdir -p ${WORKSPACE_REPORTS}

                        docker run --rm \
                          -e DEPLOY_ENV=${DEPLOY_ENV} \
                          -v ${WORKSPACE_REPORTS}:/app \
                          ${IMAGE_NAME}:${IMAGE_TAG}
                    '''
                }
            }
        }

        stage('生成报告') {
            steps {
                echo "正在生成测试报告..."
                script {
                    sh '''
                        ls -la ${WORKSPACE_REPORTS}/api_test_report_* 2>/dev/null || echo "未找到报告文件"
                    '''
                }
            }
        }

        stage('发布HTML报告') {
            when {
                expression {
                    return fileExists("${WORKSPACE_REPORTS}/api_test_report_api_cases_${DEPLOY_ENV}*.html")
                }
            }
            steps {
                echo "发布HTML测试报告..."
                publishHTML([
                    reportDir: 'reports',
                    reportFiles: "api_test_report_api_cases_${DEPLOY_ENV}*.html",
                    reportName: "API测试报告-${DEPLOY_ENV}环境",
                    keepAll: true,
                    alwaysLinkToLastBuild: true
                ])
            }
        }
    }

    post {
        always {
            echo "清理工作环境..."
            script {
                sh '''
                    docker container prune -f
                    echo "========== 镜像列表 =========="
                    docker images | grep ${IMAGE_NAME}
                '''
            }
        }

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

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