暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

如何向 Postgres CI 添加更多环境

原创 阳菜 2022-12-05
780

Melih Mutlu的这篇__关于PostgreSQL CI的__文章最初发表在Microsoft TechCommunity Blog上

你曾经是否使用过Postgres源代码,但不确定自己是否破坏了其中的某些东西呢?Postgres有一个非常全面且有助于确保没有任何损坏的回归测试套件。你当然也可以在你的计算机上运行这些测试,并检查你的Postgres版本是否能够正常工作。但它总能在你的计算机上运行,对吧?那么其他环境呢?

这篇blog基于我在创建第一个Postgres补丁得到的经验和学习,将教你如何启用和使用Postgres CI(以及如何为它做出贡献!)。具体来说,你将了解:

  1. 如何为 GitHub 分叉启用 PostgreSQL 的 CI
  2. 如何在 MinGW 环境中在 Windows 上构建和测试 Postgres。
  3. 如何将新环境添加到PostgreSQL CI中

如何在 GitHub 分叉中启用 PostgreSQL 's CI

Postgres在多个不同平台上运行方面享有很大的名气。因此,验证代码是否适用于这些不同平台非常重要。这就是 CI 工具派得上用处的地方。PostgreSQL带有自己推荐的CI:Cirrus CI。你可以查看并学习Postgres’s CI,并在你的分叉数据库上运行CI。Cirrus CI 支持 Windows、Linux、FreeBSD 和 macOS,并允许你在这些操作系统上测试你的更改。

要通过 Cirrus CI 运行测试,只需按照以下步骤:

  1. 在GitHub上分叉PostgreSQL存储库

  2. GitHub 市场上搜索 Cirrus CI 应用程序,并将该应用程序添加到你的帐GitHub 市场上的 Cirrus CI 应用程序的屏幕截图**图1:**GitHub 市场上 Cirrus CI 应用程序的屏幕截图。你可以轻松设置免费试用版并开始使用 Cirrus。

  3. 确保 Cirrus CI 应用程序能够访问你刚刚在步骤 1 中分叉的 Postgres 存储库。

  4. Cirrus CI现已准备好运行。一旦你把一个提交推送到你的Postgres分叉,Cirrus将用你最近的提交中进行CI任务的运行。

通过你的新提交,GitHub 将显示 CI 检查已被列入等待或正在运行。

GitHub 上的 Cirrus CI 检查截图

**图2:**Cirrus CI 的屏幕截图在 GitHub 上检查 Postgres 存储库中的提交,之后设置了对存储库的访问权限的 Cirrus CI。

你还可以通过导航到 Cirrus 来查看更多详细信息。以下是Cirrus CI上的官方Postgres存储库的样子:

Cirrus CI 上的 Postgres repo 概述

**图3:**一个官方 Postgres 回购的概述看起来与 Cirrus CI类似。你可以通过在图中看到提交的历史记录和它们的 CI 结果。

Cirrus CI 将在每次提交时向你显示构建结果,并在发生错误时上传日志文件。

现在你知道需要做什么才能从Postgres’CI中受益。即使Cirrus CI目前是其他Postgres CI中操作系统范围最广的一个,支持的环境数量仍然有限。目前只有四个操作系统可用于Cirrus CI上的Postgres。如果你需要更多,你可以通过以下两个步骤将环境添加到PostgreSQL’s CI中:

  • 在目标环境中成功构建 Postgres。
  • 将该环境添加到Postgres’s CI中。

如何在 MinGW 环境中在 Windows 上构建和测试 Postgres。

本节解释了如何使用MinGW在Windows上构建Postgres。MinGW代表“Minimal GNU for Windows”,以及这是我选择添加到Postgres CI的新环境。如果你已经熟悉了在 MinGW 上构建 Postgres,或者你的目标环境不同,那么你就可以跳过本节。

如果你曾经研究过如何在Windows上构建Postgres,你就会知道有不止一种方法可以做到这一点。

  • 使用 VisualStudio: 生成 Postgres 最常用的 Windows 方式是使用 MicrosoftVisualStudio。Postgres 在 VisualStudio 中已经有一个 CI 任务。
  • 使用 MinGW: 另一种方法是在 Windows 上使用 MinGW。我个人喜欢在 Windows 上使用 MinGW for Postgres,因为它允许你使用 GNU 工具在 Windows 上构建 Postgres。在这种情况下,添加到 Postgres ’ CI 中的环境是 MinGW。

结合 MSYS2使用 MinGW

如果你也决定使用 MinGW,我建议你安装 MSYS2,它是一个提供 MinGW 环境和更多功能的工具。MSYS2提供了你可能熟悉的 Unix 环境工具和一个包管理器,它允许我们获得为 Windows 本地构建的包。

MSYS2没有给我们提供一个单一的 MinGW 环境。 MSYS2上有两种不同的 C 标准库:

  • MicrosoftVisualC + + 运行时(MSVCRT)。然而,即使 MSVCRT 也可以在 Windows 上使用,它是一个不兼容 C99的旧库。

  • 通用 C 运行时(UCRT)。UCRT 是最新版本,默认情况下由 MicrosoftVisualStudio 使用,这样 UCRT 的构建就像是本地构建的。

如果你已经准备好 MSYS2,那么可以继续使用 MinGW 和 UCRT 环境从源代码开始实际构建 Postgres。

