如何在我的 Jenkins 作业中使用 AWS s3 条件写入

问题描述 投票:0回答:1

我有一个 Jenkins 多分支管道,它将分支的状态存储在共享 S3 Groovy 对象中。 Groovy 文件看起来像这样:

[["name":"def-123","current_status":"success"],"name":"abc-234","current_status":"success"]]

这里name字段表示我们的功能git分支,status是分支的状态,如果成功则表示功能分支已部署,如果删除则表示功能分支环境被破坏(分支还在)。

Pipeline 主要在部署和销毁(测试成功后)阶段更新此文件。

如果两个 Jenkins 分支同时更新上述文件,我们将面临问题。

例如:两个作业同时读取上述文件,但一个在部署阶段读取,一个在销毁阶段读取。 销毁作业会将其分支更新为已删除,但如果在销毁作业一段时间后更新它,它会被其他分支部署作业再次覆盖以成功。

如何防止这种情况,我知道现在有 S3 条件写入,但不知道如何使用它。

amazon-web-services amazon-s3 concurrency jenkins-pipeline
1个回答
0
投票

在 Jenkins 中进行互斥的一种方法是使用 lockable-resources 插件。从他们的文档页面:

echo 'Starting'
lock('my-resource-name') {
  echo 'Do something here that requires unique access to the resource'
  // any other build will wait until the one locking the resource leaves this block
}
echo 'Finish'
© www.soinside.com 2019 - 2024. All rights reserved.