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

如何在Bitbucket Pipeline中测试Guzzle集成测试?

解决Bitbucket Pipeline中无法识别Docker服务名的问题

问题原因

本地Docker Compose环境里,服务名能通过Docker内部DNS自动解析,但Bitbucket Pipeline默认只运行单个测试容器,没有启动你的Web服务容器,因此docker_service_name这个主机名无法被解析,导致连接失败。

解决方案

方案1:使用Bitbucket Pipeline的Services配置(推荐)

通过definitions.services定义你的Web服务容器,让Pipeline在运行测试时自动启动该服务,测试容器可直接通过服务名访问它。

修改后的bitbucket-pipeline.yaml示例:

image: php:7.1.1
pipelines:
  default:
    - step:
        script:
          - apt-get update && apt-get install -y unzip
          - curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
          - composer install
          - vendor/bin/phpunit
        services:
          - docker_service_name # 关联定义好的服务
definitions:
  services:
    docker_service_name:
      image: your-web-app-image:latest # 替换为你的Web服务镜像地址
      ports:
        - 80:80 # 根据你的Web服务端口调整
  • 确保definitions.services下的服务名docker_service_name和测试代码中的主机名完全一致
  • 如果你的Web服务镜像是私有仓库,需在Pipeline中配置Docker镜像拉取权限

方案2:手动添加Hosts映射(适用于Web服务部署在外部或手动启动容器的场景)

如果Web服务已部署在外部地址,或需要在测试脚本中手动启动容器,可通过修改测试容器的/etc/hosts文件,将docker_service_name映射到对应IP地址:

在Pipeline的script中添加以下命令:

# 替换为你的Web服务实际IP地址
echo "xxx.xxx.xxx.xxx docker_service_name" >> /etc/hosts

若在测试容器内手动启动Web服务,需先启动容器并映射端口,再添加Hosts映射:

# 启动Web服务容器并映射端口到测试容器的8080
docker run -d -p 8080:80 your-web-app-image:latest
# 将docker_service_name映射到本地回环地址
echo "127.0.0.1 docker_service_name" >> /etc/hosts
# 同时修改测试代码中的base_uri为http://docker_service_name:8080/api/

注意事项

  • 确保Web服务容器在测试执行前完全启动,可在script中添加等待命令(如wait-for-it工具),避免因服务未就绪导致连接失败
  • 检查Web服务的端口配置,确保测试代码中的端口与容器暴露的端口一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 20:06:23