在过去的几周里,我一直在使用 GitLab.com 上的公共共享运行器为私有存储库中的 php 项目设置我的第一个管道。此时管道非常简单,定义了两个阶段:
stages:
- test
- deploy
Run Code Online (Sandbox Code Playgroud)
在测试阶段运行composer update -o
构建项目的依赖,连接到远程数据库服务器,并运行CodeCeption测试框架来测试构建和生成代码覆盖率报告。
在部署阶段运行composer update --no-dev -o
重建项目,只生产依赖和利用rsync将文件推到生产网络服务器。
现在一切正常,但是对于每个阶段,它都会运行拉取 docker 镜像、安装依赖项以及从 git 中提取项目的整个过程。似乎只加载一次 docker 镜像和项目会更有效率,然后运行测试并使用相同的持久构建实例一个接一个地部署阶段。
我意识到很多时候您确实希望为每个阶段创建一个新实例,但是对于我的项目,我觉得这对于时间和服务器资源来说效率很低。
我可以将所有内容配置为在同一阶段运行,这将消除冗余的 docker 映像进程,但我会失去 GitLab 中的管道功能,您可以在其中查看哪些阶段失败,并使后续阶段依赖于前一个阶段的成功。
从我对文档和几个相关问题的审查来看,这似乎与此过程如何工作的架构有关,其中作业彼此独立(甚至可以由不同的运行者处理)并组织成管道上的阶段。
我所拥有的当然是可行的(如果有点慢)但我想我会在这里问这个问题,以防万一我遗漏了什么会使这个过程更有效,同时仍然保留 CI 管道功能。
在 Microsoft Access 中,我有一个加载项 (*.accda) 函数,我想从 VBA 调用它,就像我从“数据库工具”->“加载项”菜单中单击该项目一样。
在注册表中,有一个键列出了库路径和表达式,但我还没有找到将调用它的能力暴露给 VBA 的地方。
我最接近的是添加对库的引用,然后立即删除引用。这将加载 VBE 项目并允许我调用该函数而无需添加对项目的持久引用。
With References
.AddFromFile Environ$("AppData") & "\Microsoft\AddIns\Version Control.accda"
.Remove references("MSAccessVCS")
End With
Run "MSAccessVCS.AddInMenuItemLaunch"
Run Code Online (Sandbox Code Playgroud)
问题是,如果我关闭CurrentDB
,则不再加载库。另一方面,如果我通过加载项菜单调用加载项,即使当前数据库关闭,它也会保留。
由于加载项需要执行包括关闭当前数据库在内的功能,因此它仅在我通过菜单启动加载项时才有效。
有没有人找到可以像单击加载项菜单中的链接一样启动加载项的系统命令、WizHook参考、API 调用或其他函数?此处的最终目标是创建一个自动化的 DevOps 流程,在该流程中,数据库无需任何用户干预(即单击菜单)即可打开并调用插件功能。
非常感谢 Victor K 为我指明了正确的方向!事实证明,您实际上可以在函数中包含文件路径Application.Run
以在应用程序级别加载加载项,这就是从菜单命令启动加载项时发生的情况。
语法类似于在 Microsoft Excel 中加载加载项的方式,但到目前为止我还没有弄清楚如何成功地将过程名称添加到文件路径以在一次调用中调用加载项函数。相反,我采用两步方法,第一个调用加载库,第二个调用运行我的加载项函数。我已经在我的 VBA 代码中实现了这个功能。
希望没有人在他们的加载项函数中实际使用 30 个命名参数,:-) 但我继续在第二个示例中添加了所有这些参数以完全反映Application.Run
.
' Example of calling an add-in function.
Public Sub ShowVersionControl()
RunAddin …
Run Code Online (Sandbox Code Playgroud)