我需要在 GitHub actions 上运行 Redis,是否需要使用 Docker?

3

我对GitHub Actions和Redis还不太熟悉。 我正在GitHub Actions上运行此CI(下面是代码)。

name: sanity check
on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main
jobs:
  tests:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        redis-version: [6]
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v2
        with:
          node-version: "14"
      - uses: supercharge/redis-github-action@1.2.0 # sets up Redis
        with:
          redis-version: ${{ matrix.redis-version }}
      - run: node -v
      - run: yarn -v
      # - run: redis-cli ping
      - run: yarn install
      - run: yarn test --detectOpenHandles


我希望您能帮助我进行Redis集成测试,但这个CI没有退出(我正在使用Jest运行测试)。这是因为我没有使用Docker吗?我需要做什么来确保此测试退出?在本地,它运行良好(虽然我手动启动了一个Redis服务器)。我需要Docker才能使其正常工作吗?如果是这个问题,有没有关于如何在GitHub actions上运行Docker与Redis的链接?
PS:如果您需要关于此的额外信息,请告诉我。
2个回答

7
你可能不需要这个redis操作,也不需要与docker相关的任何内容(虽然如果你想的话,可以使用docker运行redis)。
只需安装redis-server,如果您想要redis CLI,还需要安装redis-tools
以下是一个示例GitHub Action,它安装并ping redis服务器:
name: Redis test
on: [push]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Install redis
        run: sudo apt-get install -y redis-tools redis-server
      - name: Verify that redis is up
        run: redis-cli ping

如果您喜欢使用这个操作,这是一个可用的工作流程:

name: Redis test
on: [push]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

      - name: Setup redis
        uses: supercharge/redis-github-action@1.2.0
        with: 
          redis-version: 6

      - name: Install redis cli # so we can test the server
        run: sudo apt-get install -y redis-tools

      - name: Verify that redis is up
        run: redis-cli ping

最后,如果你的 GitHub Action 没有退出,可能是与最近在 5月20日5月18日5月16日 发生的 GitHub Actions 中的一个问题相关。

如果不是上述情况,问题可能与 Redis 无关,您可能需要减少 "移动零件" 的数量,直到找到故障的零件。


0

Jest无法退出的问题可能是因为我在测试中使用了真实的Redis Node.js客户端。我将其切换为以下内容:


import { createNodeRedisClient } from "handy-redis";
import { createClient } from "redis-mock";

const cache =
  process.env.NODE_ENV === "production"
    ? createNodeRedisClient({
        url: process.env.REDIS_URL,
      })
    : createClient();

export { cache };

而且我不再收到错误信息了


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