[{"data":1,"prerenderedAt":992},["ShallowReactive",2],{"/blog/the-on-call-handover-at-gitlab":3,"navigation-en-us":205,"banner-en-us":632,"footer-en-us":642,"blog-post-authors-en-us-John Jarvis":887,"blog-related-posts-en-us-the-on-call-handover-at-gitlab":902,"blog-promotions-en-us":928,"next-steps-en-us":982},{"id":4,"title":5,"authors":6,"body":8,"category":177,"date":178,"description":179,"extension":180,"externalUrl":181,"faq":181,"featured":182,"heroImage":183,"meta":184,"navigation":192,"path":193,"seo":194,"slug":198,"stem":199,"tags":200,"template":203,"updatedDate":181,"__hash__":204},"blogPosts/en-us/blog/the-on-call-handover-at-gitlab.md","How our production team runs the weekly on-call handover",[7],"John Jarvis",{"type":9,"value":10,"toc":171},"minimark",[11,22,37,42,57,60,64,73,76,100,111,120,135,138,145,148,155,158],[12,13,14,15,21],"p",{},"How do you manage on-call incidents among a team of eight distributed across three time zones?\nEvery week, production engineers are assigned to the role of handling on-call.\nWith this, comes the ",[16,17,20],"a",{"href":18,"rel":19},"https://handbook.gitlab.com/handbook/engineering/on-call/#expectations-for-on-call",[],"expectation"," of being available to\nrespond to any issue that results in a critical alert. Additionally,\non-call individuals act as an umbrella for\nother members of the team by triaging and handling all issues\nrelated to GitLab.com infrastructure.",[12,23,24,25,30,31,36],{},"The production team structures on-call shifts so that they follow the sun, to\navoid waking up members of the team in the middle of the night.\nThis works well for GitLab's ",[16,26,29],{"href":27,"rel":28},"https://handbook.gitlab.com/handbook/company/culture/all-remote/",[],"remote-only culture"," where there are engineers in multiple\ntime zones. Occasionally, an on-call engineer will need to respond to an issue\noutside normal working hours; in these situations, GitLab encourages members to take\n",[16,32,35],{"href":33,"rel":34},"https://handbook.gitlab.com/handbook/people-group/time-off-and-absence/time-off-types/#a-gitlabbers-guide-to-time-off",[],"time off"," after your shift to recover.",[38,39,41],"h2",{"id":40},"the-on-call-handover","The on-call handover",[12,43,44,45,50,51,56],{},"As the team members working on-call shifts are distributed and their working hours don't always overlap, you can see how it would be easy for things to slip through the cracks between one shift and the next. To prevent this happening, once a week, the production team holds a 30-minute meeting called the ",[16,46,49],{"href":47,"rel":48},"https://handbook.gitlab.com/handbook/engineering/infrastructure/team/on-call-handover/",[],"on-call handover",".\nOne of the key tenets of GitLab is that ",[16,52,55],{"href":53,"rel":54},"https://handbook.gitlab.com/handbook/communication/#everything-starts-with-an-issue",[],"everything starts with an issue",", and\nthe on-call handover is no exception!\nFrom a generated report, the team reviews incidents that occurred during the\nlast seven days and decide whether they need additional attention or escalation.",[12,58,59],{},"After that, we check all GitLab issues with the on-call label to see if there are\nany that need to move from the current shift to the next one. At the end, there\nis a brief review of seven-day graphs. These help us keep an eye out for anything\nanomalous in our key metrics. If there is anything that seems\nout of the ordinary or warrants further investigation, the team will dig into them to see if we can\nidentify the root cause. The production team at GitLab encourages leads of other\ngroups to attend the review, as this helps bring to our attention any particular high-priority\nitems specific to individual services.",[38,61,63],{"id":62},"automating-the-on-call-handover","Automating the on-call handover",[12,65,66,67,72],{},"Drinking our own wine by using GitLab for on-call report generation has proven to\nbe a good way to automate some of the more tedious work of the handover.\nTo aid with this, the production team developed a program\ncalled the ",[16,68,71],{"href":69,"rel":70},"https://gitlab.com/gl-infra/oncall-robot-assistant",[],"on-call robot assistant",". It pulls data\nfrom relevant sources such as PagerDuty, Grafana and GitLab itself to generate a\nreport with a GitLab issue.",[12,74,75],{},"The program automates the following tasks:",[77,78,79,83,91],"ul",{},[80,81,82],"li",{},"Pulling the last shift's incidents from PagerDuty",[80,84,85,86],{},"Generating issue stats from the ",[16,87,90],{"href":88,"rel":89},"https://gitlab.com/gitlab-com/infrastructure/issues",[],"production backlog",[80,92,93,94,99],{},"Display seven-day graphs for the key performance metrics that we are monitoring\nthat are sourced from ",[16,95,98],{"href":96,"rel":97},"https://docs.gitlab.com/administration/monitoring/prometheus/",[],"GitLab Prometheus"," monitoring",[101,102,103],"center",{},[104,105],"img",{"src":106,"alt":107,"className":108,"style":110},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398769/blog/Content%20Images/oncall-robot-tty.gif","oncall-tty",[109],"shadow","width: 600px;",[12,112,113],{},[114,115,116],"em",{},[117,118,119],"small",{},"Generating an on-call report in a GitLab issue",[12,121,122,123,128,129,134],{},"These data sources are set in a ",[16,124,127],{"href":125,"rel":126},"https://gitlab.com/gl-infra/oncall-robot-assistant/blob/master/oncall-settings-example.yaml",[],"simple configuration file",", making it\neasy to iterate as we add new metrics to monitor.\nAt GitLab, most of what we do is out in the open so our on-call handover reports are\navailable for anyone to check out. If you want to see previous reports from\nthe on-call handovers ",[16,130,133],{"href":131,"rel":132},"https://gitlab.com/gitlab-com/infrastructure/issues?scope=all&utf8=%E2%9C%93&state=closed&label_name%5B%5D=oncall%20report",[],"check them out in our issue tracker",".",[12,136,137],{},"For example, here is one recent report that shows a report for a previous week:",[101,139,140],{},[104,141],{"src":142,"alt":143,"className":144,"style":110},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398769/blog/Content%20Images/oncall-robot-report1.png","oncall-report1",[109],[12,146,147],{},"As well as some graphs for key metrics the production team is monitoring:",[101,149,150],{},[104,151],{"src":152,"alt":153,"className":154,"style":110},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398769/blog/Content%20Images/oncall-robot-report2.png","oncall-report2",[109],[12,156,157],{},"When the team is finished reviewing the report, the current on-call engineer closes it\nand the shift officially ends.",[12,159,160,165,166],{},[16,161,164],{"href":162,"rel":163},"https://unsplash.com/photos/ocs8x33bpMA?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText",[],"Photo"," by Denny Müller on ",[16,167,170],{"href":168,"rel":169},"https://unsplash.com/search/photos/telephone?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText",[],"Unsplash",{"title":172,"searchDepth":173,"depth":173,"links":174},"",2,[175,176],{"id":40,"depth":173,"text":41},{"id":62,"depth":173,"text":63},"engineering","2018-03-14","Senior Production Engineer John Jarvis explains our handover process for on-call incidents in a fully remote and distributed team.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749678661/Blog/Hero%20Images/production-on-call-handover.jpg",{"excerpt":185},{"type":9,"value":186},[187],[12,188,14,189,21],{},[16,190,20],{"href":18,"rel":191},[],true,"/en-us/blog/the-on-call-handover-at-gitlab",{"title":5,"description":179,"ogTitle":5,"ogDescription":179,"noIndex":182,"ogImage":183,"ogUrl":195,"ogSiteName":196,"ogType":197,"canonicalUrls":195},"https://about.gitlab.com/blog/the-on-call-handover-at-gitlab","https://about.gitlab.com","article","the-on-call-handover-at-gitlab","en-us/blog/the-on-call-handover-at-gitlab",[201,202],"inside GitLab","production","BlogPost","TKYtH9RPjH9FrgI64hrdnJj_ojQfqhf0zGNbJ4eOJpA",{"logo":206,"freeTrial":211,"sales":216,"login":221,"items":226,"search":552,"minimal":583,"duo":602,"switchNav":611,"pricingDeployment":622},{"config":207},{"href":208,"dataGaName":209,"dataGaLocation":210},"/","gitlab logo","header",{"text":212,"config":213},"Get free trial",{"href":214,"dataGaName":215,"dataGaLocation":210},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":217,"config":218},"Request a demo",{"href":219,"dataGaName":220,"dataGaLocation":210},"/sales/?contact-topic=request-demo","sales",{"text":222,"config":223},"Sign in",{"href":224,"dataGaName":225,"dataGaLocation":210},"https://gitlab.com/users/sign_in/","sign in",[227,256,356,361,474,530],{"text":228,"config":229,"menu":231},"Platform",{"dataNavLevelOne":230},"platform",{"type":232,"columns":233},"cards",[234,240,248],{"title":228,"description":235,"link":236},"The intelligent orchestration platform for DevSecOps",{"text":237,"config":238},"Explore our Platform",{"href":239,"dataGaName":230,"dataGaLocation":210},"/platform/",{"title":241,"description":242,"link":243},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":244,"config":245},"Meet GitLab Duo",{"href":246,"dataGaName":247,"dataGaLocation":210},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":249,"description":250,"link":251},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":252,"config":253},"Learn more",{"href":254,"dataGaName":255,"dataGaLocation":210},"/why-gitlab/","why gitlab",{"text":257,"left":192,"config":258,"menu":260},"Product",{"dataNavLevelOne":259},"solutions",{"type":261,"link":262,"columns":266,"feature":335},"lists",{"text":263,"config":264},"View all Solutions",{"href":265,"dataGaName":259,"dataGaLocation":210},"/solutions/",[267,291,314],{"title":268,"description":269,"link":270,"items":275},"Automation","CI/CD and automation to accelerate deployment",{"config":271},{"icon":272,"href":273,"dataGaName":274,"dataGaLocation":210},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[276,280,283,287],{"text":277,"config":278},"CI/CD",{"href":279,"dataGaLocation":210,"dataGaName":277},"/solutions/continuous-integration/",{"text":241,"config":281},{"href":246,"dataGaLocation":210,"dataGaName":282},"gitlab duo agent platform - product menu",{"text":284,"config":285},"Source Code Management",{"href":286,"dataGaLocation":210,"dataGaName":284},"/solutions/source-code-management/",{"text":288,"config":289},"Automated Software Delivery",{"href":273,"dataGaLocation":210,"dataGaName":290},"Automated software delivery",{"title":292,"description":293,"link":294,"items":299},"Security","Deliver code faster without compromising security",{"config":295},{"href":296,"dataGaName":297,"dataGaLocation":210,"icon":298},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[300,304,309],{"text":301,"config":302},"Application Security Testing",{"href":296,"dataGaName":303,"dataGaLocation":210},"Application security testing",{"text":305,"config":306},"Software Supply Chain Security",{"href":307,"dataGaLocation":210,"dataGaName":308},"/solutions/supply-chain/","Software supply chain security",{"text":310,"config":311},"Software Compliance",{"href":312,"dataGaName":313,"dataGaLocation":210},"/solutions/software-compliance/","software compliance",{"title":315,"link":316,"items":321},"Measurement",{"config":317},{"icon":318,"href":319,"dataGaName":320,"dataGaLocation":210},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[322,326,330],{"text":323,"config":324},"Visibility & Measurement",{"href":319,"dataGaLocation":210,"dataGaName":325},"Visibility and Measurement",{"text":327,"config":328},"Value Stream Management",{"href":329,"dataGaLocation":210,"dataGaName":327},"/solutions/value-stream-management/",{"text":331,"config":332},"Analytics & Insights",{"href":333,"dataGaLocation":210,"dataGaName":334},"/solutions/analytics-and-insights/","Analytics and insights",{"title":336,"type":261,"items":337},"GitLab for",[338,344,350],{"text":339,"config":340},"Enterprise",{"icon":341,"href":342,"dataGaLocation":210,"dataGaName":343},"Building","/enterprise/","enterprise",{"text":345,"config":346},"Small Business",{"icon":347,"href":348,"dataGaLocation":210,"dataGaName":349},"Work","/small-business/","small business",{"text":351,"config":352},"Public Sector",{"icon":353,"href":354,"dataGaLocation":210,"dataGaName":355},"Organization","/solutions/public-sector/","public sector",{"text":357,"config":358},"Pricing",{"href":359,"dataGaName":360,"dataGaLocation":210,"dataNavLevelOne":360},"/pricing/","pricing",{"text":362,"config":363,"menu":365},"Resources",{"dataNavLevelOne":364},"resources",{"type":261,"link":366,"columns":370,"feature":463},{"text":367,"config":368},"View all resources",{"href":369,"dataGaName":364,"dataGaLocation":210},"/resources/",[371,404,430],{"title":372,"items":373},"Getting started",[374,379,384,389,394,399],{"text":375,"config":376},"Install",{"href":377,"dataGaName":378,"dataGaLocation":210},"/install/","install",{"text":380,"config":381},"Quick start guides",{"href":382,"dataGaName":383,"dataGaLocation":210},"/get-started/","quick setup checklists",{"text":385,"config":386},"Learn",{"href":387,"dataGaLocation":210,"dataGaName":388},"https://university.gitlab.com/","learn",{"text":390,"config":391},"Product documentation",{"href":392,"dataGaName":393,"dataGaLocation":210},"https://docs.gitlab.com/","product documentation",{"text":395,"config":396},"Best practice videos",{"href":397,"dataGaName":398,"dataGaLocation":210},"/getting-started-videos/","best practice videos",{"text":400,"config":401},"Integrations",{"href":402,"dataGaName":403,"dataGaLocation":210},"/integrations/","integrations",{"title":405,"items":406},"Discover",[407,412,417,422,426],{"text":408,"config":409},"Customer success stories",{"href":410,"dataGaName":411,"dataGaLocation":210},"/customers/","customer success stories",{"text":413,"config":414},"Blog",{"href":415,"dataGaName":416,"dataGaLocation":210},"/blog/","blog",{"text":418,"config":419},"Demo Hub",{"href":420,"dataGaName":421,"dataGaLocation":210},"/demo-hub/","demo hub",{"text":423,"config":424},"The Source",{"href":425,"dataGaName":416,"dataGaLocation":210},"/the-source/",{"text":427,"config":428},"Remote",{"href":27,"dataGaName":429,"dataGaLocation":210},"remote",{"title":431,"items":432},"Connect",[433,438,443,448,453,458],{"text":434,"config":435},"GitLab Services",{"href":436,"dataGaName":437,"dataGaLocation":210},"/services/","services",{"text":439,"config":440},"Contribute",{"href":441,"dataGaName":442,"dataGaLocation":210},"https://contributors.gitlab.com","contribute",{"text":444,"config":445},"Community",{"href":446,"dataGaName":447,"dataGaLocation":210},"/community/","community",{"text":449,"config":450},"Forum",{"href":451,"dataGaName":452,"dataGaLocation":210},"https://forum.gitlab.com/","forum",{"text":454,"config":455},"Events",{"href":456,"dataGaName":457,"dataGaLocation":210},"/events/","events",{"text":459,"config":460},"Partners",{"href":461,"dataGaName":462,"dataGaLocation":210},"/partners/","partners",{"config":464,"title":467,"text":468,"link":469},{"background":465,"textColor":466},"url('https://res.cloudinary.com/about-gitlab-com/image/upload/v1777322348/qpq8yrgn8knii57omj0c.png')","#000","What’s new in GitLab","Stay updated with our latest features and improvements.",{"text":470,"config":471},"Read the latest",{"href":472,"dataGaName":473,"dataGaLocation":210},"/whats-new/","whats new",{"text":475,"config":476,"menu":478},"Company",{"dataNavLevelOne":477},"company",{"type":261,"columns":479},[480],{"items":481},[482,487,493,495,500,505,510,515,520,525],{"text":483,"config":484},"About",{"href":485,"dataGaName":486,"dataGaLocation":210},"/company/","about",{"text":488,"config":489,"footerGa":492},"Jobs",{"href":490,"dataGaName":491,"dataGaLocation":210},"/jobs/","jobs",{"dataGaName":491},{"text":454,"config":494},{"href":456,"dataGaName":457,"dataGaLocation":210},{"text":496,"config":497},"Leadership",{"href":498,"dataGaName":499,"dataGaLocation":210},"/company/team/e-group/","leadership",{"text":501,"config":502},"Handbook",{"href":503,"dataGaName":504,"dataGaLocation":210},"https://handbook.gitlab.com/","handbook",{"text":506,"config":507},"Investor relations",{"href":508,"dataGaName":509,"dataGaLocation":210},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":511,"config":512},"Trust Center",{"href":513,"dataGaName":514,"dataGaLocation":210},"/security/","trust center",{"text":516,"config":517},"AI Transparency Center",{"href":518,"dataGaName":519,"dataGaLocation":210},"/ai-transparency-center/","ai transparency center",{"text":521,"config":522},"Newsletter",{"href":523,"dataGaName":524,"dataGaLocation":210},"/company/contact/#contact-forms","newsletter",{"text":526,"config":527},"Press",{"href":528,"dataGaName":529,"dataGaLocation":210},"/press/","press",{"text":531,"config":532,"menu":533},"Contact us",{"dataNavLevelOne":477},{"type":261,"columns":534},[535],{"items":536},[537,542,547],{"text":538,"config":539},"Talk to sales",{"href":540,"dataGaName":541,"dataGaLocation":210},"/sales/","talk to sales",{"text":543,"config":544},"Support portal",{"href":545,"dataGaName":546,"dataGaLocation":210},"https://support.gitlab.com/hc/en-us","support portal",{"text":548,"config":549},"Customer portal",{"href":550,"dataGaName":551,"dataGaLocation":210},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":553,"login":554,"suggestions":561},"Close",{"text":555,"link":556},"To search repositories and projects, login to",{"text":557,"config":558},"gitlab.com",{"href":224,"dataGaName":559,"dataGaLocation":560},"search login","search",{"text":562,"default":563},"Suggestions",[564,566,570,572,576,580],{"text":241,"config":565},{"href":246,"dataGaName":241,"dataGaLocation":560},{"text":567,"config":568},"Code Suggestions (AI)",{"href":569,"dataGaName":567,"dataGaLocation":560},"/solutions/code-suggestions/",{"text":277,"config":571},{"href":279,"dataGaName":277,"dataGaLocation":560},{"text":573,"config":574},"GitLab on AWS",{"href":575,"dataGaName":573,"dataGaLocation":560},"/partners/technology-partners/aws/",{"text":577,"config":578},"GitLab on Google Cloud",{"href":579,"dataGaName":577,"dataGaLocation":560},"/partners/technology-partners/google-cloud-platform/",{"text":581,"config":582},"Why GitLab?",{"href":254,"dataGaName":581,"dataGaLocation":560},{"freeTrial":584,"mobileIcon":589,"desktopIcon":594,"secondaryButton":597},{"text":585,"config":586},"Start free trial",{"href":587,"dataGaName":215,"dataGaLocation":588},"https://gitlab.com/-/trials/new/","nav",{"altText":590,"config":591},"Gitlab Icon",{"src":592,"dataGaName":593,"dataGaLocation":588},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":590,"config":595},{"src":596,"dataGaName":593,"dataGaLocation":588},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":598,"config":599},"Get Started",{"href":600,"dataGaName":601,"dataGaLocation":588},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":603,"mobileIcon":607,"desktopIcon":609},{"text":604,"config":605},"Learn more about GitLab Duo",{"href":246,"dataGaName":606,"dataGaLocation":588},"gitlab duo",{"altText":590,"config":608},{"src":592,"dataGaName":593,"dataGaLocation":588},{"altText":590,"config":610},{"src":596,"dataGaName":593,"dataGaLocation":588},{"button":612,"mobileIcon":617,"desktopIcon":619},{"text":613,"config":614},"/switch",{"href":615,"dataGaName":616,"dataGaLocation":588},"#contact","switch",{"altText":590,"config":618},{"src":592,"dataGaName":593,"dataGaLocation":588},{"altText":590,"config":620},{"src":621,"dataGaName":593,"dataGaLocation":588},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":623,"mobileIcon":628,"desktopIcon":630},{"text":624,"config":625},"Back to pricing",{"href":359,"dataGaName":626,"dataGaLocation":588,"icon":627},"back to pricing","GoBack",{"altText":590,"config":629},{"src":592,"dataGaName":593,"dataGaLocation":588},{"altText":590,"config":631},{"src":596,"dataGaName":593,"dataGaLocation":588},{"title":633,"titleMobile":634,"button":635,"config":640},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":252,"config":636},{"href":637,"dataGaName":638,"dataGaLocation":639},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":641,"disabled":182},"release",{"data":643},{"text":644,"source":645,"edit":651,"contribute":656,"config":661,"items":666,"minimal":876},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":646,"config":647},"View page source",{"href":648,"dataGaName":649,"dataGaLocation":650},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":652,"config":653},"Edit this page",{"href":654,"dataGaName":655,"dataGaLocation":650},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":657,"config":658},"Please contribute",{"href":659,"dataGaName":660,"dataGaLocation":650},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":662,"facebook":663,"youtube":664,"linkedin":665},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[667,714,768,812,844],{"title":357,"links":668,"subMenu":683},[669,673,678],{"text":670,"config":671},"View plans",{"href":359,"dataGaName":672,"dataGaLocation":650},"view plans",{"text":674,"config":675},"Why Premium?",{"href":676,"dataGaName":677,"dataGaLocation":650},"/pricing/premium/","why premium",{"text":679,"config":680},"Why Ultimate?",{"href":681,"dataGaName":682,"dataGaLocation":650},"/pricing/ultimate/","why ultimate",[684],{"title":685,"links":686},"Contact Us",[687,690,692,694,699,704,709],{"text":688,"config":689},"Contact sales",{"href":540,"dataGaName":220,"dataGaLocation":650},{"text":543,"config":691},{"href":545,"dataGaName":546,"dataGaLocation":650},{"text":548,"config":693},{"href":550,"dataGaName":551,"dataGaLocation":650},{"text":695,"config":696},"Status",{"href":697,"dataGaName":698,"dataGaLocation":650},"https://status.gitlab.com/","status",{"text":700,"config":701},"Terms of use",{"href":702,"dataGaName":703,"dataGaLocation":650},"/terms/","terms of use",{"text":705,"config":706},"Privacy statement",{"href":707,"dataGaName":708,"dataGaLocation":650},"/privacy/","privacy statement",{"text":710,"config":711},"Cookie preferences",{"dataGaName":712,"dataGaLocation":650,"id":713,"isOneTrustButton":192},"cookie preferences","ot-sdk-btn",{"title":257,"links":715,"subMenu":724},[716,720],{"text":717,"config":718},"DevSecOps platform",{"href":239,"dataGaName":719,"dataGaLocation":650},"devsecops platform",{"text":721,"config":722},"AI-Assisted Development",{"href":246,"dataGaName":723,"dataGaLocation":650},"ai-assisted development",[725],{"title":726,"links":727},"Topics",[728,733,738,743,748,753,758,763],{"text":729,"config":730},"CICD",{"href":731,"dataGaName":732,"dataGaLocation":650},"/topics/ci-cd/","cicd",{"text":734,"config":735},"GitOps",{"href":736,"dataGaName":737,"dataGaLocation":650},"/topics/gitops/","gitops",{"text":739,"config":740},"DevOps",{"href":741,"dataGaName":742,"dataGaLocation":650},"/topics/devops/","devops",{"text":744,"config":745},"Version Control",{"href":746,"dataGaName":747,"dataGaLocation":650},"/topics/version-control/","version control",{"text":749,"config":750},"DevSecOps",{"href":751,"dataGaName":752,"dataGaLocation":650},"/topics/devsecops/","devsecops",{"text":754,"config":755},"Cloud Native",{"href":756,"dataGaName":757,"dataGaLocation":650},"/topics/cloud-native/","cloud native",{"text":759,"config":760},"AI for Coding",{"href":761,"dataGaName":762,"dataGaLocation":650},"/topics/devops/ai-for-coding/","ai for coding",{"text":764,"config":765},"Agentic AI",{"href":766,"dataGaName":767,"dataGaLocation":650},"/topics/agentic-ai/","agentic ai",{"title":769,"links":770},"Solutions",[771,773,775,780,784,787,791,794,796,799,802,807],{"text":301,"config":772},{"href":296,"dataGaName":301,"dataGaLocation":650},{"text":290,"config":774},{"href":273,"dataGaName":274,"dataGaLocation":650},{"text":776,"config":777},"Agile development",{"href":778,"dataGaName":779,"dataGaLocation":650},"/solutions/agile-delivery/","agile delivery",{"text":781,"config":782},"SCM",{"href":286,"dataGaName":783,"dataGaLocation":650},"source code management",{"text":729,"config":785},{"href":279,"dataGaName":786,"dataGaLocation":650},"continuous integration & delivery",{"text":788,"config":789},"Value stream management",{"href":329,"dataGaName":790,"dataGaLocation":650},"value stream management",{"text":734,"config":792},{"href":793,"dataGaName":737,"dataGaLocation":650},"/solutions/gitops/",{"text":339,"config":795},{"href":342,"dataGaName":343,"dataGaLocation":650},{"text":797,"config":798},"Small business",{"href":348,"dataGaName":349,"dataGaLocation":650},{"text":800,"config":801},"Public sector",{"href":354,"dataGaName":355,"dataGaLocation":650},{"text":803,"config":804},"Education",{"href":805,"dataGaName":806,"dataGaLocation":650},"/solutions/education/","education",{"text":808,"config":809},"Financial services",{"href":810,"dataGaName":811,"dataGaLocation":650},"/solutions/finance/","financial services",{"title":362,"links":813},[814,816,818,820,823,825,828,830,832,834,836,838,840,842],{"text":375,"config":815},{"href":377,"dataGaName":378,"dataGaLocation":650},{"text":380,"config":817},{"href":382,"dataGaName":383,"dataGaLocation":650},{"text":385,"config":819},{"href":387,"dataGaName":388,"dataGaLocation":650},{"text":390,"config":821},{"href":392,"dataGaName":822,"dataGaLocation":650},"docs",{"text":413,"config":824},{"href":415,"dataGaName":416,"dataGaLocation":650},{"text":826,"config":827},"What's new",{"href":472,"dataGaName":473,"dataGaLocation":650},{"text":408,"config":829},{"href":410,"dataGaName":411,"dataGaLocation":650},{"text":427,"config":831},{"href":27,"dataGaName":429,"dataGaLocation":650},{"text":434,"config":833},{"href":436,"dataGaName":437,"dataGaLocation":650},{"text":439,"config":835},{"href":441,"dataGaName":442,"dataGaLocation":650},{"text":444,"config":837},{"href":446,"dataGaName":447,"dataGaLocation":650},{"text":449,"config":839},{"href":451,"dataGaName":452,"dataGaLocation":650},{"text":454,"config":841},{"href":456,"dataGaName":457,"dataGaLocation":650},{"text":459,"config":843},{"href":461,"dataGaName":462,"dataGaLocation":650},{"title":475,"links":845},[846,848,850,852,854,856,860,865,867,869,871],{"text":483,"config":847},{"href":485,"dataGaName":477,"dataGaLocation":650},{"text":488,"config":849},{"href":490,"dataGaName":491,"dataGaLocation":650},{"text":496,"config":851},{"href":498,"dataGaName":499,"dataGaLocation":650},{"text":501,"config":853},{"href":503,"dataGaName":504,"dataGaLocation":650},{"text":506,"config":855},{"href":508,"dataGaName":509,"dataGaLocation":650},{"text":857,"config":858},"Sustainability",{"href":859,"dataGaName":857,"dataGaLocation":650},"/sustainability/",{"text":861,"config":862},"Diversity, inclusion and belonging (DIB)",{"href":863,"dataGaName":864,"dataGaLocation":650},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":511,"config":866},{"href":513,"dataGaName":514,"dataGaLocation":650},{"text":521,"config":868},{"href":523,"dataGaName":524,"dataGaLocation":650},{"text":526,"config":870},{"href":528,"dataGaName":529,"dataGaLocation":650},{"text":872,"config":873},"Modern Slavery Transparency Statement",{"href":874,"dataGaName":875,"dataGaLocation":650},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":877},[878,881,884],{"text":879,"config":880},"Terms",{"href":702,"dataGaName":703,"dataGaLocation":650},{"text":882,"config":883},"Cookies",{"dataGaName":712,"dataGaLocation":650,"id":713,"isOneTrustButton":192},{"text":885,"config":886},"Privacy",{"href":707,"dataGaName":708,"dataGaLocation":650},[888],{"id":889,"title":7,"body":181,"config":890,"content":892,"description":181,"extension":896,"meta":897,"navigation":192,"path":898,"seo":899,"stem":900,"__hash__":901},"blogAuthors/en-us/blog/authors/john-jarvis.yml",{"template":891},"BlogAuthor",{"name":7,"config":893},{"headshot":894,"ctfId":895},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749678622/Blog/Author%20Headshots/jarv-headshot.jpg","jarv","yml",{},"/en-us/blog/authors/john-jarvis",{},"en-us/blog/authors/john-jarvis","VWpIs3Q1XFVS2133bt3YMUb_e7ezj1Rf6P2P1JogPvI",[903,912,920],{"title":904,"description":905,"heroImage":906,"category":177,"date":907,"authors":908,"slug":911,"externalUrl":181},"Confidential AI for GitLab Self-Hosted","Give developers AI coding agents in GitLab Duo without source code leaving a hardware-encrypted boundary — no GPUs needed.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1773866173/vte9qh8rriznvyclhkes.png","2026-08-06",[909,910],"Mathias Ewald","Martin Paloncy, Edgeless Systems","confidential-ai-for-gitlab-self-hosted",{"title":913,"description":914,"heroImage":915,"category":177,"date":916,"authors":917,"slug":919,"externalUrl":181},"Green DevOps: Why carbon measurement belongs in your CI/CD pipeline","CI/CD pipelines have a hidden carbon cost. Here's why measuring it matters, and how you can get started with Eco CI and Carmen in GitLab.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1765809212/noh0mdfn9o94ry9ykura.png","2026-07-09",[918],"Lysanne Pinto","green-devops-carbon-measurement-cicd-pipeline",{"title":921,"description":922,"heroImage":923,"category":177,"date":924,"authors":925,"slug":927,"externalUrl":181},"How to build CI/CD observability at scale","This practical guide to GitLab pipeline analytics helps self-managed users gain operational insights using Prometheus and Grafana.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1774465167/n5hlvrsrheadeccyr1oz.png","2026-04-28",[926],"Paul Meresanu","how-to-build-ci-cd-observability-at-scale",{"promotions":929},[930,944,956,968],{"id":931,"categories":932,"header":934,"text":935,"button":936,"image":941},"ai-modernization",[933],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":937,"config":938},"Get your AI maturity score",{"href":939,"dataGaName":940,"dataGaLocation":416},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":942},{"src":943},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":945,"categories":946,"header":948,"text":935,"button":949,"image":953},"devops-modernization",[947,752],"product","Are you just managing tools or shipping innovation?",{"text":950,"config":951},"Get your DevOps maturity score",{"href":952,"dataGaName":940,"dataGaLocation":416},"/assessments/devops-modernization-assessment/",{"config":954},{"src":955},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":957,"categories":958,"header":960,"text":935,"button":961,"image":965},"security-modernization",[959],"security","Are you trading speed for security?",{"text":962,"config":963},"Get your security maturity score",{"href":964,"dataGaName":940,"dataGaLocation":416},"/assessments/security-modernization-assessment/",{"config":966},{"src":967},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":969,"paths":970,"header":973,"text":974,"button":975,"image":980},"github-azure-migration",[971,972],"migration-from-azure-devops-to-gitlab","integrating-azure-devops-scm-and-gitlab","Is your team ready for GitHub's Azure move?","GitHub is already rebuilding around Azure. Find out what it means for you.",{"text":976,"config":977},"See how GitLab compares to GitHub",{"href":978,"dataGaName":979,"dataGaLocation":416},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":981},{"src":955},{"header":983,"blurb":984,"button":985,"secondaryButton":990},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":986,"config":987},"Get your free trial",{"href":988,"dataGaName":215,"dataGaLocation":989},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":688,"config":991},{"href":540,"dataGaName":220,"dataGaLocation":989},1786803775624]