通过 MinGW 和 UCRT 构建 PostgreSQL 的步骤

  1. 你可以通过在 Windows 上搜索“ MSys2 MinGW UCRT x64”或者将名为“ MSySTEM”的环境变量设置为“ UCRT64”,来运行一个带有 UCRT shell 的 MinGW。如果设置了默认的 MSYS2环境,则“MSYSTEM”变量来决定。

  2. 在设置“ MSYSTEM”之后,你可以简单地通过 PowerShell 启动带有 UCRT shell 的 MinGW,方法是运行:

    $env:MSYSTEM = ‘UCRT64’
    C:\<Path to MSYS installation>\usr\bin\bash.exe -l
    
  3. 如果你是第一次启动 MinGW,请首先更新基本包和数据库。

    pacman -Suy
    
  4. 然后安装所需的软件包,以在MinGW上构建Postgres。

    pacman -S --needed git bison flex diffutils make \
    ucrt64/mingw-w64-ucrt-x86_64-gcc
    

    你现在已完成了 MinGW的 环境设置。

  5. 让我们继续阅读 Postgres 文档中的安装说明。在这一点之后,这个过程就像我们如何在基于 Unix 的环境中构建 Postgres。你需要运行配置并发出命令,它们将完成工作。

    ./configure --enable-cassert --enable-debug
    make
    
  6. 如果所有这些步骤都成功,你就可以运行“make check”并查看你的全新 Postgres 版本是否一切正常。你可能还希望启用一些其他配置选项。尽管并非所有选项在MinGW中都可用,但你可以尝试使用一些选项进行构建,例如icu,lz4等。

    以下是通过运行来安装 Postgres 依赖项的一小部分的方法:

    pacman -S ucrt64/mingw-w64-ucrt-x86_64-{icu,libxml2,libxslt,lz4}'
    

    然后相应地更改配置命令:

    ./configure --host=x86_64-w64-mingw32 \
    --with-icu --with-libxml --with-libxslt --with-lz4
    

如何将你的环境添加到 Postgres CI 中

现在你知道如何准备 MinGW 环境,以及构建 Postgres 所需的步骤。如果Cirrus CI可以为我们完成所有这些工作,那不是很好吗?令人高兴的是,你可以告诉Cirrus运行构建Postgres所需的命令。

第一件事是让Cirrus知道要在哪个环境中运行。此环境可以是 Cirrus CI 默认提供的环境之一,也可以是 Cirrus 可以使用用户创建的 VM 或 Docker 容器映像。

你可以在pg-vm-images 存储库中找到 Postgres 使用的虚拟机和容器映像。即使 Cirrus CI 已经提供了一个 Windows 容器,你也可能需要在映像上安装和配置一堆不同的东西。在 MinGW 案例中,需要一个包含 MinGW 的 Windows Docker 映像,如本博客文章前面部分所述。你可以找到添加此类Windows映像的PR

一旦你的 VM 或容器映像的 PR 准备好后,你就可以转到下一步:将脚本添加到cirrus.yml文件。我们已经为 MinGW 构建配置和构建命令。

首先,你需要创建一个新任务,并指定新任务将使用你添加到 pg-vm-images 中的容器。

task:
  name: Windows - Server 2019, MinGW64
  windows_container:
    image: $CONTAINER_REPO/windows_ci_mingw64:latest

Cirrus有一个名为“CIRRUSWORKINGDIR”的环境变量,它是Cirrus运行的目录。在此路径下,可指定一个“BUILD_DIR”变量作为 Postgres 的构建目录。

env:
  BUILD_DIR: "%CIRRUS_WORKING_DIR%/build"

然后,你可以将配置、构建和测试脚本添加到新任务中。

configure_script:
  - C:\msys64\usr\bin\dash.exe -lc "mkdir %BUILD_DIR% &&
    cd %BUILD_DIR% &&
    %CIRRUS_WORKING_DIR%/configure
      --enable-cassert
      --enable-debug
      --with-icu
      --with-libxml
      --with-libxslt
      --with-lz4

build_script:
  C:\msys64\usr\bin\dash.exe -lc "cd %BUILD_DIR% && make world-bin"

tests_script:
  - C:\msys64\usr\bin\dash.exe -lc "cd %BUILD_DIR% && make check-world TMPDIR=%BUILD_DIR%/tmp_install"

最后,你可能希望添加一个“on_failure”指令,以告知在发生故障时该怎么做。你可以简单地调用自动conf任务的现有“on_failure_ac”配置。

on_failure:
  <<: *on_failure_ac

完成所有这些步骤后,你现在就可以在 cirrus.yml 文件上提交和推送更改。Cirrus CI将识别你所使用MinGW的新任务。你应该能够看到新的MinGW任务将在Cirrus CI上运行。

在卷云 CI 上运行的 CI 任务

**图4:**在Cirrus CI上运行的CI任务,包括最近添加的MinGW任务。

Cirrus还将显示运行MinGW任务及其日志所需的所有步骤。

使用和贡献Postgres CI使我们所有PG开发人员的生活更轻松

将MinGW添加到Postgres的CI中的工作被证明是我对Postgres的第一个补丁。(它尚未提交,但正在审核中。你可以查看修补程序,详细了解如何将新任务添加到 CI 中。

这篇blog向你展示了如何使用和贡献Postgres’CI,以及如何使用MinGW构建Postgres。为你的分支启用 Cirrus CI 将帮助你根据 Postgres 的更改查看测试结果。为 Postgres CI 做出贡献是使 Postgres 变得更好的好方法,特别是如果你需要比现有环境或操作系统更多的环境或操作系统。

原文标题:How to Add More Environments to the Postgres CI
原文作者:Melih Mutlu
原文链接:https://www.citusdata.com/blog/2022/09/30/how-to-add-more-environments-to-postgres-ci/
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论