使用GAMS引擎和GitHub Actions进行自动 GAMS模型测试
软件开发很依赖自动化和持续集成(CI)以确保在开发过程的早期发现错误。Jenkins是一个被大量采用的开源自动化服务器,并且是GAMS每天都使用的工具之一。借助GitLab CI/CD和GitHub Actions,两大存储平台近年来也加入了自己的持续集成产品。对于GAMS模型的开发人员来说,Jenkins 、GitHub和GitLab的CI功能并不便于使用,因为构建构成很难与可用于运行测试代码的GAMS安装进行通信。
现在我们的新产品GAMS引擎改变了这种情况。对于那些还不知道的人,GAMS Engine提供了一个REST API,可用于将GAMS作业提交和运行到一个中心位置。
下面我们将概述GitHub上GAMS模型开发人员 如何轻松使用Engine为其模型运行自动化测试。同样的原则也适用于GitLab和Jenkins。
一个GitHub示例
先决条件包括:
-
包含GAMS模型代码的GitHub存储库。
-
访问GAMS引擎实例的凭据。
它是如何完成的
“GitHub Actions”背后的概念很简单。简而言之:
代码存储中发生的事件(例如推送新提交)都可触发工作流。
工作流包含一个或多个作业,这些在称为运行器的计算资源上执行。作业中发生的全部事情都在同一个运行器上按吮吸运行,默认情况下,多个作业在多个运行器上同时运行。您可以选择基于Linux、Windows或Mac OS 的运行器。GitHub提供了向单慷慨的运行时间配额,对于大多数项目来说应该足够了。
每个作业都包含了一个或多个步骤。典型的步骤可以是“将新版本从存储库签出到运行器”、“编辑源代码”、“将某些东西部署到服务器”等等。
每一步骤都调用动作或执行shell命令。行动是实际做某事的事情。
如何使用GitHub操作?
要定义工作流程,您可以在.GitHub/workflows/源存储库中创建一个YAML文件。将新提交推送到存储库时,将运行以下工作流。它检查对新运行程序的新提交,准备模型以提交给GAMS Engine,然后在Engine上以编译模式运行模型:
关于可以传递给“运行作业”操作的参数,应该解释一些事情:
你可以看到我们使用了一些形式的变量${{ secrets.xyz }}。这些变量可以以加密形式存储在模型存储库中。您需要将这些秘密设置为指向URL您选择的引擎实例的,并同时提供USER和PASSWORD。
后一行中使用的${{ github.workspace }}变量包含运行器内部的路径,您的代码在作业中通过“checkout”操作签出。
该参数a=c导致模型由GAMS工作者便于,但不执行。这足以捕获语法错误,并确保工作流程能够快速完成。
一旦将此工作流文件添加到存储库并对其进行修改以适合您的模型,每次推送到存储库都会触发模型在Engine上的运行。如果模型编译失败,运行将失败并发送电子通知邮件。