Ответ
Да, я активно использовал post-hook'и (или этапы after_script/post) в пайплайнах CI/CD для выполнения действий после завершения основной задачи, таких как уведомления, очистка и сбор метрик.
Практические примеры из моего опыта:
-
Уведомление о статусе сборки/деплоя в Slack/Teams:
# .gitlab-ci.yml (GitLab CI) deploy_to_staging: script: - ansible-playbook deploy-staging.yml after_script: - | if [ "$CI_JOB_STATUS" == "success" ]; then curl -X POST -H 'Content-type: application/json' --data "{"text":"✅ Деплой на staging успешно завершен для $CI_COMMIT_REF_NAME"}" $SLACK_WEBHOOK_URL else curl -X POST -H 'Content-type: application/json' --data "{"text":"❌ Деплой на staging провален для $CI_COMMIT_REF_NAME. Лог: $CI_JOB_URL"}" $SLACK_WEBHOOK_URL fi -
Очистка временных ресурсов в облаке после прогона интеграционных тестов:
# GitHub Actions - name: Cleanup AWS resources (Post-Hook) if: always() # Выполнять всегда, даже если предыдущие шаги упали run: | aws ec2 terminate-instances --instance-ids ${{ env.TEST_INSTANCE_ID }} aws s3 rb s3://temp-test-bucket-${{ github.run_id }} --force -
Сбор и отправка метрик (например, длительность выполнения) в Prometheus PushGateway:
# Скрипт, выполняемый после основной задачи DURATION=$((SECONDS - START_TIME)) echo "ci_job_duration_seconds{job="$CI_JOB_NAME", status="$CI_JOB_STATUS"} $DURATION" | curl --data-binary @- http://pushgateway.example.org:9091/metrics/job/ci_pipeline
Ключевой принцип: post-hook должен быть идемпотентным (безопасным для повторного запуска) и не должен блокировать основной процесс. Его задача — выполнить финализирующие действия, которые важны, но не критичны для успеха самого деплоя или сборки.