CI remediation

Не отдавайте CI ключи от production repair.

GitHub Actions может отправить failure signal. Remediation лучше держать за отдельным Nerve agent на инфраструктуре, которую вы контролируете.

Почему разделение важно

CI-система является ценной целью. Workflow secret, который умеет деплоить, откатывать, перезапускать сервисы и читать логи, слишком силен. В Nerve workflow получает sender DSN: он может только отправить encrypted signal в pipe.

Failure signal из workflow

- name: Notify Nerve on failure
  if: failure() && github.ref == 'refs/heads/main'
  env:
    NERVE_DSN: ${{ secrets.NERVE_DSN }}
  run: |
    go install github.com/nerve-ink/nerve-cli/cmd/nerve@latest
    echo "CI failed repo=${{ github.repository }} run=${{ github.run_id }}" \
      | nerve send --severity critical

Подтвержденное действие на host

Remediation action должен жить на host, deployment controller или отдельной management VM, а не внутри workflow context. Nerve agent может открывать reviewed wrappers: restart-api, collect-diagnostics, rollback-last-release.

Граница pull request

Не отправляйте action-oriented сигналы из workflows, которые запускают произвольный код из fork. Ограничьте такие уведомления protected branches, protected environments или manually approved deployment jobs.

Что CI должен передать

В notification полезно включить repository, branch, run ID, commit SHA, environment и ссылку на failed job. Не отправляйте cloud credentials, database URLs и длинные логи, где могут быть secrets.

Что остается вне CI

Rollback credentials, права на restart service и diagnostic access должны жить на action host. Так GitHub Actions остается удобным источником сигналов, но workflow secret не превращается в production access.

Проверка на staging

Перед production включите отдельный staging workflow или protected environment. Он должен отправить тот же формат сообщения, но action host будет staging-agent, а не production-agent. Так проще проверить route, текст push и allowlist.

Безопасные первые actions

Похожие страницы