Первый development-ран
Этот сценарий запускает минимальный пример на development-стеке и существующей
Linux-машине, доступной по SSH. На машине нужны curl, поддерживаемый service
manager и SSH-учётка, которой разрешено установить агент. Host key обязателен:
Graphene не использует trust-on-first-use.
1. Запустите control plane
Выполните Development-инсталляцию, затем проверьте контекст:
$ graphenectl whoami
$ graphenectl get namespace
Если целевая машина удалённая, до запуска Compose задайте доступный ей адрес в
GRAPHENE_SERVER_EXTERNAL. Агент открывает исходящее соединение; входящий порт
агента не нужен.
2. Сохраните SSH-ключ
Пример принимает имя секрета, а не байты приватного ключа:
$ graphenectl secret set bare-ssh-key --value-file ~/.ssh/id_ed25519
$ graphenectl get secret bare-ssh-key
Значение нельзя прочитать обратно. Ротация добавляет событие той же записи секрета.
3. Проверьте и опубликуйте пайплайн
$ git clone https://github.com/graphene-ci/examples.git
$ cd examples/minimal
$ go run . plan
$ go run . push
push кросс-компилирует этот main, без локального Docker-демона собирает
worker image, отправляет его через дверь сервера и публикует типизированный
манифест. Повтор без изменения кода переиспользует content-addressed image.
Проверьте опубликованное:
$ graphenectl get pipeline baseline
$ graphenectl tree pipeline/baseline
4. Запустите и наблюдайте
Development-стек содержит identity агента vm-1. Используйте это имя записи и
точный публичный host key SSH-машины:
$ go run . run \
--host 192.0.2.40:22 \
--user root \
--hostKey 'ssh-ed25519 AAAA...' \
--agent vm-1 \
--key bare-ssh-key \
--work 'uname -a' \
--keep 10m \
--watch
Бинарь делает push только при изменении, по SSH устанавливает исходящий агент,
выполняет work на машине, публикует artifact/baseline-report и печатает
типизированный результат. При неуспешном ране --watch завершится ненулевым
кодом.
В другом терминале:
$ graphenectl get run -w
$ graphenectl run status <run-id>
$ graphenectl tree run/<run-id>
run status отвечает, какая activity выполняется и почему повторяется; run watch показывает меняющиеся дерево, события и хвост логов.
5. Проверьте результат и удалите
$ graphenectl get artifact baseline-report
$ graphenectl tree pipeline/baseline
$ graphenectl delete pipeline baseline --wait
Удаление идёт по владению: дети финализируются раньше владельца, а записи
удаляют принадлежащие им байты. Keep в примере задерживает завершение; если
ждать не нужно, отмените ран командой graphenectl run cancel <run-id>.
Альтернатива: Git-источник и ревизия
Production-shaped путь исходников выполняется сервером и неизменяем:
apply gitsourceс repository, ref, subdirectory и runtime;revision materializeдля сборки ревизии;revision runдля проверки draft;invoke pipeline ... activateдля выбора текущей версии.
Точные команды находятся в Пайплайнах, исходниках и ревизиях.
Оба пути публикации создают один контракт пайплайна: direct push удобен в
локальной разработке, Git materialization — для контролируемого источника.
Далее: напишите пайплайн, разберите владение ресурсами или откройте Studio.