You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在GitLab CI中启动Python服务后执行后续测试任务

问题核心原因
  • 原配置中python3 server.py为前台阻塞运行,执行后会持续占用进程,无法推进到后续步骤
  • GitLab CI 不同Job默认运行在完全独立的隔离环境中,build阶段启动的服务进程在test阶段完全无法访问,跨阶段无法共享运行态资源
可行解决方案

方案1:单Job内后台启动+就绪检测(通用且实现简单)

将依赖安装、服务启动、测试逻辑整合到同一个Job中,规避跨Job环境隔离问题,修改后的配置参考如下:

stages:
  - test

py_service_test:
  image: python:3.7.9
  stage: test
  before_script:
    - pip3 install -r requirements.txt
  script:
    # 后台启动Python服务,日志输出到文件方便后续排查
    - python3 server.py > server.log 2>&1 &
    # 记录服务进程ID
    - SERVER_PID=$!
    # 服务就绪检测,需替换为你自己服务的监听端口或者启动成功日志关键字
    - |
      for i in {1..10}; do
        # 示例:检测8000端口是否启动,也可以换成 grep "启动完成" server.log 来匹配日志
        if ss -tulpn | grep -q ":8000"; then
          echo "服务启动成功,开始执行测试"
          break
        fi
        echo "等待服务启动,第$i次重试..."
        sleep 2
      done
    # 执行单元测试
    - python3 -m unittest discover tests
  after_script:
    # 可选:测试结束后终止后台服务
    - kill $SERVER_PID
  artifacts:
    # 可选:测试失败时保留服务日志用于排查
    paths:
      - server.log
    when: on_failure

注意点:后台启动进程时末尾加&即可让进程转入后台运行,不会阻塞当前脚本;必须加就绪检测逻辑,避免服务未初始化完成就执行测试导致用例报错。

方案2:多Job拆分+镜像化服务(适合服务需要多场景复用的情况)

如果确实需要拆分阶段,可将Python服务打包为独立镜像,通过GitLab CI的services字段引入,实现服务和测试任务的网络互通:

stages:
  - build
  - test

# build阶段打包服务镜像推送到GitLab自带镜像仓库
build_server_image:
  stage: build
  image: docker:latest
  services:
    - docker:dind
  variables:
    DOCKER_HOST: tcp://docker:2376
    DOCKER_TLS_CERTDIR: "/certs"
  script:
    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
    - docker build -t $CI_REGISTRY_IMAGE/python-server:$CI_COMMIT_SHORT_SHA .
    - docker push $CI_REGISTRY_IMAGE/python-server:$CI_COMMIT_SHORT_SHA

# test阶段直接引入服务镜像作为附属容器
run_test:
  stage: test
  image: python:3.7.9
  services:
    - name: $CI_REGISTRY_IMAGE/python-server:$CI_COMMIT_SHORT_SHA
      alias: python-server
  before_script:
    - pip3 install -r requirements.txt
  script:
    # 测试代码中访问服务的地址为 python-server:[你的服务端口]
    - python3 -m unittest discover tests

内容的提问来源于stack exchange,提问作者Remo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 03:06:02