[{"data":1,"prerenderedAt":1074},["ShallowReactive",2],{"/blog/introducing-auto-breakfast-from-gitlab":3,"navigation-en-us":287,"banner-en-us":714,"footer-en-us":724,"blog-post-authors-en-us-Brendan O'Leary":969,"blog-related-posts-en-us-introducing-auto-breakfast-from-gitlab":984,"blog-promotions-en-us":1010,"next-steps-en-us":1064},{"id":4,"title":5,"authors":6,"body":8,"category":266,"date":267,"description":268,"extension":269,"externalUrl":270,"faq":270,"featured":271,"heroImage":272,"meta":273,"navigation":274,"path":275,"seo":276,"slug":280,"stem":281,"tags":282,"template":285,"updatedDate":270,"__hash__":286},"blogPosts/en-us/blog/introducing-auto-breakfast-from-gitlab.md","Introducing Auto Breakfast from GitLab (sort of)",[7],"Brendan O'Leary",{"type":9,"value":10,"toc":255},"minimark",[11,39,57,63,66,73,85,90,93,108,111,127,131,149,153,156,162,171,176,209,215,222,228,232,239,242],[12,13,14,15,21,22,27,28,33,34,38],"p",{},"A big part of ",[16,17,20],"a",{"href":18,"rel":19},"https://handbook.gitlab.com/handbook/company/culture/",[],"GitLab's culture"," is ",[16,23,26],{"href":24,"rel":25},"https://handbook.gitlab.com/handbook/communication/#say-thanks",[],"saying thanks"," to one another for doing a great job. That can be anything from helping with a tough technical problem to simply sharing a nice ",[16,29,32],{"href":30,"rel":31},"https://handbook.gitlab.com/handbook/company/culture/all-remote/#coffee-chats",[],"coffee chat"," to break up the work day. One day a Sales team member thanked someone from Customer Success for a great demo of ",[16,35,37],{"href":36},"/solutions/continuous-integration/","GitLab CI/CD",". The customer commented afterwards, \"Okay, what doesn't GitLab do?\"",[12,40,41,42,46,47,51,52,56],{},"Plenty of heart-themed emoji reactions followed. We've seen users do some pretty amazing things with GitLab CI/CD, from ",[16,43,45],{"href":44},"/blog/continuous-integration-ticketmaster/","ramping up to weekly mobile releases"," to ",[16,48,50],{"href":49},"/blog/automating-boring-git-operations-gitlab-ci/","automating boring Git operations",", to ",[16,53,55],{"href":54},"/blog/autoscale-ci-runners/","saving 90 percent on EC2 costs",". However, there was one thing we hadn't seen. So in addition to this love, the question also garnered a semi-sarcastic answer:",[58,59,60],"blockquote",{},[12,61,62],{},"It won't make breakfast for you, unfortunately.",[12,64,65],{},"Never one to let a Slack conversation go unnoticed, I replied with one of my favorite phrases:",[12,67,68],{},[69,70],"img",{"alt":71,"src":72},"Challenge Accepted","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398018/blog/Content%20Images/breakfast-challenge.png",[12,74,75,76,84],{},"I have to admit that the fact that my status was ",[16,77,80],{"href":78,"rel":79},"https://github.com/jmhobbs/cultofthepartyparrot.com/issues/55",[],[81,82,83],"code",{},":coffee_parrot:"," could have been related to my enthusiastic reply...",[86,87,89],"h2",{"id":88},"the-challenge","The challenge",[12,91,92],{},"At the time I had only a vague idea of how I would accomplish this. Many suggestions about Internet of Things devices followed my comment. And while a toaster with a version of Linux that will never be patched was intriguing, I wanted to do something bigger.",[12,94,95,96,101,102,107],{},"A few years ago some friends got together and bought me an ",[16,97,100],{"href":98,"rel":99},"https://anovaculinary.com/",[],"Anova Sous Vide",", knowing that I loved to cook. What they failed to calculate was that having four kids in eight years was counterproductive to learning the time-tested ",[16,103,106],{"href":104,"rel":105},"https://en.wikipedia.org/wiki/Sous-vide",[],"French cooking method of sous-vide",". As such, the tool has not had a whole lot of use in its time.",[12,109,110],{},"However, at this point I thought of two things:",[112,113,114,118],"ol",{},[115,116,117],"li",{},"I love a new sous-vide egg bite offering from a well-known coffee shop",[115,119,120,121,126],{},"The Anova Sous Vide uses ",[16,122,125],{"href":123,"rel":124},"https://en.wikipedia.org/wiki/Bluetooth_Low_Energy",[],"bluetooth low energy (BLE)"," to allow you to control it through an app",[86,128,130],{"id":129},"the-recipe-culinary","The recipe (culinary)",[12,132,133,134,138,139,142,143,148],{},"While I did like the egg bites from a coffee shop that shall remain nameless, I don't have them all the time. I would give them a 5- ",[135,136,137],"em",{},"star"," rating, but they cost a few more ",[135,140,141],{},"bucks"," then I’d like to spend 😉 So I found a ",[16,144,147],{"href":145,"rel":146},"https://recipes.anovaculinary.com/recipe/sous-vide-egg-bites-bacon-gruyere",[],"sous-vide egg bite recipe"," on Anova's website.",[86,150,152],{"id":151},"the-recipe-technology","The recipe (technology)",[12,154,155],{},"Once I had the recipe, all I needed was to reverse engineer the BLE connection, figure out how to get that to work from the command line, set up a project and get it integrated with GitLab CI/CD... no big deal. Luckily I found a fantastic project called PyCirculate that had already worked out a lot of the BLE connection issues with the Anova. It made me wonder if someone else had automated breakfast before... but I've yet to find them!",[12,157,158],{},[69,159],{"alt":160,"src":161},"Ingredients...Pinterest picture","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398018/blog/Content%20Images/breakfast-pintrest.png",[12,163,164,165,170],{},"Now that I had both recipes and all the ingredients, it was time to ",[135,166,167],{},[135,168,169],{},"git"," crackin'... (I can't tell you how happy I was when I thought of that joke. Did I mention I'm a dad?)",[172,173,175],"h3",{"id":174},"setting-up-the-breakfast-pipeline","Setting up the breakfast pipeline",[12,177,178,179,184,185,190,191,196,197,202,203,208],{},"Once I had that project installed and working on my laptop, I uploaded the code to GitLab in the public repository in the ",[16,180,183],{"href":181,"rel":182},"https://gitlab.com/auto-breakfast/eggs/",[],"auto-breakfast group",". Next, I installed ",[16,186,189],{"href":187,"rel":188},"https://docs.gitlab.com/runner/",[],"GitLab Runner"," on a ",[16,192,195],{"href":193,"rel":194},"https://www.raspberrypi.org/",[],"RaspberryPi",". I registered the Pi as a ",[16,198,201],{"href":199,"rel":200},"https://docs.gitlab.com/runner/register/",[],"specific runner"," for my project. I used a ",[16,204,207],{"href":205,"rel":206},"https://docs.gitlab.com/ci/runners/configure_runners/#use-tags-to-control-which-jobs-a-runner-can-run",[],"runner tag"," so that I could ensure the cooking job only ran on a device with a Bluetooth connection.",[12,210,211],{},[69,212],{"alt":213,"src":214},"Specific runner","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398018/blog/Content%20Images/breakfast-runner.png",[12,216,217,218,221],{},"When I run a pipeline on ",[81,219,220],{},"auto-breakfast/eggs"," it uses the RaspberryPi to execute and thus can create the BLE connection to the Anova. With the click of a button in GitLab, my breakfast pipeline was running. All I had to do was sit back, relax, and let GitLab CI/CD do all the work.",[12,223,224],{},[69,225],{"alt":226,"src":227},"Auto Breakfast pipeline","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782397999/blog/Content%20Images/breakfast-1.jpg",[86,229,231],{"id":230},"the-results","The results",[12,233,234,235,238],{},"The egg bites were great! I even modified the recipe with some great Kerrygold Irish whiskey cheddar cheese. However, I would say that it did take a little more effort to get things set up. However, now that it's done, I have a repeatable, single-button way to cook the recipe again (minus the egg cracking and food processing). Just like CI/CD with a ",[81,236,237],{},".gitlab-ci.yml"," can help make software build and deployment more reliable and repeatable, it can also make a fantastic breakfast 😎",[12,240,241],{},"Not pictured: A very messy kitchen and a very perplexed wife.",[12,243,244,249,250],{},[16,245,248],{"href":246,"rel":247},"https://unsplash.com/photos/I-ykyShydj0?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText",[],"Photo"," by Leti Kugler on ",[16,251,254],{"href":252,"rel":253},"https://unsplash.com/?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText",[],"Unsplash",{"title":256,"searchDepth":257,"depth":257,"links":258},"",2,[259,260,261,265],{"id":88,"depth":257,"text":89},{"id":129,"depth":257,"text":130},{"id":151,"depth":257,"text":152,"children":262},[263],{"id":174,"depth":264,"text":175},3,{"id":230,"depth":257,"text":231},"engineering","2018-06-29","GitLab can't make you breakfast? This is what happens when you tell a GitLab team member whose favorite catchphrase is \"Challenge accepted.\"","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749680054/Blog/Hero%20Images/auto-breakfast.jpg",{},true,"/en-us/blog/introducing-auto-breakfast-from-gitlab",{"title":5,"description":268,"ogTitle":5,"ogDescription":268,"noIndex":271,"ogImage":272,"ogUrl":277,"ogSiteName":278,"ogType":279,"canonicalUrls":277},"https://about.gitlab.com/blog/introducing-auto-breakfast-from-gitlab","https://about.gitlab.com","article","introducing-auto-breakfast-from-gitlab","en-us/blog/introducing-auto-breakfast-from-gitlab",[283,284],"CI","user stories","BlogPost","wlCd5-P67Gwv1S11RLSs0UJ1XIuJwC7ke9RNzeHNSBw",{"logo":288,"freeTrial":293,"sales":298,"login":303,"items":308,"search":634,"minimal":665,"duo":684,"switchNav":693,"pricingDeployment":704},{"config":289},{"href":290,"dataGaName":291,"dataGaLocation":292},"/","gitlab logo","header",{"text":294,"config":295},"Get free trial",{"href":296,"dataGaName":297,"dataGaLocation":292},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":299,"config":300},"Request a demo",{"href":301,"dataGaName":302,"dataGaLocation":292},"/sales/?contact-topic=request-demo","sales",{"text":304,"config":305},"Sign in",{"href":306,"dataGaName":307,"dataGaLocation":292},"https://gitlab.com/users/sign_in/","sign in",[309,338,437,442,556,612],{"text":310,"config":311,"menu":313},"Platform",{"dataNavLevelOne":312},"platform",{"type":314,"columns":315},"cards",[316,322,330],{"title":310,"description":317,"link":318},"The intelligent orchestration platform for DevSecOps",{"text":319,"config":320},"Explore our Platform",{"href":321,"dataGaName":312,"dataGaLocation":292},"/platform/",{"title":323,"description":324,"link":325},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":326,"config":327},"Meet GitLab Duo",{"href":328,"dataGaName":329,"dataGaLocation":292},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":331,"description":332,"link":333},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":334,"config":335},"Learn more",{"href":336,"dataGaName":337,"dataGaLocation":292},"/why-gitlab/","why gitlab",{"text":339,"left":274,"config":340,"menu":342},"Product",{"dataNavLevelOne":341},"solutions",{"type":343,"link":344,"columns":348,"feature":416},"lists",{"text":345,"config":346},"View all Solutions",{"href":347,"dataGaName":341,"dataGaLocation":292},"/solutions/",[349,372,395],{"title":350,"description":351,"link":352,"items":357},"Automation","CI/CD and automation to accelerate deployment",{"config":353},{"icon":354,"href":355,"dataGaName":356,"dataGaLocation":292},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[358,361,364,368],{"text":359,"config":360},"CI/CD",{"href":36,"dataGaLocation":292,"dataGaName":359},{"text":323,"config":362},{"href":328,"dataGaLocation":292,"dataGaName":363},"gitlab duo agent platform - product menu",{"text":365,"config":366},"Source Code Management",{"href":367,"dataGaLocation":292,"dataGaName":365},"/solutions/source-code-management/",{"text":369,"config":370},"Automated Software Delivery",{"href":355,"dataGaLocation":292,"dataGaName":371},"Automated software delivery",{"title":373,"description":374,"link":375,"items":380},"Security","Deliver code faster without compromising security",{"config":376},{"href":377,"dataGaName":378,"dataGaLocation":292,"icon":379},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[381,385,390],{"text":382,"config":383},"Application Security Testing",{"href":377,"dataGaName":384,"dataGaLocation":292},"Application security testing",{"text":386,"config":387},"Software Supply Chain Security",{"href":388,"dataGaLocation":292,"dataGaName":389},"/solutions/supply-chain/","Software supply chain security",{"text":391,"config":392},"Software Compliance",{"href":393,"dataGaName":394,"dataGaLocation":292},"/solutions/software-compliance/","software compliance",{"title":396,"link":397,"items":402},"Measurement",{"config":398},{"icon":399,"href":400,"dataGaName":401,"dataGaLocation":292},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[403,407,411],{"text":404,"config":405},"Visibility & Measurement",{"href":400,"dataGaLocation":292,"dataGaName":406},"Visibility and Measurement",{"text":408,"config":409},"Value Stream Management",{"href":410,"dataGaLocation":292,"dataGaName":408},"/solutions/value-stream-management/",{"text":412,"config":413},"Analytics & Insights",{"href":414,"dataGaLocation":292,"dataGaName":415},"/solutions/analytics-and-insights/","Analytics and insights",{"title":417,"type":343,"items":418},"GitLab for",[419,425,431],{"text":420,"config":421},"Enterprise",{"icon":422,"href":423,"dataGaLocation":292,"dataGaName":424},"Building","/enterprise/","enterprise",{"text":426,"config":427},"Small Business",{"icon":428,"href":429,"dataGaLocation":292,"dataGaName":430},"Work","/small-business/","small business",{"text":432,"config":433},"Public Sector",{"icon":434,"href":435,"dataGaLocation":292,"dataGaName":436},"Organization","/solutions/public-sector/","public sector",{"text":438,"config":439},"Pricing",{"href":440,"dataGaName":441,"dataGaLocation":292,"dataNavLevelOne":441},"/pricing/","pricing",{"text":443,"config":444,"menu":446},"Resources",{"dataNavLevelOne":445},"resources",{"type":343,"link":447,"columns":451,"feature":545},{"text":448,"config":449},"View all resources",{"href":450,"dataGaName":445,"dataGaLocation":292},"/resources/",[452,485,512],{"title":453,"items":454},"Getting started",[455,460,465,470,475,480],{"text":456,"config":457},"Install",{"href":458,"dataGaName":459,"dataGaLocation":292},"/install/","install",{"text":461,"config":462},"Quick start guides",{"href":463,"dataGaName":464,"dataGaLocation":292},"/get-started/","quick setup checklists",{"text":466,"config":467},"Learn",{"href":468,"dataGaLocation":292,"dataGaName":469},"https://university.gitlab.com/","learn",{"text":471,"config":472},"Product documentation",{"href":473,"dataGaName":474,"dataGaLocation":292},"https://docs.gitlab.com/","product documentation",{"text":476,"config":477},"Best practice videos",{"href":478,"dataGaName":479,"dataGaLocation":292},"/getting-started-videos/","best practice videos",{"text":481,"config":482},"Integrations",{"href":483,"dataGaName":484,"dataGaLocation":292},"/integrations/","integrations",{"title":486,"items":487},"Discover",[488,493,498,503,507],{"text":489,"config":490},"Customer success stories",{"href":491,"dataGaName":492,"dataGaLocation":292},"/customers/","customer success stories",{"text":494,"config":495},"Blog",{"href":496,"dataGaName":497,"dataGaLocation":292},"/blog/","blog",{"text":499,"config":500},"Demo Hub",{"href":501,"dataGaName":502,"dataGaLocation":292},"/demo-hub/","demo hub",{"text":504,"config":505},"The Source",{"href":506,"dataGaName":497,"dataGaLocation":292},"/the-source/",{"text":508,"config":509},"Remote",{"href":510,"dataGaName":511,"dataGaLocation":292},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":513,"items":514},"Connect",[515,520,525,530,535,540],{"text":516,"config":517},"GitLab Services",{"href":518,"dataGaName":519,"dataGaLocation":292},"/services/","services",{"text":521,"config":522},"Contribute",{"href":523,"dataGaName":524,"dataGaLocation":292},"https://contributors.gitlab.com","contribute",{"text":526,"config":527},"Community",{"href":528,"dataGaName":529,"dataGaLocation":292},"/community/","community",{"text":531,"config":532},"Forum",{"href":533,"dataGaName":534,"dataGaLocation":292},"https://forum.gitlab.com/","forum",{"text":536,"config":537},"Events",{"href":538,"dataGaName":539,"dataGaLocation":292},"/events/","events",{"text":541,"config":542},"Partners",{"href":543,"dataGaName":544,"dataGaLocation":292},"/partners/","partners",{"config":546,"title":549,"text":550,"link":551},{"background":547,"textColor":548},"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":552,"config":553},"Read the latest",{"href":554,"dataGaName":555,"dataGaLocation":292},"/whats-new/","whats new",{"text":557,"config":558,"menu":560},"Company",{"dataNavLevelOne":559},"company",{"type":343,"columns":561},[562],{"items":563},[564,569,575,577,582,587,592,597,602,607],{"text":565,"config":566},"About",{"href":567,"dataGaName":568,"dataGaLocation":292},"/company/","about",{"text":570,"config":571,"footerGa":574},"Jobs",{"href":572,"dataGaName":573,"dataGaLocation":292},"/jobs/","jobs",{"dataGaName":573},{"text":536,"config":576},{"href":538,"dataGaName":539,"dataGaLocation":292},{"text":578,"config":579},"Leadership",{"href":580,"dataGaName":581,"dataGaLocation":292},"/company/team/e-group/","leadership",{"text":583,"config":584},"Handbook",{"href":585,"dataGaName":586,"dataGaLocation":292},"https://handbook.gitlab.com/","handbook",{"text":588,"config":589},"Investor relations",{"href":590,"dataGaName":591,"dataGaLocation":292},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":593,"config":594},"Trust Center",{"href":595,"dataGaName":596,"dataGaLocation":292},"/security/","trust center",{"text":598,"config":599},"AI Transparency Center",{"href":600,"dataGaName":601,"dataGaLocation":292},"/ai-transparency-center/","ai transparency center",{"text":603,"config":604},"Newsletter",{"href":605,"dataGaName":606,"dataGaLocation":292},"/company/contact/#contact-forms","newsletter",{"text":608,"config":609},"Press",{"href":610,"dataGaName":611,"dataGaLocation":292},"/press/","press",{"text":613,"config":614,"menu":615},"Contact us",{"dataNavLevelOne":559},{"type":343,"columns":616},[617],{"items":618},[619,624,629],{"text":620,"config":621},"Talk to sales",{"href":622,"dataGaName":623,"dataGaLocation":292},"/sales/","talk to sales",{"text":625,"config":626},"Support portal",{"href":627,"dataGaName":628,"dataGaLocation":292},"https://support.gitlab.com/hc/en-us","support portal",{"text":630,"config":631},"Customer portal",{"href":632,"dataGaName":633,"dataGaLocation":292},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":635,"login":636,"suggestions":643},"Close",{"text":637,"link":638},"To search repositories and projects, login to",{"text":639,"config":640},"gitlab.com",{"href":306,"dataGaName":641,"dataGaLocation":642},"search login","search",{"text":644,"default":645},"Suggestions",[646,648,652,654,658,662],{"text":323,"config":647},{"href":328,"dataGaName":323,"dataGaLocation":642},{"text":649,"config":650},"Code Suggestions (AI)",{"href":651,"dataGaName":649,"dataGaLocation":642},"/solutions/code-suggestions/",{"text":359,"config":653},{"href":36,"dataGaName":359,"dataGaLocation":642},{"text":655,"config":656},"GitLab on AWS",{"href":657,"dataGaName":655,"dataGaLocation":642},"/partners/technology-partners/aws/",{"text":659,"config":660},"GitLab on Google Cloud",{"href":661,"dataGaName":659,"dataGaLocation":642},"/partners/technology-partners/google-cloud-platform/",{"text":663,"config":664},"Why GitLab?",{"href":336,"dataGaName":663,"dataGaLocation":642},{"freeTrial":666,"mobileIcon":671,"desktopIcon":676,"secondaryButton":679},{"text":667,"config":668},"Start free trial",{"href":669,"dataGaName":297,"dataGaLocation":670},"https://gitlab.com/-/trials/new/","nav",{"altText":672,"config":673},"Gitlab Icon",{"src":674,"dataGaName":675,"dataGaLocation":670},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":672,"config":677},{"src":678,"dataGaName":675,"dataGaLocation":670},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":680,"config":681},"Get Started",{"href":682,"dataGaName":683,"dataGaLocation":670},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":685,"mobileIcon":689,"desktopIcon":691},{"text":686,"config":687},"Learn more about GitLab Duo",{"href":328,"dataGaName":688,"dataGaLocation":670},"gitlab duo",{"altText":672,"config":690},{"src":674,"dataGaName":675,"dataGaLocation":670},{"altText":672,"config":692},{"src":678,"dataGaName":675,"dataGaLocation":670},{"button":694,"mobileIcon":699,"desktopIcon":701},{"text":695,"config":696},"/switch",{"href":697,"dataGaName":698,"dataGaLocation":670},"#contact","switch",{"altText":672,"config":700},{"src":674,"dataGaName":675,"dataGaLocation":670},{"altText":672,"config":702},{"src":703,"dataGaName":675,"dataGaLocation":670},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":705,"mobileIcon":710,"desktopIcon":712},{"text":706,"config":707},"Back to pricing",{"href":440,"dataGaName":708,"dataGaLocation":670,"icon":709},"back to pricing","GoBack",{"altText":672,"config":711},{"src":674,"dataGaName":675,"dataGaLocation":670},{"altText":672,"config":713},{"src":678,"dataGaName":675,"dataGaLocation":670},{"title":715,"titleMobile":716,"button":717,"config":722},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":334,"config":718},{"href":719,"dataGaName":720,"dataGaLocation":721},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":723,"disabled":271},"release",{"data":725},{"text":726,"source":727,"edit":733,"contribute":738,"config":743,"items":748,"minimal":958},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":728,"config":729},"View page source",{"href":730,"dataGaName":731,"dataGaLocation":732},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":734,"config":735},"Edit this page",{"href":736,"dataGaName":737,"dataGaLocation":732},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":739,"config":740},"Please contribute",{"href":741,"dataGaName":742,"dataGaLocation":732},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":744,"facebook":745,"youtube":746,"linkedin":747},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[749,796,850,894,926],{"title":438,"links":750,"subMenu":765},[751,755,760],{"text":752,"config":753},"View plans",{"href":440,"dataGaName":754,"dataGaLocation":732},"view plans",{"text":756,"config":757},"Why Premium?",{"href":758,"dataGaName":759,"dataGaLocation":732},"/pricing/premium/","why premium",{"text":761,"config":762},"Why Ultimate?",{"href":763,"dataGaName":764,"dataGaLocation":732},"/pricing/ultimate/","why ultimate",[766],{"title":767,"links":768},"Contact Us",[769,772,774,776,781,786,791],{"text":770,"config":771},"Contact sales",{"href":622,"dataGaName":302,"dataGaLocation":732},{"text":625,"config":773},{"href":627,"dataGaName":628,"dataGaLocation":732},{"text":630,"config":775},{"href":632,"dataGaName":633,"dataGaLocation":732},{"text":777,"config":778},"Status",{"href":779,"dataGaName":780,"dataGaLocation":732},"https://status.gitlab.com/","status",{"text":782,"config":783},"Terms of use",{"href":784,"dataGaName":785,"dataGaLocation":732},"/terms/","terms of use",{"text":787,"config":788},"Privacy statement",{"href":789,"dataGaName":790,"dataGaLocation":732},"/privacy/","privacy statement",{"text":792,"config":793},"Cookie preferences",{"dataGaName":794,"dataGaLocation":732,"id":795,"isOneTrustButton":274},"cookie preferences","ot-sdk-btn",{"title":339,"links":797,"subMenu":806},[798,802],{"text":799,"config":800},"DevSecOps platform",{"href":321,"dataGaName":801,"dataGaLocation":732},"devsecops platform",{"text":803,"config":804},"AI-Assisted Development",{"href":328,"dataGaName":805,"dataGaLocation":732},"ai-assisted development",[807],{"title":808,"links":809},"Topics",[810,815,820,825,830,835,840,845],{"text":811,"config":812},"CICD",{"href":813,"dataGaName":814,"dataGaLocation":732},"/topics/ci-cd/","cicd",{"text":816,"config":817},"GitOps",{"href":818,"dataGaName":819,"dataGaLocation":732},"/topics/gitops/","gitops",{"text":821,"config":822},"DevOps",{"href":823,"dataGaName":824,"dataGaLocation":732},"/topics/devops/","devops",{"text":826,"config":827},"Version Control",{"href":828,"dataGaName":829,"dataGaLocation":732},"/topics/version-control/","version control",{"text":831,"config":832},"DevSecOps",{"href":833,"dataGaName":834,"dataGaLocation":732},"/topics/devsecops/","devsecops",{"text":836,"config":837},"Cloud Native",{"href":838,"dataGaName":839,"dataGaLocation":732},"/topics/cloud-native/","cloud native",{"text":841,"config":842},"AI for Coding",{"href":843,"dataGaName":844,"dataGaLocation":732},"/topics/devops/ai-for-coding/","ai for coding",{"text":846,"config":847},"Agentic AI",{"href":848,"dataGaName":849,"dataGaLocation":732},"/topics/agentic-ai/","agentic ai",{"title":851,"links":852},"Solutions",[853,855,857,862,866,869,873,876,878,881,884,889],{"text":382,"config":854},{"href":377,"dataGaName":382,"dataGaLocation":732},{"text":371,"config":856},{"href":355,"dataGaName":356,"dataGaLocation":732},{"text":858,"config":859},"Agile development",{"href":860,"dataGaName":861,"dataGaLocation":732},"/solutions/agile-delivery/","agile delivery",{"text":863,"config":864},"SCM",{"href":367,"dataGaName":865,"dataGaLocation":732},"source code management",{"text":811,"config":867},{"href":36,"dataGaName":868,"dataGaLocation":732},"continuous integration & delivery",{"text":870,"config":871},"Value stream management",{"href":410,"dataGaName":872,"dataGaLocation":732},"value stream management",{"text":816,"config":874},{"href":875,"dataGaName":819,"dataGaLocation":732},"/solutions/gitops/",{"text":420,"config":877},{"href":423,"dataGaName":424,"dataGaLocation":732},{"text":879,"config":880},"Small business",{"href":429,"dataGaName":430,"dataGaLocation":732},{"text":882,"config":883},"Public sector",{"href":435,"dataGaName":436,"dataGaLocation":732},{"text":885,"config":886},"Education",{"href":887,"dataGaName":888,"dataGaLocation":732},"/solutions/education/","education",{"text":890,"config":891},"Financial services",{"href":892,"dataGaName":893,"dataGaLocation":732},"/solutions/finance/","financial services",{"title":443,"links":895},[896,898,900,902,905,907,910,912,914,916,918,920,922,924],{"text":456,"config":897},{"href":458,"dataGaName":459,"dataGaLocation":732},{"text":461,"config":899},{"href":463,"dataGaName":464,"dataGaLocation":732},{"text":466,"config":901},{"href":468,"dataGaName":469,"dataGaLocation":732},{"text":471,"config":903},{"href":473,"dataGaName":904,"dataGaLocation":732},"docs",{"text":494,"config":906},{"href":496,"dataGaName":497,"dataGaLocation":732},{"text":908,"config":909},"What's new",{"href":554,"dataGaName":555,"dataGaLocation":732},{"text":489,"config":911},{"href":491,"dataGaName":492,"dataGaLocation":732},{"text":508,"config":913},{"href":510,"dataGaName":511,"dataGaLocation":732},{"text":516,"config":915},{"href":518,"dataGaName":519,"dataGaLocation":732},{"text":521,"config":917},{"href":523,"dataGaName":524,"dataGaLocation":732},{"text":526,"config":919},{"href":528,"dataGaName":529,"dataGaLocation":732},{"text":531,"config":921},{"href":533,"dataGaName":534,"dataGaLocation":732},{"text":536,"config":923},{"href":538,"dataGaName":539,"dataGaLocation":732},{"text":541,"config":925},{"href":543,"dataGaName":544,"dataGaLocation":732},{"title":557,"links":927},[928,930,932,934,936,938,942,947,949,951,953],{"text":565,"config":929},{"href":567,"dataGaName":559,"dataGaLocation":732},{"text":570,"config":931},{"href":572,"dataGaName":573,"dataGaLocation":732},{"text":578,"config":933},{"href":580,"dataGaName":581,"dataGaLocation":732},{"text":583,"config":935},{"href":585,"dataGaName":586,"dataGaLocation":732},{"text":588,"config":937},{"href":590,"dataGaName":591,"dataGaLocation":732},{"text":939,"config":940},"Sustainability",{"href":941,"dataGaName":939,"dataGaLocation":732},"/sustainability/",{"text":943,"config":944},"Diversity, inclusion and belonging (DIB)",{"href":945,"dataGaName":946,"dataGaLocation":732},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":593,"config":948},{"href":595,"dataGaName":596,"dataGaLocation":732},{"text":603,"config":950},{"href":605,"dataGaName":606,"dataGaLocation":732},{"text":608,"config":952},{"href":610,"dataGaName":611,"dataGaLocation":732},{"text":954,"config":955},"Modern Slavery Transparency Statement",{"href":956,"dataGaName":957,"dataGaLocation":732},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":959},[960,963,966],{"text":961,"config":962},"Terms",{"href":784,"dataGaName":785,"dataGaLocation":732},{"text":964,"config":965},"Cookies",{"dataGaName":794,"dataGaLocation":732,"id":795,"isOneTrustButton":274},{"text":967,"config":968},"Privacy",{"href":789,"dataGaName":790,"dataGaLocation":732},[970],{"id":971,"title":972,"body":270,"config":973,"content":975,"description":270,"extension":978,"meta":979,"navigation":274,"path":980,"seo":981,"stem":982,"__hash__":983},"blogAuthors/en-us/blog/authors/brendan-oleary.yml","Brendan Oleary",{"template":974},"BlogAuthor",{"name":7,"config":976},{"headshot":256,"ctfId":977},"brendan","yml",{},"/en-us/blog/authors/brendan-oleary",{},"en-us/blog/authors/brendan-oleary","IkXVLft77WlFK-Vgo210ZM3Io_PCcrXnYzkBCzx153k",[985,994,1002],{"title":986,"description":987,"heroImage":988,"category":266,"date":989,"authors":990,"slug":993,"externalUrl":270},"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",[991,992],"Mathias Ewald","Martin Paloncy, Edgeless Systems","confidential-ai-for-gitlab-self-hosted",{"title":995,"description":996,"heroImage":997,"category":266,"date":998,"authors":999,"slug":1001,"externalUrl":270},"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",[1000],"Lysanne Pinto","green-devops-carbon-measurement-cicd-pipeline",{"title":1003,"description":1004,"heroImage":1005,"category":266,"date":1006,"authors":1007,"slug":1009,"externalUrl":270},"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",[1008],"Paul Meresanu","how-to-build-ci-cd-observability-at-scale",{"promotions":1011},[1012,1026,1038,1050],{"id":1013,"categories":1014,"header":1016,"text":1017,"button":1018,"image":1023},"ai-modernization",[1015],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":1019,"config":1020},"Get your AI maturity score",{"href":1021,"dataGaName":1022,"dataGaLocation":497},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":1024},{"src":1025},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":1027,"categories":1028,"header":1030,"text":1017,"button":1031,"image":1035},"devops-modernization",[1029,834],"product","Are you just managing tools or shipping innovation?",{"text":1032,"config":1033},"Get your DevOps maturity score",{"href":1034,"dataGaName":1022,"dataGaLocation":497},"/assessments/devops-modernization-assessment/",{"config":1036},{"src":1037},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":1039,"categories":1040,"header":1042,"text":1017,"button":1043,"image":1047},"security-modernization",[1041],"security","Are you trading speed for security?",{"text":1044,"config":1045},"Get your security maturity score",{"href":1046,"dataGaName":1022,"dataGaLocation":497},"/assessments/security-modernization-assessment/",{"config":1048},{"src":1049},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1051,"paths":1052,"header":1055,"text":1056,"button":1057,"image":1062},"github-azure-migration",[1053,1054],"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":1058,"config":1059},"See how GitLab compares to GitHub",{"href":1060,"dataGaName":1061,"dataGaLocation":497},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1063},{"src":1037},{"header":1065,"blurb":1066,"button":1067,"secondaryButton":1072},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":1068,"config":1069},"Get your free trial",{"href":1070,"dataGaName":297,"dataGaLocation":1071},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":770,"config":1073},{"href":622,"dataGaName":302,"dataGaLocation":1071},1786803752451]