使用GAMS Engine和GitHub Actions进行自动化GAMS模型测试

软件开发在很大程度上依赖于测试自动化和持续集成 (CI),以确保在开发过程的早期发现错误。Jenkins 是一个被大量采用的开源自动化服务器,并且是 GAMS 每天使用的工具之一。随着 GitLab CI/CD 和 GitHub Actions,这两个主要的存储库平台近年来也增加了自己的持续集成产品。对于 GAMS 模型的开发人员来说,Jenkins、GitHub 和 GitLab 的 CI 功能并不好使用,因为构建过程很难与可用于运行测试代码的 GAMS 安装进行通信。

 

现在我们新的产品GAMS Engine改变了这种情况对于那些还不知道的人,GAMS Engine 提供了一个 REST API,可用于将 GAMS 作业提交和运行到一个中心位置。

下面我们概述了GitHub 上的GAMS模型开发人员如何轻松使用Engine为其模型运行自动化测试。相同的原则适用于GitLab 和 Jenkins。

 

一个GitHub 示例

先决条件

 

  • 包含您的 GAMS 模型代码的 GitHub 存储库。

  • 访问 GAMS 引擎实例的凭据。

 

它是如何完成的

“GitHub Actions”背后的概念很简单。简而言之:

 

  • 代码存储库中发生的事件(例如推送新提交)都可以触发工作流

  • 一个工作流包含一个或多个作业,这些作业在称为runners 的计算资源上执行。作业中发生的都在同一个运行器上顺序运行,默认情况下,多个作业在多个运行器上同时运行。您可以选择基于 Linux、Windows 或 macOS 的运行程序。GitHub 提供了相当慷慨的运行时间配额,这对于大多数项目来说应该足够了

  • 每个作业包含一个或多个步骤。典型的步骤可以是“将新版本从存储库签出到运行器”、“编译源代码”、“将某些内容部署到服务器”等等。

  • 每个步骤都会调用操作或执行 shell 命令。行动是实际做某事的事情。

 

 

为了演示如何使用 Engine 为 GAMS 模型运行自动化测试,我们开发团队的 Freddy 在https://github.com/GAMS-dev/actions上创建了两个 GitHub 操作。

 

  • “run-job”操作允许您在 GAMS 引擎实例上运行模型。

  • “更新模型”操作允许您在 GAMS 引擎实例上注册或更新 GAMS 模型。这与自动化测试无关,但对于控制 GAMS Engine 上的模型部署很有用,不在本文讨论范围之内。我们将在另一篇文章中介绍模型部署。

 

 

您如何使用 GitHub 操作?

要定义工作流,您需在.github/workflows/源存储库中创建一个 YAML 文件。将新提交推送到存储库时,将运行以下工作流。它检查对新运行器的新提交,准备模型以提交给 GAMS 引擎,然后在引擎上以编译模式运行模型:

关于可以传递给“运行作业”操作的参数,应该解释一些事情:

 

  1. 你可以看到我们使用了一些形式的变量${{ secrets.xyz }}。这些变量可以以加密形式存储在模型存储库中。您需要将这些秘密设置为指向URL您选择的 Engine 实例的 ,并提供USER和PASSWORD。

  2. ${{ github.workspace }}The last line中使用的变量包含运行程序中的路径,您的代码在作业的first step中通过“checkout”操作检出。

  3. 该参数a=c导致模型由 GAMS 工作人员编译,但不会执行。这足以捕获语法错误,并确保工作流快速完成。

将此工作流文件添加到您的存储库并对其进行修改以适合您的模型后,每次推送到存储库都会触发模型在 Engine 上的运行。如果模型编译失败,运行将失败,并会发送通知电子邮件。

行动如何运作?

以下是对那些想了解当我们的 GitHub 操作之一运行时会发生什么的人的解释:

 

1、我们的 GAMS-dev/actions 存储库包含每个动作的单独元数据 YAML 文件,用于配置动作的输入和输出

2、元数据定义由 GitHub 提供的“操作工具包”读取,它创建了一个“索引”的脚手架.js 文件。这个脚手架完成才能实现实际的逻辑,即使用 Engine REST API 来提交和调度模型,并接收结果。

3、您可以在我们的存储库中看到的 JavaScript 代码使用 ncc 编译成一个独立的文件,包括全部依赖项。

 

 

 

查看GAMS软件详情

热门产品

2021-10-29 09:57
首页    技术文档    使用GAMS Engine和GitHub Actions进行自动化GAMS模型测试