[{"data":1,"prerenderedAt":1015},["ShallowReactive",2],{"/blog/test-all-the-things-gitlab-ci-docker-examples":3,"navigation-en-us":230,"banner-en-us":655,"footer-en-us":665,"blog-post-authors-en-us-Gabriel Le Breton":910,"blog-related-posts-en-us-test-all-the-things-gitlab-ci-docker-examples":925,"blog-promotions-en-us":951,"next-steps-en-us":1005},{"id":4,"title":5,"authors":6,"body":8,"category":200,"date":201,"description":202,"extension":203,"externalUrl":204,"faq":204,"featured":205,"heroImage":206,"meta":207,"navigation":217,"path":218,"seo":219,"slug":223,"stem":224,"tags":225,"template":228,"updatedDate":204,"__hash__":229},"blogPosts/en-us/blog/test-all-the-things-gitlab-ci-docker-examples.md","Test all the things in GitLab CI with Docker by example",[7],"Gabriel Le Breton",{"type":9,"value":10,"toc":191},"minimark",[11,27,39,44,58,63,137,141,144,157,165,175],[12,13,14,15,21,22,26],"p",{},"Do you write tests? Or do you skip them because it’s too complicated to run? Or maybe developers on your team just don’t care? You should take a few minutes and set up CI so you can enforce good practices. Good news, you can test ",[16,17,20],"a",{"href":18,"rel":19},"http://knowyourmeme.com/memes/all-the-things",[],"all the things"," automagically in ",[16,23,25],{"href":24},"/solutions/continuous-integration/","GitLab CI/CD"," with Docker and very little effort 🤘",[12,28,29,30,35,36,38],{},"I recently gave a presentation at the ",[16,31,34],{"href":32,"rel":33},"http://saglac.io/",[],"SagLacIO"," about ",[16,37,25],{"href":24},".",[40,41,43],"h2",{"id":42},"getting-started","Getting started",[12,45,46,47,52,53,57],{},"First, you’ll need an account at ",[16,48,51],{"href":49,"rel":50},"https://gitlab.com/",[],"GitLab.com",". If you don’t already have one, you can open an account with no problem. ",[16,54,56],{"href":55},"/stages-devops-lifecycle/","GitLab’s free tier"," gives you a ton of features, unlimited free hosted repositories, 2,000 CI build minutes per month, etc. You can even use your own task runners in case you bust that limit.",[59,60,62],"h3",{"id":61},"useful-links","Useful links",[64,65,66,72,80,88,96,103,110,117,130],"ul",{},[67,68,69],"li",{},[16,70,51],{"href":49,"rel":71},[],[67,73,74,79],{},[16,75,78],{"href":76,"rel":77},"https://docs.gitlab.com/ci/",[],"GitLab CI/CD documentation"," 📗",[67,81,82,87],{},[16,83,86],{"href":84,"rel":85},"https://docs.gitlab.com/ci/yaml/",[],".gitlab-ci.yml documentation"," 📕",[67,89,90,95],{},[16,91,94],{"href":92,"rel":93},"https://gitlab.com/ci/lint/",[],".gitlab-ci.yml linter: gitlab.com/ci/lint"," ✅",[67,97,98],{},[16,99,102],{"href":100,"rel":101},"https://gitlab.com/gableroux/gitlab-ci-example-nodejs",[],"gitlab-ci nodejs example project",[67,104,105],{},[16,106,109],{"href":107,"rel":108},"https://gitlab.com/gableroux/gitlab-ci-example-docker",[],"gitlab-ci Docker example project",[67,111,112],{},[16,113,116],{"href":114,"rel":115},"https://gitlab.com/gableroux/gitlab-ci-example-django",[],"gitlab-ci django example project",[67,118,119,124,125],{},[16,120,123],{"href":121,"rel":122},"https://gitlab.com/gableroux/unity3d",[],"Unity3D Docker project"," running in gitlab-ci and published to ",[16,126,129],{"href":127,"rel":128},"https://hub.docker.com/r/gableroux/unity3d/",[],"Docker Hub",[67,131,132],{},[16,133,136],{"href":134,"rel":135},"https://stackoverflow.com/questions/45517733/how-to-publish-docker-images-to-docker-hub-from-gitlab-ci",[],"How to publish Docker images to Docker Hub from gitlab-ci on Stack Overflow",[40,138,140],{"id":139},"here-go-the-slides","Here go the slides",[12,142,143],{},"Scroll through the slides from my presentation on GitLab CI/CD at SagLacIO, you’ll have fun 🤘",[145,146,149],"figure",{"className":147},[148],"video_container",[150,151],"iframe",{"src":152,"frameBorder":153,"width":154,"height":155,"allowFullScreen":156,"mozallowfullscreen":156,"webkitallowfullscreen":156},"https://docs.google.com/presentation/d/10835yig54EbR_OQcxSXURkPk_0zkhLxaWHdRdXb-yWw/embed?start=false&loop=false&delayms=3000","0",1280,749,"true",[12,158,159,160,38],{},"If you have suggestions, feel free to poke me or ",[16,161,164],{"href":162,"rel":163},"https://github.com/GabLeRoux/gableroux.github.io/issues",[],"open an issue",[12,166,167],{},[168,169,170,174],"em",{},[16,171,5],{"href":172,"rel":173},"https://gableroux.com/saglacio/2018/01/16/test-all-the-things-in-gitlab-ci-with-docker-by-example/",[]," was originally published on gableroux.com.",[12,176,177],{},[168,178,179,180,185,186],{},"Cover photo by ",[16,181,184],{"href":182,"rel":183},"https://unsplash.com/photos/ahi73ZN5P0Y?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText",[],"Federico Beccari"," on ",[16,187,190],{"href":188,"rel":189},"https://unsplash.com/",[],"Unsplash",{"title":192,"searchDepth":193,"depth":193,"links":194},"",2,[195,199],{"id":42,"depth":193,"text":43,"children":196},[197],{"id":61,"depth":198,"text":62},3,{"id":139,"depth":193,"text":140},"engineering","2018-02-05","Running tests is easier than you think – guest author Gabriel Le Breton shares his presentation about testing everything automatically with GitLab CI/CD.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749680261/Blog/Hero%20Images/test-all-the-things-in-gitlab-ci-with-docker-by-example.jpg",{"excerpt":208},{"type":9,"value":209},[210],[12,211,14,212,21,215,26],{},[16,213,20],{"href":18,"rel":214},[],[16,216,25],{"href":24},true,"/en-us/blog/test-all-the-things-gitlab-ci-docker-examples",{"title":5,"description":202,"ogTitle":5,"ogDescription":202,"noIndex":205,"ogImage":206,"ogUrl":220,"ogSiteName":221,"ogType":222,"canonicalUrls":220},"https://about.gitlab.com/blog/test-all-the-things-gitlab-ci-docker-examples","https://about.gitlab.com","article","test-all-the-things-gitlab-ci-docker-examples","en-us/blog/test-all-the-things-gitlab-ci-docker-examples",[226,227],"user stories","CI/CD","BlogPost","up4X0dHsjOVgbhq1jyoaDc_DtOxIpcsbKZzdcwVe27g",{"logo":231,"freeTrial":236,"sales":241,"login":246,"items":251,"search":575,"minimal":606,"duo":625,"switchNav":634,"pricingDeployment":645},{"config":232},{"href":233,"dataGaName":234,"dataGaLocation":235},"/","gitlab logo","header",{"text":237,"config":238},"Get free trial",{"href":239,"dataGaName":240,"dataGaLocation":235},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":242,"config":243},"Request a demo",{"href":244,"dataGaName":245,"dataGaLocation":235},"/sales/?contact-topic=request-demo","sales",{"text":247,"config":248},"Sign in",{"href":249,"dataGaName":250,"dataGaLocation":235},"https://gitlab.com/users/sign_in/","sign in",[252,281,379,384,497,553],{"text":253,"config":254,"menu":256},"Platform",{"dataNavLevelOne":255},"platform",{"type":257,"columns":258},"cards",[259,265,273],{"title":253,"description":260,"link":261},"The intelligent orchestration platform for DevSecOps",{"text":262,"config":263},"Explore our Platform",{"href":264,"dataGaName":255,"dataGaLocation":235},"/platform/",{"title":266,"description":267,"link":268},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":269,"config":270},"Meet GitLab Duo",{"href":271,"dataGaName":272,"dataGaLocation":235},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":274,"description":275,"link":276},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":277,"config":278},"Learn more",{"href":279,"dataGaName":280,"dataGaLocation":235},"/why-gitlab/","why gitlab",{"text":282,"left":217,"config":283,"menu":285},"Product",{"dataNavLevelOne":284},"solutions",{"type":286,"link":287,"columns":291,"feature":358},"lists",{"text":288,"config":289},"View all Solutions",{"href":290,"dataGaName":284,"dataGaLocation":235},"/solutions/",[292,314,337],{"title":293,"description":294,"link":295,"items":300},"Automation","CI/CD and automation to accelerate deployment",{"config":296},{"icon":297,"href":298,"dataGaName":299,"dataGaLocation":235},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[301,303,306,310],{"text":227,"config":302},{"href":24,"dataGaLocation":235,"dataGaName":227},{"text":266,"config":304},{"href":271,"dataGaLocation":235,"dataGaName":305},"gitlab duo agent platform - product menu",{"text":307,"config":308},"Source Code Management",{"href":309,"dataGaLocation":235,"dataGaName":307},"/solutions/source-code-management/",{"text":311,"config":312},"Automated Software Delivery",{"href":298,"dataGaLocation":235,"dataGaName":313},"Automated software delivery",{"title":315,"description":316,"link":317,"items":322},"Security","Deliver code faster without compromising security",{"config":318},{"href":319,"dataGaName":320,"dataGaLocation":235,"icon":321},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[323,327,332],{"text":324,"config":325},"Application Security Testing",{"href":319,"dataGaName":326,"dataGaLocation":235},"Application security testing",{"text":328,"config":329},"Software Supply Chain Security",{"href":330,"dataGaLocation":235,"dataGaName":331},"/solutions/supply-chain/","Software supply chain security",{"text":333,"config":334},"Software Compliance",{"href":335,"dataGaName":336,"dataGaLocation":235},"/solutions/software-compliance/","software compliance",{"title":338,"link":339,"items":344},"Measurement",{"config":340},{"icon":341,"href":342,"dataGaName":343,"dataGaLocation":235},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[345,349,353],{"text":346,"config":347},"Visibility & Measurement",{"href":342,"dataGaLocation":235,"dataGaName":348},"Visibility and Measurement",{"text":350,"config":351},"Value Stream Management",{"href":352,"dataGaLocation":235,"dataGaName":350},"/solutions/value-stream-management/",{"text":354,"config":355},"Analytics & Insights",{"href":356,"dataGaLocation":235,"dataGaName":357},"/solutions/analytics-and-insights/","Analytics and insights",{"title":359,"type":286,"items":360},"GitLab for",[361,367,373],{"text":362,"config":363},"Enterprise",{"icon":364,"href":365,"dataGaLocation":235,"dataGaName":366},"Building","/enterprise/","enterprise",{"text":368,"config":369},"Small Business",{"icon":370,"href":371,"dataGaLocation":235,"dataGaName":372},"Work","/small-business/","small business",{"text":374,"config":375},"Public Sector",{"icon":376,"href":377,"dataGaLocation":235,"dataGaName":378},"Organization","/solutions/public-sector/","public sector",{"text":380,"config":381},"Pricing",{"href":382,"dataGaName":383,"dataGaLocation":235,"dataNavLevelOne":383},"/pricing/","pricing",{"text":385,"config":386,"menu":388},"Resources",{"dataNavLevelOne":387},"resources",{"type":286,"link":389,"columns":393,"feature":486},{"text":390,"config":391},"View all resources",{"href":392,"dataGaName":387,"dataGaLocation":235},"/resources/",[394,426,453],{"title":43,"items":395},[396,401,406,411,416,421],{"text":397,"config":398},"Install",{"href":399,"dataGaName":400,"dataGaLocation":235},"/install/","install",{"text":402,"config":403},"Quick start guides",{"href":404,"dataGaName":405,"dataGaLocation":235},"/get-started/","quick setup checklists",{"text":407,"config":408},"Learn",{"href":409,"dataGaLocation":235,"dataGaName":410},"https://university.gitlab.com/","learn",{"text":412,"config":413},"Product documentation",{"href":414,"dataGaName":415,"dataGaLocation":235},"https://docs.gitlab.com/","product documentation",{"text":417,"config":418},"Best practice videos",{"href":419,"dataGaName":420,"dataGaLocation":235},"/getting-started-videos/","best practice videos",{"text":422,"config":423},"Integrations",{"href":424,"dataGaName":425,"dataGaLocation":235},"/integrations/","integrations",{"title":427,"items":428},"Discover",[429,434,439,444,448],{"text":430,"config":431},"Customer success stories",{"href":432,"dataGaName":433,"dataGaLocation":235},"/customers/","customer success stories",{"text":435,"config":436},"Blog",{"href":437,"dataGaName":438,"dataGaLocation":235},"/blog/","blog",{"text":440,"config":441},"Demo Hub",{"href":442,"dataGaName":443,"dataGaLocation":235},"/demo-hub/","demo hub",{"text":445,"config":446},"The Source",{"href":447,"dataGaName":438,"dataGaLocation":235},"/the-source/",{"text":449,"config":450},"Remote",{"href":451,"dataGaName":452,"dataGaLocation":235},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":454,"items":455},"Connect",[456,461,466,471,476,481],{"text":457,"config":458},"GitLab Services",{"href":459,"dataGaName":460,"dataGaLocation":235},"/services/","services",{"text":462,"config":463},"Contribute",{"href":464,"dataGaName":465,"dataGaLocation":235},"https://contributors.gitlab.com","contribute",{"text":467,"config":468},"Community",{"href":469,"dataGaName":470,"dataGaLocation":235},"/community/","community",{"text":472,"config":473},"Forum",{"href":474,"dataGaName":475,"dataGaLocation":235},"https://forum.gitlab.com/","forum",{"text":477,"config":478},"Events",{"href":479,"dataGaName":480,"dataGaLocation":235},"/events/","events",{"text":482,"config":483},"Partners",{"href":484,"dataGaName":485,"dataGaLocation":235},"/partners/","partners",{"config":487,"title":490,"text":491,"link":492},{"background":488,"textColor":489},"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":493,"config":494},"Read the latest",{"href":495,"dataGaName":496,"dataGaLocation":235},"/whats-new/","whats new",{"text":498,"config":499,"menu":501},"Company",{"dataNavLevelOne":500},"company",{"type":286,"columns":502},[503],{"items":504},[505,510,516,518,523,528,533,538,543,548],{"text":506,"config":507},"About",{"href":508,"dataGaName":509,"dataGaLocation":235},"/company/","about",{"text":511,"config":512,"footerGa":515},"Jobs",{"href":513,"dataGaName":514,"dataGaLocation":235},"/jobs/","jobs",{"dataGaName":514},{"text":477,"config":517},{"href":479,"dataGaName":480,"dataGaLocation":235},{"text":519,"config":520},"Leadership",{"href":521,"dataGaName":522,"dataGaLocation":235},"/company/team/e-group/","leadership",{"text":524,"config":525},"Handbook",{"href":526,"dataGaName":527,"dataGaLocation":235},"https://handbook.gitlab.com/","handbook",{"text":529,"config":530},"Investor relations",{"href":531,"dataGaName":532,"dataGaLocation":235},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":534,"config":535},"Trust Center",{"href":536,"dataGaName":537,"dataGaLocation":235},"/security/","trust center",{"text":539,"config":540},"AI Transparency Center",{"href":541,"dataGaName":542,"dataGaLocation":235},"/ai-transparency-center/","ai transparency center",{"text":544,"config":545},"Newsletter",{"href":546,"dataGaName":547,"dataGaLocation":235},"/company/contact/#contact-forms","newsletter",{"text":549,"config":550},"Press",{"href":551,"dataGaName":552,"dataGaLocation":235},"/press/","press",{"text":554,"config":555,"menu":556},"Contact us",{"dataNavLevelOne":500},{"type":286,"columns":557},[558],{"items":559},[560,565,570],{"text":561,"config":562},"Talk to sales",{"href":563,"dataGaName":564,"dataGaLocation":235},"/sales/","talk to sales",{"text":566,"config":567},"Support portal",{"href":568,"dataGaName":569,"dataGaLocation":235},"https://support.gitlab.com/hc/en-us","support portal",{"text":571,"config":572},"Customer portal",{"href":573,"dataGaName":574,"dataGaLocation":235},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":576,"login":577,"suggestions":584},"Close",{"text":578,"link":579},"To search repositories and projects, login to",{"text":580,"config":581},"gitlab.com",{"href":249,"dataGaName":582,"dataGaLocation":583},"search login","search",{"text":585,"default":586},"Suggestions",[587,589,593,595,599,603],{"text":266,"config":588},{"href":271,"dataGaName":266,"dataGaLocation":583},{"text":590,"config":591},"Code Suggestions (AI)",{"href":592,"dataGaName":590,"dataGaLocation":583},"/solutions/code-suggestions/",{"text":227,"config":594},{"href":24,"dataGaName":227,"dataGaLocation":583},{"text":596,"config":597},"GitLab on AWS",{"href":598,"dataGaName":596,"dataGaLocation":583},"/partners/technology-partners/aws/",{"text":600,"config":601},"GitLab on Google Cloud",{"href":602,"dataGaName":600,"dataGaLocation":583},"/partners/technology-partners/google-cloud-platform/",{"text":604,"config":605},"Why GitLab?",{"href":279,"dataGaName":604,"dataGaLocation":583},{"freeTrial":607,"mobileIcon":612,"desktopIcon":617,"secondaryButton":620},{"text":608,"config":609},"Start free trial",{"href":610,"dataGaName":240,"dataGaLocation":611},"https://gitlab.com/-/trials/new/","nav",{"altText":613,"config":614},"Gitlab Icon",{"src":615,"dataGaName":616,"dataGaLocation":611},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":613,"config":618},{"src":619,"dataGaName":616,"dataGaLocation":611},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":621,"config":622},"Get Started",{"href":623,"dataGaName":624,"dataGaLocation":611},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":626,"mobileIcon":630,"desktopIcon":632},{"text":627,"config":628},"Learn more about GitLab Duo",{"href":271,"dataGaName":629,"dataGaLocation":611},"gitlab duo",{"altText":613,"config":631},{"src":615,"dataGaName":616,"dataGaLocation":611},{"altText":613,"config":633},{"src":619,"dataGaName":616,"dataGaLocation":611},{"button":635,"mobileIcon":640,"desktopIcon":642},{"text":636,"config":637},"/switch",{"href":638,"dataGaName":639,"dataGaLocation":611},"#contact","switch",{"altText":613,"config":641},{"src":615,"dataGaName":616,"dataGaLocation":611},{"altText":613,"config":643},{"src":644,"dataGaName":616,"dataGaLocation":611},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":646,"mobileIcon":651,"desktopIcon":653},{"text":647,"config":648},"Back to pricing",{"href":382,"dataGaName":649,"dataGaLocation":611,"icon":650},"back to pricing","GoBack",{"altText":613,"config":652},{"src":615,"dataGaName":616,"dataGaLocation":611},{"altText":613,"config":654},{"src":619,"dataGaName":616,"dataGaLocation":611},{"title":656,"titleMobile":657,"button":658,"config":663},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":277,"config":659},{"href":660,"dataGaName":661,"dataGaLocation":662},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":664,"disabled":205},"release",{"data":666},{"text":667,"source":668,"edit":674,"contribute":679,"config":684,"items":689,"minimal":899},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":669,"config":670},"View page source",{"href":671,"dataGaName":672,"dataGaLocation":673},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":675,"config":676},"Edit this page",{"href":677,"dataGaName":678,"dataGaLocation":673},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":680,"config":681},"Please contribute",{"href":682,"dataGaName":683,"dataGaLocation":673},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":685,"facebook":686,"youtube":687,"linkedin":688},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[690,737,791,835,867],{"title":380,"links":691,"subMenu":706},[692,696,701],{"text":693,"config":694},"View plans",{"href":382,"dataGaName":695,"dataGaLocation":673},"view plans",{"text":697,"config":698},"Why Premium?",{"href":699,"dataGaName":700,"dataGaLocation":673},"/pricing/premium/","why premium",{"text":702,"config":703},"Why Ultimate?",{"href":704,"dataGaName":705,"dataGaLocation":673},"/pricing/ultimate/","why ultimate",[707],{"title":708,"links":709},"Contact Us",[710,713,715,717,722,727,732],{"text":711,"config":712},"Contact sales",{"href":563,"dataGaName":245,"dataGaLocation":673},{"text":566,"config":714},{"href":568,"dataGaName":569,"dataGaLocation":673},{"text":571,"config":716},{"href":573,"dataGaName":574,"dataGaLocation":673},{"text":718,"config":719},"Status",{"href":720,"dataGaName":721,"dataGaLocation":673},"https://status.gitlab.com/","status",{"text":723,"config":724},"Terms of use",{"href":725,"dataGaName":726,"dataGaLocation":673},"/terms/","terms of use",{"text":728,"config":729},"Privacy statement",{"href":730,"dataGaName":731,"dataGaLocation":673},"/privacy/","privacy statement",{"text":733,"config":734},"Cookie preferences",{"dataGaName":735,"dataGaLocation":673,"id":736,"isOneTrustButton":217},"cookie preferences","ot-sdk-btn",{"title":282,"links":738,"subMenu":747},[739,743],{"text":740,"config":741},"DevSecOps platform",{"href":264,"dataGaName":742,"dataGaLocation":673},"devsecops platform",{"text":744,"config":745},"AI-Assisted Development",{"href":271,"dataGaName":746,"dataGaLocation":673},"ai-assisted development",[748],{"title":749,"links":750},"Topics",[751,756,761,766,771,776,781,786],{"text":752,"config":753},"CICD",{"href":754,"dataGaName":755,"dataGaLocation":673},"/topics/ci-cd/","cicd",{"text":757,"config":758},"GitOps",{"href":759,"dataGaName":760,"dataGaLocation":673},"/topics/gitops/","gitops",{"text":762,"config":763},"DevOps",{"href":764,"dataGaName":765,"dataGaLocation":673},"/topics/devops/","devops",{"text":767,"config":768},"Version Control",{"href":769,"dataGaName":770,"dataGaLocation":673},"/topics/version-control/","version control",{"text":772,"config":773},"DevSecOps",{"href":774,"dataGaName":775,"dataGaLocation":673},"/topics/devsecops/","devsecops",{"text":777,"config":778},"Cloud Native",{"href":779,"dataGaName":780,"dataGaLocation":673},"/topics/cloud-native/","cloud native",{"text":782,"config":783},"AI for Coding",{"href":784,"dataGaName":785,"dataGaLocation":673},"/topics/devops/ai-for-coding/","ai for coding",{"text":787,"config":788},"Agentic AI",{"href":789,"dataGaName":790,"dataGaLocation":673},"/topics/agentic-ai/","agentic ai",{"title":792,"links":793},"Solutions",[794,796,798,803,807,810,814,817,819,822,825,830],{"text":324,"config":795},{"href":319,"dataGaName":324,"dataGaLocation":673},{"text":313,"config":797},{"href":298,"dataGaName":299,"dataGaLocation":673},{"text":799,"config":800},"Agile development",{"href":801,"dataGaName":802,"dataGaLocation":673},"/solutions/agile-delivery/","agile delivery",{"text":804,"config":805},"SCM",{"href":309,"dataGaName":806,"dataGaLocation":673},"source code management",{"text":752,"config":808},{"href":24,"dataGaName":809,"dataGaLocation":673},"continuous integration & delivery",{"text":811,"config":812},"Value stream management",{"href":352,"dataGaName":813,"dataGaLocation":673},"value stream management",{"text":757,"config":815},{"href":816,"dataGaName":760,"dataGaLocation":673},"/solutions/gitops/",{"text":362,"config":818},{"href":365,"dataGaName":366,"dataGaLocation":673},{"text":820,"config":821},"Small business",{"href":371,"dataGaName":372,"dataGaLocation":673},{"text":823,"config":824},"Public sector",{"href":377,"dataGaName":378,"dataGaLocation":673},{"text":826,"config":827},"Education",{"href":828,"dataGaName":829,"dataGaLocation":673},"/solutions/education/","education",{"text":831,"config":832},"Financial services",{"href":833,"dataGaName":834,"dataGaLocation":673},"/solutions/finance/","financial services",{"title":385,"links":836},[837,839,841,843,846,848,851,853,855,857,859,861,863,865],{"text":397,"config":838},{"href":399,"dataGaName":400,"dataGaLocation":673},{"text":402,"config":840},{"href":404,"dataGaName":405,"dataGaLocation":673},{"text":407,"config":842},{"href":409,"dataGaName":410,"dataGaLocation":673},{"text":412,"config":844},{"href":414,"dataGaName":845,"dataGaLocation":673},"docs",{"text":435,"config":847},{"href":437,"dataGaName":438,"dataGaLocation":673},{"text":849,"config":850},"What's new",{"href":495,"dataGaName":496,"dataGaLocation":673},{"text":430,"config":852},{"href":432,"dataGaName":433,"dataGaLocation":673},{"text":449,"config":854},{"href":451,"dataGaName":452,"dataGaLocation":673},{"text":457,"config":856},{"href":459,"dataGaName":460,"dataGaLocation":673},{"text":462,"config":858},{"href":464,"dataGaName":465,"dataGaLocation":673},{"text":467,"config":860},{"href":469,"dataGaName":470,"dataGaLocation":673},{"text":472,"config":862},{"href":474,"dataGaName":475,"dataGaLocation":673},{"text":477,"config":864},{"href":479,"dataGaName":480,"dataGaLocation":673},{"text":482,"config":866},{"href":484,"dataGaName":485,"dataGaLocation":673},{"title":498,"links":868},[869,871,873,875,877,879,883,888,890,892,894],{"text":506,"config":870},{"href":508,"dataGaName":500,"dataGaLocation":673},{"text":511,"config":872},{"href":513,"dataGaName":514,"dataGaLocation":673},{"text":519,"config":874},{"href":521,"dataGaName":522,"dataGaLocation":673},{"text":524,"config":876},{"href":526,"dataGaName":527,"dataGaLocation":673},{"text":529,"config":878},{"href":531,"dataGaName":532,"dataGaLocation":673},{"text":880,"config":881},"Sustainability",{"href":882,"dataGaName":880,"dataGaLocation":673},"/sustainability/",{"text":884,"config":885},"Diversity, inclusion and belonging (DIB)",{"href":886,"dataGaName":887,"dataGaLocation":673},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":534,"config":889},{"href":536,"dataGaName":537,"dataGaLocation":673},{"text":544,"config":891},{"href":546,"dataGaName":547,"dataGaLocation":673},{"text":549,"config":893},{"href":551,"dataGaName":552,"dataGaLocation":673},{"text":895,"config":896},"Modern Slavery Transparency Statement",{"href":897,"dataGaName":898,"dataGaLocation":673},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":900},[901,904,907],{"text":902,"config":903},"Terms",{"href":725,"dataGaName":726,"dataGaLocation":673},{"text":905,"config":906},"Cookies",{"dataGaName":735,"dataGaLocation":673,"id":736,"isOneTrustButton":217},{"text":908,"config":909},"Privacy",{"href":730,"dataGaName":731,"dataGaLocation":673},[911],{"id":912,"title":7,"body":204,"config":913,"content":915,"description":204,"extension":919,"meta":920,"navigation":217,"path":921,"seo":922,"stem":923,"__hash__":924},"blogAuthors/en-us/blog/authors/gabriel-le-breton.yml",{"template":914},"BlogAuthor",{"name":7,"config":916},{"headshot":917,"ctfId":918},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659488/Blog/Author%20Headshots/gitlab-logo-extra-whitespace.png","Gabriel-Le-Breton","yml",{},"/en-us/blog/authors/gabriel-le-breton",{},"en-us/blog/authors/gabriel-le-breton","lOv2v8dmDhd2ZPILe3xdoTOdT6wuGs5Cr42mcZHSBrg",[926,935,943],{"title":927,"description":928,"heroImage":929,"category":200,"date":930,"authors":931,"slug":934,"externalUrl":204},"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",[932,933],"Mathias Ewald","Martin Paloncy, Edgeless Systems","confidential-ai-for-gitlab-self-hosted",{"title":936,"description":937,"heroImage":938,"category":200,"date":939,"authors":940,"slug":942,"externalUrl":204},"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",[941],"Lysanne Pinto","green-devops-carbon-measurement-cicd-pipeline",{"title":944,"description":945,"heroImage":946,"category":200,"date":947,"authors":948,"slug":950,"externalUrl":204},"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",[949],"Paul Meresanu","how-to-build-ci-cd-observability-at-scale",{"promotions":952},[953,967,979,991],{"id":954,"categories":955,"header":957,"text":958,"button":959,"image":964},"ai-modernization",[956],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":960,"config":961},"Get your AI maturity score",{"href":962,"dataGaName":963,"dataGaLocation":438},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":965},{"src":966},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":968,"categories":969,"header":971,"text":958,"button":972,"image":976},"devops-modernization",[970,775],"product","Are you just managing tools or shipping innovation?",{"text":973,"config":974},"Get your DevOps maturity score",{"href":975,"dataGaName":963,"dataGaLocation":438},"/assessments/devops-modernization-assessment/",{"config":977},{"src":978},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":980,"categories":981,"header":983,"text":958,"button":984,"image":988},"security-modernization",[982],"security","Are you trading speed for security?",{"text":985,"config":986},"Get your security maturity score",{"href":987,"dataGaName":963,"dataGaLocation":438},"/assessments/security-modernization-assessment/",{"config":989},{"src":990},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":992,"paths":993,"header":996,"text":997,"button":998,"image":1003},"github-azure-migration",[994,995],"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":999,"config":1000},"See how GitLab compares to GitHub",{"href":1001,"dataGaName":1002,"dataGaLocation":438},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1004},{"src":978},{"header":1006,"blurb":1007,"button":1008,"secondaryButton":1013},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":1009,"config":1010},"Get your free trial",{"href":1011,"dataGaName":240,"dataGaLocation":1012},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":711,"config":1014},{"href":563,"dataGaName":245,"dataGaLocation":1012},1786803773880]