jenkins+Kubernetes实现流水线CI/CD 接口自动化测试

一、环境及插件配置

  • Kubernetes --- K8s Pod 动态调度
  • Allure --- Allure 测试报告展示

可以参考之前的文章:Jenkins实现持续集成接口自动化测试

二、 Jenkins 全局工具配置

以下在 Jenkins → Manage Jenkins → Global Tool Configuration 中完成。

1. Allure Commandline(必须)

  • 找到 "Allure Commandline" 区域
  • 点击 "新增 Allure Commandline"
  • 名称:填 allure(任意名称均可)
  • 勾选 "Install automatically"
  • 来源选择 "From Maven Central"
  • 版本:下拉选择 2.30.0(或最新版)
  • 保存

2. Git

默认即可,无需额外配置。

三、配置流水线

1.登录jenkins,点击new item

2.选择创建流水线

3.配置流水线

  • Definition:Pipeline script from SCM
  • SCM:Git
  • Repository URL:「你的 git 地址」
  • Credentials:git 地址类型,比如 GitHub、gitlab 这些
  • Branches to build:*/master
  • Script Path:Jenkinsfile
  • 其余默认,保存

四. Jenkinsfile 流水线文件编写

采用声明式 Pipeline 语法,agent 在 K8s 集群动态创建 Pod。

1. 流水线阶段

|----------------------|-----------------------------|
| Stage | 作用 |
| Checkout | 从 GitLab 拉取测试代码 |
| Install Dependencies | 创建 venv + pip install 依赖 |
| Run Tests | pytest 执行 + 通知 + chmod 修复权限 |
| Post Actions | Allure 报告 + 归档 + 清理 |

2.你的代码根目录下创建Jenkinsfile文件,示例(可以直接让 AI 帮你生成)

python 复制代码
pipeline {
    agent {
        kubernetes {
            yaml """
apiVersion: v1
kind: Pod
spec:
  containers:
  # Jenkins通信容器jnlp,内网提前预制镜像,无需外网(不用内网镜像的话,外网拉取需要翻墙,可能会拉不下来)
  - name: jnlp
    image: harbor.inner.com/public/jenkins-inbound-agent:latest
    resources:
      requests:
        cpu: 100m
        memory: 256Mi
  # 自动化运行环境:Python运行容器
  - name: python-runner
    image: harbor.inner.com/public/python:3.10
    command: ["sleep", "infinity"]
    tty: true
    envFrom:
    - secretRef:
        name: project-common-env
        optional: true
"""
            defaultContainer 'python-runner'
        }
    }
    
    # 构建参数,可以在每次构建时,选择某个参数,让自动化更灵活
    parameters {
        choice(
            name: 'ENVIRONMENT',
            choices: ['TEST', 'DEV', 'PROD', 'XINING'],
            description: '测试环境选择'
        )
        booleanParam(
            name: 'SEND_EMAIL',
            defaultValue: false,
            description: '是否发送邮件通知'
        )
        booleanParam(
            name: 'SEND_WECHAT',
            defaultValue: true,
            description: '是否发送企业微信通知'
        )
    }

    environment {
        TEST_ENV    = "${params.ENVIRONMENT}"
        SEND_EMAIL  = "${params.SEND_EMAIL}"
        SEND_WECHAT = "${params.SEND_WECHAT}"
    }

    stages {
        stage('Checkout') {
            steps {
                    checkout scm
            }
        }


        stage('Install Dependencies') {
            steps {
                sh '''
                    python3 -m venv .venv
                    source .venv/bin/activate
                    pip install --no-cache-dir -r requirements.txt
                '''
            }
        }

        stage('Run Tests') {
            steps {
                sh '''
                    source .venv/bin/activate
                    echo "========================================="
                        echo "  环境:         ${TEST_ENV}"
                        echo "  发送邮件:     ${SEND_EMAIL}"
                        echo "  发送企业微信: ${SEND_WECHAT}"
                        echo "  Python:       $(python3 --version)"
                        echo "  Java:         $(java -version 2>&1 | head -1 || echo not found)"
                        echo "  Allure:       $(allure --version || echo not found)"
                        echo "========================================="
                        python3 run.py \
                            -env "${TEST_ENV}" \
                            --send-wechat "${SEND_WECHAT}" \
                            --send-email "${SEND_EMAIL}"

                        # 修复文件权限,确保 jnlp 能读取 python 容器生成的文件
                        chmod -R a+rw output/allure_result || true
                '''
            }
        }

    }

    post {
        always {
            allure includeProperties: false,
                results: [[path: 'output/allure_result']]
            archiveArtifacts artifacts: 'output/**/*', allowEmptyArchive: true
            cleanWs()
        }
        success {
            echo "✅ 自动化流水线全部执行成功"
        }
        failure {
            echo "❌ 流水线执行异常,构建失败"
        }
    }
}

五、推送代码,手动触发构建

六、构建失败问题排查思路

点击构建详情内的Console Output,复制里面报错内容给 AI,让 AI 帮你排查并解决

七、后续优化建议

    1. 构建自定义镜像:使用Dockerfile,将 Python+JDK+Allure+依赖一体化打包,消除 Install Dependencies 耗时
    1. 启用凭据注入:创建 Jenkins Credentials 后可将项目内的敏感数据,比如邮箱等存在环境变量里,避免硬编码在代码中
    1. PVC 缓存 venv:利用运维 PVC 缓存 .venv,避免每次重装依赖(跟第一条解决的是一样的问题)
    1. 定时构建:Build Triggers → Build periodically,如 H 8 * * 1-5
    1. GitLab Webhook:代码 push 自动触发构建
相关推荐
闲猫1 小时前
SSH 黑屏配置试用环境机器,受限bash和自定义shell
运维·ssh·bash
行者-全栈开发1 小时前
SpringBoot CI/CD 流水线实战|Jenkins+GitLab CI,从手动到自动化交付
ci/cd·jenkins·springboot·devops·自动化部署·gitlab ci
北执南念1 小时前
Docker实用篇2
运维·docker·容器
古道青阳1 小时前
构建工业级短视频生成流水线:Playwright + FFmpeg 自动化指南
运维·自动化·音视频
Ameilide1 小时前
Linux 应用软件编程 文件编程(IO)
linux·运维·服务器
枕星而眠2 小时前
Linux IO多路复用:select、poll、epoll 核心原理与进阶实战
linux·运维·服务器·c++·后端
Rain5092 小时前
GitLab-Runner + AI 代码审查服务 + 远程大模型 全套部署运维实战
linux·运维·人工智能·python·ci/cd·gitlab·ai编程
Black蜡笔小新2 小时前
零代码自动化企业私有化AI训练推理一体工作站DLTM训推一体化助力企业自主掌控AI能力
运维·人工智能·自动化
txg6662 小时前
WildSync:通过Wild API 使用恢复实现自动化 Fuzzing Harness 合成
运维·深度学习·网络安全·自动化