1

我正在使用在服务器上运行的 Jenkins。我有一个由用户触发的管道,该用户在 GitHub 存储库上推送某些内容。它执行一个脚本,确保将 GitHub 存储库部署到 SAP Cloud Platform。

它使用 MTA Archive Builder 构建 MTA 应用程序,该应用程序创建一个 .mtar 文件。MTA 应用程序有一个 HTML5 模块。使用 MTA Archive Builder 构建 .mtar 文件后,我使用 NEO Java Web SDK(执行 neo deploy-mta 所需的库)部署它。“neo deploy-mta”是一个执行实际部署 html5 应用程序请求的命令。这工作正常,项目已成功部署在 SAP Cloud Platform 上。问题是:如果用户在 GitHub 上快速推送 2 次,我的 Jenkins 管道会被触发两次,并执行两次“neo deploy-mta”。

在正常情况下,SAP Cloud 平台应该部署 2 个版本,但是当我查看它时,它只部署了第一个部署请求。所以它跳过了第二个部署请求。

我的问题是,当发生 2 次推送时,如何确保在 SAP Cloud Platform 上部署了 2 个版本?

4

2 回答 2

1

Jenkins 实例已经在等待,直到没有运行构建。问题是当有 2 个部署请求时,SAP Cloud Platform 没有部署 2 个版本。

这个问题的解决方法是在“neo deploy-mta”命令中添加“--synchronous”参数。现在,此脚本将一直等待,直到 SAP Cloud Platform 上没有运行部署(针对此应用程序)。

于 2018-04-03T07:51:49.220 回答
0

发生这种情况很可能是因为 SAP MTA 部署程序检测到您正在进行另一个部署,因此停止了第二次部署。

一个解决方法是确保 Jenkins 在第一个构建完成之前不会运行第二个构建。您可以借助类似锁/信号量的机制来做到这一点。通过 Jenkins 插件有几种方法可以做到这一点:

另请查看如何防止两个 Jenkins 项目/构建同时运行?.

于 2018-03-29T16:10:26.440 回答