通过GitHub Actions运行本地主机服务器进行单元测试

12
我有以下GitHub工作流来构建我的项目。

我有以下GitHub工作流来构建我的项目

name: build

on: [push]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: set up JDK 1.8
      uses: actions/setup-java@v1
      with:
        java-version: 1.8
    - name: Build with Maven
      run: mvn clean compile test

构建工作正常。 但是项目 JUnit 测试需要本地主机在 4444 端口上侦听... 我收到以下错误:

连接被拒绝:localhost/127.0.0.1:4444

服务器在每个 JUnit 测试之前启动,并且是测试套件的一部分。

我该如何告诉docker容器允许在此端口上进行网络连接? 或者是否有任何默认开放的端口?


1
服务器是否在与JUnit测试相同的容器中运行? 您可以在Docker容器上显式公开端口。如果服务器在不同的容器中运行,请确保引用正确的容器。 - xuma202
你有取得任何进展吗? - dtracers
@dtracers 我已经放弃了,并禁用了构建,我在GitHub上开了一个问题,但他们没有给出有建设性的回应。我已经浪费了太多时间在这上面了。 - Drejc
1
我也遇到了同样的问题。你找到解决方案了吗? - Anita
@Anita,我花了几个小时都没能解决这个问题。但我认为这不是GitHub Actions的问题,而是与Docker相关的问题。我创建了一个单独的Docker镜像,并在本地运行了相同的测试场景。测试结果随机失败。我还尝试增加每个测试的端口号,但结果相同。你可以查看我的开源项目,链接如下:https://github.com/zandero/rest.vertx/blob/master/docker.txt 和 https://github.com/zandero/rest.vertx/blob/master/Dockerfile,这可能是端口关闭得不够快的时间问题? - Drejc
显示剩余2条评论
1个回答

3

我分享我的解决方案。希望能有所帮助。

  1. 针对测试服务器监听端口(在我的情况下是8080)的Dockerfile。正如上面的评论所提到的,您需要暴露您的端口。
FROM golang:1.15.2-alpine

# Setup you server

# This container exposes port 8080 to the outside world
EXPOSE 8080

# Run the executable
CMD ["./main"]
  1. docker-compose文件(这不是必须的,但在我的情况下,我必须启动多个依赖容器)。再次确保端口已定义。
  main-server:
    build: ./
    container_name: main-server
    image: artofimagination/main-server
    ports:
      - 8080:8080
  1. GitHub Action。只需为您的服务器运行docker-compose命令。然后,需要连接端口的应用程序。在这种情况下,pytest尝试通过端口8080向main-server发送请求。值得一提的是,在我的示例中,pytest访问127.0.0.1:8080。
      - name: Check out code into the Go module directory
        uses: actions/checkout@v2

      - name: Start test server
        run: docker-compose up -d main-server

      - name: Run functional test
        run: pip3 install -r test/requirements.txt && pytest -v test

祝你好运,希望这能帮到你。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接