Déployer une image sur un cluster Rivet
Un deploy est une compilation locale, un upload, et deux opérations Code Mode exécutées via l'outil execute. Il nécessite Docker et un shell. Il n'a besoin ni du CLI Rivet ni d'aucune autre connexion.
Avant de commencer
- Confirmez que la session peut déployer. Si
searchne liste pasrivet.deploy.prepare, la session est en lecture seule ou est épinglée à un projet ou un namespace, et le deploy ne peut pas s'exécuter d'ici. Dites-le plutôt que de réessayer. - Choisissez le cluster. Exécutez
return (await rivet.cloud.v2.clusters.list()).items;dansexecuteet utilisez le champclusterde celui à déployer, qui est son nom. Sur une connexion épinglée à un cluster,rivet.context()le rapporte, etclusterest omis de chaque appel ci-dessous.
Étapes
-
Compilez et mesurez l'image dans le shell. La plateforme doit être
linux/amd64.docker build --platform linux/amd64 -t app . docker image save app -o image.tar wc -c < image.tar # content_length openssl md5 -binary image.tar | base64 # content_md5L'archive tar doit faire 5 Gio ou moins. Mesurez le fichier exact qui sera uploadé, car la compilation échoue la vérification si l'une ou l'autre valeur diffère.
-
Enregistrez la compilation.
return await rivet.deploy.prepare({ cluster: "my-cluster", image: "app:latest", content_length: 48213504, content_md5: "1B2M2Y8AsgTpgAmY7PhCfg==", });content_lengthest un nombre, pas une chaîne. Passezfilesi l'archive tar n'est pas nomméeimage.tar. Conservez lebuild_idretourné. -
Exécutez la commande
uploadretournée dans le shell, sans modification. C'est une commande curl contre une URL présignée valide pour cette archive tar jusqu'àexpires_at, elle ne porte donc aucune credential Rivet. -
Lancez le rollout, en répétant jusqu'à ce que
donesoittrue.return await rivet.deploy.rollout({ cluster: "my-cluster", build_id: "<build_id>" });Chaque appel avance d'une étape et retourne immédiatement, appelez-la à nouveau tant que
doneestfalse. Voirreferences/rollout.mdpour chaque étape, les erreurs, et comment revenir en arrière. -
Rapportez le
build_idet lesendpointsdu résultat final à l'utilisateur. Lebuild_idest ce qu'un rollback ultérieur nécessitera.
Règles
- Ne recompilez jamais ni ne réuploadez pour réessayer un rollout. Appelez
rivet.deploy.rolloutà nouveau avec le mêmebuild_id. - Utilisez
rivet.deploy.*pour tout le deploy. Ne pilotez pasrivet.cloud.v2.builds.*ourivet.cloud.v2.runnerPools.upsertà la main, car une upsert remplace les paramètres du pool en bloc et supprimerait sa liste d'autorisation. - Ne devinez pas un nom de
cluster,region, oupool. Listez-les d'abord.