Я хочу отправить отчет о состоянии развертывания в API отдыха.
Он должен быть независимым от задания развертывания (из-за зависимости $ IMAGE2), поскольку я хочу использовать задание отчета в других проектах. Поэтому я создал две задачи в Gitlab CI следующим образом:
deploy:
stage: deploy
image: $IMAGE1
script:
- cd ${CI_PROJECT_DIR} && echo 'Failed' > deployment-status
# some codes to deploy and exit 1 if not successful
- cd ${CI_PROJECT_DIR} && echo 'Passed' > deployment-status #This line run only when deployment is successful
when: manual
artifacts:
when: always
paths:
- deployment-status
report-deployment:
stage: post-deploy
image: $IMAGE2
script:
- cd ${CI_PROJECT_DIR} && cat deployment-status
# some codes to report the status of deployment to an API
when: always
needs: ["deploy"]
В приведенном выше решении, в зависимости от развертывания, я заполняю deployment-status
Passed / Failed и использую файл артефакта deployment-status
в следующей работе, чтобы получить информацию о состоянии развертывания и сообщить о ней.
Приведенное выше решение имеет некоторые проблемы:
- Состояние конвейера будет равно running
, если я не вызову ручное задание. (из-за задания report-deployment
, для которого требуется deploy
)
- Если я попытаюсь дважды запустить задание deploy
, в API будет отправлен только один отчет.
Изображение проблем