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 自动触发构建
相关推荐
bellus-1 小时前
win11使用ubuntu 26.04
linux·运维·ubuntu
略略略咯咯1 小时前
centos更换镜像源
linux·运维·centos
测试者家园2 小时前
Harness由浅入深:CI/CD流水线里的质量门禁怎么设计
软件测试·人工智能·ci/cd·混沌测试·智能化测试·harness·质量门禁
IKUN家族2 小时前
Spring MVC(三)
运维·服务器·spring boot·spring·servlet·java-ee
Leon-Ning Liu2 小时前
【真实经验分享】ORA-12516 排查实录:共享服务器模式下 SHARED_SERVER_SESSIONS 不足引发的监听故障
运维·服务器·oracle
运维大师2 小时前
【K8S 运维实战】34-多集群管理Karmada
java·运维·kubernetes
东方护航数据恢复(深圳)2 小时前
服务器硬盘黄灯/红灯故障排查与处理命令全指南_东方护航数据恢复深圳店
运维·服务器·chrome
爱码少年2 小时前
SSH密钥登录完整流程与原理详解
运维·ssh
枳实-叶3 小时前
Linux 环境下段错误出现的原因及调试方法
linux·运维·服务器
遨游DATA3 小时前
Jenkins 修改 config.xml 后页面仍是旧配置:让 live job 配置真正生效
ci/cd·jenkins·devops·故障排查·config.xml