AWS CodePipeline: как получить последнее успешное выполнение для этапа? - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть конвейер с несколькими этапами развертывания (развертывания в разных учетных записях).Я хочу поставить результат утверждения программно.

Проблема возникает, когда параллельно выполняется утверждение более чем одного конвейера.

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)

Пример на рисунке: выполнено три коммита, всеработать до dev (включительно), только commit 2 проходил через qa, и сцена теперь ждет следующего коммита (commit 3).Этап prod еще не был запущен, и он все еще ожидает одобрения самого первого коммита (commit 1).

Чтобы утвердить последний этап (prod) программным путем, я должен утвердить всекоммиты до последнего успешного коммита из предыдущего этапа (qa).

Вызов codepipeline.getPipelineState из AWS JavaScript SDK Я получаю только текущие состояния:

{   "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 для последнего успешного выполнения или хотя бы список всех выполнений для определенного этапа?

1 Ответ

0 голосов
/ 12 февраля 2019

(Этот ответ был обновлен, чтобы отразить расширенное обсуждение )

CodePipeline - это продукт непрерывной доставки, так что конвейер имеет поток изменений, а действие по утверждению вручную действует какфильтр.На самом деле вы не можете выбрать, какой коммит развернуть в prod, кроме как по пути управления входом в steam (коммиты) и фильтрами (действия по тестированию и утверждению).

Вы должны поместить 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)

Это позволяет QA утверждать именно то, что было развернуто и протестировано.Зачем?Потому что CodePipeline обеспечивает, чтобы ровно одно выполнение конвейера могло быть в стадии конвейера в любой момент времени.Коммит 3 не сможет войти в стадию QA, пока коммит 1 не будет одобрен или отклонен.

ПРИМЕЧАНИЕ. Я также удалил действие approve-to-deploy-to-qa, так как подозреваю, что вы использовали его, чтобы запретить новый коммит.изменение среды QA во время тестирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...