运行测试时服务弹性搜索不可见

Posted

技术标签:

【中文标题】运行测试时服务弹性搜索不可见【英文标题】:Service elasticsearch is not visible when run tests 【发布时间】:2021-01-20 01:35:06 【问题描述】:
name: Rspec
on: [push]
jobs:
  build:
    runs-on: [self-hosted, linux]
    services:
      elasticsearch:
        image: docker.elastic.co/elasticsearch/elasticsearch:7.9.2
        env:
          discovery.type: single-node
        options: >-
          --health-cmd "curl http://localhost:9200/_cluster/health"
          --health-interval 10s
          --health-timeout 5s
          --health-retries 10
      redis:
        image: redis
        options: --entrypoint redis-server
    steps:
      - uses: actions/checkout@v2
      - name: running tests
        run: |
          sleep 60
          curl -X GET http://elasticsearch:9200/

我正在运行自托管测试,我在主机上看到 docker ps 容器(redis 和 elasticsearch)在进行测试时。

我访问了一个 redis 容器,安装了一个 curl 并运行 curl -X GET http://elasticsearch:9200/,我在 60 秒前看到了响应(等待服务时间)

在步骤运行测试我收到错误消息“无法解析主机:elasticsearch”

因此,在服务/容器 redis 内部,我看到了一个主机 elasticsearch,但在步骤 running tests 上没有。我能做什么?

【问题讨论】:

【参考方案1】:

您必须映射服务容器的端口,并在 GitHub Actions 运行器上运行的步骤中使用 localhost:host-port 作为地址。

如果您将作业配置为直接在运行器机器上运行并且您的步骤不使用容器操作,则必须将任何所需的 Docker 服务容器端口映射到 Docker 主机(运行器机器)。您可以使用 localhost 和映射的端口访问服务容器。

https://docs.github.com/en/free-pro-team@latest/actions/reference/workflow-syntax-for-github-actions#jobsjob_idservices

name: Rspec
on: [push]
jobs:
  build:
    runs-on: [self-hosted, linux]
    services:
      elasticsearch:
        image: docker.elastic.co/elasticsearch/elasticsearch:7.9.2
        env:
          discovery.type: single-node
        options: >-
          --health-cmd "curl http://localhost:9200/_cluster/health"
          --health-interval 10s
          --health-timeout 5s
          --health-retries 10
        ports:
        # <port on host>:<port on container>
        - 9200:9200
      redis:
        image: redis
        options: --entrypoint redis-server
    steps:
      - uses: actions/checkout@v2
      - name: running tests
        run: |
          sleep 60
          curl -X GET http://localhost:9200/

替代方案: 还要在容器中运行您的作业。然后作业必须通过主机名访问服务容器。

name: Rspec
on: [push]
jobs:
  build:
    services:
      elasticsearch:
        image: docker.elastic.co/elasticsearch/elasticsearch:7.9.2
        env:
          discovery.type: single-node
        options: >-
          --health-cmd "curl http://localhost:9200/_cluster/health"
          --health-interval 10s
          --health-timeout 5s
          --health-retries 10
      redis:
        image: redis
        options: --entrypoint redis-server
    # Containers must run in Linux based operating systems
    runs-on: [self-hosted, linux]
    # Docker Hub image that this job executes in, pick any image that works for you
    container: node:10.18-jessie
    steps:
      - uses: actions/checkout@v2
      - name: running tests
        run: |
          sleep 60
          curl -X GET http://elasticsearch:9200/

【讨论】:

您好,感谢您的回答!我在文档中see 认为主机名可以是服务名。 redis、psql等服务主机名都在工作,其中主机名elasticsearch在其他容器中工作,但在测试中没有。 查看我的编辑。如果您想通过主机名访问服务容器,您还需要在容器中运行您的作业及其步骤。

以上是关于运行测试时服务弹性搜索不可见的主要内容,如果未能解决你的问题,请参考以下文章

如何保持弹性搜索在 Linux 服务器上运行

XCode UITest:测试运行时模拟器不可见

使用非嵌入式数据库时,SonarQube 无法在 Ubuntu 上运行。 (弹性搜索无法启动)

更新不存在的文档时,弹性搜索不会给我任何错误

Selenium IDE 测试在 GUI 中运行 - 但在 CL 中运行时失败(链接文本不可见)

依赖范围