我有一个具有多个部署阶段(部署到不同帐户)的管道。我想以编程方式输入批准结果。
当并行执行等待批准的管道执行数量超过一个时,就会出现问题。
source (Succeeded, commit 3)
↓
build (Succeeded, commit 3)
↓
deploy-dev (Succeeded, commit 3)
↓
approve-to-deploy-to-qa (InProgress, commit 3)
deploy-qa
↓
approve-to-deploy-to-prod (InProgress, commit 1)
deploy-prod (not run yet)
图中的示例:完成了3次提交,所有提交都运行到dev
(含)为止,只有commit 2
经过qa
和阶段现在正在等待下一次提交(commit 3
)。阶段prod
尚未运行,它仍在等待第一笔提交(commit 1
)的批准。
要以编程方式批准最后一个阶段(prod
),我必须批准所有提交,直到上一个阶段(qa
)上一次成功提交为止。
从AWS JavaScript SDK调用codepipeline.getPipelineState
只能得到当前状态:
{ "pipelineName": "...",
"stageStates": [
...
{ "stageName": "StagingQA",
"inboundTransitionState": {
"enabled": true
},
"actionStates": [{
"actionName": "approval",
"latestExecution": {
"status": "InProgress",
"token": "1d55d6a2-68bb-4e01-83cc-b46101857088"
}
}, {
"actionName": "stage-qa",
"entityUrl": "..."
}
],
"latestExecution": {
"pipelineExecutionId": "d519482d-5a9a-4a6d-b185-3bc3fd5f98e2",
"status": "InProgress"
}
}, {
"stageName": "StagingProd",
"actionStates": [{
"actionName": "approval",
"latestExecution": {
"status": "InProgress",
"token": "70b5ef16-a912-4b12-a660-be0792a8a70d"
}
}, {
"actionName": "stage-prod",
"entityUrl": "..."
}
],
"latestExecution": {
"pipelineExecutionId": "04b8b2c4-e677-4d1e-a601-f731260ef00a",
"status": "InProgress"
}
}
]
}
是否有一种方法可以获取最后一个成功执行的pipelineExecutionId
或至少某个特定阶段的所有执行的列表?
答案 0 :(得分:1)
(此答案已更新为反映extended discussion)
CodePipeline是连续交付的产品,因此就像管道中有一系列更改一样,手动批准操作就像过滤器一样。除了通过控制流程中的输入(提交)和过滤器(测试和批准操作)之外,您实际上并没有选择要部署到产品的提交。
您应将deploy-qa
和approve-to-deploy-to-prod
动作放在同一阶段:
source (Succeeded, commit 3)
↓
build (Succeeded, commit 3)
↓
deploy-dev (Succeeded, commit 3)
↓
deploy-qa
approve-to-deploy-to-prod (InProgress, commit 1)
↓
deploy-prod (not run yet)
这可以使质量检查人员完全批准已部署和测试的内容。为什么?因为CodePipeline要求在任何给定时间,一个管道执行都可以处于管道阶段。在提交1被批准或被拒绝之前,提交3将无法进入质量检查阶段。
注意:我也删除了approve-to-deploy-to-qa
操作,因为我怀疑您正在使用它来防止较新的提交在测试过程中修改QA环境。