6

如果可能的话,我想在所有平台上测试应该使用 GitHub Actions 连接到 PostgreSQL 和 MySQL 服务器的 CLI:Linux、Windows 和 macOS。

我找到了有关如何运行 Postgresservice以及如何运行 MySQL 的说明service,并将它们组合成一个工作流程

name: Test
on: [push]

jobs:

    init_flow:
        name: 'Run MySQL and Postgres on ${{ matrix.os }}'
        runs-on: ${{ matrix.os }}
        strategy:
            fail-fast: false
            matrix:
                os: [ubuntu-latest, windows-latest, macOS-latest]

        # via https://github.com/actions/example-services/blob/master/.github/workflows/postgres-service.yml
        services:
            postgres:
                image: postgres:10.8
                env:
                    POSTGRES_USER: postgres
                    POSTGRES_PASSWORD: postgres
                    POSTGRES_DB: postgres
                ports:
                # will assign a random free host port
                - 5432/tcp
                # needed because the postgres container does not provide a healthcheck
                options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
            mysql:
                image: mysql:5.7
                env:
                    MYSQL_ROOT_PASSWORD: root
                ports:
                - 3306
                options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3

        steps:
            - uses: actions/checkout@v1
            - run: node -v
              env:
                # use localhost for the host here because we are running the job on the VM.
                # If we were running the job on in a container this would be postgres
                POSTGRES_HOST: localhost
                POSTGRES_PORT: ${{ job.services.postgres.ports[5432] }} # get randomly assigned published port
                MYSQL_PORT: ${{ job.services.mysql.ports[3306] }}

但这似乎只适用于 Linux,而不适用于 Windows 或 macOS,请参阅 GitHub 上的操作结果:

Windows 在Initialize Containerswith期间失败##[error]Container operation is only supported on Linux,macOS 甚至在Set up jobwith期间失败##[error]File not found: 'docker'

GitHub Actionsservices文档没有提到这只适用于 Linux,但我对容器或 Docker 也不太了解,因此可能会遗漏一些明显的东西。

(顺便说一句,MySQL 和 PostgreSQL 在同一个操作系统上运行并不重要——它们只需要主作业可以访问。)

是否可以使用 Windows 和 macOS 为 GitHub Actions 运行 MySQL 和 PostgreSQL?
如果没有,这里最好的解决方法是什么?

4

4 回答 4

7

好吧,通常它仅在 Linux 上受支持。我想知道其他虚拟机是否支持它,所以我问了 Github。这里的答案:

目前,Docker 容器操作只能在 GitHub 托管的 Linux 环境中执行,其他环境(如 Windows 和 MacOS)不支持。

更多细节请参考这里:https ://help.github.com/en/actions/automating-your-workflow-with-github-actions/about-actions#types- ...

我们注意到其他一些用户也报告了相同的问题,我们已将此作为功能请求报告给相应的工程团队。

参考:https ://github.community/

于 2019-11-20T23:19:55.327 回答
2

我不确定这是否可能。我知道容器操作目前仅适用于 Linux 虚拟机,正如您从此处的文档中看到的那样。

https://help.github.com/en/articles/about-actions#types-of-actions

services正在使用容器,所以它还不能在 Windows 和 MacOS 上运行是有道理的。

于 2019-10-13T09:59:46.153 回答
1

当然,另一种解决方法是使用外部数据库。

一个简单的方法可能是 Heroku 提供的免费层:

它们都给你很小的空间和限制,但就我而言,这可能就足够了。

于 2019-10-13T12:41:11.873 回答
0

对于 MySQL,我找到了一个 (temporary[1]) 解决方法:

GitHub Actions 虚拟环境中的每个软件我了解到,当前所有操作系统都在本地安装了 MySQL 5.7,并在端口 3306 上运行,并带有凭据root:root。您可以在作业中使用此 MySQL 实例。

不幸的是,没有安装 PostgreSQL。

[1] 我记得读过 GitHub Actions 的产品经理,他告诉人们安装的软件可能会发生变化,尤其是数据库可能很快就会消失(但无法回忆或找到链接,在 GitHub 社区的某个地方,GitHub Actions)

原来 MySQL 凭证root:root也只适用于 Linux,我找不到适用于 Windows 和 macOS 的凭证。

于 2019-10-13T11:27:52.940 回答