[{"data":1,"prerenderedAt":488},["ShallowReactive",2],{"navigation":3,"page-\u002Fdeployments":105,"surround-\u002Fdeployments":483},[4,17,25,48,63,74,86],{"title":5,"path":6,"stem":7,"children":8,"icon":16,"exact":11},"Getting started","\u002Fgetting-started","1.getting-started\u002F1.index",[9,12],{"title":10,"path":6,"stem":7,"exact":11,"children":-1},"Introduction",true,{"title":13,"path":14,"stem":15,"exact":11,"children":-1},"Quickstart","\u002Fgetting-started\u002Fquickstart","1.getting-started\u002F2.quickstart","i-lucide-rocket",{"title":18,"path":19,"stem":20,"children":21,"icon":24,"exact":11},"Concepts","\u002Fconcepts","2.concepts\u002F1.index",[22],{"title":23,"path":19,"stem":20,"exact":11,"children":-1},"The Kuppit model","i-lucide-shapes",{"title":26,"path":27,"stem":28,"children":29,"icon":47,"exact":11},"Deployments","\u002Fdeployments","3.deployments\u002F1.index",[30,31,35,39,43],{"title":26,"path":27,"stem":28,"exact":11,"children":-1},{"title":32,"path":33,"stem":34,"exact":11,"children":-1},"Builds","\u002Fdeployments\u002Fbuilds","3.deployments\u002F2.builds",{"title":36,"path":37,"stem":38,"exact":11,"children":-1},"Redeploy and roll back","\u002Fdeployments\u002Fredeploy-and-rollback","3.deployments\u002F3.redeploy-and-rollback",{"title":40,"path":41,"stem":42,"exact":11,"children":-1},"Logs","\u002Fdeployments\u002Flogs","3.deployments\u002F4.logs",{"title":44,"path":45,"stem":46,"exact":11,"children":-1},"When a deployment fails","\u002Fdeployments\u002Fwhen-a-deployment-fails","3.deployments\u002F5.when-a-deployment-fails","i-lucide-cloud-upload",{"title":49,"path":50,"stem":51,"children":52,"icon":62,"exact":11},"Resources","\u002Fresources","4.resources\u002F1.index",[53,54,58],{"title":49,"path":50,"stem":51,"exact":11,"children":-1},{"title":55,"path":56,"stem":57,"exact":11,"children":-1},"Web services","\u002Fresources\u002Fweb-services","4.resources\u002F2.web-services",{"title":59,"path":60,"stem":61,"exact":11,"children":-1},"PostgreSQL","\u002Fresources\u002Fpostgresql","4.resources\u002F3.postgresql","i-lucide-boxes",{"title":64,"icon":65,"path":66,"stem":67,"children":68,"page":73,"exact":11},"Configuration","i-lucide-sliders-horizontal","\u002Fconfiguration","5.configuration",[69],{"title":70,"path":71,"stem":72,"exact":11,"children":-1},"Environment variables","\u002Fconfiguration\u002Fvariables","5.configuration\u002F1.variables",false,{"title":75,"path":76,"stem":77,"children":78,"icon":85,"exact":11},"Domains","\u002Fdomains","7.domains\u002F1.index",[79,81],{"title":80,"path":76,"stem":77,"exact":11,"children":-1},"Hostnames",{"title":82,"path":83,"stem":84,"exact":11,"children":-1},"Custom domains","\u002Fdomains\u002Fcustom-domains","7.domains\u002F2.custom-domains","i-lucide-globe",{"title":87,"path":88,"stem":89,"children":90,"icon":104,"exact":11},"Environments","\u002Fenvironments","8.environments\u002F1.index",[91,92,96,100],{"title":87,"path":88,"stem":89,"exact":11,"children":-1},{"title":93,"path":94,"stem":95,"exact":11,"children":-1},"Preview environments","\u002Fenvironments\u002Fpreview-environments","8.environments\u002F2.preview-environments",{"title":97,"path":98,"stem":99,"exact":11,"children":-1},"Named environments","\u002Fenvironments\u002Fnamed-environments","8.environments\u002F3.named-environments",{"title":101,"path":102,"stem":103,"exact":11,"children":-1},"Deleting an environment","\u002Fenvironments\u002Fdeleting-an-environment","8.environments\u002F4.deleting-an-environment","i-lucide-git-branch",{"id":106,"title":26,"badge":107,"body":108,"category":107,"description":477,"draft":73,"extension":478,"links":107,"meta":479,"navigation":11,"path":27,"seo":480,"sitemap":481,"stem":28,"__hash__":482},"docs\u002F3.deployments\u002F1.index.md",null,{"type":109,"value":110,"toc":466},"minimark",[111,115,120,205,212,216,219,313,322,337,341,344,418,424,428,434,440,443,453,456,460],[112,113,114],"p",{},"A deployment turns one commit into one running revision of one web service. Kuppit builds a container image from the commit, starts a revision from it, waits for the revision to be healthy, and only then moves traffic to it. Until that last step, whatever was serving keeps serving.",[116,117,119],"h2",{"id":118},"what-starts-a-deployment","What starts a deployment",[121,122,123,136],"table",{},[124,125,126],"thead",{},[127,128,129,133],"tr",{},[130,131,132],"th",{},"Trigger",[130,134,135],{},"When",[137,138,139,151,166,179,192],"tbody",{},[127,140,141,148],{},[142,143,144],"td",{},[145,146,147],"strong",{},"Git push",[142,149,150],{},"A push to the branch an environment deploys: the production branch for Production, its own branch for a named environment. Every web service in that environment deploys.",[127,152,153,158],{},[142,154,155],{},[145,156,157],{},"Pull request",[142,159,160,161,165],{},"A pull request opened, reopened or pushed to. Its ",[162,163,164],"a",{"href":94},"preview environment"," deploys.",[127,167,168,173],{},[142,169,170],{},[145,171,172],{},"Manual",[142,174,175,178],{},[145,176,177],{},"Deploy"," on the service's page, which deploys the head of the environment's branch.",[127,180,181,186],{},[142,182,183],{},[145,184,185],{},"Redeploy",[142,187,188,191],{},[145,189,190],{},"Redeploy this commit"," on a deployment: the same commit, built again with today's settings and variables.",[127,193,194,199],{},[142,195,196],{},[145,197,198],{},"Rollback",[142,200,201,204],{},[145,202,203],{},"Roll back to this deployment"," on a previous one: the image it already built, deployed again.",[112,206,207,208,211],{},"Redeploy and rollback are described on ",[162,209,210],{"href":37},"their own page",".",[116,213,215],{"id":214},"statuses","Statuses",[112,217,218],{},"A deployment's status is what Kuppit is doing with it, or how it ended.",[121,220,221,231],{},[124,222,223],{},[127,224,225,228],{},[130,226,227],{},"Status",[130,229,230],{},"Meaning",[137,232,233,243,253,263,273,283,293,303],{},[127,234,235,240],{},[142,236,237],{},[145,238,239],{},"Queued",[142,241,242],{},"Accepted and waiting for a builder.",[127,244,245,250],{},[142,246,247],{},[145,248,249],{},"Building",[142,251,252],{},"Turning the commit into a container image.",[127,254,255,260],{},[142,256,257],{},[145,258,259],{},"Deploying",[142,261,262],{},"Kuppit is provisioning and promoting the new revision.",[127,264,265,270],{},[142,266,267],{},[145,268,269],{},"Live",[142,271,272],{},"Serving production traffic.",[127,274,275,280],{},[142,276,277],{},[145,278,279],{},"Previous",[142,281,282],{},"Superseded by a newer deployment.",[127,284,285,290],{},[142,286,287],{},[145,288,289],{},"Failed",[142,291,292],{},"Stopped before reaching production. Traffic was not moved.",[127,294,295,300],{},[142,296,297],{},[145,298,299],{},"Cancelling",[142,301,302],{},"Stopping. Whatever had already started is being wound down.",[127,304,305,310],{},[142,306,307],{},[145,308,309],{},"Cancelled",[142,311,312],{},"Stopped on request. It never took traffic.",[112,314,315,316,318,319,321],{},"Exactly one deployment of a service is ",[145,317,269],{},". When a newer one goes live, the old one becomes ",[145,320,279],{},"; it keeps its outcome, and it stays a rollback candidate because nothing rewrites it.",[112,323,324,325,329,330,332,333,336],{},"Status is about one deployment. Whether the service is serving is a separate question with its own answer, ",[162,326,328],{"href":327},"\u002Fresources\u002Fweb-services#service-health","service health",": a service can show ",[145,331,249],{}," on a new deployment and ",[145,334,335],{},"Healthy"," at the same time, because the previous revision is still up.",[116,338,340],{"id":339},"the-phases","The phases",[112,342,343],{},"The deployment page shows the work as five phases, each with what Kuppit is doing:",[121,345,346,356],{},[124,347,348],{},[127,349,350,353],{},[130,351,352],{},"Phase",[130,354,355],{},"What happens",[137,357,358,368,380,393,408],{},[127,359,360,365],{},[142,361,362],{},[145,363,364],{},"Analyzing source",[142,366,367],{},"Reading the repository and resolving the build.",[127,369,370,375],{},[142,371,372],{},[145,373,374],{},"Building image",[142,376,377,378,211],{},"Creating the production container image. See ",[162,379,32],{"href":33},[127,381,382,387],{},[142,383,384],{},[145,385,386],{},"Starting revision",[142,388,389,390,211],{},"Provisioning compute for the new revision. A revision that needs a database still being created waits here, as ",[145,391,392],{},"Waiting for a resource",[127,394,395,400],{},[142,396,397],{},[145,398,399],{},"Health check",[142,401,402,403,407],{},"Waiting for the revision to report healthy. A server that does not listen on ",[404,405,406],"code",{},"PORT"," fails here.",[127,409,410,415],{},[142,411,412],{},[145,413,414],{},"Going live",[142,416,417],{},"Moving production traffic to the new revision.",[112,419,420,421,211],{},"A failed phase says why, in words meant for a developer, with the build or runtime logs behind it. See ",[162,422,423],{"href":45},"when a deployment fails",[116,425,427],{"id":426},"one-at-a-time","One at a time",[112,429,430,431,433],{},"A service runs one deployment at a time. A second ",[145,432,177],{},", redeploy or rollback while one is in flight is refused rather than queued: cancel the one in progress first, and Kuppit's button says so.",[112,435,436,437,439],{},"A new push is the exception. Pushing again while a push's deployment is still building supersedes it: the older deployment stops, shows as ",[145,438,279],{}," without ever having gone live, and the newer commit takes its place. Only pushes and pull requests supersede; a rollback never cancels the deployment you are rolling back from.",[116,441,299],{"id":442},"cancelling",[112,444,445,446,448,449,452],{},"A deployment that has not reached ",[145,447,414],{}," can be cancelled, from ",[145,450,451],{},"Cancel deployment"," in its menu. Kuppit stops it and asks the builder to abandon it, and it will never take traffic. Whatever is serving now is unaffected.",[112,454,455],{},"A deployment that is already moving traffic cannot be cancelled. Roll back to the previous one instead.",[116,457,459],{"id":458},"what-a-deployment-records","What a deployment records",[112,461,462,463,465],{},"Every deployment is immutable. It records the commit, the build settings it was resolved with, and the variables it was prepared with, so that a ",[145,464,279],{}," deployment can be rolled back to exactly as it was, changed variables and all. Nothing edits a deployment after the fact: cancelling, redeploying and rolling back each create a new one.",{"title":467,"searchDepth":468,"depth":468,"links":469},"",3,[470,472,473,474,475,476],{"id":118,"depth":471,"text":119},2,{"id":214,"depth":471,"text":215},{"id":339,"depth":471,"text":340},{"id":426,"depth":471,"text":427},{"id":442,"depth":471,"text":299},{"id":458,"depth":471,"text":459},"How one commit becomes a running revision of a web service, what each status means, and what happens to the deployment before it.","md",{},{"title":26,"description":477},{"loc":27},"v7dYl4kmgQ7lPpsi8qQDAKUE0B1c2N54jp-7LCszbGw",[484,486],{"title":23,"path":19,"stem":20,"description":485,"children":-1},"Projects, environments, resources and deployments, and how they connect into one application graph.",{"title":32,"path":33,"stem":34,"description":487,"children":-1},"How Kuppit turns a commit into a container image, what it detects from the repository, and every build setting you can change.",1788534986163]