[{"data":1,"prerenderedAt":9319},["ShallowReactive",2],{"/en-us/blog/categories/engineering":3,"navigation-en-us":21,"banner-en-us":450,"footer-en-us":467,"engineering-category-en-us":712,"footer-source-/en-us/blog/categories/engineering/":9315},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"seo":8,"content":11,"config":12,"_id":15,"_type":16,"title":9,"_source":17,"_file":18,"_stem":19,"_extension":20},"/en-us/blog/categories/engineering","categories",false,"",{"title":9,"description":10},"Engineering","Browse articles related to Engineering on the GitLab Blog",{"name":9},{"template":13,"slug":14,"hide":6},"BlogCategory","engineering","content:en-us:blog:categories:engineering.yml","yaml","content","en-us/blog/categories/engineering.yml","en-us/blog/categories/engineering","yml",{"_path":22,"_dir":23,"_draft":6,"_partial":6,"_locale":7,"data":24,"_id":446,"_type":16,"title":447,"_source":17,"_file":448,"_stem":449,"_extension":20},"/shared/en-us/main-navigation","en-us",{"logo":25,"freeTrial":30,"sales":35,"login":40,"items":45,"search":377,"minimal":408,"duo":427,"pricingDeployment":436},{"config":26},{"href":27,"dataGaName":28,"dataGaLocation":29},"/","gitlab logo","header",{"text":31,"config":32},"Get free trial",{"href":33,"dataGaName":34,"dataGaLocation":29},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":36,"config":37},"Talk to sales",{"href":38,"dataGaName":39,"dataGaLocation":29},"/sales/","sales",{"text":41,"config":42},"Sign in",{"href":43,"dataGaName":44,"dataGaLocation":29},"https://gitlab.com/users/sign_in/","sign in",[46,90,187,192,298,358],{"text":47,"config":48,"cards":50,"footer":73},"Platform",{"dataNavLevelOne":49},"platform",[51,57,65],{"title":47,"description":52,"link":53},"The most comprehensive AI-powered DevSecOps Platform",{"text":54,"config":55},"Explore our Platform",{"href":56,"dataGaName":49,"dataGaLocation":29},"/platform/",{"title":58,"description":59,"link":60},"GitLab Duo (AI)","Build software faster with AI at every stage of development",{"text":61,"config":62},"Meet GitLab Duo",{"href":63,"dataGaName":64,"dataGaLocation":29},"/gitlab-duo/","gitlab duo ai",{"title":66,"description":67,"link":68},"Why GitLab","10 reasons why Enterprises choose GitLab",{"text":69,"config":70},"Learn more",{"href":71,"dataGaName":72,"dataGaLocation":29},"/why-gitlab/","why gitlab",{"title":74,"items":75},"Get started with",[76,81,86],{"text":77,"config":78},"Platform Engineering",{"href":79,"dataGaName":80,"dataGaLocation":29},"/solutions/platform-engineering/","platform engineering",{"text":82,"config":83},"Developer Experience",{"href":84,"dataGaName":85,"dataGaLocation":29},"/developer-experience/","Developer experience",{"text":87,"config":88},"MLOps",{"href":89,"dataGaName":87,"dataGaLocation":29},"/topics/devops/the-role-of-ai-in-devops/",{"text":91,"left":92,"config":93,"link":95,"lists":99,"footer":169},"Product",true,{"dataNavLevelOne":94},"solutions",{"text":96,"config":97},"View all Solutions",{"href":98,"dataGaName":94,"dataGaLocation":29},"/solutions/",[100,125,148],{"title":101,"description":102,"link":103,"items":108},"Automation","CI/CD and automation to accelerate deployment",{"config":104},{"icon":105,"href":106,"dataGaName":107,"dataGaLocation":29},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[109,113,117,121],{"text":110,"config":111},"CI/CD",{"href":112,"dataGaLocation":29,"dataGaName":110},"/solutions/continuous-integration/",{"text":114,"config":115},"AI-Assisted Development",{"href":63,"dataGaLocation":29,"dataGaName":116},"AI assisted development",{"text":118,"config":119},"Source Code Management",{"href":120,"dataGaLocation":29,"dataGaName":118},"/solutions/source-code-management/",{"text":122,"config":123},"Automated Software Delivery",{"href":106,"dataGaLocation":29,"dataGaName":124},"Automated software delivery",{"title":126,"description":127,"link":128,"items":133},"Security","Deliver code faster without compromising security",{"config":129},{"href":130,"dataGaName":131,"dataGaLocation":29,"icon":132},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[134,138,143],{"text":135,"config":136},"Application Security Testing",{"href":130,"dataGaName":137,"dataGaLocation":29},"Application security testing",{"text":139,"config":140},"Software Supply Chain Security",{"href":141,"dataGaLocation":29,"dataGaName":142},"/solutions/supply-chain/","Software supply chain security",{"text":144,"config":145},"Software Compliance",{"href":146,"dataGaName":147,"dataGaLocation":29},"/solutions/software-compliance/","software compliance",{"title":149,"link":150,"items":155},"Measurement",{"config":151},{"icon":152,"href":153,"dataGaName":154,"dataGaLocation":29},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[156,160,164],{"text":157,"config":158},"Visibility & Measurement",{"href":153,"dataGaLocation":29,"dataGaName":159},"Visibility and Measurement",{"text":161,"config":162},"Value Stream Management",{"href":163,"dataGaLocation":29,"dataGaName":161},"/solutions/value-stream-management/",{"text":165,"config":166},"Analytics & Insights",{"href":167,"dataGaLocation":29,"dataGaName":168},"/solutions/analytics-and-insights/","Analytics and insights",{"title":170,"items":171},"GitLab for",[172,177,182],{"text":173,"config":174},"Enterprise",{"href":175,"dataGaLocation":29,"dataGaName":176},"/enterprise/","enterprise",{"text":178,"config":179},"Small Business",{"href":180,"dataGaLocation":29,"dataGaName":181},"/small-business/","small business",{"text":183,"config":184},"Public Sector",{"href":185,"dataGaLocation":29,"dataGaName":186},"/solutions/public-sector/","public sector",{"text":188,"config":189},"Pricing",{"href":190,"dataGaName":191,"dataGaLocation":29,"dataNavLevelOne":191},"/pricing/","pricing",{"text":193,"config":194,"link":196,"lists":200,"feature":285},"Resources",{"dataNavLevelOne":195},"resources",{"text":197,"config":198},"View all resources",{"href":199,"dataGaName":195,"dataGaLocation":29},"/resources/",[201,234,257],{"title":202,"items":203},"Getting started",[204,209,214,219,224,229],{"text":205,"config":206},"Install",{"href":207,"dataGaName":208,"dataGaLocation":29},"/install/","install",{"text":210,"config":211},"Quick start guides",{"href":212,"dataGaName":213,"dataGaLocation":29},"/get-started/","quick setup checklists",{"text":215,"config":216},"Learn",{"href":217,"dataGaLocation":29,"dataGaName":218},"https://university.gitlab.com/","learn",{"text":220,"config":221},"Product documentation",{"href":222,"dataGaName":223,"dataGaLocation":29},"https://docs.gitlab.com/","product documentation",{"text":225,"config":226},"Best practice videos",{"href":227,"dataGaName":228,"dataGaLocation":29},"/getting-started-videos/","best practice videos",{"text":230,"config":231},"Integrations",{"href":232,"dataGaName":233,"dataGaLocation":29},"/integrations/","integrations",{"title":235,"items":236},"Discover",[237,242,247,252],{"text":238,"config":239},"Customer success stories",{"href":240,"dataGaName":241,"dataGaLocation":29},"/customers/","customer success stories",{"text":243,"config":244},"Blog",{"href":245,"dataGaName":246,"dataGaLocation":29},"/blog/","blog",{"text":248,"config":249},"Remote",{"href":250,"dataGaName":251,"dataGaLocation":29},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"text":253,"config":254},"TeamOps",{"href":255,"dataGaName":256,"dataGaLocation":29},"/teamops/","teamops",{"title":258,"items":259},"Connect",[260,265,270,275,280],{"text":261,"config":262},"GitLab Services",{"href":263,"dataGaName":264,"dataGaLocation":29},"/services/","services",{"text":266,"config":267},"Community",{"href":268,"dataGaName":269,"dataGaLocation":29},"/community/","community",{"text":271,"config":272},"Forum",{"href":273,"dataGaName":274,"dataGaLocation":29},"https://forum.gitlab.com/","forum",{"text":276,"config":277},"Events",{"href":278,"dataGaName":279,"dataGaLocation":29},"/events/","events",{"text":281,"config":282},"Partners",{"href":283,"dataGaName":284,"dataGaLocation":29},"/partners/","partners",{"backgroundColor":286,"textColor":287,"text":288,"image":289,"link":293},"#2f2a6b","#fff","Insights for the future of software development",{"altText":290,"config":291},"the source promo card",{"src":292},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758208064/dzl0dbift9xdizyelkk4.svg",{"text":294,"config":295},"Read the latest",{"href":296,"dataGaName":297,"dataGaLocation":29},"/the-source/","the source",{"text":299,"config":300,"lists":302},"Company",{"dataNavLevelOne":301},"company",[303],{"items":304},[305,310,316,318,323,328,333,338,343,348,353],{"text":306,"config":307},"About",{"href":308,"dataGaName":309,"dataGaLocation":29},"/company/","about",{"text":311,"config":312,"footerGa":315},"Jobs",{"href":313,"dataGaName":314,"dataGaLocation":29},"/jobs/","jobs",{"dataGaName":314},{"text":276,"config":317},{"href":278,"dataGaName":279,"dataGaLocation":29},{"text":319,"config":320},"Leadership",{"href":321,"dataGaName":322,"dataGaLocation":29},"/company/team/e-group/","leadership",{"text":324,"config":325},"Team",{"href":326,"dataGaName":327,"dataGaLocation":29},"/company/team/","team",{"text":329,"config":330},"Handbook",{"href":331,"dataGaName":332,"dataGaLocation":29},"https://handbook.gitlab.com/","handbook",{"text":334,"config":335},"Investor relations",{"href":336,"dataGaName":337,"dataGaLocation":29},"https://ir.gitlab.com/","investor relations",{"text":339,"config":340},"Trust Center",{"href":341,"dataGaName":342,"dataGaLocation":29},"/security/","trust center",{"text":344,"config":345},"AI Transparency Center",{"href":346,"dataGaName":347,"dataGaLocation":29},"/ai-transparency-center/","ai transparency center",{"text":349,"config":350},"Newsletter",{"href":351,"dataGaName":352,"dataGaLocation":29},"/company/contact/","newsletter",{"text":354,"config":355},"Press",{"href":356,"dataGaName":357,"dataGaLocation":29},"/press/","press",{"text":359,"config":360,"lists":361},"Contact us",{"dataNavLevelOne":301},[362],{"items":363},[364,367,372],{"text":36,"config":365},{"href":38,"dataGaName":366,"dataGaLocation":29},"talk to sales",{"text":368,"config":369},"Support portal",{"href":370,"dataGaName":371,"dataGaLocation":29},"https://support.gitlab.com","support portal",{"text":373,"config":374},"Customer portal",{"href":375,"dataGaName":376,"dataGaLocation":29},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":378,"login":379,"suggestions":386},"Close",{"text":380,"link":381},"To search repositories and projects, login to",{"text":382,"config":383},"gitlab.com",{"href":43,"dataGaName":384,"dataGaLocation":385},"search login","search",{"text":387,"default":388},"Suggestions",[389,391,395,397,401,405],{"text":58,"config":390},{"href":63,"dataGaName":58,"dataGaLocation":385},{"text":392,"config":393},"Code Suggestions (AI)",{"href":394,"dataGaName":392,"dataGaLocation":385},"/solutions/code-suggestions/",{"text":110,"config":396},{"href":112,"dataGaName":110,"dataGaLocation":385},{"text":398,"config":399},"GitLab on AWS",{"href":400,"dataGaName":398,"dataGaLocation":385},"/partners/technology-partners/aws/",{"text":402,"config":403},"GitLab on Google Cloud",{"href":404,"dataGaName":402,"dataGaLocation":385},"/partners/technology-partners/google-cloud-platform/",{"text":406,"config":407},"Why GitLab?",{"href":71,"dataGaName":406,"dataGaLocation":385},{"freeTrial":409,"mobileIcon":414,"desktopIcon":419,"secondaryButton":422},{"text":410,"config":411},"Start free trial",{"href":412,"dataGaName":34,"dataGaLocation":413},"https://gitlab.com/-/trials/new/","nav",{"altText":415,"config":416},"Gitlab Icon",{"src":417,"dataGaName":418,"dataGaLocation":413},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":415,"config":420},{"src":421,"dataGaName":418,"dataGaLocation":413},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":423,"config":424},"Get Started",{"href":425,"dataGaName":426,"dataGaLocation":413},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/compare/gitlab-vs-github/","get started",{"freeTrial":428,"mobileIcon":432,"desktopIcon":434},{"text":429,"config":430},"Learn more about GitLab Duo",{"href":63,"dataGaName":431,"dataGaLocation":413},"gitlab duo",{"altText":415,"config":433},{"src":417,"dataGaName":418,"dataGaLocation":413},{"altText":415,"config":435},{"src":421,"dataGaName":418,"dataGaLocation":413},{"freeTrial":437,"mobileIcon":442,"desktopIcon":444},{"text":438,"config":439},"Back to pricing",{"href":190,"dataGaName":440,"dataGaLocation":413,"icon":441},"back to pricing","GoBack",{"altText":415,"config":443},{"src":417,"dataGaName":418,"dataGaLocation":413},{"altText":415,"config":445},{"src":421,"dataGaName":418,"dataGaLocation":413},"content:shared:en-us:main-navigation.yml","Main Navigation","shared/en-us/main-navigation.yml","shared/en-us/main-navigation",{"_path":451,"_dir":23,"_draft":6,"_partial":6,"_locale":7,"title":452,"button":453,"image":458,"config":462,"_id":464,"_type":16,"_source":17,"_file":465,"_stem":466,"_extension":20},"/shared/en-us/banner","is now in public beta!",{"text":454,"config":455},"Try the Beta",{"href":456,"dataGaName":457,"dataGaLocation":29},"/gitlab-duo/agent-platform/","duo banner",{"altText":459,"config":460},"GitLab Duo Agent Platform",{"src":461},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1753720689/somrf9zaunk0xlt7ne4x.svg",{"layout":463},"release","content:shared:en-us:banner.yml","shared/en-us/banner.yml","shared/en-us/banner",{"_path":468,"_dir":23,"_draft":6,"_partial":6,"_locale":7,"data":469,"_id":708,"_type":16,"title":709,"_source":17,"_file":710,"_stem":711,"_extension":20},"/shared/en-us/main-footer",{"text":470,"source":471,"edit":477,"contribute":482,"config":487,"items":492,"minimal":700},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":472,"config":473},"View page source",{"href":474,"dataGaName":475,"dataGaLocation":476},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":478,"config":479},"Edit this page",{"href":480,"dataGaName":481,"dataGaLocation":476},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":483,"config":484},"Please contribute",{"href":485,"dataGaName":486,"dataGaLocation":476},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":488,"facebook":489,"youtube":490,"linkedin":491},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[493,540,593,637,666],{"title":188,"links":494,"subMenu":509},[495,499,504],{"text":496,"config":497},"View plans",{"href":190,"dataGaName":498,"dataGaLocation":476},"view plans",{"text":500,"config":501},"Why Premium?",{"href":502,"dataGaName":503,"dataGaLocation":476},"/pricing/premium/","why premium",{"text":505,"config":506},"Why Ultimate?",{"href":507,"dataGaName":508,"dataGaLocation":476},"/pricing/ultimate/","why ultimate",[510],{"title":511,"links":512},"Contact Us",[513,516,518,520,525,530,535],{"text":514,"config":515},"Contact sales",{"href":38,"dataGaName":39,"dataGaLocation":476},{"text":368,"config":517},{"href":370,"dataGaName":371,"dataGaLocation":476},{"text":373,"config":519},{"href":375,"dataGaName":376,"dataGaLocation":476},{"text":521,"config":522},"Status",{"href":523,"dataGaName":524,"dataGaLocation":476},"https://status.gitlab.com/","status",{"text":526,"config":527},"Terms of use",{"href":528,"dataGaName":529,"dataGaLocation":476},"/terms/","terms of use",{"text":531,"config":532},"Privacy statement",{"href":533,"dataGaName":534,"dataGaLocation":476},"/privacy/","privacy statement",{"text":536,"config":537},"Cookie preferences",{"dataGaName":538,"dataGaLocation":476,"id":539,"isOneTrustButton":92},"cookie preferences","ot-sdk-btn",{"title":91,"links":541,"subMenu":549},[542,546],{"text":543,"config":544},"DevSecOps platform",{"href":56,"dataGaName":545,"dataGaLocation":476},"devsecops platform",{"text":114,"config":547},{"href":63,"dataGaName":548,"dataGaLocation":476},"ai-assisted development",[550],{"title":551,"links":552},"Topics",[553,558,563,568,573,578,583,588],{"text":554,"config":555},"CICD",{"href":556,"dataGaName":557,"dataGaLocation":476},"/topics/ci-cd/","cicd",{"text":559,"config":560},"GitOps",{"href":561,"dataGaName":562,"dataGaLocation":476},"/topics/gitops/","gitops",{"text":564,"config":565},"DevOps",{"href":566,"dataGaName":567,"dataGaLocation":476},"/topics/devops/","devops",{"text":569,"config":570},"Version Control",{"href":571,"dataGaName":572,"dataGaLocation":476},"/topics/version-control/","version control",{"text":574,"config":575},"DevSecOps",{"href":576,"dataGaName":577,"dataGaLocation":476},"/topics/devsecops/","devsecops",{"text":579,"config":580},"Cloud Native",{"href":581,"dataGaName":582,"dataGaLocation":476},"/topics/cloud-native/","cloud native",{"text":584,"config":585},"AI for Coding",{"href":586,"dataGaName":587,"dataGaLocation":476},"/topics/devops/ai-for-coding/","ai for coding",{"text":589,"config":590},"Agentic AI",{"href":591,"dataGaName":592,"dataGaLocation":476},"/topics/agentic-ai/","agentic ai",{"title":594,"links":595},"Solutions",[596,598,600,605,609,612,616,619,621,624,627,632],{"text":135,"config":597},{"href":130,"dataGaName":135,"dataGaLocation":476},{"text":124,"config":599},{"href":106,"dataGaName":107,"dataGaLocation":476},{"text":601,"config":602},"Agile development",{"href":603,"dataGaName":604,"dataGaLocation":476},"/solutions/agile-delivery/","agile delivery",{"text":606,"config":607},"SCM",{"href":120,"dataGaName":608,"dataGaLocation":476},"source code management",{"text":554,"config":610},{"href":112,"dataGaName":611,"dataGaLocation":476},"continuous integration & delivery",{"text":613,"config":614},"Value stream management",{"href":163,"dataGaName":615,"dataGaLocation":476},"value stream management",{"text":559,"config":617},{"href":618,"dataGaName":562,"dataGaLocation":476},"/solutions/gitops/",{"text":173,"config":620},{"href":175,"dataGaName":176,"dataGaLocation":476},{"text":622,"config":623},"Small business",{"href":180,"dataGaName":181,"dataGaLocation":476},{"text":625,"config":626},"Public sector",{"href":185,"dataGaName":186,"dataGaLocation":476},{"text":628,"config":629},"Education",{"href":630,"dataGaName":631,"dataGaLocation":476},"/solutions/education/","education",{"text":633,"config":634},"Financial services",{"href":635,"dataGaName":636,"dataGaLocation":476},"/solutions/finance/","financial services",{"title":193,"links":638},[639,641,643,645,648,650,652,654,656,658,660,662,664],{"text":205,"config":640},{"href":207,"dataGaName":208,"dataGaLocation":476},{"text":210,"config":642},{"href":212,"dataGaName":213,"dataGaLocation":476},{"text":215,"config":644},{"href":217,"dataGaName":218,"dataGaLocation":476},{"text":220,"config":646},{"href":222,"dataGaName":647,"dataGaLocation":476},"docs",{"text":243,"config":649},{"href":245,"dataGaName":246,"dataGaLocation":476},{"text":238,"config":651},{"href":240,"dataGaName":241,"dataGaLocation":476},{"text":248,"config":653},{"href":250,"dataGaName":251,"dataGaLocation":476},{"text":261,"config":655},{"href":263,"dataGaName":264,"dataGaLocation":476},{"text":253,"config":657},{"href":255,"dataGaName":256,"dataGaLocation":476},{"text":266,"config":659},{"href":268,"dataGaName":269,"dataGaLocation":476},{"text":271,"config":661},{"href":273,"dataGaName":274,"dataGaLocation":476},{"text":276,"config":663},{"href":278,"dataGaName":279,"dataGaLocation":476},{"text":281,"config":665},{"href":283,"dataGaName":284,"dataGaLocation":476},{"title":299,"links":667},[668,670,672,674,676,678,680,684,689,691,693,695],{"text":306,"config":669},{"href":308,"dataGaName":301,"dataGaLocation":476},{"text":311,"config":671},{"href":313,"dataGaName":314,"dataGaLocation":476},{"text":319,"config":673},{"href":321,"dataGaName":322,"dataGaLocation":476},{"text":324,"config":675},{"href":326,"dataGaName":327,"dataGaLocation":476},{"text":329,"config":677},{"href":331,"dataGaName":332,"dataGaLocation":476},{"text":334,"config":679},{"href":336,"dataGaName":337,"dataGaLocation":476},{"text":681,"config":682},"Sustainability",{"href":683,"dataGaName":681,"dataGaLocation":476},"/sustainability/",{"text":685,"config":686},"Diversity, inclusion and belonging (DIB)",{"href":687,"dataGaName":688,"dataGaLocation":476},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":339,"config":690},{"href":341,"dataGaName":342,"dataGaLocation":476},{"text":349,"config":692},{"href":351,"dataGaName":352,"dataGaLocation":476},{"text":354,"config":694},{"href":356,"dataGaName":357,"dataGaLocation":476},{"text":696,"config":697},"Modern Slavery Transparency Statement",{"href":698,"dataGaName":699,"dataGaLocation":476},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":701},[702,704,706],{"text":526,"config":703},{"href":528,"dataGaName":529,"dataGaLocation":476},{"text":531,"config":705},{"href":533,"dataGaName":534,"dataGaLocation":476},{"text":536,"config":707},{"dataGaName":538,"dataGaLocation":476,"id":539,"isOneTrustButton":92},"content:shared:en-us:main-footer.yml","Main Footer","shared/en-us/main-footer.yml","shared/en-us/main-footer",{"post":713,"posts":714},null,[715,736,758,780,797,816,834,853,870,888,911,932,952,972,992,1010,1029,1048,1067,1086,1107,1127,1148,1168,1187,1207,1226,1246,1266,1285,1303,1323,1342,1361,1380,1399,1417,1438,1458,1477,1496,1514,1532,1550,1569,1587,1607,1628,1646,1666,1684,1703,1722,1741,1759,1778,1797,1814,1832,1851,1870,1889,1908,1926,1944,1963,1981,1999,2017,2037,2055,2074,2092,2112,2129,2148,2165,2184,2202,2221,2238,2257,2276,2295,2314,2333,2351,2370,2389,2407,2425,2445,2463,2482,2500,2519,2538,2555,2573,2592,2609,2625,2644,2663,2680,2699,2718,2738,2756,2774,2793,2811,2829,2848,2866,2884,2902,2921,2941,2959,2977,2995,3014,3032,3051,3069,3088,3105,3125,3142,3160,3179,3198,3215,3233,3251,3270,3287,3305,3322,3339,3357,3375,3393,3410,3428,3447,3466,3483,3502,3519,3538,3557,3573,3591,3609,3627,3647,3666,3684,3703,3722,3741,3760,3779,3798,3816,3834,3852,3870,3888,3907,3927,3945,3964,3983,4002,4020,4036,4055,4074,4092,4110,4129,4148,4166,4184,4202,4221,4238,4256,4274,4292,4311,4330,4348,4367,4385,4405,4424,4445,4462,4481,4499,4519,4537,4555,4574,4592,4609,4628,4646,4666,4685,4702,4721,4739,4756,4775,4794,4813,4832,4850,4869,4888,4907,4926,4945,4965,4983,5002,5021,5038,5056,5074,5092,5111,5129,5147,5165,5183,5202,5219,5237,5255,5273,5292,5311,5330,5348,5368,5385,5403,5422,5439,5456,5474,5493,5512,5530,5548,5566,5584,5602,5620,5638,5655,5673,5691,5710,5729,5746,5765,5784,5802,5820,5838,5856,5874,5894,5912,5929,5949,5967,5985,6003,6022,6039,6057,6075,6093,6112,6131,6149,6170,6188,6207,6225,6244,6262,6280,6299,6317,6337,6356,6373,6390,6408,6426,6444,6463,6482,6500,6519,6539,6558,6577,6596,6616,6635,6654,6670,6688,6708,6727,6745,6763,6781,6798,6816,6833,6850,6869,6888,6907,6926,6945,6964,6982,6999,7016,7034,7053,7070,7089,7107,7125,7142,7160,7178,7197,7214,7233,7252,7271,7289,7306,7324,7341,7360,7380,7397,7416,7434,7452,7471,7490,7509,7526,7545,7563,7580,7599,7617,7635,7653,7671,7690,7709,7728,7746,7764,7783,7800,7820,7839,7857,7876,7894,7913,7933,7951,7970,7989,8007,8026,8044,8062,8080,8097,8114,8131,8147,8164,8181,8199,8216,8232,8249,8266,8283,8300,8318,8335,8354,8370,8386,8403,8420,8437,8455,8471,8487,8505,8522,8539,8557,8575,8590,8608,8625,8643,8659,8676,8694,8711,8728,8746,8763,8779,8796,8813,8831,8848,8865,8883,8900,8918,8935,8952,8968,8984,9002,9019,9035,9051,9067,9084,9101,9118,9134,9150,9166,9182,9198,9215,9232,9249,9267,9283,9299],{"_path":716,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":717,"content":721,"config":729,"_id":732,"_type":16,"title":733,"_source":17,"_file":734,"_stem":735,"_extension":20},"/en-us/blog/variable-and-artifact-sharing-in-gitlab-parent-child-pipelines",{"config":718,"title":719,"description":720},{"noIndex":6},"Variable and artifact sharing in GitLab parent-child pipelines","Learn how to simplify complex CI/CD pipelines with these best practices for sharing data in more modular pipeline setups. ",{"title":719,"description":720,"authors":722,"heroImage":725,"date":726,"category":14,"tags":727},[723,724],"William Arias","Daniel Helfand","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749664198/Blog/Hero%20Images/Self-Hosted_1800x945.png","2025-10-16",[110,574,728],"tutorial",{"featured":92,"template":730,"slug":731},"BlogPost","variable-and-artifact-sharing-in-gitlab-parent-child-pipelines","content:en-us:blog:variable-and-artifact-sharing-in-gitlab-parent-child-pipelines.yml","Variable And Artifact Sharing In Gitlab Parent Child Pipelines","en-us/blog/variable-and-artifact-sharing-in-gitlab-parent-child-pipelines.yml","en-us/blog/variable-and-artifact-sharing-in-gitlab-parent-child-pipelines",{"_path":737,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":738,"content":742,"config":752,"_id":754,"_type":16,"title":755,"_source":17,"_file":756,"_stem":757,"_extension":20},"/en-us/blog/how-we-built-a-structured-streamlit-application-framework-in-snowflake",{"config":739,"title":740,"ogTitle":740,"description":741},{"noIndex":6},"How we built a structured Streamlit Framework in Snowflake","Want to transform development from chaos to compliance? Learn how we implemented governance early on rather than retrofitting when maintenance costs climb exponentially.",{"title":743,"description":741,"authors":744,"heroImage":746,"date":747,"category":14,"tags":748},"How we built a structured Streamlit Application Framework in Snowflake",[745],"Radovan Bacovic","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097447/Blog/Hero%20Images/Blog/Hero%20Images/blog-image-template-1800x945%20%284%29_3LZkiDjHLjhqEkvOvBsVKp_1750097447404.png","2025-10-10",[749,750,751,728],"product","features","security",{"featured":6,"template":730,"slug":753},"how-we-built-a-structured-streamlit-application-framework-in-snowflake","content:en-us:blog:how-we-built-a-structured-streamlit-application-framework-in-snowflake.yml","How We Built A Structured Streamlit Application Framework In Snowflake","en-us/blog/how-we-built-a-structured-streamlit-application-framework-in-snowflake.yml","en-us/blog/how-we-built-a-structured-streamlit-application-framework-in-snowflake",{"_path":759,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":760,"content":764,"config":774,"_id":776,"_type":16,"title":777,"_source":17,"_file":778,"_stem":779,"_extension":20},"/en-us/blog/how-gitlab-transforms-embedded-systems-testing-cycles",{"config":761,"title":762,"description":763},{"noIndex":6},"How GitLab transforms embedded systems testing cycles","Discover how managed lifecycle environments streamline virtual testing, delivering rapid feedback without environment sprawl or cost overruns.",{"title":762,"description":765,"authors":766,"heroImage":769,"date":770,"category":14,"tags":771},"Discover how managed lifecycle environments streamline and automate virtual testing, delivering rapid feedback without environment sprawl or cost overruns.",[767,768],"Matt DeLaney","Darwin Sanoy","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099203/Blog/Hero%20Images/Blog/Hero%20Images/blog-image-template-1800x945%20%2820%29_2bJGC5ZP3WheoqzlLT05C5_1750099203484.png","2025-10-02",[749,772,773],"embedded DevOps","testing",{"featured":92,"template":730,"slug":775},"how-gitlab-transforms-embedded-systems-testing-cycles","content:en-us:blog:how-gitlab-transforms-embedded-systems-testing-cycles.yml","How Gitlab Transforms Embedded Systems Testing Cycles","en-us/blog/how-gitlab-transforms-embedded-systems-testing-cycles.yml","en-us/blog/how-gitlab-transforms-embedded-systems-testing-cycles",{"_path":781,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":782,"config":785,"content":787,"_id":793,"_type":16,"title":794,"_source":17,"_file":795,"_stem":796,"_extension":20},"/en-us/blog/supercharge-your-git-workflows",{"title":783,"description":784},"Supercharge your Git workflows","Optimize git clone operations in any environment — up to 93% reduction in clone times and 98% reduction in disk space usage — with the Git Much Faster script.",{"slug":786,"featured":92,"template":730},"supercharge-your-git-workflows",{"title":783,"description":784,"authors":788,"heroImage":789,"date":790,"category":14,"tags":791},[768],"https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098264/Blog/Hero%20Images/Blog/Hero%20Images/AdobeStock_519147119_2RafH61mqosMZv8HGAlsUj_1750098264407.jpg","2025-09-10",[728,792],"git","content:en-us:blog:supercharge-your-git-workflows.yml","Supercharge Your Git Workflows","en-us/blog/supercharge-your-git-workflows.yml","en-us/blog/supercharge-your-git-workflows",{"_path":798,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":799,"config":803,"content":805,"_id":812,"_type":16,"title":813,"_source":17,"_file":814,"_stem":815,"_extension":20},"/en-us/blog/secure-rust-development-with-gitlab",{"config":800,"title":801,"description":802},{"noIndex":6},"Secure Rust development with GitLab","Learn how GitLab supports Rust development through its CI/CD capabilities, security scanning, dedicated Rust integrations, AI features, and more.",{"slug":804,"featured":92,"template":730},"secure-rust-development-with-gitlab",{"title":801,"description":802,"authors":806,"tags":808,"heroImage":810,"category":14,"date":811},[807],"Fernando Diaz",[269,809,728],"open source","https://res.cloudinary.com/about-gitlab-com/image/upload/v1756314674/tct6zf6evw0xgddd2vo3.png","2025-09-02","content:en-us:blog:secure-rust-development-with-gitlab.yml","Secure Rust Development With Gitlab","en-us/blog/secure-rust-development-with-gitlab.yml","en-us/blog/secure-rust-development-with-gitlab",{"_path":817,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":818,"content":821,"config":828,"_id":830,"_type":16,"title":831,"_source":17,"_file":832,"_stem":833,"_extension":20},"/en-us/blog/fine-grained-job-tokens-ga",{"title":819,"description":820},"Fine-grained permissions for job tokens is now GA","GitLab now allows the use of fine-grained permissions for CI/CD job tokens, enhancing the security of your software supply chain.",{"title":819,"description":820,"authors":822,"heroImage":825,"date":826,"category":14,"tags":827},[823,824],"Alex Mark","Joe Randazzo","blog/hero%20images/workflow_1800x945.png","2025-08-26",[269],{"slug":829,"featured":6,"template":730},"fine-grained-job-tokens-ga","content:en-us:blog:fine-grained-job-tokens-ga.yml","Fine Grained Job Tokens Ga","en-us/blog/fine-grained-job-tokens-ga.yml","en-us/blog/fine-grained-job-tokens-ga",{"_path":835,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":836,"config":839,"content":841,"_id":849,"_type":16,"title":850,"_source":17,"_file":851,"_stem":852,"_extension":20},"/en-us/blog/docs-site-design-overhaul",{"title":837,"description":838},"The GitLab documentation site gets a major design overhaul","The product documentation is now clean, easier to navigate, and includes dark mode.",{"slug":840,"featured":6,"template":730},"docs-site-design-overhaul",{"title":837,"description":842,"authors":843,"heroImage":825,"date":847,"category":14,"tags":848},"Learn about the features of our newly designed product documentation site, which includes an easy way to provide feedback and the much-requested dark mode.",[844,845,846],"Suzanne Selhorn","Sarah German","Julia Miocene","2025-08-20",[269],"content:en-us:blog:docs-site-design-overhaul.yml","Docs Site Design Overhaul","en-us/blog/docs-site-design-overhaul.yml","en-us/blog/docs-site-design-overhaul",{"_path":854,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":855,"config":858,"content":860,"_id":866,"_type":16,"title":867,"_source":17,"_file":868,"_stem":869,"_extension":20},"/en-us/blog/custom-rules-duo-agentic-chat-deep-dive",{"title":856,"description":857},"Custom rules in GitLab Duo Agentic Chat for greater developer efficiency","Discover how AI can understand your codebase, follow your conventions, and generate production-ready code with minimal review cycles.",{"slug":859,"featured":6,"template":730},"custom-rules-duo-agentic-chat-deep-dive",{"title":856,"description":857,"authors":861,"heroImage":769,"date":863,"category":14,"tags":864},[862],"Michael Friedrich","2025-08-12",[574,865],"AI/ML","content:en-us:blog:custom-rules-duo-agentic-chat-deep-dive.yml","Custom Rules Duo Agentic Chat Deep Dive","en-us/blog/custom-rules-duo-agentic-chat-deep-dive.yml","en-us/blog/custom-rules-duo-agentic-chat-deep-dive",{"_path":871,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":872,"content":875,"config":882,"_id":884,"_type":16,"title":885,"_source":17,"_file":886,"_stem":887,"_extension":20},"/en-us/blog/inside-gitlabs-healthy-backlog-initiative",{"noIndex":6,"title":873,"description":874},"Inside GitLab's Healthy Backlog Initiative","Learn how we are refining issue management to prioritize strategic work, improve delivery, and create stronger feedback loops with users.",{"title":873,"description":874,"authors":876,"heroImage":878,"date":879,"category":14,"tags":880},[877],"Stan Hu","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749664458/Blog/Hero%20Images/Gartner_AI_Code_Assistants_Blog_Post_Cover_Image_1800x945.png","2025-07-23",[269,749,881],"news",{"featured":92,"template":730,"slug":883},"inside-gitlabs-healthy-backlog-initiative","content:en-us:blog:inside-gitlabs-healthy-backlog-initiative.yml","Inside Gitlabs Healthy Backlog Initiative","en-us/blog/inside-gitlabs-healthy-backlog-initiative.yml","en-us/blog/inside-gitlabs-healthy-backlog-initiative",{"_path":889,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":890,"content":898,"config":905,"_id":907,"_type":16,"title":908,"_source":17,"_file":909,"_stem":910,"_extension":20},"/en-us/blog/how-we-decreased-gitlab-repo-backup-times-from-48-hours-to-41-minutes",{"title":891,"description":892,"ogTitle":891,"ogDescription":892,"noIndex":6,"ogImage":893,"ogUrl":894,"ogSiteName":895,"ogType":896,"canonicalUrls":894,"schema":897},"How we decreased GitLab repo backup times from 48 hours to 41 minutes","Learn how we tracked a performance bottleneck to a 15-year-old Git function and fixed it, leading to enhanced efficiency that supports more robust backup strategies and can reduce risk.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097166/Blog/Hero%20Images/Blog/Hero%20Images/REFERENCE%20-%20display%20preview%20for%20blog%20images%20%282%29_2pKf8RsKzAaThmQfqHIaa7_1750097166565.png","https://about.gitlab.com/blog/how-we-decreased-gitlab-repo-backup-times-from-48-hours-to-41-minutes","https://about.gitlab.com","article","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How we decreased GitLab repo backup times from 48 hours to 41 minutes\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Karthik Nayak\"},{\"@type\":\"Person\",\"name\":\"Manuel Kraft\"}],\n        \"datePublished\": \"2025-06-05\",\n      }",{"title":891,"description":892,"authors":899,"heroImage":893,"date":902,"category":14,"tags":903},[900,901],"Karthik Nayak","Manuel Kraft","2025-06-05",[792,809,749,904,543],"performance",{"slug":906,"featured":92,"template":730},"how-we-decreased-gitlab-repo-backup-times-from-48-hours-to-41-minutes","content:en-us:blog:how-we-decreased-gitlab-repo-backup-times-from-48-hours-to-41-minutes.yml","How We Decreased Gitlab Repo Backup Times From 48 Hours To 41 Minutes","en-us/blog/how-we-decreased-gitlab-repo-backup-times-from-48-hours-to-41-minutes.yml","en-us/blog/how-we-decreased-gitlab-repo-backup-times-from-48-hours-to-41-minutes",{"_path":912,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":913,"content":919,"config":926,"_id":928,"_type":16,"title":929,"_source":17,"_file":930,"_stem":931,"_extension":20},"/en-us/blog/tutorial-secure-bigquery-data-publishing-with-gitlab",{"title":914,"description":915,"ogTitle":914,"ogDescription":915,"noIndex":6,"ogImage":916,"ogUrl":917,"ogSiteName":895,"ogType":896,"canonicalUrls":917,"schema":918},"Tutorial: Secure BigQuery data publishing with GitLab ","Learn how to create repeatable, auditable, and efficient processes for automating and securing BigQuery data exports.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659756/Blog/Hero%20Images/REFERENCE_-_display_preview_for_blog_images.png","https://about.gitlab.com/blog/tutorial-secure-bigquery-data-publishing-with-gitlab","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Tutorial: Secure BigQuery data publishing with GitLab \",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Regnard Raquedan\"}],\n        \"datePublished\": \"2025-03-25\",\n      }",{"title":914,"description":915,"authors":920,"heroImage":916,"date":922,"category":14,"tags":923},[921],"Regnard Raquedan","2025-03-25",[574,543,728,924,233,925],"workflow","google",{"slug":927,"featured":92,"template":730},"tutorial-secure-bigquery-data-publishing-with-gitlab","content:en-us:blog:tutorial-secure-bigquery-data-publishing-with-gitlab.yml","Tutorial Secure Bigquery Data Publishing With Gitlab","en-us/blog/tutorial-secure-bigquery-data-publishing-with-gitlab.yml","en-us/blog/tutorial-secure-bigquery-data-publishing-with-gitlab",{"_path":933,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":934,"content":940,"config":946,"_id":948,"_type":16,"title":949,"_source":17,"_file":950,"_stem":951,"_extension":20},"/en-us/blog/how-we-reduced-mr-review-time-with-value-stream-management",{"title":935,"description":936,"ogTitle":935,"ogDescription":936,"noIndex":6,"ogImage":937,"ogUrl":938,"ogSiteName":895,"ogType":896,"canonicalUrls":938,"schema":939},"How we reduced MR review time with Value Stream Management ","The GitLab engineering team leverages VSM to pinpoint bottlenecks in the merge request review process and streamline software delivery. See how we do it and what we've learned.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097876/Blog/Hero%20Images/Blog/Hero%20Images/REFERENCE%20-%20display%20preview%20for%20blog%20images%20%282%29_2pKf8RsKzAaThmQfqHIaa7_1750097875817.png","https://about.gitlab.com/blog/how-we-reduced-mr-review-time-with-value-stream-management","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How we reduced MR review time with Value Stream Management \",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Haim Snir\"}],\n        \"datePublished\": \"2025-02-20\",\n      }",{"title":935,"description":936,"authors":941,"heroImage":937,"date":943,"category":14,"tags":944},[942],"Haim Snir","2025-02-20",[749,750,543,924,945],"solutions architecture",{"slug":947,"featured":6,"template":730},"how-we-reduced-mr-review-time-with-value-stream-management","content:en-us:blog:how-we-reduced-mr-review-time-with-value-stream-management.yml","How We Reduced Mr Review Time With Value Stream Management","en-us/blog/how-we-reduced-mr-review-time-with-value-stream-management.yml","en-us/blog/how-we-reduced-mr-review-time-with-value-stream-management",{"_path":953,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":954,"content":960,"config":966,"_id":968,"_type":16,"title":969,"_source":17,"_file":970,"_stem":971,"_extension":20},"/en-us/blog/automating-container-image-migration-from-amazon-ecr-to-gitlab",{"title":955,"description":956,"ogTitle":955,"ogDescription":956,"noIndex":6,"ogImage":957,"ogUrl":958,"ogSiteName":895,"ogType":896,"canonicalUrls":958,"schema":959},"Automating container image migration from Amazon ECR to GitLab","When platform teams move their CI/CD to GitLab, migrating container images shouldn't be the bottleneck. Follow this step-by-step guide to automate the pipeline migration process.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749663129/Blog/Hero%20Images/blog-image-template-1800x945__28_.png","https://about.gitlab.com/blog/automating-container-image-migration-from-amazon-ecr-to-gitlab","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Automating container image migration from Amazon ECR to GitLab\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Tim Rizzi\"}],\n        \"datePublished\": \"2025-02-13\",\n      }",{"title":955,"description":956,"authors":961,"heroImage":957,"date":963,"category":14,"tags":964},[962],"Tim Rizzi","2025-02-13",[110,965,728,543,749,945],"AWS",{"slug":967,"featured":92,"template":730},"automating-container-image-migration-from-amazon-ecr-to-gitlab","content:en-us:blog:automating-container-image-migration-from-amazon-ecr-to-gitlab.yml","Automating Container Image Migration From Amazon Ecr To Gitlab","en-us/blog/automating-container-image-migration-from-amazon-ecr-to-gitlab.yml","en-us/blog/automating-container-image-migration-from-amazon-ecr-to-gitlab",{"_path":973,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":974,"content":980,"config":986,"_id":988,"_type":16,"title":989,"_source":17,"_file":990,"_stem":991,"_extension":20},"/en-us/blog/deploy-a-nodejs-express-app-with-gitlabs-cloud-run-integration",{"title":975,"description":976,"ogTitle":975,"ogDescription":976,"noIndex":6,"ogImage":977,"ogUrl":978,"ogSiteName":895,"ogType":896,"canonicalUrls":978,"schema":979},"Deploy a NodeJS Express app with GitLab's Cloud Run integration","This tutorial will show you how to use NodeJS and Express to deploy an application to Google Cloud. This step-by-step guide will have you up and running in less than 10 minutes with the Cloud Run integration.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097892/Blog/Hero%20Images/Blog/Hero%20Images/speedlights_speedlights.png_1750097891963.png","https://about.gitlab.com/blog/deploy-a-nodejs-express-app-with-gitlabs-cloud-run-integration","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Deploy a NodeJS Express app with GitLab's Cloud Run integration\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Sarah Matthies\"},{\"@type\":\"Person\",\"name\":\"Noah Ing\"}],\n        \"datePublished\": \"2025-01-13\",\n      }",{"title":975,"description":976,"authors":981,"heroImage":977,"date":984,"category":14,"tags":985},[982,983],"Sarah Matthies","Noah Ing","2025-01-13",[110,925,233,945,728],{"slug":987,"featured":92,"template":730},"deploy-a-nodejs-express-app-with-gitlabs-cloud-run-integration","content:en-us:blog:deploy-a-nodejs-express-app-with-gitlabs-cloud-run-integration.yml","Deploy A Nodejs Express App With Gitlabs Cloud Run Integration","en-us/blog/deploy-a-nodejs-express-app-with-gitlabs-cloud-run-integration.yml","en-us/blog/deploy-a-nodejs-express-app-with-gitlabs-cloud-run-integration",{"_path":993,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":994,"content":999,"config":1004,"_id":1006,"_type":16,"title":1007,"_source":17,"_file":1008,"_stem":1009,"_extension":20},"/en-us/blog/how-to-deploy-a-php-app-using-gitlabs-cloud-run-integration",{"title":995,"description":996,"ogTitle":995,"ogDescription":996,"noIndex":6,"ogImage":789,"ogUrl":997,"ogSiteName":895,"ogType":896,"canonicalUrls":997,"schema":998},"How to deploy a PHP app using GitLab's Cloud Run integration","Are you using PHP and want an easy way to deploy your application to Google Cloud? Follow this guide to deploy your app with Google Cloud Run in under 10 minutes.","https://about.gitlab.com/blog/how-to-deploy-a-php-app-using-gitlabs-cloud-run-integration","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to deploy a PHP app using GitLab's Cloud Run integration\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Christian Nnachi\"},{\"@type\":\"Person\",\"name\":\"Noah Ing\"}],\n        \"datePublished\": \"2024-12-10\",\n      }",{"title":995,"description":996,"authors":1000,"heroImage":789,"date":1002,"category":14,"tags":1003},[1001,983],"Christian Nnachi","2024-12-10",[945,728,925,233],{"slug":1005,"featured":6,"template":730},"how-to-deploy-a-php-app-using-gitlabs-cloud-run-integration","content:en-us:blog:how-to-deploy-a-php-app-using-gitlabs-cloud-run-integration.yml","How To Deploy A Php App Using Gitlabs Cloud Run Integration","en-us/blog/how-to-deploy-a-php-app-using-gitlabs-cloud-run-integration.yml","en-us/blog/how-to-deploy-a-php-app-using-gitlabs-cloud-run-integration",{"_path":1011,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":1012,"content":1018,"config":1023,"_id":1025,"_type":16,"title":1026,"_source":17,"_file":1027,"_stem":1028,"_extension":20},"/en-us/blog/provision-group-runners-with-google-cloud-platform-and-gitlab-ci",{"title":1013,"description":1014,"ogTitle":1013,"ogDescription":1014,"noIndex":6,"ogImage":1015,"ogUrl":1016,"ogSiteName":895,"ogType":896,"canonicalUrls":1016,"schema":1017},"Provision group runners with Google Cloud Platform and GitLab CI","This tutorial will teach you how to set up a new group runner on GitLab.com using Google Cloud Platform in less than 10 minutes.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098300/Blog/Hero%20Images/Blog/Hero%20Images/AdobeStock_623844718_4E5Fx1Q0DHikigzCsQWhOG_1750098300048.jpg","https://about.gitlab.com/blog/provision-group-runners-with-google-cloud-platform-and-gitlab-ci","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Provision group runners with Google Cloud Platform and GitLab CI\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Sarah Matthies\"},{\"@type\":\"Person\",\"name\":\"Noah Ing\"}],\n        \"datePublished\": \"2024-11-19\",\n      }",{"title":1013,"description":1014,"authors":1019,"heroImage":1015,"date":1020,"category":14,"tags":1021},[982,983],"2024-11-19",[728,543,1022,110,945,925,233],"CI",{"slug":1024,"featured":6,"template":730},"provision-group-runners-with-google-cloud-platform-and-gitlab-ci","content:en-us:blog:provision-group-runners-with-google-cloud-platform-and-gitlab-ci.yml","Provision Group Runners With Google Cloud Platform And Gitlab Ci","en-us/blog/provision-group-runners-with-google-cloud-platform-and-gitlab-ci.yml","en-us/blog/provision-group-runners-with-google-cloud-platform-and-gitlab-ci",{"_path":1030,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":1031,"content":1037,"config":1042,"_id":1044,"_type":16,"title":1045,"_source":17,"_file":1046,"_stem":1047,"_extension":20},"/en-us/blog/tutorial-how-to-set-up-your-first-gitlab-ci-cd-component",{"title":1032,"description":1033,"ogTitle":1032,"ogDescription":1033,"noIndex":6,"ogImage":1034,"ogUrl":1035,"ogSiteName":895,"ogType":896,"canonicalUrls":1035,"schema":1036},"Tutorial: How to set up your first GitLab CI/CD component","Use Python scripts in your GitLab CI/CD pipelines to improve usability. In this step-by-step guide, you'll learn how to get started building your own CI/CD component.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098410/Blog/Hero%20Images/Blog/Hero%20Images/blog-image-template-1800x945%20%2826%29_3lH4gZFVIGCndksN6Rlg85_1750098409928.png","https://about.gitlab.com/blog/tutorial-how-to-set-up-your-first-gitlab-ci-cd-component","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Tutorial: How to set up your first GitLab CI/CD component\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Sophia Manicor\"},{\"@type\":\"Person\",\"name\":\"Noah Ing\"}],\n        \"datePublished\": \"2024-11-12\",\n      }",{"title":1032,"description":1033,"authors":1038,"heroImage":1034,"date":1040,"category":14,"tags":1041},[1039,983],"Sophia Manicor","2024-11-12",[110,728,574,945],{"slug":1043,"featured":92,"template":730},"tutorial-how-to-set-up-your-first-gitlab-ci-cd-component","content:en-us:blog:tutorial-how-to-set-up-your-first-gitlab-ci-cd-component.yml","Tutorial How To Set Up Your First Gitlab Ci Cd Component","en-us/blog/tutorial-how-to-set-up-your-first-gitlab-ci-cd-component.yml","en-us/blog/tutorial-how-to-set-up-your-first-gitlab-ci-cd-component",{"_path":1049,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":1050,"content":1056,"config":1061,"_id":1063,"_type":16,"title":1064,"_source":17,"_file":1065,"_stem":1066,"_extension":20},"/en-us/blog/fast-python-flask-server-deployment-with-gitlab-google-cloud",{"title":1051,"description":1052,"ogTitle":1051,"ogDescription":1052,"noIndex":6,"ogImage":1053,"ogUrl":1054,"ogSiteName":895,"ogType":896,"canonicalUrls":1054,"schema":1055},"Fast Python Flask server deployment with GitLab + Google Cloud","This tutorial shows how to use GitLab’s Google Cloud integration to deploy a Python Flask server in less than 10 minutes, helping developers become more independent and efficient.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098427/Blog/Hero%20Images/Blog/Hero%20Images/blog-image-template-1800x945_fJKX41PJHKCfSOWw4xQxm_1750098427691.png","https://about.gitlab.com/blog/fast-python-flask-server-deployment-with-gitlab-google-cloud","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Fast Python Flask server deployment with GitLab + Google Cloud\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Noah Ing\"},{\"@type\":\"Person\",\"name\":\"Jerez Solis\"}],\n        \"datePublished\": \"2024-11-04\",\n      }",{"title":1051,"description":1052,"authors":1057,"heroImage":1053,"date":1059,"category":14,"tags":1060},[983,1058],"Jerez Solis","2024-11-04",[728,582,925,945],{"slug":1062,"featured":92,"template":730},"fast-python-flask-server-deployment-with-gitlab-google-cloud","content:en-us:blog:fast-python-flask-server-deployment-with-gitlab-google-cloud.yml","Fast Python Flask Server Deployment With Gitlab Google Cloud","en-us/blog/fast-python-flask-server-deployment-with-gitlab-google-cloud.yml","en-us/blog/fast-python-flask-server-deployment-with-gitlab-google-cloud",{"_path":1068,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":1069,"content":1075,"config":1080,"_id":1082,"_type":16,"title":1083,"_source":17,"_file":1084,"_stem":1085,"_extension":20},"/en-us/blog/guide-to-rest-api",{"title":1070,"description":1071,"ogTitle":1070,"ogDescription":1071,"noIndex":6,"ogImage":1072,"ogUrl":1073,"ogSiteName":895,"ogType":896,"canonicalUrls":1073,"schema":1074},"Guide to REST API","Learn what REST API is, how it works, and what its benefit is in software development. Also find out the underlying principles of this important technology.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098516/Blog/Hero%20Images/Blog/Hero%20Images/blog-image-template-1800x945_2N8JxZDeeDLlzrsJ4boteB_1750098516673.png","https://about.gitlab.com/blog/guide-to-rest-api","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Guide to REST API\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"GitLab\"}],\n        \"datePublished\": \"2024-10-18\",\n      }",{"title":1070,"description":1071,"authors":1076,"heroImage":1072,"date":1078,"category":14,"tags":1079},[1077],"GitLab","2024-10-18",[233,564],{"slug":1081,"featured":6,"template":730},"guide-to-rest-api","content:en-us:blog:guide-to-rest-api.yml","Guide To Rest Api","en-us/blog/guide-to-rest-api.yml","en-us/blog/guide-to-rest-api",{"_path":1087,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":1088,"content":1094,"config":1101,"_id":1103,"_type":16,"title":1104,"_source":17,"_file":1105,"_stem":1106,"_extension":20},"/en-us/blog/how-we-designed-the-gitlab-reference-architectures",{"title":1089,"description":1090,"ogTitle":1089,"ogDescription":1090,"noIndex":6,"ogImage":1091,"ogUrl":1092,"ogSiteName":895,"ogType":896,"canonicalUrls":1092,"schema":1093},"How we designed the GitLab Reference Architectures","Take a look back with us as we dive into our Reference Architectures design journey to help users easily deploy GitLab at scale. Learn our goals, process, and what's happened in the five years since.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098651/Blog/Hero%20Images/Blog/Hero%20Images/blog-image-template-1800x945%20%282%29_52vS9ne2Hu3TElOeHep0AF_1750098651525.png","https://about.gitlab.com/blog/how-we-designed-the-gitlab-reference-architectures","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How we designed the GitLab Reference Architectures\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Grant Young\"}],\n        \"datePublished\": \"2024-10-02\",\n      }",{"title":1089,"description":1090,"authors":1095,"heroImage":1091,"date":1097,"category":14,"tags":1098},[1096],"Grant Young","2024-10-02",[1022,574,904,1099,1100],"inside GitLab","customers",{"slug":1102,"featured":92,"template":730},"how-we-designed-the-gitlab-reference-architectures","content:en-us:blog:how-we-designed-the-gitlab-reference-architectures.yml","How We Designed The Gitlab Reference Architectures","en-us/blog/how-we-designed-the-gitlab-reference-architectures.yml","en-us/blog/how-we-designed-the-gitlab-reference-architectures",{"_path":1108,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":1109,"content":1115,"config":1121,"_id":1123,"_type":16,"title":1124,"_source":17,"_file":1125,"_stem":1126,"_extension":20},"/en-us/blog/using-child-pipelines-to-continuously-deploy-to-five-environments",{"title":1110,"description":1111,"ogTitle":1110,"ogDescription":1111,"noIndex":6,"ogImage":1112,"ogUrl":1113,"ogSiteName":895,"ogType":896,"canonicalUrls":1113,"schema":1114},"Using child pipelines to continuously deploy to five environments","Learn how to manage continuous deployment to multiple environments, including temporary, on-the-fly sandboxes, with a minimalist GitLab workflow.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097012/Blog/Hero%20Images/Blog/Hero%20Images/AdobeStock_397632156_3Ldy1urjMStQCl4qnOBvE0_1750097011626.jpg","https://about.gitlab.com/blog/using-child-pipelines-to-continuously-deploy-to-five-environments","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Using child pipelines to continuously deploy to five environments\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Olivier Dupré\"}],\n        \"datePublished\": \"2024-09-26\",\n      }",{"title":1110,"description":1111,"authors":1116,"heroImage":1112,"date":1118,"category":14,"tags":1119},[1117],"Olivier Dupré","2024-09-26",[110,1022,1120,543,728],"CD",{"slug":1122,"featured":6,"template":730},"using-child-pipelines-to-continuously-deploy-to-five-environments","content:en-us:blog:using-child-pipelines-to-continuously-deploy-to-five-environments.yml","Using Child Pipelines To Continuously Deploy To Five Environments","en-us/blog/using-child-pipelines-to-continuously-deploy-to-five-environments.yml","en-us/blog/using-child-pipelines-to-continuously-deploy-to-five-environments",{"_path":1128,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":1129,"content":1135,"config":1142,"_id":1144,"_type":16,"title":1145,"_source":17,"_file":1146,"_stem":1147,"_extension":20},"/en-us/blog/navigate-application-architecture-drift-and-organizational-alignment",{"title":1130,"description":1131,"ogTitle":1130,"ogDescription":1131,"noIndex":6,"ogImage":1132,"ogUrl":1133,"ogSiteName":895,"ogType":896,"canonicalUrls":1133,"schema":1134},"Navigate application architecture drift and organizational alignment","Explore how to manage architecture drift by balancing simplification and team realignment using the FINE Analysis. Ensure efficiency and agility throughout an application's lifecycle.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749676151/Blog/Hero%20Images/navigation.jpg","https://about.gitlab.com/blog/navigate-application-architecture-drift-and-organizational-alignment","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Navigate application architecture drift and organizational alignment\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Stephen Walters\"},{\"@type\":\"Person\",\"name\":\"Lee Faus\"}],\n        \"datePublished\": \"2024-09-18\",\n      }",{"title":1130,"description":1131,"authors":1136,"heroImage":1132,"date":1139,"category":14,"tags":1140},[1137,1138],"Stephen Walters","Lee Faus","2024-09-18",[574,1141],"design",{"slug":1143,"featured":92,"template":730},"navigate-application-architecture-drift-and-organizational-alignment","content:en-us:blog:navigate-application-architecture-drift-and-organizational-alignment.yml","Navigate Application Architecture Drift And Organizational Alignment","en-us/blog/navigate-application-architecture-drift-and-organizational-alignment.yml","en-us/blog/navigate-application-architecture-drift-and-organizational-alignment",{"_path":1149,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":1150,"content":1156,"config":1162,"_id":1164,"_type":16,"title":1165,"_source":17,"_file":1166,"_stem":1167,"_extension":20},"/en-us/blog/building-gitlab-with-gitlab-a-multi-region-service-to-deliver-ai-features",{"title":1151,"description":1152,"ogTitle":1151,"ogDescription":1152,"noIndex":6,"ogImage":1153,"ogUrl":1154,"ogSiteName":895,"ogType":896,"canonicalUrls":1154,"schema":1155},"Building GitLab with GitLab: A multi-region service to deliver AI features","Discover how we built our first multi-region deployment for teams at GitLab using the platform's many features, helping create a frictionless developer experience for GitLab Duo users.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098664/Blog/Hero%20Images/Blog/Hero%20Images/building-gitlab-with-gitlab-no-type_building-gitlab-with-gitlab-no-type.png_1750098663794.png","https://about.gitlab.com/blog/building-gitlab-with-gitlab-a-multi-region-service-to-deliver-ai-features","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Building GitLab with GitLab: A multi-region service to deliver AI features\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Chance Feick\"},{\"@type\":\"Person\",\"name\":\"Sam Wiskow\"}],\n        \"datePublished\": \"2024-09-12\",\n      }",{"title":1151,"description":1152,"authors":1157,"heroImage":1153,"date":1160,"category":14,"tags":1161},[1158,1159],"Chance Feick","Sam Wiskow","2024-09-12",[110,1120,1022,1099,728,904,925,792,574,865],{"slug":1163,"featured":92,"template":730},"building-gitlab-with-gitlab-a-multi-region-service-to-deliver-ai-features","content:en-us:blog:building-gitlab-with-gitlab-a-multi-region-service-to-deliver-ai-features.yml","Building Gitlab With Gitlab A Multi Region Service To Deliver Ai Features","en-us/blog/building-gitlab-with-gitlab-a-multi-region-service-to-deliver-ai-features.yml","en-us/blog/building-gitlab-with-gitlab-a-multi-region-service-to-deliver-ai-features",{"_path":1169,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":1170,"content":1176,"config":1181,"_id":1183,"_type":16,"title":1184,"_source":17,"_file":1185,"_stem":1186,"_extension":20},"/en-us/blog/how-to-stream-logs-through-the-gitlab-dashboard-for-kubernetes",{"title":1171,"description":1172,"ogTitle":1171,"ogDescription":1172,"noIndex":6,"ogImage":1173,"ogUrl":1174,"ogSiteName":895,"ogType":896,"canonicalUrls":1174,"schema":1175},"How to stream logs through the GitLab Dashboard for Kubernetes","In GitLab 17.2, users can now view Kubernetes pod and container logs directly via the GitLab UI. This tutorial shows how to use this new feature to simplify monitoring Kubernetes infrastructure.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749662245/Blog/Hero%20Images/blog-image-template-1800x945__16_.png","https://about.gitlab.com/blog/how-to-stream-logs-through-the-gitlab-dashboard-for-kubernetes","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to stream logs through the GitLab Dashboard for Kubernetes\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Daniel Helfand\"}],\n        \"datePublished\": \"2024-08-19\",\n      }",{"title":1171,"description":1172,"authors":1177,"heroImage":1173,"date":1178,"category":14,"tags":1179},[724],"2024-08-19",[750,559,1180,728],"kubernetes",{"slug":1182,"featured":92,"template":730},"how-to-stream-logs-through-the-gitlab-dashboard-for-kubernetes","content:en-us:blog:how-to-stream-logs-through-the-gitlab-dashboard-for-kubernetes.yml","How To Stream Logs Through The Gitlab Dashboard For Kubernetes","en-us/blog/how-to-stream-logs-through-the-gitlab-dashboard-for-kubernetes.yml","en-us/blog/how-to-stream-logs-through-the-gitlab-dashboard-for-kubernetes",{"_path":1188,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":1189,"content":1195,"config":1201,"_id":1203,"_type":16,"title":1204,"_source":17,"_file":1205,"_stem":1206,"_extension":20},"/en-us/blog/faq-gitlab-ci-cd-catalog",{"title":1190,"description":1191,"ogTitle":1190,"ogDescription":1191,"noIndex":6,"ogImage":1192,"ogUrl":1193,"ogSiteName":895,"ogType":896,"canonicalUrls":1193,"schema":1194},"FAQ: GitLab CI/CD Catalog","Unlock the full potential of the CI/CD Catalog with expert tips and answers to common questions, including how to create and share components.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098783/Blog/Hero%20Images/Blog/Hero%20Images/cicdcover_5vLe737i4QfvAqv6PnqUaR_1750098782745.png","https://about.gitlab.com/blog/faq-gitlab-ci-cd-catalog","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"FAQ: GitLab CI/CD Catalog\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Itzik Gan Baruch\"},{\"@type\":\"Person\",\"name\":\"Dov Hershkovitch\"}],\n        \"datePublished\": \"2024-08-01\",\n      }",{"title":1190,"description":1191,"authors":1196,"heroImage":1192,"date":1199,"category":14,"tags":1200},[1197,1198],"Itzik Gan Baruch","Dov Hershkovitch","2024-08-01",[110,574],{"slug":1202,"featured":92,"template":730},"faq-gitlab-ci-cd-catalog","content:en-us:blog:faq-gitlab-ci-cd-catalog.yml","Faq Gitlab Ci Cd Catalog","en-us/blog/faq-gitlab-ci-cd-catalog.yml","en-us/blog/faq-gitlab-ci-cd-catalog",{"_path":1208,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":1209,"content":1215,"config":1220,"_id":1222,"_type":16,"title":1223,"_source":17,"_file":1224,"_stem":1225,"_extension":20},"/en-us/blog/building-a-gitlab-ci-cd-pipeline-for-a-monorepo-the-easy-way",{"title":1210,"description":1211,"ogTitle":1210,"ogDescription":1211,"noIndex":6,"ogImage":1212,"ogUrl":1213,"ogSiteName":895,"ogType":896,"canonicalUrls":1213,"schema":1214},"Building a GitLab CI/CD pipeline for a monorepo the easy way","Learn how to create a GitLab CI/CD pipeline for a monorepo to host multiple applications in one repository.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749660151/Blog/Hero%20Images/blog-image-template-1800x945__26_.png","https://about.gitlab.com/blog/building-a-gitlab-ci-cd-pipeline-for-a-monorepo-the-easy-way","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Building a GitLab CI/CD pipeline for a monorepo the easy way\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Sam Morris\"}],\n        \"datePublished\": \"2024-07-30\",\n      }",{"title":1210,"description":1211,"authors":1216,"heroImage":1212,"date":1218,"category":14,"tags":1219},[1217],"Sam Morris","2024-07-30",[110,728],{"slug":1221,"featured":6,"template":730},"building-a-gitlab-ci-cd-pipeline-for-a-monorepo-the-easy-way","content:en-us:blog:building-a-gitlab-ci-cd-pipeline-for-a-monorepo-the-easy-way.yml","Building A Gitlab Ci Cd Pipeline For A Monorepo The Easy Way","en-us/blog/building-a-gitlab-ci-cd-pipeline-for-a-monorepo-the-easy-way.yml","en-us/blog/building-a-gitlab-ci-cd-pipeline-for-a-monorepo-the-easy-way",{"_path":1227,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":1228,"content":1234,"config":1240,"_id":1242,"_type":16,"title":1243,"_source":17,"_file":1244,"_stem":1245,"_extension":20},"/en-us/blog/kubernetes-overview-operate-cluster-data-on-the-frontend",{"title":1229,"description":1230,"ogTitle":1229,"ogDescription":1230,"noIndex":6,"ogImage":1231,"ogUrl":1232,"ogSiteName":895,"ogType":896,"canonicalUrls":1232,"schema":1233},"Kubernetes overview: Operate cluster data on the frontend","GitLab offers a built-in solution for monitoring your Kubernetes cluster health. Learn more about the technical design and functionality with this detailed guide.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099045/Blog/Hero%20Images/Blog/Hero%20Images/blog-image-template-1800x945%20%2816%29_3L7ZP4GxJrShu6qImuS4Wo_1750099045397.png","https://about.gitlab.com/blog/kubernetes-overview-operate-cluster-data-on-the-frontend","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Kubernetes overview: Operate cluster data on the frontend\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Anna Vovchenko\"}],\n        \"datePublished\": \"2024-06-20\",\n      }",{"title":1229,"description":1230,"authors":1235,"heroImage":1231,"date":1237,"updatedDate":1238,"category":14,"tags":1239},[1236],"Anna Vovchenko","2024-06-20","2025-09-17",[1180,750,728],{"slug":1241,"featured":92,"template":730},"kubernetes-overview-operate-cluster-data-on-the-frontend","content:en-us:blog:kubernetes-overview-operate-cluster-data-on-the-frontend.yml","Kubernetes Overview Operate Cluster Data On The Frontend","en-us/blog/kubernetes-overview-operate-cluster-data-on-the-frontend.yml","en-us/blog/kubernetes-overview-operate-cluster-data-on-the-frontend",{"_path":1247,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":1248,"content":1254,"config":1260,"_id":1262,"_type":16,"title":1263,"_source":17,"_file":1264,"_stem":1265,"_extension":20},"/en-us/blog/debug-web-apps-quickly-within-gitlab",{"title":1249,"description":1250,"ogTitle":1249,"ogDescription":1250,"noIndex":6,"ogImage":1251,"ogUrl":1252,"ogSiteName":895,"ogType":896,"canonicalUrls":1252,"schema":1253},"Debug Web apps quickly within GitLab","Jam for GitLab, a browser extension, creates GitLab issues with critical context such as browser info, console/network logs, and reproduction steps - in one click.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099168/Blog/Hero%20Images/Blog/Hero%20Images/blog-image-template-1800x945%20%2810%29_arHGAEPyRHF7euCvaxE0S_1750099168482.png","https://about.gitlab.com/blog/debug-web-apps-quickly-within-gitlab","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Debug Web apps quickly within GitLab\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Ivanha Paz\"}],\n        \"datePublished\": \"2024-05-08\",\n      }",{"title":1249,"description":1250,"authors":1255,"heroImage":1251,"date":1257,"category":14,"tags":1258},[1256],"Ivanha Paz","2024-05-08",[233,1259,574],"code review",{"slug":1261,"featured":6,"template":730},"debug-web-apps-quickly-within-gitlab","content:en-us:blog:debug-web-apps-quickly-within-gitlab.yml","Debug Web Apps Quickly Within Gitlab","en-us/blog/debug-web-apps-quickly-within-gitlab.yml","en-us/blog/debug-web-apps-quickly-within-gitlab",{"_path":1267,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":1268,"content":1274,"config":1279,"_id":1281,"_type":16,"title":1282,"_source":17,"_file":1283,"_stem":1284,"_extension":20},"/en-us/blog/tutorial-install-vs-code-on-a-cloud-provider-vm-and-set-up-remote-access",{"title":1269,"description":1270,"ogTitle":1269,"ogDescription":1270,"noIndex":6,"ogImage":1271,"ogUrl":1272,"ogSiteName":895,"ogType":896,"canonicalUrls":1272,"schema":1273},"Tutorial: Install VS Code on a cloud provider VM and set up remote access","Learn how to automate the installation of VS Code on a VM running on a cloud provider and how to access it from your local laptop.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749670563/Blog/Hero%20Images/cloudcomputing.jpg","https://about.gitlab.com/blog/tutorial-install-vs-code-on-a-cloud-provider-vm-and-set-up-remote-access","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Tutorial: Install VS Code on a cloud provider VM and set up remote access\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Cesar Saavedra\"}],\n        \"datePublished\": \"2024-05-06\",\n      }",{"title":1269,"description":1270,"authors":1275,"heroImage":1271,"date":1277,"category":14,"tags":1278},[1276],"Cesar Saavedra","2024-05-06",[582,728,809],{"slug":1280,"featured":92,"template":730},"tutorial-install-vs-code-on-a-cloud-provider-vm-and-set-up-remote-access","content:en-us:blog:tutorial-install-vs-code-on-a-cloud-provider-vm-and-set-up-remote-access.yml","Tutorial Install Vs Code On A Cloud Provider Vm And Set Up Remote Access","en-us/blog/tutorial-install-vs-code-on-a-cloud-provider-vm-and-set-up-remote-access.yml","en-us/blog/tutorial-install-vs-code-on-a-cloud-provider-vm-and-set-up-remote-access",{"_path":1286,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":1287,"content":1293,"config":1297,"_id":1299,"_type":16,"title":1300,"_source":17,"_file":1301,"_stem":1302,"_extension":20},"/en-us/blog/refactoring-a-ci-cd-template-to-a-ci-cd-component",{"title":1288,"description":1289,"ogTitle":1288,"ogDescription":1289,"noIndex":6,"ogImage":1290,"ogUrl":1291,"ogSiteName":895,"ogType":896,"canonicalUrls":1291,"schema":1292},"Refactoring a CI/CD template to a CI/CD component","CI/CD components are the next generation of CI/CD templates, enhancing pipeline creation and maintenance. Learn how to transition from templates to components.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749665989/Blog/Hero%20Images/AdobeStock_618473457.jpg","https://about.gitlab.com/blog/refactoring-a-ci-cd-template-to-a-ci-cd-component","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Refactoring a CI/CD template to a CI/CD component\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Itzik Gan Baruch\"}],\n        \"datePublished\": \"2024-03-04\",\n      }",{"title":1288,"description":1289,"authors":1294,"heroImage":1290,"date":1295,"category":14,"tags":1296},[1197],"2024-03-04",[110,574,728],{"slug":1298,"featured":92,"template":730},"refactoring-a-ci-cd-template-to-a-ci-cd-component","content:en-us:blog:refactoring-a-ci-cd-template-to-a-ci-cd-component.yml","Refactoring A Ci Cd Template To A Ci Cd Component","en-us/blog/refactoring-a-ci-cd-template-to-a-ci-cd-component.yml","en-us/blog/refactoring-a-ci-cd-template-to-a-ci-cd-component",{"_path":1304,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":1305,"content":1311,"config":1317,"_id":1319,"_type":16,"title":1320,"_source":17,"_file":1321,"_stem":1322,"_extension":20},"/en-us/blog/revisiting-the-variables-management-workflow",{"title":1306,"description":1307,"ogTitle":1306,"ogDescription":1307,"noIndex":6,"ogImage":1308,"ogUrl":1309,"ogSiteName":895,"ogType":896,"canonicalUrls":1309,"schema":1310},"Revisiting the variables management workflow","Our users helped us identify the hurdles in the variables management experience and we used those insights to guide improvements.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098484/Blog/Hero%20Images/Blog/Hero%20Images/AdobeStock_618473457_nd5Dr8kfGdrlTWLOPmDjb_1750098483284.jpg","https://about.gitlab.com/blog/revisiting-the-variables-management-workflow","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Revisiting the variables management workflow\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Veethika Mishra\"}],\n        \"datePublished\": \"2024-02-26\",\n      }",{"title":1306,"description":1307,"authors":1312,"heroImage":1308,"date":1314,"category":14,"tags":1315},[1313],"Veethika Mishra","2024-02-26",[110,1316,574,564],"UX",{"slug":1318,"featured":92,"template":730},"revisiting-the-variables-management-workflow","content:en-us:blog:revisiting-the-variables-management-workflow.yml","Revisiting The Variables Management Workflow","en-us/blog/revisiting-the-variables-management-workflow.yml","en-us/blog/revisiting-the-variables-management-workflow",{"_path":1324,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":1325,"content":1331,"config":1336,"_id":1338,"_type":16,"title":1339,"_source":17,"_file":1340,"_stem":1341,"_extension":20},"/en-us/blog/how-to-translate-bamboo-agent-capabilities-to-gitlab-runner-tags",{"title":1326,"description":1327,"ogTitle":1326,"ogDescription":1327,"noIndex":6,"ogImage":1328,"ogUrl":1329,"ogSiteName":895,"ogType":896,"canonicalUrls":1329,"schema":1330},"How to translate Bamboo agent capabilities to GitLab Runner tags  ","This tutorial demonstrates how to use tags to organize GitLab Runners when building complex CI/CD pipelines.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749663019/Blog/Hero%20Images/AdobeStock_519147119.jpg","https://about.gitlab.com/blog/how-to-translate-bamboo-agent-capabilities-to-gitlab-runner-tags","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to translate Bamboo agent capabilities to GitLab Runner tags  \",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Abubakar Siddiq Ango\"}],\n        \"datePublished\": \"2024-02-22\",\n      }",{"title":1326,"description":1327,"authors":1332,"heroImage":1328,"date":1334,"category":14,"tags":1335},[1333],"Abubakar Siddiq Ango","2024-02-22",[110,1022,728],{"slug":1337,"featured":92,"template":730},"how-to-translate-bamboo-agent-capabilities-to-gitlab-runner-tags","content:en-us:blog:how-to-translate-bamboo-agent-capabilities-to-gitlab-runner-tags.yml","How To Translate Bamboo Agent Capabilities To Gitlab Runner Tags","en-us/blog/how-to-translate-bamboo-agent-capabilities-to-gitlab-runner-tags.yml","en-us/blog/how-to-translate-bamboo-agent-capabilities-to-gitlab-runner-tags",{"_path":1343,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":1344,"content":1350,"config":1355,"_id":1357,"_type":16,"title":1358,"_source":17,"_file":1359,"_stem":1360,"_extension":20},"/en-us/blog/compose-readers-and-writers-in-golang-applications",{"title":1345,"description":1346,"ogTitle":1345,"ogDescription":1346,"noIndex":6,"ogImage":1347,"ogUrl":1348,"ogSiteName":895,"ogType":896,"canonicalUrls":1348,"schema":1349},"Compose Readers and Writers in Golang applications","GitLab streams terabytes of Git data every hour using Golang abstractions of I/O implementations. Learn how to compose Readers and Writers in Golang apps.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099464/Blog/Hero%20Images/Blog/Hero%20Images/AdobeStock_639935439_3oqldo5Yt5wPonEJYZOLTM_1750099464124.jpg","https://about.gitlab.com/blog/compose-readers-and-writers-in-golang-applications","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Compose Readers and Writers in Golang applications\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Igor Drozdov\"}],\n        \"datePublished\": \"2024-02-15\",\n      }",{"title":1345,"description":1346,"authors":1351,"heroImage":1347,"date":1353,"category":14,"tags":1354},[1352],"Igor Drozdov","2024-02-15",[728,792,1099,904],{"slug":1356,"featured":6,"template":730},"compose-readers-and-writers-in-golang-applications","content:en-us:blog:compose-readers-and-writers-in-golang-applications.yml","Compose Readers And Writers In Golang Applications","en-us/blog/compose-readers-and-writers-in-golang-applications.yml","en-us/blog/compose-readers-and-writers-in-golang-applications",{"_path":1362,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":1363,"content":1368,"config":1374,"_id":1376,"_type":16,"title":1377,"_source":17,"_file":1378,"_stem":1379,"_extension":20},"/en-us/blog/quick-setup-of-a-gke-cluster-with-argocd-pre-installed-using-terraform",{"title":1364,"description":1365,"ogTitle":1364,"ogDescription":1365,"noIndex":6,"ogImage":1290,"ogUrl":1366,"ogSiteName":895,"ogType":896,"canonicalUrls":1366,"schema":1367},"Quick setup of a GKE Cluster with ArgoCD pre-installed using Terraform","Use this tutorial as a great starting point to manage your cluster entirely through GitOps.","https://about.gitlab.com/blog/quick-setup-of-a-gke-cluster-with-argocd-pre-installed-using-terraform","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Quick setup of a GKE Cluster with ArgoCD pre-installed using Terraform\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Noah Ing\"},{\"@type\":\"Person\",\"name\":\"Siddharth Mathur\"}],\n        \"datePublished\": \"2024-01-31\",\n      }",{"title":1364,"description":1365,"authors":1369,"heroImage":1290,"date":1371,"category":14,"tags":1372},[983,1370],"Siddharth Mathur","2024-01-31",[559,1373,110,574,945],"GKE",{"slug":1375,"featured":6,"template":730},"quick-setup-of-a-gke-cluster-with-argocd-pre-installed-using-terraform","content:en-us:blog:quick-setup-of-a-gke-cluster-with-argocd-pre-installed-using-terraform.yml","Quick Setup Of A Gke Cluster With Argocd Pre Installed Using Terraform","en-us/blog/quick-setup-of-a-gke-cluster-with-argocd-pre-installed-using-terraform.yml","en-us/blog/quick-setup-of-a-gke-cluster-with-argocd-pre-installed-using-terraform",{"_path":1381,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":1382,"content":1388,"config":1393,"_id":1395,"_type":16,"title":1396,"_source":17,"_file":1397,"_stem":1398,"_extension":20},"/en-us/blog/inside-the-improved-ci-logs-management-experience-for-multi-line-commands",{"title":1383,"description":1384,"ogTitle":1383,"ogDescription":1384,"noIndex":6,"ogImage":1385,"ogUrl":1386,"ogSiteName":895,"ogType":896,"canonicalUrls":1386,"schema":1387},"Inside the improved CI logs management experience for multi-line commands","Reviewing log output for CI/CD jobs with multi-line commands is now easier than ever. Find out why, how to configure your pipelines, and what's ahead.\n\n","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099499/Blog/Hero%20Images/Blog/Hero%20Images/AdobeStock_639935439_3oqldo5Yt5wPonEJYZOLTM_1750099498739.jpg","https://about.gitlab.com/blog/inside-the-improved-ci-logs-management-experience-for-multi-line-commands","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Inside the improved CI logs management experience for multi-line commands\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Romuald Atchadé\"}],\n        \"datePublished\": \"2024-01-25\",\n      }",{"title":1383,"description":1384,"authors":1389,"heroImage":1385,"date":1391,"category":14,"tags":1392},[1390],"Romuald Atchadé","2024-01-25",[1022,1120,110,728],{"slug":1394,"featured":92,"template":730},"inside-the-improved-ci-logs-management-experience-for-multi-line-commands","content:en-us:blog:inside-the-improved-ci-logs-management-experience-for-multi-line-commands.yml","Inside The Improved Ci Logs Management Experience For Multi Line Commands","en-us/blog/inside-the-improved-ci-logs-management-experience-for-multi-line-commands.yml","en-us/blog/inside-the-improved-ci-logs-management-experience-for-multi-line-commands",{"_path":1400,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":1401,"content":1407,"config":1411,"_id":1413,"_type":16,"title":1414,"_source":17,"_file":1415,"_stem":1416,"_extension":20},"/en-us/blog/introducing-the-gitlab-ci-cd-catalog-beta",{"title":1402,"description":1403,"ogTitle":1402,"ogDescription":1403,"noIndex":6,"ogImage":1404,"ogUrl":1405,"ogSiteName":895,"ogType":896,"canonicalUrls":1405,"schema":1406},"Introducing the GitLab CI/CD Catalog Beta","Discover, reuse, and contribute CI/CD components effortlessly, enhancing collaboration and efficiency when creating pipeline configurations.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099399/Blog/Hero%20Images/Blog/Hero%20Images/security-pipelines_4UHVIJlePT8rEzjvYkGYvi_1750099398604.jpg","https://about.gitlab.com/blog/introducing-the-gitlab-ci-cd-catalog-beta","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Introducing the GitLab CI/CD Catalog Beta\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Itzik Gan Baruch\"}],\n        \"datePublished\": \"2023-12-21\",\n      }",{"title":1402,"description":1403,"authors":1408,"heroImage":1404,"date":1409,"category":14,"tags":1410},[1197],"2023-12-21",[110,881,564,728],{"slug":1412,"featured":6,"template":730},"introducing-the-gitlab-ci-cd-catalog-beta","content:en-us:blog:introducing-the-gitlab-ci-cd-catalog-beta.yml","Introducing The Gitlab Ci Cd Catalog Beta","en-us/blog/introducing-the-gitlab-ci-cd-catalog-beta.yml","en-us/blog/introducing-the-gitlab-ci-cd-catalog-beta",{"_path":1418,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":1419,"content":1425,"config":1432,"_id":1434,"_type":16,"title":1435,"_source":17,"_file":1436,"_stem":1437,"_extension":20},"/en-us/blog/how-we-user-research-transformed-gitlab-runner-fleet-dashboard-visibility-and-metrics",{"title":1420,"description":1421,"ogTitle":1420,"ogDescription":1421,"noIndex":6,"ogImage":1422,"ogUrl":1423,"ogSiteName":895,"ogType":896,"canonicalUrls":1423,"schema":1424},"GitLab Runner Fleet dashboard improved through user research","Learn how GitLab user research drives the product development process when enabling more runner fleet features.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749666543/Blog/Hero%20Images/lightvisibility.png","https://about.gitlab.com/blog/how-we-user-research-transformed-gitlab-runner-fleet-dashboard-visibility-and-metrics","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How user research transformed GitLab Runner Fleet dashboard visibility and metrics\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Gina Doyle\"}],\n        \"datePublished\": \"2023-11-07\",\n      }",{"title":1426,"description":1421,"authors":1427,"heroImage":1422,"date":1429,"category":14,"tags":1430},"How user research transformed GitLab Runner Fleet dashboard visibility and metrics",[1428],"Gina Doyle","2023-11-07",[110,1431,1141],"research",{"slug":1433,"featured":6,"template":730},"how-we-user-research-transformed-gitlab-runner-fleet-dashboard-visibility-and-metrics","content:en-us:blog:how-we-user-research-transformed-gitlab-runner-fleet-dashboard-visibility-and-metrics.yml","How We User Research Transformed Gitlab Runner Fleet Dashboard Visibility And Metrics","en-us/blog/how-we-user-research-transformed-gitlab-runner-fleet-dashboard-visibility-and-metrics.yml","en-us/blog/how-we-user-research-transformed-gitlab-runner-fleet-dashboard-visibility-and-metrics",{"_path":1439,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":1440,"content":1446,"config":1452,"_id":1454,"_type":16,"title":1455,"_source":17,"_file":1456,"_stem":1457,"_extension":20},"/en-us/blog/rearchitecting-git-object-database-mainentance-for-scale",{"title":1441,"description":1442,"ogTitle":1441,"ogDescription":1442,"noIndex":6,"ogImage":1443,"ogUrl":1444,"ogSiteName":895,"ogType":896,"canonicalUrls":1444,"schema":1445},"Why and how we rearchitected Git object database maintenance for scale","Go in-depth into improvements to maintenance of the Git object database for reduced overhead and increased efficiency.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749664413/Blog/Hero%20Images/speedlights.png","https://about.gitlab.com/blog/rearchitecting-git-object-database-mainentance-for-scale","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Why and how we rearchitected Git object database maintenance for scale\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Patrick Steinhardt\"}],\n        \"datePublished\": \"2023-11-02\",\n      }",{"title":1441,"description":1442,"authors":1447,"heroImage":1443,"date":1449,"category":14,"tags":1450},[1448],"Patrick Steinhardt","2023-11-02",[792,1451,904,809],"production",{"slug":1453,"featured":6,"template":730},"rearchitecting-git-object-database-mainentance-for-scale","content:en-us:blog:rearchitecting-git-object-database-mainentance-for-scale.yml","Rearchitecting Git Object Database Mainentance For Scale","en-us/blog/rearchitecting-git-object-database-mainentance-for-scale.yml","en-us/blog/rearchitecting-git-object-database-mainentance-for-scale",{"_path":1459,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":1460,"content":1466,"config":1471,"_id":1473,"_type":16,"title":1474,"_source":17,"_file":1475,"_stem":1476,"_extension":20},"/en-us/blog/access-token-lifetime-limits",{"title":1461,"description":1462,"ogTitle":1461,"ogDescription":1462,"noIndex":6,"ogImage":1463,"ogUrl":1464,"ogSiteName":895,"ogType":896,"canonicalUrls":1464,"schema":1465},"Why GitLab access tokens now have lifetime limits","Pre-existing and new personal, group, or project access tokens now have enforced lifetime limits. Find out why and learn how to minimize disruption.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749662877/Blog/Hero%20Images/security-cover-new.png","https://about.gitlab.com/blog/access-token-lifetime-limits","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Why GitLab access tokens now have lifetime limits\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Hannah Sutor\"}],\n        \"datePublished\": \"2023-10-25\",\n      }",{"title":1461,"description":1462,"authors":1467,"heroImage":1463,"date":1469,"category":14,"tags":1470},[1468],"Hannah Sutor","2023-10-25",[749,751],{"slug":1472,"featured":6,"template":730},"access-token-lifetime-limits","content:en-us:blog:access-token-lifetime-limits.yml","Access Token Lifetime Limits","en-us/blog/access-token-lifetime-limits.yml","en-us/blog/access-token-lifetime-limits",{"_path":1478,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":1479,"content":1485,"config":1490,"_id":1492,"_type":16,"title":1493,"_source":17,"_file":1494,"_stem":1495,"_extension":20},"/en-us/blog/microcks-and-gitlab-part-one",{"title":1480,"description":1481,"ogTitle":1480,"ogDescription":1481,"noIndex":6,"ogImage":1482,"ogUrl":1483,"ogSiteName":895,"ogType":896,"canonicalUrls":1483,"schema":1484},"Speed up API and microservices delivery with Microcks and GitLab - Part 1","Learn how to configure Microcks for GitLab and what the use cases are for this open source Kubernetes-native tool.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749683021/Blog/Hero%20Images/lightsticks.png","https://about.gitlab.com/blog/microcks-and-gitlab-part-one","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Speed up API and microservices delivery with Microcks and GitLab - Part 1\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Madou Coulibaly\"}],\n        \"datePublished\": \"2023-09-27\",\n      }",{"title":1480,"description":1481,"authors":1486,"heroImage":1482,"date":1488,"category":14,"tags":1489},[1487],"Madou Coulibaly","2023-09-27",[965,773,110,582,233],{"slug":1491,"featured":6,"template":730},"microcks-and-gitlab-part-one","content:en-us:blog:microcks-and-gitlab-part-one.yml","Microcks And Gitlab Part One","en-us/blog/microcks-and-gitlab-part-one.yml","en-us/blog/microcks-and-gitlab-part-one",{"_path":1497,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":1498,"content":1503,"config":1508,"_id":1510,"_type":16,"title":1511,"_source":17,"_file":1512,"_stem":1513,"_extension":20},"/en-us/blog/exporting-vulnerability-reports-to-html-pdf-jira",{"title":1499,"description":1500,"ogTitle":1499,"ogDescription":1500,"noIndex":6,"ogImage":1463,"ogUrl":1501,"ogSiteName":895,"ogType":896,"canonicalUrls":1501,"schema":1502},"How to export vulnerability reports to HTML/PDF and Jira","With GitLab's API, it's easy to query vulnerability info and send the report details elsewhere, such as a PDF file or a Jira project.","https://about.gitlab.com/blog/exporting-vulnerability-reports-to-html-pdf-jira","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to export vulnerability reports to HTML/PDF and Jira\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Siddharth Mathur\"}],\n        \"datePublished\": \"2023-09-14\",\n      }",{"title":1499,"description":1500,"authors":1504,"heroImage":1463,"date":1505,"category":14,"tags":1506},[1370],"2023-09-14",[728,1507,751,965],"collaboration",{"slug":1509,"featured":6,"template":730},"exporting-vulnerability-reports-to-html-pdf-jira","content:en-us:blog:exporting-vulnerability-reports-to-html-pdf-jira.yml","Exporting Vulnerability Reports To Html Pdf Jira","en-us/blog/exporting-vulnerability-reports-to-html-pdf-jira.yml","en-us/blog/exporting-vulnerability-reports-to-html-pdf-jira",{"_path":1515,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":1516,"content":1522,"config":1526,"_id":1528,"_type":16,"title":1529,"_source":17,"_file":1530,"_stem":1531,"_extension":20},"/en-us/blog/hosting-vuejs-apps-using-gitlab-pages",{"title":1517,"description":1518,"ogTitle":1517,"ogDescription":1518,"noIndex":6,"ogImage":1519,"ogUrl":1520,"ogSiteName":895,"ogType":896,"canonicalUrls":1520,"schema":1521},"How to host VueJS apps using GitLab Pages","Follow this tutorial, including detailed configuration guidance, to quickly get your application up and running for free.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749683489/Blog/Hero%20Images/hosting.png","https://about.gitlab.com/blog/hosting-vuejs-apps-using-gitlab-pages","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to host VueJS apps using GitLab Pages\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Sophia Manicor\"},{\"@type\":\"Person\",\"name\":\"Noah Ing\"}],\n        \"datePublished\": \"2023-09-13\",\n      }",{"title":1517,"description":1518,"authors":1523,"heroImage":1519,"date":1524,"category":14,"tags":1525},[1039,983],"2023-09-13",[110,728,1022,1120],{"slug":1527,"featured":6,"template":730},"hosting-vuejs-apps-using-gitlab-pages","content:en-us:blog:hosting-vuejs-apps-using-gitlab-pages.yml","Hosting Vuejs Apps Using Gitlab Pages","en-us/blog/hosting-vuejs-apps-using-gitlab-pages.yml","en-us/blog/hosting-vuejs-apps-using-gitlab-pages",{"_path":1533,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":1534,"content":1540,"config":1544,"_id":1546,"_type":16,"title":1547,"_source":17,"_file":1548,"_stem":1549,"_extension":20},"/en-us/blog/cascading-merge-requests-with-gitlab-flow",{"title":1535,"description":1536,"ogTitle":1535,"ogDescription":1536,"noIndex":6,"ogImage":1537,"ogUrl":1538,"ogSiteName":895,"ogType":896,"canonicalUrls":1538,"schema":1539},"How to adopt a cascading merge request strategy with GitLab Flow","This tutorial explains how to consolidate updates in a single branch and propagate them to other branches using ucascade bot.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749679851/Blog/Hero%20Images/cascade.jpg","https://about.gitlab.com/blog/cascading-merge-requests-with-gitlab-flow","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to adopt a cascading merge request strategy with GitLab Flow\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Madou Coulibaly\"}],\n        \"datePublished\": \"2023-08-31\",\n      }",{"title":1535,"description":1536,"authors":1541,"heroImage":1537,"date":1542,"category":14,"tags":1543},[1487],"2023-08-31",[110,1259,792,728],{"slug":1545,"featured":92,"template":730},"cascading-merge-requests-with-gitlab-flow","content:en-us:blog:cascading-merge-requests-with-gitlab-flow.yml","Cascading Merge Requests With Gitlab Flow","en-us/blog/cascading-merge-requests-with-gitlab-flow.yml","en-us/blog/cascading-merge-requests-with-gitlab-flow",{"_path":1551,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":1552,"content":1558,"config":1563,"_id":1565,"_type":16,"title":1566,"_source":17,"_file":1567,"_stem":1568,"_extension":20},"/en-us/blog/remote-design-sprints",{"title":1553,"description":1554,"ogTitle":1553,"ogDescription":1554,"noIndex":6,"ogImage":1555,"ogUrl":1556,"ogSiteName":895,"ogType":896,"canonicalUrls":1556,"schema":1557},"How to facilitate remote design sprints","Use these tips to help solve big design problems with stakeholders across multiple time zones.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749683129/Blog/Hero%20Images/remotedesign.png","https://about.gitlab.com/blog/remote-design-sprints","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to facilitate remote design sprints\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Emily Bauman\"}],\n        \"datePublished\": \"2023-08-23\",\n      }",{"title":1553,"description":1554,"authors":1559,"heroImage":1555,"date":1561,"category":14,"tags":1562},[1560],"Emily Bauman","2023-08-23",[1316,1141],{"slug":1564,"featured":6,"template":730},"remote-design-sprints","content:en-us:blog:remote-design-sprints.yml","Remote Design Sprints","en-us/blog/remote-design-sprints.yml","en-us/blog/remote-design-sprints",{"_path":1570,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":1571,"content":1577,"config":1581,"_id":1583,"_type":16,"title":1584,"_source":17,"_file":1585,"_stem":1586,"_extension":20},"/en-us/blog/how-to-secure-cloud-run-deployment-with-auto-devops",{"title":1572,"description":1573,"ogTitle":1572,"ogDescription":1573,"noIndex":6,"ogImage":1574,"ogUrl":1575,"ogSiteName":895,"ogType":896,"canonicalUrls":1575,"schema":1576},"How to secure Google Cloud Run deployment with GitLab Auto DevOps","This tutorial will help teams speed development, improve security, and harness the power of serverless technology.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749682898/Blog/Hero%20Images/cloud-security.png","https://about.gitlab.com/blog/how-to-secure-cloud-run-deployment-with-auto-devops","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to secure Google Cloud Run deployment with GitLab Auto DevOps\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Regnard Raquedan\"}],\n        \"datePublished\": \"2023-08-21\",\n      }",{"title":1572,"description":1573,"authors":1578,"heroImage":1574,"date":1579,"category":14,"tags":1580},[921],"2023-08-21",[728,582,751],{"slug":1582,"featured":6,"template":730},"how-to-secure-cloud-run-deployment-with-auto-devops","content:en-us:blog:how-to-secure-cloud-run-deployment-with-auto-devops.yml","How To Secure Cloud Run Deployment With Auto Devops","en-us/blog/how-to-secure-cloud-run-deployment-with-auto-devops.yml","en-us/blog/how-to-secure-cloud-run-deployment-with-auto-devops",{"_path":1588,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":1589,"content":1595,"config":1601,"_id":1603,"_type":16,"title":1604,"_source":17,"_file":1605,"_stem":1606,"_extension":20},"/en-us/blog/remote-development-beta",{"title":1590,"description":1591,"ogTitle":1590,"ogDescription":1591,"noIndex":6,"ogImage":1592,"ogUrl":1593,"ogSiteName":895,"ogType":896,"canonicalUrls":1593,"schema":1594},"Behind the scenes of the Remote Development Beta release","Discover the epic journey of GitLab's Remote Development team as they navigate last-minute pivots, adapt, and deliver new features for users worldwide.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749679888/Blog/Hero%20Images/remotedevelopment.jpg","https://about.gitlab.com/blog/remote-development-beta","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Behind the scenes of the Remote Development Beta release\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"David O'Regan\"}],\n        \"datePublished\": \"2023-08-16\",\n      }",{"title":1590,"description":1591,"authors":1596,"heroImage":1592,"date":1598,"category":14,"tags":1599},[1597],"David O'Regan","2023-08-16",[728,574,924,582,1600,809],"contributors",{"slug":1602,"featured":6,"template":730},"remote-development-beta","content:en-us:blog:remote-development-beta.yml","Remote Development Beta","en-us/blog/remote-development-beta.yml","en-us/blog/remote-development-beta",{"_path":1608,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":1609,"content":1615,"config":1622,"_id":1624,"_type":16,"title":1625,"_source":17,"_file":1626,"_stem":1627,"_extension":20},"/en-us/blog/building-gitlab-with-gitlabcom-how-gitlab-inspired-dedicated",{"title":1610,"description":1611,"ogTitle":1610,"ogDescription":1611,"noIndex":6,"ogImage":1612,"ogUrl":1613,"ogSiteName":895,"ogType":896,"canonicalUrls":1613,"schema":1614},"Building GitLab with GitLab: How GitLab.com inspired Dedicated","Learn how the multi-tenancy SaaS solution, GitLab.com, influenced the design of the single-tenancy SaaS, GitLab Dedicated.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659740/Blog/Hero%20Images/building-gitlab-with-gitlab-no-type.png","https://about.gitlab.com/blog/building-gitlab-with-gitlabcom-how-gitlab-inspired-dedicated","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Building GitLab with GitLab: How GitLab.com inspired Dedicated\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Andrew Newdigate\"},{\"@type\":\"Person\",\"name\":\"Craig Miskell\"},{\"@type\":\"Person\",\"name\":\"John Coghlan\"}],\n        \"datePublished\": \"2023-08-03\",\n      }",{"title":1610,"description":1611,"authors":1616,"heroImage":1612,"date":1620,"category":14,"tags":1621},[1617,1618,1619],"Andrew Newdigate","Craig Miskell","John Coghlan","2023-08-03",[965,543,574,750],{"slug":1623,"featured":6,"template":730},"building-gitlab-with-gitlabcom-how-gitlab-inspired-dedicated","content:en-us:blog:building-gitlab-with-gitlabcom-how-gitlab-inspired-dedicated.yml","Building Gitlab With Gitlabcom How Gitlab Inspired Dedicated","en-us/blog/building-gitlab-with-gitlabcom-how-gitlab-inspired-dedicated.yml","en-us/blog/building-gitlab-with-gitlabcom-how-gitlab-inspired-dedicated",{"_path":1629,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":1630,"content":1635,"config":1640,"_id":1642,"_type":16,"title":1643,"_source":17,"_file":1644,"_stem":1645,"_extension":20},"/en-us/blog/gitlab-gdk-remote-development",{"title":1631,"description":1632,"ogTitle":1631,"ogDescription":1632,"noIndex":6,"ogImage":1271,"ogUrl":1633,"ogSiteName":895,"ogType":896,"canonicalUrls":1633,"schema":1634},"Contributor how-to: Remote Development workspaces and GitLab Developer Kit","This tutorial helps you get GDK working inside Remote Development workspaces to begin contributing to GitLab.","https://about.gitlab.com/blog/gitlab-gdk-remote-development","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Contributor how-to: Remote Development workspaces and GitLab Developer Kit\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Raimund Hook\"}],\n        \"datePublished\": \"2023-07-31\",\n      }",{"title":1631,"description":1632,"authors":1636,"heroImage":1271,"date":1638,"category":14,"tags":1639},[1637],"Raimund Hook","2023-07-31",[728,564,924,582,1600,809],{"slug":1641,"featured":6,"template":730},"gitlab-gdk-remote-development","content:en-us:blog:gitlab-gdk-remote-development.yml","Gitlab Gdk Remote Development","en-us/blog/gitlab-gdk-remote-development.yml","en-us/blog/gitlab-gdk-remote-development",{"_path":1647,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":1648,"content":1654,"config":1660,"_id":1662,"_type":16,"title":1663,"_source":17,"_file":1664,"_stem":1665,"_extension":20},"/en-us/blog/set-up-infrastructure-for-cloud-development-environments",{"title":1649,"description":1650,"ogTitle":1649,"ogDescription":1650,"noIndex":6,"ogImage":1651,"ogUrl":1652,"ogSiteName":895,"ogType":896,"canonicalUrls":1652,"schema":1653},"Cloud infrastructure for on-demand development in GitLab","Learn how to set up the requirements, manage Kubernetes clusters in different clouds, create the first workspaces and custom images, and get tips and troubleshooting.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659883/Blog/Hero%20Images/post-cover-image.jpg","https://about.gitlab.com/blog/set-up-infrastructure-for-cloud-development-environments","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Set up your infrastructure for on-demand, cloud-based development environments in GitLab\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Michael Friedrich\"}],\n        \"datePublished\": \"2023-07-13\",\n      }",{"title":1655,"description":1650,"authors":1656,"heroImage":1651,"date":1657,"category":14,"tags":1658},"Set up your infrastructure for on-demand, cloud-based development environments in GitLab",[862],"2023-07-13",[543,1659,564,924,582],"careers",{"slug":1661,"featured":6,"template":730},"set-up-infrastructure-for-cloud-development-environments","content:en-us:blog:set-up-infrastructure-for-cloud-development-environments.yml","Set Up Infrastructure For Cloud Development Environments","en-us/blog/set-up-infrastructure-for-cloud-development-environments.yml","en-us/blog/set-up-infrastructure-for-cloud-development-environments",{"_path":1667,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":1668,"content":1674,"config":1678,"_id":1680,"_type":16,"title":1681,"_source":17,"_file":1682,"_stem":1683,"_extension":20},"/en-us/blog/introducing-ci-components",{"title":1669,"description":1670,"ogTitle":1669,"ogDescription":1670,"noIndex":6,"ogImage":1671,"ogUrl":1672,"ogSiteName":895,"ogType":896,"canonicalUrls":1672,"schema":1673},"Introducing CI/CD components and how to use them in GitLab","Learn the main benefits for using CI/CD components in your CI/CD pipelines and how to achieve them.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749667676/Blog/Hero%20Images/buildingblocks.jpg","https://about.gitlab.com/blog/introducing-ci-components","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Introducing CI/CD components and how to use them in GitLab\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Dov Hershkovitch\"}],\n        \"datePublished\": \"2023-07-10\",\n      }",{"title":1669,"description":1670,"authors":1675,"heroImage":1671,"date":1676,"category":14,"tags":1677},[1198],"2023-07-10",[728,110,750],{"slug":1679,"featured":6,"template":730},"introducing-ci-components","content:en-us:blog:introducing-ci-components.yml","Introducing Ci Components","en-us/blog/introducing-ci-components.yml","en-us/blog/introducing-ci-components",{"_path":1685,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":1686,"content":1692,"config":1697,"_id":1699,"_type":16,"title":1700,"_source":17,"_file":1701,"_stem":1702,"_extension":20},"/en-us/blog/how-to-automate-creation-of-runners",{"title":1687,"description":1688,"ogTitle":1687,"ogDescription":1688,"noIndex":6,"ogImage":1689,"ogUrl":1690,"ogSiteName":895,"ogType":896,"canonicalUrls":1690,"schema":1691},"How to automate the creation of GitLab Runners","Follow this step-by-step guide for automating runner setup using new runner creation workflows.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749664087/Blog/Hero%20Images/tanukicover.jpg","https://about.gitlab.com/blog/how-to-automate-creation-of-runners","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to automate the creation of GitLab Runners\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Darren Eastman\"}],\n        \"datePublished\": \"2023-07-06\",\n      }",{"title":1687,"description":1688,"authors":1693,"heroImage":1689,"date":1695,"category":14,"tags":1696},[1694],"Darren Eastman","2023-07-06",[728,924,904],{"slug":1698,"featured":6,"template":730},"how-to-automate-creation-of-runners","content:en-us:blog:how-to-automate-creation-of-runners.yml","How To Automate Creation Of Runners","en-us/blog/how-to-automate-creation-of-runners.yml","en-us/blog/how-to-automate-creation-of-runners",{"_path":1704,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":1705,"content":1711,"config":1716,"_id":1718,"_type":16,"title":1719,"_source":17,"_file":1720,"_stem":1721,"_extension":20},"/en-us/blog/set-up-flux-for-gitops-on-openshift",{"title":1706,"description":1707,"ogTitle":1706,"ogDescription":1707,"noIndex":6,"ogImage":1708,"ogUrl":1709,"ogSiteName":895,"ogType":896,"canonicalUrls":1709,"schema":1710},"Set up Flux for GitOps to deploy workloads on OpenShift","Learn how to set up a sample project, complete a bootstrap Flux installation, and authenticate your installation with a project deploy token.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749682825/Blog/Hero%20Images/genericworkflow.jpg","https://about.gitlab.com/blog/set-up-flux-for-gitops-on-openshift","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Set up Flux for GitOps to deploy workloads on OpenShift\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Bart Zhang\"}],\n        \"datePublished\": \"2023-07-05\",\n      }",{"title":1706,"description":1707,"authors":1712,"heroImage":1708,"date":1714,"category":14,"tags":1715},[1713],"Bart Zhang","2023-07-05",[728,559],{"slug":1717,"featured":6,"template":730},"set-up-flux-for-gitops-on-openshift","content:en-us:blog:set-up-flux-for-gitops-on-openshift.yml","Set Up Flux For Gitops On Openshift","en-us/blog/set-up-flux-for-gitops-on-openshift.yml","en-us/blog/set-up-flux-for-gitops-on-openshift",{"_path":1723,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":1724,"content":1730,"config":1735,"_id":1737,"_type":16,"title":1738,"_source":17,"_file":1739,"_stem":1740,"_extension":20},"/en-us/blog/efficient-devsecops-workflows-with-rules-for-conditional-pipelines",{"title":1725,"description":1726,"ogTitle":1725,"ogDescription":1726,"noIndex":6,"ogImage":1727,"ogUrl":1728,"ogSiteName":895,"ogType":896,"canonicalUrls":1728,"schema":1729},"DevSecOps workflows with conditional CI/CD pipeline rules","CI/CD pipelines can be simple or complex, what makes them efficient are CI rules that define when and how they run.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749669673/Blog/Hero%20Images/engineering.png","https://about.gitlab.com/blog/efficient-devsecops-workflows-with-rules-for-conditional-pipelines","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to create efficient DevSecOps workflows with rules for conditional CI/CD pipelines\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Abubakar Siddiq Ango\"}],\n        \"datePublished\": \"2023-06-27\",\n      }",{"title":1731,"description":1726,"authors":1732,"heroImage":1727,"date":1733,"category":14,"tags":1734},"How to create efficient DevSecOps workflows with rules for conditional CI/CD pipelines",[1333],"2023-06-27",[728,1022,1120,574,543],{"slug":1736,"featured":6,"template":730},"efficient-devsecops-workflows-with-rules-for-conditional-pipelines","content:en-us:blog:efficient-devsecops-workflows-with-rules-for-conditional-pipelines.yml","Efficient Devsecops Workflows With Rules For Conditional Pipelines","en-us/blog/efficient-devsecops-workflows-with-rules-for-conditional-pipelines.yml","en-us/blog/efficient-devsecops-workflows-with-rules-for-conditional-pipelines",{"_path":1742,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":1743,"content":1749,"config":1753,"_id":1755,"_type":16,"title":1756,"_source":17,"_file":1757,"_stem":1758,"_extension":20},"/en-us/blog/quick-start-guide-for-gitlab-workspaces",{"title":1744,"description":1745,"ogTitle":1744,"ogDescription":1745,"noIndex":6,"ogImage":1746,"ogUrl":1747,"ogSiteName":895,"ogType":896,"canonicalUrls":1747,"schema":1748},"Quickstart guide for GitLab Remote Development workspaces","Learn how to create a workspace from your GitLab account and work directly from the remote development environment.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749664219/Blog/Hero%20Images/2023-06-22-quickstart-workspaces-cover-image2.png","https://about.gitlab.com/blog/quick-start-guide-for-gitlab-workspaces","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Quickstart guide for GitLab Remote Development workspaces\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Itzik Gan Baruch\"}],\n        \"datePublished\": \"2023-06-26\",\n      }",{"title":1744,"description":1745,"authors":1750,"heroImage":1746,"date":1751,"category":14,"tags":1752},[1197],"2023-06-26",[728,564,110],{"slug":1754,"featured":6,"template":730},"quick-start-guide-for-gitlab-workspaces","content:en-us:blog:quick-start-guide-for-gitlab-workspaces.yml","Quick Start Guide For Gitlab Workspaces","en-us/blog/quick-start-guide-for-gitlab-workspaces.yml","en-us/blog/quick-start-guide-for-gitlab-workspaces",{"_path":1760,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":1761,"content":1767,"config":1772,"_id":1774,"_type":16,"title":1775,"_source":17,"_file":1776,"_stem":1777,"_extension":20},"/en-us/blog/android-cicd-with-gitlab",{"title":1762,"description":1763,"ogTitle":1762,"ogDescription":1763,"noIndex":6,"ogImage":1764,"ogUrl":1765,"ogSiteName":895,"ogType":896,"canonicalUrls":1765,"schema":1766},"Tutorial: Android CI/CD with GitLab","Learn how to create an automated Android CI/CD pipeline using GitLab and fastlane.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749669316/Blog/Hero%20Images/angela-compagnone-4Iyg6cNU7sI-unsplash.jpg","https://about.gitlab.com/blog/android-cicd-with-gitlab","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Tutorial: Android CI/CD with GitLab\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Darby Frey\"}],\n        \"datePublished\": \"2023-06-13\",\n      }",{"title":1762,"description":1763,"authors":1768,"heroImage":1764,"date":1770,"category":14,"tags":1771},[1769],"Darby Frey","2023-06-13",[564,110,728],{"slug":1773,"featured":6,"template":730},"android-cicd-with-gitlab","content:en-us:blog:android-cicd-with-gitlab.yml","Android Cicd With Gitlab","en-us/blog/android-cicd-with-gitlab.yml","en-us/blog/android-cicd-with-gitlab",{"_path":1779,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":1780,"content":1786,"config":1791,"_id":1793,"_type":16,"title":1794,"_source":17,"_file":1795,"_stem":1796,"_extension":20},"/en-us/blog/getting-started-with-value-streams-dashboard",{"title":1781,"description":1782,"ogTitle":1781,"ogDescription":1782,"noIndex":6,"ogImage":1783,"ogUrl":1784,"ogSiteName":895,"ogType":896,"canonicalUrls":1784,"schema":1785},"Getting started with the new GitLab Value Streams Dashboard","Benchmark your value stream lifecycle, DORA, and vulnerabilities metrics to gain valuable insights and uncover patterns for continuous improvements.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749671793/Blog/Hero%20Images/16_0-cover-image.png","https://about.gitlab.com/blog/getting-started-with-value-streams-dashboard","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Getting started with the new GitLab Value Streams Dashboard\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Haim Snir\"}],\n        \"datePublished\": \"2023-06-12\",\n      }",{"title":1781,"description":1782,"authors":1787,"heroImage":1783,"date":1788,"category":14,"tags":1789},[942],"2023-06-12",[728,750,904,924,1790],"agile",{"slug":1792,"featured":6,"template":730},"getting-started-with-value-streams-dashboard","content:en-us:blog:getting-started-with-value-streams-dashboard.yml","Getting Started With Value Streams Dashboard","en-us/blog/getting-started-with-value-streams-dashboard.yml","en-us/blog/getting-started-with-value-streams-dashboard",{"_path":1798,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":1799,"content":1804,"config":1808,"_id":1810,"_type":16,"title":1811,"_source":17,"_file":1812,"_stem":1813,"_extension":20},"/en-us/blog/improving-accessibility-in-gitlab-navigation",{"title":1800,"description":1801,"ogTitle":1800,"ogDescription":1801,"noIndex":6,"ogImage":1689,"ogUrl":1802,"ogSiteName":895,"ogType":896,"canonicalUrls":1802,"schema":1803},"How we improved accessibility in GitLab’s new navigation","A new navigation redesign provides an excellent opportunity to build upon the existing experience and improve accessibility for everyone.","https://about.gitlab.com/blog/improving-accessibility-in-gitlab-navigation","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How we improved accessibility in GitLab’s new navigation\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Scott de Jonge\"}],\n        \"datePublished\": \"2023-06-12\",\n      }",{"title":1800,"description":1801,"authors":1805,"heroImage":1689,"date":1788,"category":14,"tags":1807},[1806],"Scott de Jonge",[749],{"slug":1809,"featured":6,"template":730},"improving-accessibility-in-gitlab-navigation","content:en-us:blog:improving-accessibility-in-gitlab-navigation.yml","Improving Accessibility In Gitlab Navigation","en-us/blog/improving-accessibility-in-gitlab-navigation.yml","en-us/blog/improving-accessibility-in-gitlab-navigation",{"_path":1815,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":1816,"content":1822,"config":1826,"_id":1828,"_type":16,"title":1829,"_source":17,"_file":1830,"_stem":1831,"_extension":20},"/en-us/blog/ios-cicd-with-gitlab",{"title":1817,"description":1818,"ogTitle":1817,"ogDescription":1818,"noIndex":6,"ogImage":1819,"ogUrl":1820,"ogSiteName":895,"ogType":896,"canonicalUrls":1820,"schema":1821},"Tutorial: iOS CI/CD with GitLab","Learn how to create an automated CI/CD pipeline using GitLab and fastlane.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749669340/Blog/Hero%20Images/john-cameron-DgRb7aAGK4k-unsplash.jpg","https://about.gitlab.com/blog/ios-cicd-with-gitlab","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Tutorial: iOS CI/CD with GitLab\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Darby Frey\"}],\n        \"datePublished\": \"2023-06-07\",\n      }",{"title":1817,"description":1818,"authors":1823,"heroImage":1819,"date":1824,"category":14,"tags":1825},[1769],"2023-06-07",[564,110,728],{"slug":1827,"featured":6,"template":730},"ios-cicd-with-gitlab","content:en-us:blog:ios-cicd-with-gitlab.yml","Ios Cicd With Gitlab","en-us/blog/ios-cicd-with-gitlab.yml","en-us/blog/ios-cicd-with-gitlab",{"_path":1833,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":1834,"content":1840,"config":1845,"_id":1847,"_type":16,"title":1848,"_source":17,"_file":1849,"_stem":1850,"_extension":20},"/en-us/blog/eks-fargate-runner",{"title":1835,"description":1836,"ogTitle":1835,"ogDescription":1836,"noIndex":6,"ogImage":1837,"ogUrl":1838,"ogSiteName":895,"ogType":896,"canonicalUrls":1838,"schema":1839},"Setting up GitLab EKS Fargate Runners in just one hour","This detailed tutorial answers the question of how to leverage Amazon's AWS Fargate container technology for GitLab Runners.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749663373/Blog/Hero%20Images/jeremy-lapak-CVvFVQ_-oUg-700unsplash.jpg","https://about.gitlab.com/blog/eks-fargate-runner","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Get started with GitLab EKS Fargate Runners in 1 hour and zero code, Iteration 1\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Darwin Sanoy\"}],\n        \"datePublished\": \"2023-05-24\",\n      }",{"title":1841,"description":1836,"authors":1842,"heroImage":1837,"date":1843,"category":14,"tags":1844},"Get started with GitLab EKS Fargate Runners in 1 hour and zero code, Iteration 1",[768],"2023-05-24",[564,945,965],{"slug":1846,"featured":6,"template":730},"eks-fargate-runner","content:en-us:blog:eks-fargate-runner.yml","Eks Fargate Runner","en-us/blog/eks-fargate-runner.yml","en-us/blog/eks-fargate-runner",{"_path":1852,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":1853,"content":1859,"config":1864,"_id":1866,"_type":16,"title":1867,"_source":17,"_file":1868,"_stem":1869,"_extension":20},"/en-us/blog/how-to-harden-your-self-managed-gitlab-instance",{"title":1854,"description":1855,"ogTitle":1854,"ogDescription":1855,"noIndex":6,"ogImage":1856,"ogUrl":1857,"ogSiteName":895,"ogType":896,"canonicalUrls":1857,"schema":1858},"How to harden your self-managed GitLab instance","Learn seven easy steps to ensure your self-managed GitLab instance is as secure as possible.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749664923/Blog/Hero%20Images/security-checklist.png","https://about.gitlab.com/blog/how-to-harden-your-self-managed-gitlab-instance","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to harden your self-managed GitLab instance\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Ayoub Fandi\"}],\n        \"datePublished\": \"2023-05-23\",\n      }",{"title":1854,"description":1855,"authors":1860,"heroImage":1856,"date":1862,"category":14,"tags":1863},[1861],"Ayoub Fandi","2023-05-23",[751,728,574],{"slug":1865,"featured":6,"template":730},"how-to-harden-your-self-managed-gitlab-instance","content:en-us:blog:how-to-harden-your-self-managed-gitlab-instance.yml","How To Harden Your Self Managed Gitlab Instance","en-us/blog/how-to-harden-your-self-managed-gitlab-instance.yml","en-us/blog/how-to-harden-your-self-managed-gitlab-instance",{"_path":1871,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":1872,"content":1878,"config":1883,"_id":1885,"_type":16,"title":1886,"_source":17,"_file":1887,"_stem":1888,"_extension":20},"/en-us/blog/overhauling-the-navigation-is-like-building-a-dream-home",{"title":1873,"description":1874,"ogTitle":1873,"ogDescription":1874,"noIndex":6,"ogImage":1875,"ogUrl":1876,"ogSiteName":895,"ogType":896,"canonicalUrls":1876,"schema":1877},"How designing platform navigation is like building a dream home","Go behind the scenes and learn how we ideated toward a new user experience for GitLab.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749680235/Blog/Hero%20Images/home-improvement.jpg","https://about.gitlab.com/blog/overhauling-the-navigation-is-like-building-a-dream-home","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How designing platform navigation is like building a dream home\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Austin Regnery\"}],\n        \"datePublished\": \"2023-05-15\",\n      }",{"title":1873,"description":1874,"authors":1879,"heroImage":1875,"date":1881,"category":14,"tags":1882},[1880],"Austin Regnery","2023-05-15",[1316,749,1141],{"slug":1884,"featured":6,"template":730},"overhauling-the-navigation-is-like-building-a-dream-home","content:en-us:blog:overhauling-the-navigation-is-like-building-a-dream-home.yml","Overhauling The Navigation Is Like Building A Dream Home","en-us/blog/overhauling-the-navigation-is-like-building-a-dream-home.yml","en-us/blog/overhauling-the-navigation-is-like-building-a-dream-home",{"_path":1890,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":1891,"content":1896,"config":1902,"_id":1904,"_type":16,"title":1905,"_source":17,"_file":1906,"_stem":1907,"_extension":20},"/en-us/blog/building-gitlab-with-gitlab-api-fuzzing-workflow",{"title":1892,"description":1893,"ogTitle":1892,"ogDescription":1893,"noIndex":6,"ogImage":1612,"ogUrl":1894,"ogSiteName":895,"ogType":896,"canonicalUrls":1894,"schema":1895},"Building GitLab with GitLab: Web API Fuzz Testing","Our new series shows how we dogfood new DevSecOps platform features to ready them for you. First up, security testing.","https://about.gitlab.com/blog/building-gitlab-with-gitlab-api-fuzzing-workflow","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Building GitLab with GitLab: Web API Fuzz Testing\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Mike Eddington\"},{\"@type\":\"Person\",\"name\":\"Eugene Lim\"}],\n        \"datePublished\": \"2023-05-09\",\n      }",{"title":1892,"description":1893,"authors":1897,"heroImage":1612,"date":1900,"category":14,"tags":1901},[1898,1899],"Mike Eddington","Eugene Lim","2023-05-09",[1099,751,1099,773,728],{"slug":1903,"featured":6,"template":730},"building-gitlab-with-gitlab-api-fuzzing-workflow","content:en-us:blog:building-gitlab-with-gitlab-api-fuzzing-workflow.yml","Building Gitlab With Gitlab Api Fuzzing Workflow","en-us/blog/building-gitlab-with-gitlab-api-fuzzing-workflow.yml","en-us/blog/building-gitlab-with-gitlab-api-fuzzing-workflow",{"_path":1909,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":1910,"content":1916,"config":1920,"_id":1922,"_type":16,"title":1923,"_source":17,"_file":1924,"_stem":1925,"_extension":20},"/en-us/blog/use-inputs-in-includable-files",{"title":1911,"description":1912,"ogTitle":1911,"ogDescription":1912,"noIndex":6,"ogImage":1913,"ogUrl":1914,"ogSiteName":895,"ogType":896,"canonicalUrls":1914,"schema":1915},"Define input parameters to includable CI/CD configuration files","This is the first milestone of the long-term roadmap of the CI/CD Components Catalog roadmap.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749679170/Blog/Hero%20Images/migration-data.jpg","https://about.gitlab.com/blog/use-inputs-in-includable-files","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Define input parameters to includable CI/CD configuration files\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Itzik Gan Baruch\"}],\n        \"datePublished\": \"2023-05-08\",\n      }",{"title":1911,"description":1912,"authors":1917,"heroImage":1913,"date":1918,"category":14,"tags":1919},[1197],"2023-05-08",[728,564,110],{"slug":1921,"featured":6,"template":730},"use-inputs-in-includable-files","content:en-us:blog:use-inputs-in-includable-files.yml","Use Inputs In Includable Files","en-us/blog/use-inputs-in-includable-files.yml","en-us/blog/use-inputs-in-includable-files",{"_path":1927,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":1928,"content":1934,"config":1938,"_id":1940,"_type":16,"title":1941,"_source":17,"_file":1942,"_stem":1943,"_extension":20},"/en-us/blog/how-to-build-reusable-ci-templates",{"title":1929,"description":1930,"ogTitle":1929,"ogDescription":1930,"noIndex":6,"ogImage":1931,"ogUrl":1932,"ogSiteName":895,"ogType":896,"canonicalUrls":1932,"schema":1933},"How to build more reusable CI/CD templates","Users can now define inputs to any includable CI/CD templates. Learn how and see what other CI/CD pipeline developments are coming.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749682709/Blog/Hero%20Images/pexels-mathias-reding-4386148.jpg","https://about.gitlab.com/blog/how-to-build-reusable-ci-templates","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to build more reusable CI/CD templates\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Dov Hershkovitch\"}],\n        \"datePublished\": \"2023-05-01\",\n      }",{"title":1929,"description":1930,"authors":1935,"heroImage":1931,"date":1936,"category":14,"tags":1937},[1198],"2023-05-01",[110,564],{"slug":1939,"featured":6,"template":730},"how-to-build-reusable-ci-templates","content:en-us:blog:how-to-build-reusable-ci-templates.yml","How To Build Reusable Ci Templates","en-us/blog/how-to-build-reusable-ci-templates.yml","en-us/blog/how-to-build-reusable-ci-templates",{"_path":1945,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":1946,"content":1952,"config":1957,"_id":1959,"_type":16,"title":1960,"_source":17,"_file":1961,"_stem":1962,"_extension":20},"/en-us/blog/data-driven-decision-making-with-sourcewarp",{"title":1947,"description":1948,"ogTitle":1947,"ogDescription":1948,"noIndex":6,"ogImage":1949,"ogUrl":1950,"ogSiteName":895,"ogType":896,"canonicalUrls":1950,"schema":1951},"SourceWarp: Make data-driven, agile DevSecOps decisions","How the SourceWarp approach and tool help make informed, agile decisions for CI/CD tools and DevSecOps platforms at GitLab.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749682686/Blog/Hero%20Images/velocity2.png","https://about.gitlab.com/blog/data-driven-decision-making-with-sourcewarp","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"SourceWarp: Make data-driven, agile DevSecOps decisions\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"GitLab Vulnerability Research Team\"}],\n        \"datePublished\": \"2023-04-13\",\n      }",{"title":1947,"description":1948,"authors":1953,"heroImage":1949,"date":1955,"category":14,"tags":1956},[1954],"GitLab Vulnerability Research Team","2023-04-13",[574,110,751],{"slug":1958,"featured":6,"template":730},"data-driven-decision-making-with-sourcewarp","content:en-us:blog:data-driven-decision-making-with-sourcewarp.yml","Data Driven Decision Making With Sourcewarp","en-us/blog/data-driven-decision-making-with-sourcewarp.yml","en-us/blog/data-driven-decision-making-with-sourcewarp",{"_path":1964,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":1965,"content":1971,"config":1975,"_id":1977,"_type":16,"title":1978,"_source":17,"_file":1979,"_stem":1980,"_extension":20},"/en-us/blog/automating-a-twitter-bot-using-gitlab-cicd",{"title":1966,"description":1967,"ogTitle":1966,"ogDescription":1967,"noIndex":6,"ogImage":1968,"ogUrl":1969,"ogSiteName":895,"ogType":896,"canonicalUrls":1969,"schema":1970},"How to automate a Twitter bot using GitLab CI/CD","This tutorial shows how to use the DevSecOps platform to create a set-and-forget Twitter bot.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749661856/Blog/Hero%20Images/ci-cd-demo.jpg","https://about.gitlab.com/blog/automating-a-twitter-bot-using-gitlab-cicd","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to automate a Twitter bot using GitLab CI/CD\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Siddharth Mathur\"}],\n        \"datePublished\": \"2023-03-21\",\n      }",{"title":1966,"description":1967,"authors":1972,"heroImage":1968,"date":1973,"category":14,"tags":1974},[1370],"2023-03-21",[574,1022,1120,728],{"slug":1976,"featured":6,"template":730},"automating-a-twitter-bot-using-gitlab-cicd","content:en-us:blog:automating-a-twitter-bot-using-gitlab-cicd.yml","Automating A Twitter Bot Using Gitlab Cicd","en-us/blog/automating-a-twitter-bot-using-gitlab-cicd.yml","en-us/blog/automating-a-twitter-bot-using-gitlab-cicd",{"_path":1982,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":1983,"content":1989,"config":1993,"_id":1995,"_type":16,"title":1996,"_source":17,"_file":1997,"_stem":1998,"_extension":20},"/en-us/blog/scaling-repository-maintenance",{"title":1984,"description":1985,"ogTitle":1984,"ogDescription":1985,"noIndex":6,"ogImage":1986,"ogUrl":1987,"ogSiteName":895,"ogType":896,"canonicalUrls":1987,"schema":1988},"Future-proofing Git repository maintenance","Learn how we revamped our architecture for faster iteration and more efficiently maintained repositories.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749677736/Blog/Hero%20Images/Git.png","https://about.gitlab.com/blog/scaling-repository-maintenance","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Future-proofing Git repository maintenance\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Patrick Steinhardt\"}],\n        \"datePublished\": \"2023-03-20\",\n      }",{"title":1984,"description":1985,"authors":1990,"heroImage":1986,"date":1991,"category":14,"tags":1992},[1448],"2023-03-20",[792,1451,904],{"slug":1994,"featured":6,"template":730},"scaling-repository-maintenance","content:en-us:blog:scaling-repository-maintenance.yml","Scaling Repository Maintenance","en-us/blog/scaling-repository-maintenance.yml","en-us/blog/scaling-repository-maintenance",{"_path":2000,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":2001,"content":2006,"config":2011,"_id":2013,"_type":16,"title":2014,"_source":17,"_file":2015,"_stem":2016,"_extension":20},"/en-us/blog/how-gitlab-can-help-mitigate-deletion-open-source-images-docker-hub",{"title":2002,"description":2003,"ogTitle":2002,"ogDescription":2003,"noIndex":6,"ogImage":1651,"ogUrl":2004,"ogSiteName":895,"ogType":896,"canonicalUrls":2004,"schema":2005},"GitLab helps mitigate Docker Hub's open source image removal","CI/CD and Kubernetes deployments can be affected by Docker Hub tier changes. This tutorial walks through analysis, mitigations, and long-term solutions.","https://about.gitlab.com/blog/how-gitlab-can-help-mitigate-deletion-open-source-images-docker-hub","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How GitLab can help mitigate deletion of open source container images on Docker Hub\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Michael Friedrich\"}],\n        \"datePublished\": \"2023-03-16\",\n      }",{"title":2007,"description":2003,"authors":2008,"heroImage":1651,"date":2009,"category":14,"tags":2010},"How GitLab can help mitigate deletion of open source container images on Docker Hub",[862],"2023-03-16",[1022,1180,809],{"slug":2012,"featured":6,"template":730},"how-gitlab-can-help-mitigate-deletion-open-source-images-docker-hub","content:en-us:blog:how-gitlab-can-help-mitigate-deletion-open-source-images-docker-hub.yml","How Gitlab Can Help Mitigate Deletion Open Source Images Docker Hub","en-us/blog/how-gitlab-can-help-mitigate-deletion-open-source-images-docker-hub.yml","en-us/blog/how-gitlab-can-help-mitigate-deletion-open-source-images-docker-hub",{"_path":2018,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":2019,"content":2025,"config":2031,"_id":2033,"_type":16,"title":2034,"_source":17,"_file":2035,"_stem":2036,"_extension":20},"/en-us/blog/getting-started-with-gitlab-application-security",{"title":2020,"description":2021,"ogTitle":2020,"ogDescription":2021,"noIndex":6,"ogImage":2022,"ogUrl":2023,"ogSiteName":895,"ogType":896,"canonicalUrls":2023,"schema":2024},"Getting started with GitLab application security","This tutorial shows how to incorporate GitLab security scan templates into a .gitlab-ci.yml file and view scan results.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749663993/Blog/Hero%20Images/2018-developer-report-cover.jpg","https://about.gitlab.com/blog/getting-started-with-gitlab-application-security","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Getting started with GitLab application security\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Victor Hernandez\"},{\"@type\":\"Person\",\"name\":\"Julie Byrne\"}],\n        \"datePublished\": \"2023-03-15\",\n      }",{"title":2020,"description":2021,"authors":2026,"heroImage":2022,"date":2029,"category":14,"tags":2030},[2027,2028],"Victor Hernandez","Julie Byrne","2023-03-15",[574,1022,1120,751],{"slug":2032,"featured":6,"template":730},"getting-started-with-gitlab-application-security","content:en-us:blog:getting-started-with-gitlab-application-security.yml","Getting Started With Gitlab Application Security","en-us/blog/getting-started-with-gitlab-application-security.yml","en-us/blog/getting-started-with-gitlab-application-security",{"_path":2038,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":2039,"content":2045,"config":2049,"_id":2051,"_type":16,"title":2052,"_source":17,"_file":2053,"_stem":2054,"_extension":20},"/en-us/blog/expanding-guest-capabilities-in-gitlab-ultimate",{"title":2040,"description":2041,"ogTitle":2040,"ogDescription":2041,"noIndex":6,"ogImage":2042,"ogUrl":2043,"ogSiteName":895,"ogType":896,"canonicalUrls":2043,"schema":2044},"The feature you wanted - Expanded Guest capabilities in GitLab Ultimate","GitLab Ultimate customers can now provide Guests the ability to view code. Learn how to access this new capability.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749682652/Blog/Hero%20Images/iterating-cover.jpg","https://about.gitlab.com/blog/expanding-guest-capabilities-in-gitlab-ultimate","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"The feature you wanted - Expanded Guest capabilities in GitLab Ultimate\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Hannah Sutor\"}],\n        \"datePublished\": \"2023-03-08\",\n      }",{"title":2040,"description":2041,"authors":2046,"heroImage":2042,"date":2047,"category":14,"tags":2048},[1468],"2023-03-08",[750,1507,543],{"slug":2050,"featured":6,"template":730},"expanding-guest-capabilities-in-gitlab-ultimate","content:en-us:blog:expanding-guest-capabilities-in-gitlab-ultimate.yml","Expanding Guest Capabilities In Gitlab Ultimate","en-us/blog/expanding-guest-capabilities-in-gitlab-ultimate.yml","en-us/blog/expanding-guest-capabilities-in-gitlab-ultimate",{"_path":2056,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":2057,"content":2063,"config":2068,"_id":2070,"_type":16,"title":2071,"_source":17,"_file":2072,"_stem":2073,"_extension":20},"/en-us/blog/how-to-deploy-react-to-amazon-s3",{"title":2058,"description":2059,"ogTitle":2058,"ogDescription":2059,"noIndex":6,"ogImage":2060,"ogUrl":2061,"ogSiteName":895,"ogType":896,"canonicalUrls":2061,"schema":2062},"How to deploy a React application to Amazon S3 using GitLab CI/CD","Follow this guide to use OpenID Connect to connect to AWS and deploy a React application to Amazon S3.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749663291/Blog/Hero%20Images/cover1.jpg","https://about.gitlab.com/blog/how-to-deploy-react-to-amazon-s3","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to deploy a React application to Amazon S3 using GitLab CI/CD\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Jeremy Wagner\"}],\n        \"datePublished\": \"2023-03-01\",\n      }",{"title":2058,"description":2059,"authors":2064,"heroImage":2060,"date":2066,"category":14,"tags":2067},[2065],"Jeremy Wagner","2023-03-01",[564,110],{"slug":2069,"featured":6,"template":730},"how-to-deploy-react-to-amazon-s3","content:en-us:blog:how-to-deploy-react-to-amazon-s3.yml","How To Deploy React To Amazon S3","en-us/blog/how-to-deploy-react-to-amazon-s3.yml","en-us/blog/how-to-deploy-react-to-amazon-s3",{"_path":2075,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":2076,"content":2082,"config":2086,"_id":2088,"_type":16,"title":2089,"_source":17,"_file":2090,"_stem":2091,"_extension":20},"/en-us/blog/code-counting-in-gitlab",{"title":2077,"description":2078,"ogTitle":2077,"ogDescription":2078,"noIndex":6,"ogImage":2079,"ogUrl":2080,"ogSiteName":895,"ogType":896,"canonicalUrls":2080,"schema":2081},"Lightning fast code counting for better code management intelligence","Knowledge of your code composition can come through simple counting of lines of code per language.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749682614/Blog/Hero%20Images/noaa-PkHsrwNOfBE-unsplash.jpg","https://about.gitlab.com/blog/code-counting-in-gitlab","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Lightning fast code counting for better code management intelligence\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Darwin Sanoy\"}],\n        \"datePublished\": \"2023-02-15\",\n      }",{"title":2077,"description":2078,"authors":2083,"heroImage":2079,"date":2084,"category":14,"tags":2085},[768],"2023-02-15",[564,945,1022],{"slug":2087,"featured":6,"template":730},"code-counting-in-gitlab","content:en-us:blog:code-counting-in-gitlab.yml","Code Counting In Gitlab","en-us/blog/code-counting-in-gitlab.yml","en-us/blog/code-counting-in-gitlab",{"_path":2093,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":2094,"content":2100,"config":2106,"_id":2108,"_type":16,"title":2109,"_source":17,"_file":2110,"_stem":2111,"_extension":20},"/en-us/blog/understanding-and-improving-total-blocking-time",{"title":2095,"description":2096,"ogTitle":2095,"ogDescription":2096,"noIndex":6,"ogImage":2097,"ogUrl":2098,"ogSiteName":895,"ogType":896,"canonicalUrls":2098,"schema":2099},"Total Blocking Time - The metric to know for faster website performance","Learn how to identify and fix some root causes for high Total Blocking Time.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749682637/Blog/Hero%20Images/tbt_cover_image.jpg","https://about.gitlab.com/blog/understanding-and-improving-total-blocking-time","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Total Blocking Time - The metric to know for faster website performance\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Jacques Erasmus\"}],\n        \"datePublished\": \"2023-02-14\",\n      }",{"title":2095,"description":2096,"authors":2101,"heroImage":2097,"date":2103,"category":14,"tags":2104},[2102],"Jacques Erasmus","2023-02-14",[2105,904,728],"frontend",{"slug":2107,"featured":6,"template":730},"understanding-and-improving-total-blocking-time","content:en-us:blog:understanding-and-improving-total-blocking-time.yml","Understanding And Improving Total Blocking Time","en-us/blog/understanding-and-improving-total-blocking-time.yml","en-us/blog/understanding-and-improving-total-blocking-time",{"_path":2113,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":2114,"content":2119,"config":2123,"_id":2125,"_type":16,"title":2126,"_source":17,"_file":2127,"_stem":2128,"_extension":20},"/en-us/blog/gitlab-importers",{"title":2115,"description":2116,"ogTitle":2115,"ogDescription":2116,"noIndex":6,"ogImage":1913,"ogUrl":2117,"ogSiteName":895,"ogType":896,"canonicalUrls":2117,"schema":2118},"How to migrate data to GitLab using main importers","Learn about the capabilities of main importers, which are used to import data from external tools and from other GitLab instances.","https://about.gitlab.com/blog/gitlab-importers","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to migrate data to GitLab using main importers\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Itzik Gan Baruch\"}],\n        \"datePublished\": \"2023-02-13\",\n      }",{"title":2115,"description":2116,"authors":2120,"heroImage":1913,"date":2121,"category":14,"tags":2122},[1197],"2023-02-13",[728,564,904],{"slug":2124,"featured":6,"template":730},"gitlab-importers","content:en-us:blog:gitlab-importers.yml","Gitlab Importers","en-us/blog/gitlab-importers.yml","en-us/blog/gitlab-importers",{"_path":2130,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":2131,"content":2137,"config":2142,"_id":2144,"_type":16,"title":2145,"_source":17,"_file":2146,"_stem":2147,"_extension":20},"/en-us/blog/why-did-we-choose-to-integrate-fluxcd-with-gitlab",{"title":2132,"description":2133,"ogTitle":2132,"ogDescription":2133,"noIndex":6,"ogImage":2134,"ogUrl":2135,"ogSiteName":895,"ogType":896,"canonicalUrls":2135,"schema":2136},"GitOps with GitLab: What you need to know about the Flux CD integration","Inside the decision to integrate Flux CD with the GitLab agent for Kubernetes and what it means to you.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749678356/Blog/Hero%20Images/balance-speed-security-devops.jpg","https://about.gitlab.com/blog/why-did-we-choose-to-integrate-fluxcd-with-gitlab","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"GitOps with GitLab: What you need to know about the Flux CD integration\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Viktor Nagy\"}],\n        \"datePublished\": \"2023-02-08\",\n      }",{"title":2132,"description":2133,"authors":2138,"heroImage":2134,"date":2140,"category":14,"tags":2141},[2139],"Viktor Nagy","2023-02-08",[559,1180,564,881],{"slug":2143,"featured":6,"template":730},"why-did-we-choose-to-integrate-fluxcd-with-gitlab","content:en-us:blog:why-did-we-choose-to-integrate-fluxcd-with-gitlab.yml","Why Did We Choose To Integrate Fluxcd With Gitlab","en-us/blog/why-did-we-choose-to-integrate-fluxcd-with-gitlab.yml","en-us/blog/why-did-we-choose-to-integrate-fluxcd-with-gitlab",{"_path":2149,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":2150,"content":2155,"config":2159,"_id":2161,"_type":16,"title":2162,"_source":17,"_file":2163,"_stem":2164,"_extension":20},"/en-us/blog/efficient-devsecops-workflows-hands-on-python-gitlab-api-automation",{"ogTitle":2151,"schema":2152,"ogImage":1651,"ogDescription":2153,"ogSiteName":895,"noIndex":6,"ogType":896,"ogUrl":2154,"title":2151,"canonicalUrls":2154,"description":2153},"Efficient DevSecOps workflows: Hands-on python-gitlab API automation","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Efficient DevSecOps workflows: Hands-on python-gitlab API automation\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Michael Friedrich\"}],\n        \"datePublished\": \"2023-02-01\",\n      }","The python-gitlab library is a useful abstraction layer for the GitLab API. Dive into hands-on examples and best practices in this tutorial.","https://about.gitlab.com/blog/efficient-devsecops-workflows-hands-on-python-gitlab-api-automation",{"title":2151,"description":2153,"authors":2156,"heroImage":1651,"date":2157,"category":14,"tags":2158},[862],"2023-02-01",[233,728,574,543],{"slug":2160,"featured":6,"template":730},"efficient-devsecops-workflows-hands-on-python-gitlab-api-automation","content:en-us:blog:efficient-devsecops-workflows-hands-on-python-gitlab-api-automation.yml","Efficient Devsecops Workflows Hands On Python Gitlab Api Automation","en-us/blog/efficient-devsecops-workflows-hands-on-python-gitlab-api-automation.yml","en-us/blog/efficient-devsecops-workflows-hands-on-python-gitlab-api-automation",{"_path":2166,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":2167,"content":2173,"config":2178,"_id":2180,"_type":16,"title":2181,"_source":17,"_file":2182,"_stem":2183,"_extension":20},"/en-us/blog/how-start-ospo-ten-minutes-using-gitlab",{"title":2168,"description":2169,"ogTitle":2168,"ogDescription":2169,"noIndex":6,"ogImage":2170,"ogUrl":2171,"ogSiteName":895,"ogType":896,"canonicalUrls":2171,"schema":2172},"Start an open source center of excellence in 10 minutes using GitLab","Launch your own open source program office using the OSPO Alliance's tools on GitLab","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749682593/Blog/Hero%20Images/opensign.jpg","https://about.gitlab.com/blog/how-start-ospo-ten-minutes-using-gitlab","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Start an open source center of excellence in 10 minutes using GitLab\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Boris Baldassari\"}],\n        \"datePublished\": \"2023-01-30\",\n      }",{"title":2168,"description":2169,"authors":2174,"heroImage":2170,"date":2176,"category":14,"tags":2177},[2175],"Boris Baldassari","2023-01-30",[809,728,564],{"slug":2179,"featured":6,"template":730},"how-start-ospo-ten-minutes-using-gitlab","content:en-us:blog:how-start-ospo-ten-minutes-using-gitlab.yml","How Start Ospo Ten Minutes Using Gitlab","en-us/blog/how-start-ospo-ten-minutes-using-gitlab.yml","en-us/blog/how-start-ospo-ten-minutes-using-gitlab",{"_path":2185,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":2186,"content":2192,"config":2196,"_id":2198,"_type":16,"title":2199,"_source":17,"_file":2200,"_stem":2201,"_extension":20},"/en-us/blog/keeping-your-development-dry",{"title":2187,"description":2188,"ogTitle":2187,"ogDescription":2188,"noIndex":6,"ogImage":2189,"ogUrl":2190,"ogSiteName":895,"ogType":896,"canonicalUrls":2190,"schema":2191},"DRY development: A cheatsheet on reusability throughout GitLab","How to follow the DevOps principle of 'don't repeat yourself' to optimize CI/CD.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749683555/Blog/Hero%20Images/drylights.jpg","https://about.gitlab.com/blog/keeping-your-development-dry","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"DRY development: A cheatsheet on reusability throughout GitLab\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Noah Ing\"},{\"@type\":\"Person\",\"name\":\"Joe Randazzo\"}],\n        \"datePublished\": \"2023-01-03\",\n      }",{"title":2187,"description":2188,"authors":2193,"heroImage":2189,"date":2194,"category":14,"tags":2195},[983,824],"2023-01-03",[1022,1120,564,574],{"slug":2197,"featured":6,"template":730},"keeping-your-development-dry","content:en-us:blog:keeping-your-development-dry.yml","Keeping Your Development Dry","en-us/blog/keeping-your-development-dry.yml","en-us/blog/keeping-your-development-dry",{"_path":2203,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":2204,"content":2210,"config":2215,"_id":2217,"_type":16,"title":2218,"_source":17,"_file":2219,"_stem":2220,"_extension":20},"/en-us/blog/can-chatgpt-resolve-gitlab-issues",{"title":2205,"description":2206,"ogTitle":2205,"ogDescription":2206,"noIndex":6,"ogImage":2207,"ogUrl":2208,"ogSiteName":895,"ogType":896,"canonicalUrls":2208,"schema":2209},"Testing ChatGPT: Can it solve a GitLab issue?","We put ChatGPT to the test to see if it could contribute to GitLab. Here's what we learned.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749670171/Blog/Hero%20Images/akshay-nanavati-Zq6HerrBPEs-unsplash.jpg","https://about.gitlab.com/blog/can-chatgpt-resolve-gitlab-issues","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Testing ChatGPT: Can it solve a GitLab issue?\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"John Coghlan\"},{\"@type\":\"Person\",\"name\":\"Fatima Sarah Khalid\"}],\n        \"datePublished\": \"2022-12-15\",\n      }",{"title":2205,"description":2206,"authors":2211,"heroImage":2207,"date":2213,"category":14,"tags":2214},[1619,2212],"Fatima Sarah Khalid","2022-12-15",[728,269,1600,564],{"slug":2216,"featured":6,"template":730},"can-chatgpt-resolve-gitlab-issues","content:en-us:blog:can-chatgpt-resolve-gitlab-issues.yml","Can Chatgpt Resolve Gitlab Issues","en-us/blog/can-chatgpt-resolve-gitlab-issues.yml","en-us/blog/can-chatgpt-resolve-gitlab-issues",{"_path":2222,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":2223,"content":2228,"config":2232,"_id":2234,"_type":16,"title":2235,"_source":17,"_file":2236,"_stem":2237,"_extension":20},"/en-us/blog/how-to-continously-test-web-apps-apis-with-hurl-and-gitlab-ci-cd",{"title":2224,"description":2225,"ogTitle":2224,"ogDescription":2225,"noIndex":6,"ogImage":1651,"ogUrl":2226,"ogSiteName":895,"ogType":896,"canonicalUrls":2226,"schema":2227},"How to continuously test web apps and APIs with Hurl and GitLab CI/CD","Hurl as a CLI tool can be integrated into the DevSecOps platform to continuously verify, test, and monitor targets. It also offers integrated unit test reports in GitLab CI/CD.","https://about.gitlab.com/blog/how-to-continously-test-web-apps-apis-with-hurl-and-gitlab-ci-cd","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to continuously test web apps and APIs with Hurl and GitLab CI/CD\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Michael Friedrich\"}],\n        \"datePublished\": \"2022-12-14\",\n      }",{"title":2224,"description":2225,"authors":2229,"heroImage":1651,"date":2230,"category":14,"tags":2231},[862],"2022-12-14",[773,1022,564],{"slug":2233,"featured":6,"template":730},"how-to-continously-test-web-apps-apis-with-hurl-and-gitlab-ci-cd","content:en-us:blog:how-to-continously-test-web-apps-apis-with-hurl-and-gitlab-ci-cd.yml","How To Continously Test Web Apps Apis With Hurl And Gitlab Ci Cd","en-us/blog/how-to-continously-test-web-apps-apis-with-hurl-and-gitlab-ci-cd.yml","en-us/blog/how-to-continously-test-web-apps-apis-with-hurl-and-gitlab-ci-cd",{"_path":2239,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":2240,"content":2246,"config":2251,"_id":2253,"_type":16,"title":2254,"_source":17,"_file":2255,"_stem":2256,"_extension":20},"/en-us/blog/new-default-container-image-gitlab-saas-linux-runnners",{"title":2241,"description":2242,"ogTitle":2241,"ogDescription":2242,"noIndex":6,"ogImage":2243,"ogUrl":2244,"ogSiteName":895,"ogType":896,"canonicalUrls":2244,"schema":2245},"Using Ruby 3.1 as default on GitLab SaaS Linux runners","Learn about the new image and how to ensure CI job compatibility.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749670766/Blog/Hero%20Images/container-reg-cdn-blog.jpg","https://about.gitlab.com/blog/new-default-container-image-gitlab-saas-linux-runnners","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to use Ruby 3.1 as the default container image on GitLab SaaS Runners on Linux\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Darren Eastman\"}],\n        \"datePublished\": \"2022-12-13\",\n      }",{"title":2247,"description":2242,"authors":2248,"heroImage":2243,"date":2249,"category":14,"tags":2250},"How to use Ruby 3.1 as the default container image on GitLab SaaS Runners on Linux",[1694],"2022-12-13",[564,1099,1022,1120,233],{"slug":2252,"featured":6,"template":730},"new-default-container-image-gitlab-saas-linux-runnners","content:en-us:blog:new-default-container-image-gitlab-saas-linux-runnners.yml","New Default Container Image Gitlab Saas Linux Runnners","en-us/blog/new-default-container-image-gitlab-saas-linux-runnners.yml","en-us/blog/new-default-container-image-gitlab-saas-linux-runnners",{"_path":2258,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":2259,"content":2265,"config":2270,"_id":2272,"_type":16,"title":2273,"_source":17,"_file":2274,"_stem":2275,"_extension":20},"/en-us/blog/top-10-technical-articles-of-2022",{"title":2260,"description":2261,"ogTitle":2260,"ogDescription":2261,"noIndex":6,"ogImage":2262,"ogUrl":2263,"ogSiteName":895,"ogType":896,"canonicalUrls":2263,"schema":2264},"Top 10 technical articles of 2022","Let’s review our fantastic year of how-to guides. From fixing failed pipelines to making the best use of GitOps, we have you covered with our in-depth tutorials.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749663736/Blog/Hero%20Images/a-deep-dive-into-the-security-analyst-persona.jpg","https://about.gitlab.com/blog/top-10-technical-articles-of-2022","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Top 10 technical articles of 2022\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Valerie Silverthorne\"}],\n        \"datePublished\": \"2022-12-08\",\n      }",{"title":2260,"description":2261,"authors":2266,"heroImage":2262,"date":2268,"category":14,"tags":2269},[2267],"Valerie Silverthorne","2022-12-08",[564,728,792],{"slug":2271,"featured":6,"template":730},"top-10-technical-articles-of-2022","content:en-us:blog:top-10-technical-articles-of-2022.yml","Top 10 Technical Articles Of 2022","en-us/blog/top-10-technical-articles-of-2022.yml","en-us/blog/top-10-technical-articles-of-2022",{"_path":2277,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":2278,"content":2284,"config":2289,"_id":2291,"_type":16,"title":2292,"_source":17,"_file":2293,"_stem":2294,"_extension":20},"/en-us/blog/how-we-diagnosed-and-resolved-redis-latency-spikes",{"title":2279,"description":2280,"ogTitle":2279,"ogDescription":2280,"noIndex":6,"ogImage":2281,"ogUrl":2282,"ogSiteName":895,"ogType":896,"canonicalUrls":2282,"schema":2283},"How we diagnosed and resolved Redis latency spikes with BPF and other tools","How we uncovered a three-phase cycle involving two distinct saturation points and a simple fix to break that cycle.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749667913/Blog/Hero%20Images/clocks.jpg","https://about.gitlab.com/blog/how-we-diagnosed-and-resolved-redis-latency-spikes","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How we diagnosed and resolved Redis latency spikes with BPF and other tools\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Matt Smiley\"}],\n        \"datePublished\": \"2022-11-28\",\n      }",{"title":2279,"description":2280,"authors":2285,"heroImage":2281,"date":2287,"category":14,"tags":2288},[2286],"Matt Smiley","2022-11-28",[904,728,564],{"slug":2290,"featured":6,"template":730},"how-we-diagnosed-and-resolved-redis-latency-spikes","content:en-us:blog:how-we-diagnosed-and-resolved-redis-latency-spikes.yml","How We Diagnosed And Resolved Redis Latency Spikes","en-us/blog/how-we-diagnosed-and-resolved-redis-latency-spikes.yml","en-us/blog/how-we-diagnosed-and-resolved-redis-latency-spikes",{"_path":2296,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":2297,"content":2303,"config":2308,"_id":2310,"_type":16,"title":2311,"_source":17,"_file":2312,"_stem":2313,"_extension":20},"/en-us/blog/deploy-remix-with-gitlab-and-cloudflare",{"title":2298,"description":2299,"ogTitle":2298,"ogDescription":2299,"noIndex":6,"ogImage":2300,"ogUrl":2301,"ogSiteName":895,"ogType":896,"canonicalUrls":2301,"schema":2302},"How to publish a Remix app to the edge with GitLab and Cloudflare","Learn how to deploy a Remix app with GitLab and Cloudflare Workers.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749682517/Blog/Hero%20Images/ryoji-hayasaka-0UZj73PQVew-unsplash.jpg","https://about.gitlab.com/blog/deploy-remix-with-gitlab-and-cloudflare","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to publish a Remix app to the edge with GitLab and Cloudflare\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Janis Altherr\"}],\n        \"datePublished\": \"2022-11-21\",\n      }",{"title":2298,"description":2299,"authors":2304,"heroImage":2300,"date":2306,"category":14,"tags":2307},[2305],"Janis Altherr","2022-11-21",[728,233,749],{"slug":2309,"featured":6,"template":730},"deploy-remix-with-gitlab-and-cloudflare","content:en-us:blog:deploy-remix-with-gitlab-and-cloudflare.yml","Deploy Remix With Gitlab And Cloudflare","en-us/blog/deploy-remix-with-gitlab-and-cloudflare.yml","en-us/blog/deploy-remix-with-gitlab-and-cloudflare",{"_path":2315,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":2316,"content":2322,"config":2327,"_id":2329,"_type":16,"title":2330,"_source":17,"_file":2331,"_stem":2332,"_extension":20},"/en-us/blog/environment-friction-cycle",{"title":2317,"description":2318,"ogTitle":2317,"ogDescription":2318,"noIndex":6,"ogImage":2319,"ogUrl":2320,"ogSiteName":895,"ogType":896,"canonicalUrls":2320,"schema":2321},"How GitLab eliminates value stream friction in dev environments","It is important to have the complete picture of scaled effects in view when designing automation.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749682507/Blog/Hero%20Images/sandeep-singh-3KbACriapqQ-unsplash.jpg","https://about.gitlab.com/blog/environment-friction-cycle","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How GitLab can eliminate the massive value stream friction of developer environment provisioning and cleanup\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Darwin Sanoy\"}],\n        \"datePublished\": \"2022-11-17\",\n      }",{"title":2323,"description":2318,"authors":2324,"heroImage":2319,"date":2325,"category":14,"tags":2326},"How GitLab can eliminate the massive value stream friction of developer environment provisioning and cleanup",[768],"2022-11-17",[564,945,965],{"slug":2328,"featured":6,"template":730},"environment-friction-cycle","content:en-us:blog:environment-friction-cycle.yml","Environment Friction Cycle","en-us/blog/environment-friction-cycle.yml","en-us/blog/environment-friction-cycle",{"_path":2334,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":2335,"content":2341,"config":2345,"_id":2347,"_type":16,"title":2348,"_source":17,"_file":2349,"_stem":2350,"_extension":20},"/en-us/blog/simple-kubernetes-management-with-gitlab",{"title":2336,"description":2337,"ogTitle":2336,"ogDescription":2337,"noIndex":6,"ogImage":2338,"ogUrl":2339,"ogSiteName":895,"ogType":896,"canonicalUrls":2339,"schema":2340},"Simple Kubernetes management with GitLab","Follow our tutorial to provision a Kubernetes cluster and manage it with IAC using Terraform and Helm in 20 minutes or less.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749670037/Blog/Hero%20Images/auto-deploy-google-cloud.jpg","https://about.gitlab.com/blog/simple-kubernetes-management-with-gitlab","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Simple Kubernetes management with GitLab\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Noah Ing\"}],\n        \"datePublished\": \"2022-11-15\",\n      }",{"title":2336,"description":2337,"authors":2342,"heroImage":2338,"date":2343,"category":14,"tags":2344},[983],"2022-11-15",[728,1180,559,1022,1120,564],{"slug":2346,"featured":6,"template":730},"simple-kubernetes-management-with-gitlab","content:en-us:blog:simple-kubernetes-management-with-gitlab.yml","Simple Kubernetes Management With Gitlab","en-us/blog/simple-kubernetes-management-with-gitlab.yml","en-us/blog/simple-kubernetes-management-with-gitlab",{"_path":2352,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":2353,"content":2359,"config":2364,"_id":2366,"_type":16,"title":2367,"_source":17,"_file":2368,"_stem":2369,"_extension":20},"/en-us/blog/rebase-in-real-life",{"title":2354,"description":2355,"ogTitle":2354,"ogDescription":2355,"noIndex":6,"ogImage":2356,"ogUrl":2357,"ogSiteName":895,"ogType":896,"canonicalUrls":2357,"schema":2358},"How to use Git rebase in real life","From fixup to autosquash here are real world ways to leverage Git rebase.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749682486/Blog/Hero%20Images/rebase-in-real-life.jpg","https://about.gitlab.com/blog/rebase-in-real-life","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to use Git rebase in real life\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Toon Claes\"}],\n        \"datePublished\": \"2022-11-08\",\n      }",{"title":2354,"description":2355,"authors":2360,"heroImage":2356,"date":2362,"category":14,"tags":2363},[2361],"Toon Claes","2022-11-08",[792,924,728],{"slug":2365,"featured":6,"template":730},"rebase-in-real-life","content:en-us:blog:rebase-in-real-life.yml","Rebase In Real Life","en-us/blog/rebase-in-real-life.yml","en-us/blog/rebase-in-real-life",{"_path":2371,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":2372,"content":2378,"config":2383,"_id":2385,"_type":16,"title":2386,"_source":17,"_file":2387,"_stem":2388,"_extension":20},"/en-us/blog/cadence-is-everything-10x-engineering-organizations-for-10x-engineers",{"title":2373,"description":2374,"ogTitle":2373,"ogDescription":2374,"noIndex":6,"ogImage":2375,"ogUrl":2376,"ogSiteName":895,"ogType":896,"canonicalUrls":2376,"schema":2377},"Cadence is everything: 10x engineering organizations for 10x engineers","GitLab CEO and co-founder Sid Sijbrandij on the importance of cadence in engineering organizations.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749671909/Blog/Hero%20Images/Athlinks_running.jpg","https://about.gitlab.com/blog/cadence-is-everything-10x-engineering-organizations-for-10x-engineers","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Cadence is everything: 10x engineering organizations for 10x engineers\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Sid Sijbrandij\"}],\n        \"datePublished\": \"2022-11-03\",\n      }",{"title":2373,"description":2374,"authors":2379,"heroImage":2375,"date":2381,"category":14,"tags":2382},[2380],"Sid Sijbrandij","2022-11-03",[1659,564],{"slug":2384,"featured":6,"template":730},"cadence-is-everything-10x-engineering-organizations-for-10x-engineers","content:en-us:blog:cadence-is-everything-10x-engineering-organizations-for-10x-engineers.yml","Cadence Is Everything 10x Engineering Organizations For 10x Engineers","en-us/blog/cadence-is-everything-10x-engineering-organizations-for-10x-engineers.yml","en-us/blog/cadence-is-everything-10x-engineering-organizations-for-10x-engineers",{"_path":2390,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":2391,"content":2397,"config":2401,"_id":2403,"_type":16,"title":2404,"_source":17,"_file":2405,"_stem":2406,"_extension":20},"/en-us/blog/how-to-automate-testing-for-a-react-application-with-gitlab",{"title":2392,"description":2393,"ogTitle":2392,"ogDescription":2393,"noIndex":6,"ogImage":2394,"ogUrl":2395,"ogSiteName":895,"ogType":896,"canonicalUrls":2395,"schema":2396},"How to automate testing for a React application with GitLab","Learn how to add React automated tests to a GitLab CI pipeline with this tutorial.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749666775/Blog/Hero%20Images/cover.jpg","https://about.gitlab.com/blog/how-to-automate-testing-for-a-react-application-with-gitlab","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to automate testing for a React application with GitLab\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Jeremy Wagner\"}],\n        \"datePublished\": \"2022-11-01\",\n      }",{"title":2392,"description":2393,"authors":2398,"heroImage":2394,"date":2399,"category":14,"tags":2400},[2065],"2022-11-01",[773,564,110],{"slug":2402,"featured":6,"template":730},"how-to-automate-testing-for-a-react-application-with-gitlab","content:en-us:blog:how-to-automate-testing-for-a-react-application-with-gitlab.yml","How To Automate Testing For A React Application With Gitlab","en-us/blog/how-to-automate-testing-for-a-react-application-with-gitlab.yml","en-us/blog/how-to-automate-testing-for-a-react-application-with-gitlab",{"_path":2408,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":2409,"content":2415,"config":2419,"_id":2421,"_type":16,"title":2422,"_source":17,"_file":2423,"_stem":2424,"_extension":20},"/en-us/blog/publishing-an-astro-site-with-pages",{"title":2410,"description":2411,"ogTitle":2410,"ogDescription":2411,"noIndex":6,"ogImage":2412,"ogUrl":2413,"ogSiteName":895,"ogType":896,"canonicalUrls":2413,"schema":2414},"How to publish your Astro Site with GitLab Pages","Learn how to deploy an Astro Site with GitLab Pages.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749682473/Blog/Hero%20Images/shot-by-cerqueira-0o_GEzyargo-unsplash.jpg","https://about.gitlab.com/blog/publishing-an-astro-site-with-pages","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to publish your Astro Site with GitLab Pages\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Janis Altherr\"}],\n        \"datePublished\": \"2022-10-24\",\n      }",{"title":2410,"description":2411,"authors":2416,"heroImage":2412,"date":2417,"category":14,"tags":2418},[2305],"2022-10-24",[728,233,749],{"slug":2420,"featured":6,"template":730},"publishing-an-astro-site-with-pages","content:en-us:blog:publishing-an-astro-site-with-pages.yml","Publishing An Astro Site With Pages","en-us/blog/publishing-an-astro-site-with-pages.yml","en-us/blog/publishing-an-astro-site-with-pages",{"_path":2426,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":2427,"content":2433,"config":2439,"_id":2441,"_type":16,"title":2442,"_source":17,"_file":2443,"_stem":2444,"_extension":20},"/en-us/blog/take-advantage-of-git-rebase",{"title":2428,"description":2429,"ogTitle":2428,"ogDescription":2429,"noIndex":6,"ogImage":2430,"ogUrl":2431,"ogSiteName":895,"ogType":896,"canonicalUrls":2431,"schema":2432},"Take advantage of Git rebase","Tap into the Git rebase features to improve your workflow.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749665560/Blog/Hero%20Images/speedmonorepo.jpg","https://about.gitlab.com/blog/take-advantage-of-git-rebase","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Take advantage of Git rebase\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Christian Couder\"}],\n        \"datePublished\": \"2022-10-06\",\n      }",{"title":2428,"description":2429,"authors":2434,"heroImage":2430,"date":2436,"category":14,"tags":2437},[2435],"Christian Couder","2022-10-06",[792,924,2438,728],"releases",{"slug":2440,"featured":6,"template":730},"take-advantage-of-git-rebase","content:en-us:blog:take-advantage-of-git-rebase.yml","Take Advantage Of Git Rebase","en-us/blog/take-advantage-of-git-rebase.yml","en-us/blog/take-advantage-of-git-rebase",{"_path":2446,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":2447,"content":2453,"config":2457,"_id":2459,"_type":16,"title":2460,"_source":17,"_file":2461,"_stem":2462,"_extension":20},"/en-us/blog/amazon-linux-2-service-ready-partner",{"title":2448,"description":2449,"ogTitle":2448,"ogDescription":2449,"noIndex":6,"ogImage":2450,"ogUrl":2451,"ogSiteName":895,"ogType":896,"canonicalUrls":2451,"schema":2452},"GitLab is now an Amazon Linux 2 Service Ready Partner","Being an Amazon Linux 2 Service Ready partner shows GitLab's strong commitment to AWS linux distributions.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749682451/Blog/Hero%20Images/isis-franca-hsPFuudRg5I-unsplash.jpg","https://about.gitlab.com/blog/amazon-linux-2-service-ready-partner","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"GitLab is now an Amazon Linux 2 Service Ready Partner\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Darwin Sanoy\"}],\n        \"datePublished\": \"2022-09-21\",\n      }",{"title":2448,"description":2449,"authors":2454,"heroImage":2450,"date":2455,"category":14,"tags":2456},[768],"2022-09-21",[965,284,564],{"slug":2458,"featured":6,"template":730},"amazon-linux-2-service-ready-partner","content:en-us:blog:amazon-linux-2-service-ready-partner.yml","Amazon Linux 2 Service Ready Partner","en-us/blog/amazon-linux-2-service-ready-partner.yml","en-us/blog/amazon-linux-2-service-ready-partner",{"_path":2464,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":2465,"content":2471,"config":2476,"_id":2478,"_type":16,"title":2479,"_source":17,"_file":2480,"_stem":2481,"_extension":20},"/en-us/blog/a-visual-guide-to-gitlab-ci-caching",{"title":2466,"description":2467,"ogTitle":2466,"ogDescription":2467,"noIndex":6,"ogImage":2468,"ogUrl":2469,"ogSiteName":895,"ogType":896,"canonicalUrls":2469,"schema":2470},"A visual guide to GitLab CI/CD caching","Learn cache types, as well as when and how to use them.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749682443/Blog/Hero%20Images/cover.jpg","https://about.gitlab.com/blog/a-visual-guide-to-gitlab-ci-caching","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"A visual guide to GitLab CI/CD caching\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Matthieu Fronton\"}],\n        \"datePublished\": \"2022-09-12\",\n      }",{"title":2466,"description":2467,"authors":2472,"heroImage":2468,"date":2474,"category":14,"tags":2475},[2473],"Matthieu Fronton","2022-09-12",[1022,1120,564,728],{"slug":2477,"featured":6,"template":730},"a-visual-guide-to-gitlab-ci-caching","content:en-us:blog:a-visual-guide-to-gitlab-ci-caching.yml","A Visual Guide To Gitlab Ci Caching","en-us/blog/a-visual-guide-to-gitlab-ci-caching.yml","en-us/blog/a-visual-guide-to-gitlab-ci-caching",{"_path":2483,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":2484,"content":2489,"config":2494,"_id":2496,"_type":16,"title":2497,"_source":17,"_file":2498,"_stem":2499,"_extension":20},"/en-us/blog/speed-up-your-monorepo-workflow-in-git",{"title":2485,"description":2486,"ogTitle":2485,"ogDescription":2486,"noIndex":6,"ogImage":2430,"ogUrl":2487,"ogSiteName":895,"ogType":896,"canonicalUrls":2487,"schema":2488},"Speed up your monorepo workflow in Git","Tap into the features that can reap huge savings in the long run for any developer team.","https://about.gitlab.com/blog/speed-up-your-monorepo-workflow-in-git","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Speed up your monorepo workflow in Git\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"John Cai\"}],\n        \"datePublished\": \"2022-09-06\",\n      }",{"title":2485,"description":2486,"authors":2490,"heroImage":2430,"date":2492,"category":14,"tags":2493},[2491],"John Cai","2022-09-06",[792,924,728],{"slug":2495,"featured":6,"template":730},"speed-up-your-monorepo-workflow-in-git","content:en-us:blog:speed-up-your-monorepo-workflow-in-git.yml","Speed Up Your Monorepo Workflow In Git","en-us/blog/speed-up-your-monorepo-workflow-in-git.yml","en-us/blog/speed-up-your-monorepo-workflow-in-git",{"_path":2501,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":2502,"content":2508,"config":2513,"_id":2515,"_type":16,"title":2516,"_source":17,"_file":2517,"_stem":2518,"_extension":20},"/en-us/blog/whiteboarding-remote-work-superpower",{"title":2503,"description":2504,"ogTitle":2503,"ogDescription":2504,"noIndex":6,"ogImage":2505,"ogUrl":2506,"ogSiteName":895,"ogType":896,"canonicalUrls":2506,"schema":2507},"Virtual whiteboarding is a remote work super power","Want to master a collective understanding of technical explanations remotely? Learn how to use virtual whiteboards to their maximum capabilities in this tutorial.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749682431/Blog/Hero%20Images/kvalifik-5Q07sS54D0Q-unsplash.jpg","https://about.gitlab.com/blog/whiteboarding-remote-work-superpower","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Virtual whiteboarding is a remote work super power\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Darwin Sanoy\"}],\n        \"datePublished\": \"2022-09-01\",\n      }",{"title":2503,"description":2504,"authors":2509,"heroImage":2505,"date":2510,"category":14,"tags":2511},[768],"2022-09-01",[945,1507,2512],"remote work",{"slug":2514,"featured":6,"template":730},"whiteboarding-remote-work-superpower","content:en-us:blog:whiteboarding-remote-work-superpower.yml","Whiteboarding Remote Work Superpower","en-us/blog/whiteboarding-remote-work-superpower.yml","en-us/blog/whiteboarding-remote-work-superpower",{"_path":2520,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":2521,"content":2527,"config":2532,"_id":2534,"_type":16,"title":2535,"_source":17,"_file":2536,"_stem":2537,"_extension":20},"/en-us/blog/postman-integration-with-gitlab-makes-your-api-workflows-easier",{"title":2522,"description":2523,"ogTitle":2522,"ogDescription":2523,"noIndex":6,"ogImage":2524,"ogUrl":2525,"ogSiteName":895,"ogType":896,"canonicalUrls":2525,"schema":2526},"Postman integration with GitLab makes API workflows easier","Learn how to use the git integration to link APIs in Postman to GitLab cloud repos.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749671434/Blog/Hero%20Images/introducing-continuous-workflows.jpg","https://about.gitlab.com/blog/postman-integration-with-gitlab-makes-your-api-workflows-easier","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Postman integration with GitLab makes API workflows easier\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Andy Rogers\"}],\n        \"datePublished\": \"2022-08-24\",\n      }",{"title":2522,"description":2523,"authors":2528,"heroImage":2524,"date":2530,"category":14,"tags":2531},[2529],"Andy Rogers","2022-08-24",[564,924,233],{"slug":2533,"featured":6,"template":730},"postman-integration-with-gitlab-makes-your-api-workflows-easier","content:en-us:blog:postman-integration-with-gitlab-makes-your-api-workflows-easier.yml","Postman Integration With Gitlab Makes Your Api Workflows Easier","en-us/blog/postman-integration-with-gitlab-makes-your-api-workflows-easier.yml","en-us/blog/postman-integration-with-gitlab-makes-your-api-workflows-easier",{"_path":2539,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":2540,"content":2545,"config":2549,"_id":2551,"_type":16,"title":2552,"_source":17,"_file":2553,"_stem":2554,"_extension":20},"/en-us/blog/why-we-have-implemented-our-own-sshd-solution-on-gitlab-sass",{"title":2541,"description":2542,"ogTitle":2541,"ogDescription":2542,"noIndex":6,"ogImage":1727,"ogUrl":2543,"ogSiteName":895,"ogType":896,"canonicalUrls":2543,"schema":2544},"Why we implemented our own SSHD solution","Until recently we used OpenSSH Server to handle SSH connections to provide SSH-related features, but we ultimately decided to implement our own SSHD solution. Learn more!","https://about.gitlab.com/blog/why-we-have-implemented-our-own-sshd-solution-on-gitlab-sass","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Why we implemented our own SSHD solution\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Igor Drozdov\"}],\n        \"datePublished\": \"2022-08-17\",\n      }",{"title":2541,"description":2542,"authors":2546,"heroImage":1727,"date":2547,"category":14,"tags":2548},[1352],"2022-08-17",[1451,751],{"slug":2550,"featured":6,"template":730},"why-we-have-implemented-our-own-sshd-solution-on-gitlab-sass","content:en-us:blog:why-we-have-implemented-our-own-sshd-solution-on-gitlab-sass.yml","Why We Have Implemented Our Own Sshd Solution On Gitlab Sass","en-us/blog/why-we-have-implemented-our-own-sshd-solution-on-gitlab-sass.yml","en-us/blog/why-we-have-implemented-our-own-sshd-solution-on-gitlab-sass",{"_path":2556,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":2557,"content":2562,"config":2567,"_id":2569,"_type":16,"title":2570,"_source":17,"_file":2571,"_stem":2572,"_extension":20},"/en-us/blog/upgrading-database-os",{"title":2558,"description":2559,"ogTitle":2558,"ogDescription":2559,"noIndex":6,"ogImage":1727,"ogUrl":2560,"ogSiteName":895,"ogType":896,"canonicalUrls":2560,"schema":2561},"We are upgrading the operating system on our Postgres database clusters","Learn when these upgrades will happen and how they will help boost performance and reliability on GitLab.com.","https://about.gitlab.com/blog/upgrading-database-os","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"We are upgrading the operating system on our Postgres database clusters\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"David Smith\"}],\n        \"datePublished\": \"2022-08-12\",\n      }",{"title":2558,"description":2559,"authors":2563,"heroImage":1727,"date":2565,"category":14,"tags":2566},[2564],"David Smith","2022-08-12",[881,904,564],{"slug":2568,"featured":6,"template":730},"upgrading-database-os","content:en-us:blog:upgrading-database-os.yml","Upgrading Database Os","en-us/blog/upgrading-database-os.yml","en-us/blog/upgrading-database-os",{"_path":2574,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":2575,"content":2581,"config":2586,"_id":2588,"_type":16,"title":2589,"_source":17,"_file":2590,"_stem":2591,"_extension":20},"/en-us/blog/path-to-decomposing-gitlab-database-part1",{"title":2576,"description":2577,"ogTitle":2576,"ogDescription":2577,"noIndex":6,"ogImage":2578,"ogUrl":2579,"ogSiteName":895,"ogType":896,"canonicalUrls":2579,"schema":2580},"Decomposing the GitLab backend database, Part 1: Designing and planning","A technical summary of the yearlong project to decompose GitLab's Postgres database. This first part focuses on the initial designing and planning of the project.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749663397/Blog/Hero%20Images/logoforblogpost.jpg","https://about.gitlab.com/blog/path-to-decomposing-gitlab-database-part1","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Decomposing the GitLab backend database, Part 1: Designing and planning\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Dylan Griffith\"}],\n        \"datePublished\": \"2022-08-04\",\n      }",{"title":2576,"description":2577,"authors":2582,"heroImage":2578,"date":2584,"category":14,"tags":2585},[2583],"Dylan Griffith","2022-08-04",[1099,1141],{"slug":2587,"featured":6,"template":730},"path-to-decomposing-gitlab-database-part1","content:en-us:blog:path-to-decomposing-gitlab-database-part1.yml","Path To Decomposing Gitlab Database Part1","en-us/blog/path-to-decomposing-gitlab-database-part1.yml","en-us/blog/path-to-decomposing-gitlab-database-part1",{"_path":2593,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":2594,"content":2599,"config":2603,"_id":2605,"_type":16,"title":2606,"_source":17,"_file":2607,"_stem":2608,"_extension":20},"/en-us/blog/path-to-decomposing-gitlab-database-part2",{"title":2595,"description":2596,"ogTitle":2595,"ogDescription":2596,"noIndex":6,"ogImage":2578,"ogUrl":2597,"ogSiteName":895,"ogType":896,"canonicalUrls":2597,"schema":2598},"GitLab database decomposition: Final migration and results","This is the second in our three-part technical summary of the yearlong project to decompose GitLab's Postgres database.","https://about.gitlab.com/blog/path-to-decomposing-gitlab-database-part2","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Decomposing the GitLab backend database, Part 2: Final migration and results\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Dylan Griffith\"}],\n        \"datePublished\": \"2022-08-04\",\n      }",{"title":2600,"description":2596,"authors":2601,"heroImage":2578,"date":2584,"category":14,"tags":2602},"Decomposing the GitLab backend database, Part 2: Final migration and results",[2583],[1099,1141],{"slug":2604,"featured":6,"template":730},"path-to-decomposing-gitlab-database-part2","content:en-us:blog:path-to-decomposing-gitlab-database-part2.yml","Path To Decomposing Gitlab Database Part2","en-us/blog/path-to-decomposing-gitlab-database-part2.yml","en-us/blog/path-to-decomposing-gitlab-database-part2",{"_path":2610,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":2611,"content":2616,"config":2619,"_id":2621,"_type":16,"title":2622,"_source":17,"_file":2623,"_stem":2624,"_extension":20},"/en-us/blog/path-to-decomposing-gitlab-database-part3",{"title":2612,"description":2613,"ogTitle":2612,"ogDescription":2613,"noIndex":6,"ogImage":2578,"ogUrl":2614,"ogSiteName":895,"ogType":896,"canonicalUrls":2614,"schema":2615},"Decomposing the GitLab backend database, Part 3: Challenges and surprises","This is the final installment in our three-part series about our yearlong\nproject to decompose GitLab's Postgres database.","https://about.gitlab.com/blog/path-to-decomposing-gitlab-database-part3","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Decomposing the GitLab backend database, Part 3: Challenges and surprises\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Dylan Griffith\"}],\n        \"datePublished\": \"2022-08-04\",\n      }",{"title":2612,"description":2613,"authors":2617,"heroImage":2578,"date":2584,"category":14,"tags":2618},[2583],[1099,1141],{"slug":2620,"featured":6,"template":730},"path-to-decomposing-gitlab-database-part3","content:en-us:blog:path-to-decomposing-gitlab-database-part3.yml","Path To Decomposing Gitlab Database Part3","en-us/blog/path-to-decomposing-gitlab-database-part3.yml","en-us/blog/path-to-decomposing-gitlab-database-part3",{"_path":2626,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":2627,"content":2633,"config":2638,"_id":2640,"_type":16,"title":2641,"_source":17,"_file":2642,"_stem":2643,"_extension":20},"/en-us/blog/how-to-provision-reviewops",{"title":2628,"description":2629,"ogTitle":2628,"ogDescription":2629,"noIndex":6,"ogImage":2630,"ogUrl":2631,"ogSiteName":895,"ogType":896,"canonicalUrls":2631,"schema":2632},"Deploying dynamic review environments with MRs and Argo CD","Here's how to use the Argo CD ApplicationSet to provision a ‘ReviewOps’ environment based on merge request changes.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749681920/Blog/Hero%20Images/kubernetes.png","https://about.gitlab.com/blog/how-to-provision-reviewops","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to provision dynamic review environments using merge requests and Argo CD\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Joe Randazzo\"},{\"@type\":\"Person\",\"name\":\"Madou Coulibaly\"}],\n        \"datePublished\": \"2022-08-02\",\n      }",{"title":2634,"description":2629,"authors":2635,"heroImage":2630,"date":2636,"category":14,"tags":2637},"How to provision dynamic review environments using merge requests and Argo CD",[824,1487],"2022-08-02",[1259,559,564],{"slug":2639,"featured":6,"template":730},"how-to-provision-reviewops","content:en-us:blog:how-to-provision-reviewops.yml","How To Provision Reviewops","en-us/blog/how-to-provision-reviewops.yml","en-us/blog/how-to-provision-reviewops",{"_path":2645,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":2646,"content":2652,"config":2657,"_id":2659,"_type":16,"title":2660,"_source":17,"_file":2661,"_stem":2662,"_extension":20},"/en-us/blog/how-to-access-gitlab-on-a-private-network-with-tailscale",{"title":2647,"description":2648,"ogTitle":2647,"ogDescription":2648,"noIndex":6,"ogImage":2649,"ogUrl":2650,"ogSiteName":895,"ogType":896,"canonicalUrls":2650,"schema":2651},"How to access GitLab on a private network with Tailscale","If issues around a private network were preventing a permanent GitLab installation, Brendan O'Leary has the solution with Tailscale.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749679348/Blog/Hero%20Images/locks.jpg","https://about.gitlab.com/blog/how-to-access-gitlab-on-a-private-network-with-tailscale","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to access GitLab on a private network with Tailscale\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Brendan O'Leary\"}],\n        \"datePublished\": \"2022-07-21\",\n      }",{"title":2647,"description":2648,"authors":2653,"heroImage":2649,"date":2655,"category":14,"tags":2656},[2654],"Brendan O'Leary","2022-07-21",[728,809,233],{"slug":2658,"featured":6,"template":730},"how-to-access-gitlab-on-a-private-network-with-tailscale","content:en-us:blog:how-to-access-gitlab-on-a-private-network-with-tailscale.yml","How To Access Gitlab On A Private Network With Tailscale","en-us/blog/how-to-access-gitlab-on-a-private-network-with-tailscale.yml","en-us/blog/how-to-access-gitlab-on-a-private-network-with-tailscale",{"_path":2664,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":2665,"content":2671,"config":2674,"_id":2676,"_type":16,"title":2677,"_source":17,"_file":2678,"_stem":2679,"_extension":20},"/en-us/blog/quickly-onboarding-engineers-successfully",{"title":2666,"description":2667,"ogTitle":2666,"ogDescription":2667,"noIndex":6,"ogImage":2668,"ogUrl":2669,"ogSiteName":895,"ogType":896,"canonicalUrls":2669,"schema":2670},"How to quickly (and successfully) onboard engineers","It's a tough hiring market today. Here's how GitLab gets engineers onboard fast and sets them up for success.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749670635/Blog/Hero%20Images/kubernetesterms.jpg","https://about.gitlab.com/blog/quickly-onboarding-engineers-successfully","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to quickly (and successfully) onboard engineers\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"David O'Regan\"}],\n        \"datePublished\": \"2022-07-21\",\n      }",{"title":2666,"description":2667,"authors":2672,"heroImage":2668,"date":2655,"category":14,"tags":2673},[1597],[564,773,1507],{"slug":2675,"featured":6,"template":730},"quickly-onboarding-engineers-successfully","content:en-us:blog:quickly-onboarding-engineers-successfully.yml","Quickly Onboarding Engineers Successfully","en-us/blog/quickly-onboarding-engineers-successfully.yml","en-us/blog/quickly-onboarding-engineers-successfully",{"_path":2681,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":2682,"content":2688,"config":2693,"_id":2695,"_type":16,"title":2696,"_source":17,"_file":2697,"_stem":2698,"_extension":20},"/en-us/blog/reducing-pager-fatigue-and-improving-on-call-life",{"title":2683,"description":2684,"ogTitle":2683,"ogDescription":2684,"noIndex":6,"ogImage":2685,"ogUrl":2686,"ogSiteName":895,"ogType":896,"canonicalUrls":2686,"schema":2687},"How we improved on-call life by reducing pager noise","Too many pages? Here's how we tackled on-call SRE quality of life by grouping alerts by service and only paging on downstream services.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749682368/Blog/Hero%20Images/cover.png","https://about.gitlab.com/blog/reducing-pager-fatigue-and-improving-on-call-life","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How we improved on-call life by reducing pager noise\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Steve Azzopardi\"}],\n        \"datePublished\": \"2022-07-19\",\n      }",{"title":2683,"description":2684,"authors":2689,"heroImage":2685,"date":2691,"category":14,"tags":2692},[2690],"Steve Azzopardi","2022-07-19",[1451],{"slug":2694,"featured":6,"template":730},"reducing-pager-fatigue-and-improving-on-call-life","content:en-us:blog:reducing-pager-fatigue-and-improving-on-call-life.yml","Reducing Pager Fatigue And Improving On Call Life","en-us/blog/reducing-pager-fatigue-and-improving-on-call-life.yml","en-us/blog/reducing-pager-fatigue-and-improving-on-call-life",{"_path":2700,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":2701,"content":2707,"config":2712,"_id":2714,"_type":16,"title":2715,"_source":17,"_file":2716,"_stem":2717,"_extension":20},"/en-us/blog/tips-for-managing-monorepos-in-gitlab",{"title":2702,"description":2703,"ogTitle":2702,"ogDescription":2703,"noIndex":6,"ogImage":2704,"ogUrl":2705,"ogSiteName":895,"ogType":896,"canonicalUrls":2705,"schema":2706},"5 Tips for managing monorepos in GitLab","Learn the benefits of operating a monolothic repository and how to get the most out of this structure.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749667591/Blog/Hero%20Images/code-review-blog.jpg","https://about.gitlab.com/blog/tips-for-managing-monorepos-in-gitlab","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"5 Tips for managing monorepos in GitLab\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Sarah Waldner\"}],\n        \"datePublished\": \"2022-07-12\",\n      }",{"title":2702,"description":2703,"authors":2708,"heroImage":2704,"date":2710,"category":14,"tags":2711},[2709],"Sarah Waldner","2022-07-12",[564,750,904,749,924],{"slug":2713,"featured":6,"template":730},"tips-for-managing-monorepos-in-gitlab","content:en-us:blog:tips-for-managing-monorepos-in-gitlab.yml","Tips For Managing Monorepos In Gitlab","en-us/blog/tips-for-managing-monorepos-in-gitlab.yml","en-us/blog/tips-for-managing-monorepos-in-gitlab",{"_path":2719,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":2720,"content":2726,"config":2732,"_id":2734,"_type":16,"title":2735,"_source":17,"_file":2736,"_stem":2737,"_extension":20},"/en-us/blog/how-to-migrate-atlassians-bamboo-servers-ci-cd-infrastructure-to-gitlab-ci-part-two",{"title":2721,"description":2722,"ogTitle":2721,"ogDescription":2722,"noIndex":6,"ogImage":2723,"ogUrl":2724,"ogSiteName":895,"ogType":896,"canonicalUrls":2724,"schema":2725},"Bamboo Server to GitLab CI migration: Advanced techniques","A real-world look at how a migrated CI/CD infrastructure will work in GitLab CI.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749679081/Blog/Hero%20Images/jenkins-migration.jpg","https://about.gitlab.com/blog/how-to-migrate-atlassians-bamboo-servers-ci-cd-infrastructure-to-gitlab-ci-part-two","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to migrate Atlassian's Bamboo server's CI/CD infrastructure to GitLab CI, part two\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Ivan Lychev\"}],\n        \"datePublished\": \"2022-07-11\",\n      }",{"title":2727,"description":2722,"authors":2728,"heroImage":2723,"date":2730,"category":14,"tags":2731},"How to migrate Atlassian's Bamboo server's CI/CD infrastructure to GitLab CI, part two",[2729],"Ivan Lychev","2022-07-11",[110,564,728],{"slug":2733,"featured":6,"template":730},"how-to-migrate-atlassians-bamboo-servers-ci-cd-infrastructure-to-gitlab-ci-part-two","content:en-us:blog:how-to-migrate-atlassians-bamboo-servers-ci-cd-infrastructure-to-gitlab-ci-part-two.yml","How To Migrate Atlassians Bamboo Servers Ci Cd Infrastructure To Gitlab Ci Part Two","en-us/blog/how-to-migrate-atlassians-bamboo-servers-ci-cd-infrastructure-to-gitlab-ci-part-two.yml","en-us/blog/how-to-migrate-atlassians-bamboo-servers-ci-cd-infrastructure-to-gitlab-ci-part-two",{"_path":2739,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":2740,"content":2745,"config":2750,"_id":2752,"_type":16,"title":2753,"_source":17,"_file":2754,"_stem":2755,"_extension":20},"/en-us/blog/migration-from-atlassian-bamboo-server-to-gitlab-ci",{"title":2741,"description":2742,"ogTitle":2741,"ogDescription":2742,"noIndex":6,"ogImage":2578,"ogUrl":2743,"ogSiteName":895,"ogType":896,"canonicalUrls":2743,"schema":2744},"Migrating from Bamboo Server to GitLab CI: Getting started","Theoretical reasoning and practical proposal on migrating an existing CI/CD infrastructure of some multi-component application from Bamboo Server to GitLab CI","https://about.gitlab.com/blog/migration-from-atlassian-bamboo-server-to-gitlab-ci","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to migrate Atlassian Bamboo Server's CI/CD infrastructure to GitLab CI, part one\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Ivan Lychev\"}],\n        \"datePublished\": \"2022-07-06\",\n      }",{"title":2746,"description":2742,"authors":2747,"heroImage":2578,"date":2748,"category":14,"tags":2749},"How to migrate Atlassian Bamboo Server's CI/CD infrastructure to GitLab CI, part one",[2729],"2022-07-06",[110,564,728],{"slug":2751,"featured":6,"template":730},"migration-from-atlassian-bamboo-server-to-gitlab-ci","content:en-us:blog:migration-from-atlassian-bamboo-server-to-gitlab-ci.yml","Migration From Atlassian Bamboo Server To Gitlab Ci","en-us/blog/migration-from-atlassian-bamboo-server-to-gitlab-ci.yml","en-us/blog/migration-from-atlassian-bamboo-server-to-gitlab-ci",{"_path":2757,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":2758,"content":2763,"config":2768,"_id":2770,"_type":16,"title":2771,"_source":17,"_file":2772,"_stem":2773,"_extension":20},"/en-us/blog/a-story-of-runner-scaling",{"title":2759,"description":2318,"ogTitle":2759,"ogDescription":2318,"noIndex":6,"ogImage":2760,"ogUrl":2761,"ogSiteName":895,"ogType":896,"canonicalUrls":2761,"schema":2762},"An SA story about hyperscaling GitLab Runner workloads using Kubernetes","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749669897/Blog/Hero%20Images/kaleidico-26MJGnCM0Wc-unsplash.jpg","https://about.gitlab.com/blog/a-story-of-runner-scaling","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"An SA story about hyperscaling GitLab Runner workloads using Kubernetes\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Darwin Sanoy\"},{\"@type\":\"Person\",\"name\":\"Brian Wald\"}],\n        \"datePublished\": \"2022-06-29\",\n      }",{"title":2759,"description":2318,"authors":2764,"heroImage":2760,"date":2766,"category":14,"tags":2767},[768,2765],"Brian Wald","2022-06-29",[1022,1120,904,945],{"slug":2769,"featured":6,"template":730},"a-story-of-runner-scaling","content:en-us:blog:a-story-of-runner-scaling.yml","A Story Of Runner Scaling","en-us/blog/a-story-of-runner-scaling.yml","en-us/blog/a-story-of-runner-scaling",{"_path":2775,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":2776,"content":2782,"config":2787,"_id":2789,"_type":16,"title":2790,"_source":17,"_file":2791,"_stem":2792,"_extension":20},"/en-us/blog/observability-vs-monitoring-in-devops",{"title":2777,"description":2778,"ogTitle":2777,"ogDescription":2778,"noIndex":6,"ogImage":2779,"ogUrl":2780,"ogSiteName":895,"ogType":896,"canonicalUrls":2780,"schema":2781},"Observability vs. monitoring in DevOps","Want to gain true and actionable visibility across your software development lifecycle? Observability is the answer.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749665484/Blog/Hero%20Images/monitoring-update-feature-image.jpg","https://about.gitlab.com/blog/observability-vs-monitoring-in-devops","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Observability vs. monitoring in DevOps\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Mike Vanbuskirk\"}],\n        \"datePublished\": \"2022-06-14\",\n      }",{"title":2777,"description":2778,"authors":2783,"heroImage":2779,"date":2785,"category":14,"tags":2786},[2784],"Mike Vanbuskirk","2022-06-14",[564,751,904],{"slug":2788,"featured":6,"template":730},"observability-vs-monitoring-in-devops","content:en-us:blog:observability-vs-monitoring-in-devops.yml","Observability Vs Monitoring In Devops","en-us/blog/observability-vs-monitoring-in-devops.yml","en-us/blog/observability-vs-monitoring-in-devops",{"_path":2794,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":2795,"content":2800,"config":2805,"_id":2807,"_type":16,"title":2808,"_source":17,"_file":2809,"_stem":2810,"_extension":20},"/en-us/blog/second-law-of-complexity-dynamics",{"title":2796,"description":2797,"ogTitle":2796,"ogDescription":2797,"noIndex":6,"ogImage":2578,"ogUrl":2798,"ogSiteName":895,"ogType":896,"canonicalUrls":2798,"schema":2799},"How pursuit of simplicity complicates container-based CI","Simplicity always has a certain player in mind - learn how to avoid antipatterns by ensuring simplicity themes do not compromise your productivity by over-focusing on machine efficiencies.","https://about.gitlab.com/blog/second-law-of-complexity-dynamics","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"When the pursuit of simplicity creates complexity in container-based CI pipelines\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Darwin Sanoy\"}],\n        \"datePublished\": \"2022-05-24\",\n      }",{"title":2801,"description":2797,"authors":2802,"heroImage":2578,"date":2803,"category":14,"tags":2804},"When the pursuit of simplicity creates complexity in container-based CI pipelines",[768],"2022-05-24",[1022,1120,728,1259,945],{"slug":2806,"featured":6,"template":730},"second-law-of-complexity-dynamics","content:en-us:blog:second-law-of-complexity-dynamics.yml","Second Law Of Complexity Dynamics","en-us/blog/second-law-of-complexity-dynamics.yml","en-us/blog/second-law-of-complexity-dynamics",{"_path":2812,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":2813,"content":2819,"config":2823,"_id":2825,"_type":16,"title":2826,"_source":17,"_file":2827,"_stem":2828,"_extension":20},"/en-us/blog/how-we-removed-all-502-errors-by-caring-about-pid-1-in-kubernetes",{"title":2814,"description":2815,"ogTitle":2814,"ogDescription":2815,"noIndex":6,"ogImage":2816,"ogUrl":2817,"ogSiteName":895,"ogType":896,"canonicalUrls":2817,"schema":2818},"How we reduced 502 errors by caring about PID 1 in Kubernetes","For every deploy, scale down event, or pod termination, users of GitLab's Pages service were experiencing 502 errors. This explains how we found the root cause and rolled out a fix for it.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749682305/Blog/Hero%20Images/KubeCon2022.jpg","https://about.gitlab.com/blog/how-we-removed-all-502-errors-by-caring-about-pid-1-in-kubernetes","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How we reduced 502 errors by caring about PID 1 in Kubernetes\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Steve Azzopardi\"}],\n        \"datePublished\": \"2022-05-17\",\n      }",{"title":2814,"description":2815,"authors":2820,"heroImage":2816,"date":2821,"category":14,"tags":2822},[2690],"2022-05-17",[1180],{"slug":2824,"featured":6,"template":730},"how-we-removed-all-502-errors-by-caring-about-pid-1-in-kubernetes","content:en-us:blog:how-we-removed-all-502-errors-by-caring-about-pid-1-in-kubernetes.yml","How We Removed All 502 Errors By Caring About Pid 1 In Kubernetes","en-us/blog/how-we-removed-all-502-errors-by-caring-about-pid-1-in-kubernetes.yml","en-us/blog/how-we-removed-all-502-errors-by-caring-about-pid-1-in-kubernetes",{"_path":2830,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":2831,"content":2837,"config":2842,"_id":2844,"_type":16,"title":2845,"_source":17,"_file":2846,"_stem":2847,"_extension":20},"/en-us/blog/how-we-built-a-stack-overflow-community-questions-analyzer-and-you-can-too",{"title":2832,"description":2833,"ogTitle":2832,"ogDescription":2833,"noIndex":6,"ogImage":2834,"ogUrl":2835,"ogSiteName":895,"ogType":896,"canonicalUrls":2835,"schema":2836},"How We Built a Stack Overflow Community Questions Analyzer","We wanted to better understand what Stack Overflow GitLab Community members wanted to know, so we automated a way to keep track of it all. Here's a step-by-step look at how we did it.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749667552/Blog/Hero%20Images/gitlabonstackoverflow.png","https://about.gitlab.com/blog/how-we-built-a-stack-overflow-community-questions-analyzer-and-you-can-too","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How we built a Stack Overflow Community questions analyzer (and you can too)\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"William Arias\"}],\n        \"datePublished\": \"2022-04-28\",\n      }",{"title":2838,"description":2833,"authors":2839,"heroImage":2834,"date":2840,"category":14,"tags":2841},"How we built a Stack Overflow Community questions analyzer (and you can too)",[723],"2022-04-28",[564,269,1600],{"slug":2843,"featured":6,"template":730},"how-we-built-a-stack-overflow-community-questions-analyzer-and-you-can-too","content:en-us:blog:how-we-built-a-stack-overflow-community-questions-analyzer-and-you-can-too.yml","How We Built A Stack Overflow Community Questions Analyzer And You Can Too","en-us/blog/how-we-built-a-stack-overflow-community-questions-analyzer-and-you-can-too.yml","en-us/blog/how-we-built-a-stack-overflow-community-questions-analyzer-and-you-can-too",{"_path":2849,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":2850,"content":2856,"config":2860,"_id":2862,"_type":16,"title":2863,"_source":17,"_file":2864,"_stem":2865,"_extension":20},"/en-us/blog/comparing-static-site-generators",{"title":2851,"description":2852,"ogTitle":2851,"ogDescription":2852,"noIndex":6,"ogImage":2853,"ogUrl":2854,"ogSiteName":895,"ogType":896,"canonicalUrls":2854,"schema":2855},"How to choose the right static site generator","Here's an in-depth look at 6 static site generators that deploy to GitLab Pages.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749682290/Blog/Hero%20Images/kelly-sikkema-gchfxsdcmje-unsplash-resized.jpg","https://about.gitlab.com/blog/comparing-static-site-generators","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to choose the right static site generator\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Fatima Sarah Khalid\"}],\n        \"datePublished\": \"2022-04-18\",\n      }",{"title":2851,"description":2852,"authors":2857,"heroImage":2853,"date":2858,"category":14,"tags":2859},[2212],"2022-04-18",[2105,269,809],{"slug":2861,"featured":6,"template":730},"comparing-static-site-generators","content:en-us:blog:comparing-static-site-generators.yml","Comparing Static Site Generators","en-us/blog/comparing-static-site-generators.yml","en-us/blog/comparing-static-site-generators",{"_path":2867,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":2868,"content":2874,"config":2878,"_id":2880,"_type":16,"title":2881,"_source":17,"_file":2882,"_stem":2883,"_extension":20},"/en-us/blog/deploy-shopify-themes-with-gitlab",{"title":2869,"description":2870,"ogTitle":2869,"ogDescription":2870,"noIndex":6,"ogImage":2871,"ogUrl":2872,"ogSiteName":895,"ogType":896,"canonicalUrls":2872,"schema":2873},"How to deploy Shopify themes with GitLab","Streamline your development workflow by configuring auto deployments for Shopify themes with GitLab pipelines.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749683288/Blog/Hero%20Images/storefront.jpg","https://about.gitlab.com/blog/deploy-shopify-themes-with-gitlab","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to deploy Shopify themes with GitLab\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Austin Regnery\"}],\n        \"datePublished\": \"2022-04-14\",\n      }",{"title":2869,"description":2870,"authors":2875,"heroImage":2871,"date":2876,"category":14,"tags":2877},[1880],"2022-04-14",[728],{"slug":2879,"featured":6,"template":730},"deploy-shopify-themes-with-gitlab","content:en-us:blog:deploy-shopify-themes-with-gitlab.yml","Deploy Shopify Themes With Gitlab","en-us/blog/deploy-shopify-themes-with-gitlab.yml","en-us/blog/deploy-shopify-themes-with-gitlab",{"_path":2885,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":2886,"content":2892,"config":2896,"_id":2898,"_type":16,"title":2899,"_source":17,"_file":2900,"_stem":2901,"_extension":20},"/en-us/blog/the-ultimate-guide-to-gitops-with-gitlab",{"title":2887,"description":2888,"ogTitle":2887,"ogDescription":2888,"noIndex":6,"ogImage":2889,"ogUrl":2890,"ogSiteName":895,"ogType":896,"canonicalUrls":2890,"schema":2891},"The ultimate guide to GitOps with GitLab","This eight-part tutorial series demonstrates how to use GitLab as a best-in-class GitOps tool.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749670178/Blog/Hero%20Images/GitLab-Ops.png","https://about.gitlab.com/blog/the-ultimate-guide-to-gitops-with-gitlab","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"The ultimate guide to GitOps with GitLab\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Viktor Nagy\"}],\n        \"datePublished\": \"2022-04-07\",\n      }",{"title":2887,"description":2888,"authors":2893,"heroImage":2889,"date":2894,"category":14,"tags":2895},[2139],"2022-04-07",[564,728,559],{"slug":2897,"featured":6,"template":730},"the-ultimate-guide-to-gitops-with-gitlab","content:en-us:blog:the-ultimate-guide-to-gitops-with-gitlab.yml","The Ultimate Guide To Gitops With Gitlab","en-us/blog/the-ultimate-guide-to-gitops-with-gitlab.yml","en-us/blog/the-ultimate-guide-to-gitops-with-gitlab",{"_path":2903,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":2904,"content":2910,"config":2915,"_id":2917,"_type":16,"title":2918,"_source":17,"_file":2919,"_stem":2920,"_extension":20},"/en-us/blog/gitlab-top-devops-tooling-metrics-and-targets",{"title":2905,"description":2906,"ogTitle":2905,"ogDescription":2906,"noIndex":6,"ogImage":2907,"ogUrl":2908,"ogSiteName":895,"ogType":896,"canonicalUrls":2908,"schema":2909},"The top DevOps tooling metrics and targets at GitLab","Here is how we measure DevOps success and why we always try to look forward.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749665635/Blog/Hero%20Images/blog-performance-metrics.jpg","https://about.gitlab.com/blog/gitlab-top-devops-tooling-metrics-and-targets","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"The top DevOps tooling metrics and targets at GitLab\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Mek Stittri\"}],\n        \"datePublished\": \"2022-04-05\",\n      }",{"title":2905,"description":2906,"authors":2911,"heroImage":2907,"date":2913,"category":14,"tags":2914},[2912],"Mek Stittri","2022-04-05",[564,1099,773],{"slug":2916,"featured":6,"template":730},"gitlab-top-devops-tooling-metrics-and-targets","content:en-us:blog:gitlab-top-devops-tooling-metrics-and-targets.yml","Gitlab Top Devops Tooling Metrics And Targets","en-us/blog/gitlab-top-devops-tooling-metrics-and-targets.yml","en-us/blog/gitlab-top-devops-tooling-metrics-and-targets",{"_path":2922,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":2923,"content":2929,"config":2935,"_id":2937,"_type":16,"title":2938,"_source":17,"_file":2939,"_stem":2940,"_extension":20},"/en-us/blog/learn-python-with-pj-part-3",{"title":2924,"description":2925,"ogTitle":2924,"ogDescription":2925,"noIndex":6,"ogImage":2926,"ogUrl":2927,"ogSiteName":895,"ogType":896,"canonicalUrls":2927,"schema":2928},"Learn Python with Pj! Part 3 - Functions and strings","Pj shares his experiences learning how to program functions and strings.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749664962/Blog/Hero%20Images/python.jpg","https://about.gitlab.com/blog/learn-python-with-pj-part-3","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Learn Python with Pj! Part 3 - Functions and strings\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"PJ Metz\"}],\n        \"datePublished\": \"2022-04-04\",\n      }",{"title":2924,"description":2925,"authors":2930,"heroImage":2926,"date":2932,"category":14,"tags":2933},[2931],"PJ Metz","2022-04-04",[1659,2934,728],"growth",{"slug":2936,"featured":6,"template":730},"learn-python-with-pj-part-3","content:en-us:blog:learn-python-with-pj-part-3.yml","Learn Python With Pj Part 3","en-us/blog/learn-python-with-pj-part-3.yml","en-us/blog/learn-python-with-pj-part-3",{"_path":2942,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":2943,"content":2948,"config":2953,"_id":2955,"_type":16,"title":2956,"_source":17,"_file":2957,"_stem":2958,"_extension":20},"/en-us/blog/gitops-with-gitlab-manage-the-agent",{"title":2944,"description":2945,"ogTitle":2944,"ogDescription":2945,"noIndex":6,"ogImage":2889,"ogUrl":2946,"ogSiteName":895,"ogType":896,"canonicalUrls":2946,"schema":2947},"Self-managing Kubernetes agent installation with GitOps","This is the eighth and last article in a series of tutorials on how to do GitOps with GitLab.","https://about.gitlab.com/blog/gitops-with-gitlab-manage-the-agent","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"GitOps with GitLab: Turn a GitLab agent for Kubernetes installation to manage itself\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Viktor Nagy\"}],\n        \"datePublished\": \"2022-03-30\",\n      }",{"title":2949,"description":2945,"authors":2950,"heroImage":2889,"date":2951,"category":14,"tags":2952},"GitOps with GitLab: Turn a GitLab agent for Kubernetes installation to manage itself",[2139],"2022-03-30",[559,1180,728],{"slug":2954,"featured":6,"template":730},"gitops-with-gitlab-manage-the-agent","content:en-us:blog:gitops-with-gitlab-manage-the-agent.yml","Gitops With Gitlab Manage The Agent","en-us/blog/gitops-with-gitlab-manage-the-agent.yml","en-us/blog/gitops-with-gitlab-manage-the-agent",{"_path":2960,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":2961,"content":2966,"config":2971,"_id":2973,"_type":16,"title":2974,"_source":17,"_file":2975,"_stem":2976,"_extension":20},"/en-us/blog/gitlab-and-testify-sec-witness-alliance",{"title":2962,"description":2963,"ogTitle":2962,"ogDescription":2963,"noIndex":6,"ogImage":2578,"ogUrl":2964,"ogSiteName":895,"ogType":896,"canonicalUrls":2964,"schema":2965},"How to enhance supply chain security with GitLab and TestifySec","New alliance partner TestifySec makes Witness available in GitLab","https://about.gitlab.com/blog/gitlab-and-testify-sec-witness-alliance","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to enhance supply chain security with GitLab and TestifySec\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Nicole Schwartz\"}],\n        \"datePublished\": \"2022-03-16\",\n      }",{"title":2962,"description":2963,"authors":2967,"heroImage":2578,"date":2969,"category":14,"tags":2970},[2968],"Nicole Schwartz","2022-03-16",[751,1507,924],{"slug":2972,"featured":6,"template":730},"gitlab-and-testify-sec-witness-alliance","content:en-us:blog:gitlab-and-testify-sec-witness-alliance.yml","Gitlab And Testify Sec Witness Alliance","en-us/blog/gitlab-and-testify-sec-witness-alliance.yml","en-us/blog/gitlab-and-testify-sec-witness-alliance",{"_path":2978,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":2979,"content":2984,"config":2989,"_id":2991,"_type":16,"title":2992,"_source":17,"_file":2993,"_stem":2994,"_extension":20},"/en-us/blog/publishing-obsidian-notes-with-gitlab-pages",{"title":2980,"description":2981,"ogTitle":2980,"ogDescription":2981,"noIndex":6,"ogImage":2578,"ogUrl":2982,"ogSiteName":895,"ogType":896,"canonicalUrls":2982,"schema":2983},"Publishing Obsidian.md notes with GitLab Pages","How to publish your Obsidian.md documents to a GitLab Pages site","https://about.gitlab.com/blog/publishing-obsidian-notes-with-gitlab-pages","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Publishing Obsidian.md notes with GitLab Pages\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Scott Hampton\"}],\n        \"datePublished\": \"2022-03-15\",\n      }",{"title":2980,"description":2981,"authors":2985,"heroImage":2578,"date":2987,"category":14,"tags":2988},[2986],"Scott Hampton","2022-03-15",[728],{"slug":2990,"featured":6,"template":730},"publishing-obsidian-notes-with-gitlab-pages","content:en-us:blog:publishing-obsidian-notes-with-gitlab-pages.yml","Publishing Obsidian Notes With Gitlab Pages","en-us/blog/publishing-obsidian-notes-with-gitlab-pages.yml","en-us/blog/publishing-obsidian-notes-with-gitlab-pages",{"_path":2996,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":2997,"content":3003,"config":3008,"_id":3010,"_type":16,"title":3011,"_source":17,"_file":3012,"_stem":3013,"_extension":20},"/en-us/blog/installing-gitlab-on-raspberry-pi-64-bit-os",{"title":2998,"description":2999,"ogTitle":2998,"ogDescription":2999,"noIndex":6,"ogImage":3000,"ogUrl":3001,"ogSiteName":895,"ogType":896,"canonicalUrls":3001,"schema":3002},"Installing GitLab on Raspberry Pi 64-bit OS","A Raspberry Pi enthusiast tries to run GitLab on the new 64-bit OS...and here's what happened.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749679433/Blog/Hero%20Images/anto-meneghini-gqytxsrctvw-unsplash.jpg","https://about.gitlab.com/blog/installing-gitlab-on-raspberry-pi-64-bit-os","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Installing GitLab on Raspberry Pi 64-bit OS\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Brendan O'Leary\"}],\n        \"datePublished\": \"2022-03-14\",\n      }",{"title":2998,"description":2999,"authors":3004,"heroImage":3000,"date":3005,"category":14,"tags":3006},[2654],"2022-03-14",[3007,233,904],"demo",{"slug":3009,"featured":6,"template":730},"installing-gitlab-on-raspberry-pi-64-bit-os","content:en-us:blog:installing-gitlab-on-raspberry-pi-64-bit-os.yml","Installing Gitlab On Raspberry Pi 64 Bit Os","en-us/blog/installing-gitlab-on-raspberry-pi-64-bit-os.yml","en-us/blog/installing-gitlab-on-raspberry-pi-64-bit-os",{"_path":3015,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":3016,"content":3021,"config":3026,"_id":3028,"_type":16,"title":3029,"_source":17,"_file":3030,"_stem":3031,"_extension":20},"/en-us/blog/sharing-slis-across-departments",{"title":3017,"description":3018,"ogTitle":3017,"ogDescription":3018,"noIndex":6,"ogImage":2578,"ogUrl":3019,"ogSiteName":895,"ogType":896,"canonicalUrls":3019,"schema":3020},"How we share SLIs across engineering departments","The Scalability team engages with the Development department for collaborating on SLIs. The first post in this series explains how we made available information accessible for development groups.","https://about.gitlab.com/blog/sharing-slis-across-departments","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How we share SLIs across engineering departments\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Bob Van Landuyt\"}],\n        \"datePublished\": \"2022-03-10\",\n      }",{"title":3017,"description":3018,"authors":3022,"heroImage":2578,"date":3024,"category":14,"tags":3025},[3023],"Bob Van Landuyt","2022-03-10",[1451,904,924,1507],{"slug":3027,"featured":6,"template":730},"sharing-slis-across-departments","content:en-us:blog:sharing-slis-across-departments.yml","Sharing Slis Across Departments","en-us/blog/sharing-slis-across-departments.yml","en-us/blog/sharing-slis-across-departments",{"_path":3033,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":3034,"content":3040,"config":3045,"_id":3047,"_type":16,"title":3048,"_source":17,"_file":3049,"_stem":3050,"_extension":20},"/en-us/blog/efficient-pipelines",{"title":3035,"description":3036,"ogTitle":3035,"ogDescription":3036,"noIndex":6,"ogImage":3037,"ogUrl":3038,"ogSiteName":895,"ogType":896,"canonicalUrls":3038,"schema":3039},"Extract greater efficiency from your CI pipelines","Learn some techniques to find the balance between pipeline performance and resource utilization.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749667534/Blog/Hero%20Images/ci-pipeline.jpg","https://about.gitlab.com/blog/efficient-pipelines","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Extract greater efficiency from your CI pipelines\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Vlad Budica\"}],\n        \"datePublished\": \"2022-03-09\",\n      }",{"title":3035,"description":3036,"authors":3041,"heroImage":3037,"date":3043,"category":14,"tags":3044},[3042],"Vlad Budica","2022-03-09",[564,1022,1120],{"slug":3046,"featured":6,"template":730},"efficient-pipelines","content:en-us:blog:efficient-pipelines.yml","Efficient Pipelines","en-us/blog/efficient-pipelines.yml","en-us/blog/efficient-pipelines",{"_path":3052,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":3053,"content":3059,"config":3063,"_id":3065,"_type":16,"title":3066,"_source":17,"_file":3067,"_stem":3068,"_extension":20},"/en-us/blog/how-to-protect-gitlab-connected-ssh-key-with-yubikey",{"title":3054,"description":3055,"ogTitle":3054,"ogDescription":3055,"noIndex":6,"ogImage":3056,"ogUrl":3057,"ogSiteName":895,"ogType":896,"canonicalUrls":3057,"schema":3058},"How to protect GitLab-connected SSH key with Yubikey","Add a layer of security to SSH keys by restricting physical access to YubiKey.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749667202/Blog/Hero%20Images/gitlabultimatesecurity.jpg","https://about.gitlab.com/blog/how-to-protect-gitlab-connected-ssh-key-with-yubikey","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to protect GitLab-connected SSH key with Yubikey\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Brendan O'Leary\"}],\n        \"datePublished\": \"2022-03-03\",\n      }",{"title":3054,"description":3055,"authors":3060,"heroImage":3056,"date":3061,"category":14,"tags":3062},[2654],"2022-03-03",[564,751,728],{"slug":3064,"featured":6,"template":730},"how-to-protect-gitlab-connected-ssh-key-with-yubikey","content:en-us:blog:how-to-protect-gitlab-connected-ssh-key-with-yubikey.yml","How To Protect Gitlab Connected Ssh Key With Yubikey","en-us/blog/how-to-protect-gitlab-connected-ssh-key-with-yubikey.yml","en-us/blog/how-to-protect-gitlab-connected-ssh-key-with-yubikey",{"_path":3070,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":3071,"content":3077,"config":3082,"_id":3084,"_type":16,"title":3085,"_source":17,"_file":3086,"_stem":3087,"_extension":20},"/en-us/blog/bringing-ai-gitlab-repository",{"title":3072,"description":3073,"ogTitle":3072,"ogDescription":3073,"noIndex":6,"ogImage":3074,"ogUrl":3075,"ogSiteName":895,"ogType":896,"canonicalUrls":3075,"schema":3076},"GitLab and Tabnine: AI-powered code completion for GitLab repositories","Development teams can get a custom AI model based on their private code that enables knowledge sharing, reduced technical debt, and more.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749682249/Blog/Hero%20Images/blog_2757.png","https://about.gitlab.com/blog/bringing-ai-gitlab-repository","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"GitLab and Tabnine: AI-powered code completion for GitLab repositories\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Brandon Jung\"}],\n        \"datePublished\": \"2022-03-02\",\n      }",{"title":3072,"description":3073,"authors":3078,"heroImage":3074,"date":3080,"category":14,"tags":3081},[3079],"Brandon Jung","2022-03-02",[564,881,1259],{"slug":3083,"featured":6,"template":730},"bringing-ai-gitlab-repository","content:en-us:blog:bringing-ai-gitlab-repository.yml","Bringing Ai Gitlab Repository","en-us/blog/bringing-ai-gitlab-repository.yml","en-us/blog/bringing-ai-gitlab-repository",{"_path":3089,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":3090,"content":3095,"config":3099,"_id":3101,"_type":16,"title":3102,"_source":17,"_file":3103,"_stem":3104,"_extension":20},"/en-us/blog/learn-python-with-pj-part-2",{"title":3091,"description":3092,"ogTitle":3091,"ogDescription":3092,"noIndex":6,"ogImage":2926,"ogUrl":3093,"ogSiteName":895,"ogType":896,"canonicalUrls":3093,"schema":3094},"Learn Python with Pj! Part 2 - Lists and loops","Follow along as our education evangelist Pj Metz learns about lists and loops in the second of this multipart series.","https://about.gitlab.com/blog/learn-python-with-pj-part-2","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Learn Python with Pj! Part 2 - Lists and loops\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"PJ Metz\"}],\n        \"datePublished\": \"2022-03-01\",\n      }",{"title":3091,"description":3092,"authors":3096,"heroImage":2926,"date":3097,"category":14,"tags":3098},[2931],"2022-03-01",[1659,564,2934],{"slug":3100,"featured":6,"template":730},"learn-python-with-pj-part-2","content:en-us:blog:learn-python-with-pj-part-2.yml","Learn Python With Pj Part 2","en-us/blog/learn-python-with-pj-part-2.yml","en-us/blog/learn-python-with-pj-part-2",{"_path":3106,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":3107,"content":3113,"config":3119,"_id":3121,"_type":16,"title":3122,"_source":17,"_file":3123,"_stem":3124,"_extension":20},"/en-us/blog/parent-child-vs-multi-project-pipelines",{"title":3108,"description":3109,"ogTitle":3108,"ogDescription":3109,"noIndex":6,"ogImage":3110,"ogUrl":3111,"ogSiteName":895,"ogType":896,"canonicalUrls":3111,"schema":3112},"CI/CD patterns with parent-child and multi-project pipelines","Parent-child pipelines inherit a lot of the design from multi-project pipelines, but they also have differences that make them unique.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659961/Blog/Hero%20Images/parent-child-multi-project-pipelines-unsplash.jpg","https://about.gitlab.com/blog/parent-child-vs-multi-project-pipelines","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Breaking down CI/CD complexity with parent-child and multi-project pipelines\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Fabio Pitino\"}],\n        \"datePublished\": \"2022-02-22\",\n      }",{"title":3114,"description":3109,"authors":3115,"heroImage":3110,"date":3117,"category":14,"tags":3118},"Breaking down CI/CD complexity with parent-child and multi-project pipelines",[3116],"Fabio Pitino","2022-02-22",[1022,1120,750],{"slug":3120,"featured":6,"template":730},"parent-child-vs-multi-project-pipelines","content:en-us:blog:parent-child-vs-multi-project-pipelines.yml","Parent Child Vs Multi Project Pipelines","en-us/blog/parent-child-vs-multi-project-pipelines.yml","en-us/blog/parent-child-vs-multi-project-pipelines",{"_path":3126,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":3127,"content":3132,"config":3136,"_id":3138,"_type":16,"title":3139,"_source":17,"_file":3140,"_stem":3141,"_extension":20},"/en-us/blog/how-to-code-build-and-deploy-from-an-ipad-using-gitlab-and-gitpod",{"title":3128,"description":3129,"ogTitle":3128,"ogDescription":3129,"noIndex":6,"ogImage":2889,"ogUrl":3130,"ogSiteName":895,"ogType":896,"canonicalUrls":3130,"schema":3131},"How to code, build, and deploy from an iPad using GitLab and Gitpod","Senior Developer Evangelist Brendan O'Leary tackles the challenge of doing DevOps from a tablet.","https://about.gitlab.com/blog/how-to-code-build-and-deploy-from-an-ipad-using-gitlab-and-gitpod","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to code, build, and deploy from an iPad using GitLab and Gitpod\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Brendan O'Leary\"}],\n        \"datePublished\": \"2022-02-10\",\n      }",{"title":3128,"description":3129,"authors":3133,"heroImage":2889,"date":3134,"category":14,"tags":3135},[2654],"2022-02-10",[564,728,1507],{"slug":3137,"featured":6,"template":730},"how-to-code-build-and-deploy-from-an-ipad-using-gitlab-and-gitpod","content:en-us:blog:how-to-code-build-and-deploy-from-an-ipad-using-gitlab-and-gitpod.yml","How To Code Build And Deploy From An Ipad Using Gitlab And Gitpod","en-us/blog/how-to-code-build-and-deploy-from-an-ipad-using-gitlab-and-gitpod.yml","en-us/blog/how-to-code-build-and-deploy-from-an-ipad-using-gitlab-and-gitpod",{"_path":3143,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":3144,"content":3149,"config":3154,"_id":3156,"_type":16,"title":3157,"_source":17,"_file":3158,"_stem":3159,"_extension":20},"/en-us/blog/gitops-with-gitlab-auto-devops",{"title":3145,"description":3146,"ogTitle":3145,"ogDescription":3146,"noIndex":6,"ogImage":2578,"ogUrl":3147,"ogSiteName":895,"ogType":896,"canonicalUrls":3147,"schema":3148},"Connecting Kubernetes clusters to GitLab with Auto DevOps","This is the 6th article in a series of tutorials on how to do GitOps with GitLab","https://about.gitlab.com/blog/gitops-with-gitlab-auto-devops","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"GitOps with GitLab: Connecting GitLab with a Kubernetes cluster - Auto DevOps\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Viktor Nagy\"}],\n        \"datePublished\": \"2022-02-08\",\n      }",{"title":3150,"description":3146,"authors":3151,"heroImage":2578,"date":3152,"category":14,"tags":3153},"GitOps with GitLab: Connecting GitLab with a Kubernetes cluster - Auto DevOps",[2139],"2022-02-08",[559,1180,728],{"slug":3155,"featured":6,"template":730},"gitops-with-gitlab-auto-devops","content:en-us:blog:gitops-with-gitlab-auto-devops.yml","Gitops With Gitlab Auto Devops","en-us/blog/gitops-with-gitlab-auto-devops.yml","en-us/blog/gitops-with-gitlab-auto-devops",{"_path":3161,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":3162,"content":3168,"config":3173,"_id":3175,"_type":16,"title":3176,"_source":17,"_file":3177,"_stem":3178,"_extension":20},"/en-us/blog/git-fetch-performance-2021-part-2",{"title":3163,"description":3164,"ogTitle":3163,"ogDescription":3164,"noIndex":6,"ogImage":3165,"ogUrl":3166,"ogSiteName":895,"ogType":896,"canonicalUrls":3166,"schema":3167},"Git fetch performance improvements in 2021, Part 2 ","Looking back at the server-side performance improvements we made in 2021 for Git fetch.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749663383/Blog/Hero%20Images/tanuki-bg-full.png","https://about.gitlab.com/blog/git-fetch-performance-2021-part-2","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Git fetch performance improvements in 2021, Part 2 \",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Jacob Vosmaer\"}],\n        \"datePublished\": \"2022-02-07\",\n      }",{"title":3163,"description":3164,"authors":3169,"heroImage":3165,"date":3171,"category":14,"tags":3172},[3170],"Jacob Vosmaer","2022-02-07",[792,1451,904],{"slug":3174,"featured":6,"template":730},"git-fetch-performance-2021-part-2","content:en-us:blog:git-fetch-performance-2021-part-2.yml","Git Fetch Performance 2021 Part 2","en-us/blog/git-fetch-performance-2021-part-2.yml","en-us/blog/git-fetch-performance-2021-part-2",{"_path":3180,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":3181,"content":3187,"config":3192,"_id":3194,"_type":16,"title":3195,"_source":17,"_file":3196,"_stem":3197,"_extension":20},"/en-us/blog/cicd-tunnel-impersonation",{"title":3182,"description":3183,"ogTitle":3182,"ogDescription":3183,"noIndex":6,"ogImage":3184,"ogUrl":3185,"ogSiteName":895,"ogType":896,"canonicalUrls":3185,"schema":3186},"Fine-grained permissions with impersonation in CI/CD tunnel","Learn how to use use fine-grained permissions via generic impersonation in CI/CD Tunnel","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749667435/Blog/Hero%20Images/tunnel.jpg","https://about.gitlab.com/blog/cicd-tunnel-impersonation","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to use fine-grained permissions via generic impersonation in CI/CD Tunnel\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Cesar Saavedra\"}],\n        \"datePublished\": \"2022-02-01\",\n      }",{"title":3188,"description":3183,"authors":3189,"heroImage":3184,"date":3190,"category":14,"tags":3191},"How to use fine-grained permissions via generic impersonation in CI/CD Tunnel",[1276],"2022-02-01",[2438,1022,1120,1180],{"slug":3193,"featured":6,"template":730},"cicd-tunnel-impersonation","content:en-us:blog:cicd-tunnel-impersonation.yml","Cicd Tunnel Impersonation","en-us/blog/cicd-tunnel-impersonation.yml","en-us/blog/cicd-tunnel-impersonation",{"_path":3199,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":3200,"content":3205,"config":3209,"_id":3211,"_type":16,"title":3212,"_source":17,"_file":3213,"_stem":3214,"_extension":20},"/en-us/blog/git-fetch-performance",{"title":3201,"description":3202,"ogTitle":3201,"ogDescription":3202,"noIndex":6,"ogImage":2578,"ogUrl":3203,"ogSiteName":895,"ogType":896,"canonicalUrls":3203,"schema":3204},"How we made Git fetch performance improvements in 2021, part 1","Our Scalability team tackled a server CPU utilization issue. Here's the first part of a detailed look at performance improvements we made for Git fetch.","https://about.gitlab.com/blog/git-fetch-performance","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How we made Git fetch performance improvements in 2021, part 1\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Jacob Vosmaer\"}],\n        \"datePublished\": \"2022-01-20\",\n      }",{"title":3201,"description":3202,"authors":3206,"heroImage":2578,"date":3207,"category":14,"tags":3208},[3170],"2022-01-20",[792,1451,904],{"slug":3210,"featured":6,"template":730},"git-fetch-performance","content:en-us:blog:git-fetch-performance.yml","Git Fetch Performance","en-us/blog/git-fetch-performance.yml","en-us/blog/git-fetch-performance",{"_path":3216,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":3217,"content":3222,"config":3227,"_id":3229,"_type":16,"title":3230,"_source":17,"_file":3231,"_stem":3232,"_extension":20},"/en-us/blog/pipelines-as-code",{"title":3218,"description":3219,"ogTitle":3218,"ogDescription":3219,"noIndex":6,"ogImage":2578,"ogUrl":3220,"ogSiteName":895,"ogType":896,"canonicalUrls":3220,"schema":3221},"Pipelines-as-Code: How to improve speed from idea to production","Pipelines-as-Code streamline automatic building, testing, and deploying of applications using prebuilt pipelines and infrastructure components. Here's how it works.","https://about.gitlab.com/blog/pipelines-as-code","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Pipelines-as-Code: How to improve speed from idea to production\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Robert Williams\"}],\n        \"datePublished\": \"2022-01-18\",\n      }",{"title":3218,"description":3219,"authors":3223,"heroImage":2578,"date":3225,"category":14,"tags":3226},[3224],"Robert Williams","2022-01-18",[865,582,564],{"slug":3228,"featured":6,"template":730},"pipelines-as-code","content:en-us:blog:pipelines-as-code.yml","Pipelines As Code","en-us/blog/pipelines-as-code.yml","en-us/blog/pipelines-as-code",{"_path":3234,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":3235,"content":3241,"config":3245,"_id":3247,"_type":16,"title":3248,"_source":17,"_file":3249,"_stem":3250,"_extension":20},"/en-us/blog/gitops-with-gitlab-using-ci-cd",{"title":3236,"description":3237,"ogTitle":3236,"ogDescription":3237,"noIndex":6,"ogImage":3238,"ogUrl":3239,"ogSiteName":895,"ogType":896,"canonicalUrls":3239,"schema":3240},"GitOps with GitLab: The CI/CD Tunnel","This is the fifth in a series of tutorials on how to do GitOps with GitLab.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749667236/Blog/Hero%20Images/Learn-at-GL.jpg","https://about.gitlab.com/blog/gitops-with-gitlab-using-ci-cd","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"GitOps with GitLab: The CI/CD Tunnel\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Viktor Nagy\"}],\n        \"datePublished\": \"2022-01-07\",\n      }",{"title":3236,"description":3237,"authors":3242,"heroImage":3238,"date":3243,"category":14,"tags":3244},[2139],"2022-01-07",[1180,564,924],{"slug":3246,"featured":6,"template":730},"gitops-with-gitlab-using-ci-cd","content:en-us:blog:gitops-with-gitlab-using-ci-cd.yml","Gitops With Gitlab Using Ci Cd","en-us/blog/gitops-with-gitlab-using-ci-cd.yml","en-us/blog/gitops-with-gitlab-using-ci-cd",{"_path":3252,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":3253,"content":3259,"config":3264,"_id":3266,"_type":16,"title":3267,"_source":17,"_file":3268,"_stem":3269,"_extension":20},"/en-us/blog/how-to-bring-devops-to-the-database-with-gitlab-and-liquibase",{"title":3254,"description":3255,"ogTitle":3254,"ogDescription":3255,"noIndex":6,"ogImage":3256,"ogUrl":3257,"ogSiteName":895,"ogType":896,"canonicalUrls":3257,"schema":3258},"How to bring DevOps to the database with GitLab and Liquibase","Learn how to build a continuous delivery pipeline for database code changes with this tutorial.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749672677/Blog/Hero%20Images/metalgears_databasecasestudy.jpg","https://about.gitlab.com/blog/how-to-bring-devops-to-the-database-with-gitlab-and-liquibase","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to bring DevOps to the database with GitLab and Liquibase\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Tsvi Zandany\"}],\n        \"datePublished\": \"2022-01-05\",\n      }",{"title":3254,"description":3255,"authors":3260,"heroImage":3256,"date":3262,"category":14,"tags":3263},[3261],"Tsvi Zandany","2022-01-05",[233,1022,1120],{"slug":3265,"featured":6,"template":730},"how-to-bring-devops-to-the-database-with-gitlab-and-liquibase","content:en-us:blog:how-to-bring-devops-to-the-database-with-gitlab-and-liquibase.yml","How To Bring Devops To The Database With Gitlab And Liquibase","en-us/blog/how-to-bring-devops-to-the-database-with-gitlab-and-liquibase.yml","en-us/blog/how-to-bring-devops-to-the-database-with-gitlab-and-liquibase",{"_path":3271,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":3272,"content":3277,"config":3281,"_id":3283,"_type":16,"title":3284,"_source":17,"_file":3285,"_stem":3286,"_extension":20},"/en-us/blog/gitlab-chart-works-towards-kubernetes-1-22",{"title":3273,"description":3274,"ogTitle":3273,"ogDescription":3274,"noIndex":6,"ogImage":2889,"ogUrl":3275,"ogSiteName":895,"ogType":896,"canonicalUrls":3275,"schema":3276},"GitLab Chart works towards Kubernetes 1.22","New minimum version is 1.19 for in-chart NGINX Ingress Controller.","https://about.gitlab.com/blog/gitlab-chart-works-towards-kubernetes-1-22","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"GitLab Chart works towards Kubernetes 1.22\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"GitLab\"}],\n        \"datePublished\": \"2021-12-17\",\n      }",{"title":3273,"description":3274,"authors":3278,"heroImage":2889,"date":3279,"category":14,"tags":3280},[1077],"2021-12-17",[564,924,1180],{"slug":3282,"featured":6,"template":730},"gitlab-chart-works-towards-kubernetes-1-22","content:en-us:blog:gitlab-chart-works-towards-kubernetes-1-22.yml","Gitlab Chart Works Towards Kubernetes 1 22","en-us/blog/gitlab-chart-works-towards-kubernetes-1-22.yml","en-us/blog/gitlab-chart-works-towards-kubernetes-1-22",{"_path":3288,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":3289,"content":3295,"config":3299,"_id":3301,"_type":16,"title":3302,"_source":17,"_file":3303,"_stem":3304,"_extension":20},"/en-us/blog/how-to-automate-localization-for-flutter-apps",{"title":3290,"description":3291,"ogTitle":3290,"ogDescription":3291,"noIndex":6,"ogImage":3292,"ogUrl":3293,"ogSiteName":895,"ogType":896,"canonicalUrls":3293,"schema":3294},"How to automate localization for Flutter apps","Follow this tutorial to learn how to simplify the localization process on GitLab with Localizely.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749679465/Blog/Hero%20Images/flutterbanner.png","https://about.gitlab.com/blog/how-to-automate-localization-for-flutter-apps","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to automate localization for Flutter apps\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"GitLab\"}],\n        \"datePublished\": \"2021-12-10\",\n      }",{"title":3290,"description":3291,"authors":3296,"heroImage":3292,"date":3297,"category":14,"tags":3298},[1077],"2021-12-10",[564,1451,728],{"slug":3300,"featured":6,"template":730},"how-to-automate-localization-for-flutter-apps","content:en-us:blog:how-to-automate-localization-for-flutter-apps.yml","How To Automate Localization For Flutter Apps","en-us/blog/how-to-automate-localization-for-flutter-apps.yml","en-us/blog/how-to-automate-localization-for-flutter-apps",{"_path":3306,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":3307,"content":3312,"config":3316,"_id":3318,"_type":16,"title":3319,"_source":17,"_file":3320,"_stem":3321,"_extension":20},"/en-us/blog/gitops-with-gitlab-secrets-management",{"title":3308,"description":3309,"ogTitle":3308,"ogDescription":3309,"noIndex":6,"ogImage":2578,"ogUrl":3310,"ogSiteName":895,"ogType":896,"canonicalUrls":3310,"schema":3311},"GitOps with GitLab: How to tackle secrets management","In part four of our GitOps series, we learn how to manage secrets with the GitLab Agent for Kubernetes.","https://about.gitlab.com/blog/gitops-with-gitlab-secrets-management","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"GitOps with GitLab: How to tackle secrets management\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Viktor Nagy\"}],\n        \"datePublished\": \"2021-12-02\",\n      }",{"title":3308,"description":3309,"authors":3313,"heroImage":2578,"date":3314,"category":14,"tags":3315},[2139],"2021-12-02",[559,1180,1099],{"slug":3317,"featured":6,"template":730},"gitops-with-gitlab-secrets-management","content:en-us:blog:gitops-with-gitlab-secrets-management.yml","Gitops With Gitlab Secrets Management","en-us/blog/gitops-with-gitlab-secrets-management.yml","en-us/blog/gitops-with-gitlab-secrets-management",{"_path":3323,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":3324,"content":3329,"config":3333,"_id":3335,"_type":16,"title":3336,"_source":17,"_file":3337,"_stem":3338,"_extension":20},"/en-us/blog/gitops-with-gitlab-connecting-the-cluster",{"title":3325,"description":3326,"ogTitle":3325,"ogDescription":3326,"noIndex":6,"ogImage":2578,"ogUrl":3327,"ogSiteName":895,"ogType":896,"canonicalUrls":3327,"schema":3328},"GitOps with GitLab: Connect with a Kubernetes cluster","In our third article in our GitOps series, learn how to connect a Kubernetes cluster with GitLab for pull and push-based deployments.","https://about.gitlab.com/blog/gitops-with-gitlab-connecting-the-cluster","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"GitOps with GitLab: Connect with a Kubernetes cluster\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Viktor Nagy\"}],\n        \"datePublished\": \"2021-11-18\",\n      }",{"title":3325,"description":3326,"authors":3330,"heroImage":2578,"date":3331,"category":14,"tags":3332},[2139],"2021-11-18",[1180,233,1099],{"slug":3334,"featured":6,"template":730},"gitops-with-gitlab-connecting-the-cluster","content:en-us:blog:gitops-with-gitlab-connecting-the-cluster.yml","Gitops With Gitlab Connecting The Cluster","en-us/blog/gitops-with-gitlab-connecting-the-cluster.yml","en-us/blog/gitops-with-gitlab-connecting-the-cluster",{"_path":3340,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":3341,"content":3346,"config":3351,"_id":3353,"_type":16,"title":3354,"_source":17,"_file":3355,"_stem":3356,"_extension":20},"/en-us/blog/vscode-workflow-new-features",{"title":3342,"description":3343,"ogTitle":3342,"ogDescription":3343,"noIndex":6,"ogImage":2394,"ogUrl":3344,"ogSiteName":895,"ogType":896,"canonicalUrls":3344,"schema":3345},"Four new tools for your Visual Studio Code and GitLab tool belt","Learn about new features that can help you review MRs and interact with GitLab","https://about.gitlab.com/blog/vscode-workflow-new-features","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Four new tools for your Visual Studio Code and GitLab tool belt\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Tomas Vik\"}],\n        \"datePublished\": \"2021-11-17\",\n      }",{"title":3342,"description":3343,"authors":3347,"heroImage":2394,"date":3349,"category":14,"tags":3350},[3348],"Tomas Vik","2021-11-17",[233,728,564],{"slug":3352,"featured":6,"template":730},"vscode-workflow-new-features","content:en-us:blog:vscode-workflow-new-features.yml","Vscode Workflow New Features","en-us/blog/vscode-workflow-new-features.yml","en-us/blog/vscode-workflow-new-features",{"_path":3358,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":3359,"content":3365,"config":3369,"_id":3371,"_type":16,"title":3372,"_source":17,"_file":3373,"_stem":3374,"_extension":20},"/en-us/blog/gko-on-ocp",{"title":3360,"description":3361,"ogTitle":3360,"ogDescription":3361,"noIndex":6,"ogImage":3362,"ogUrl":3363,"ogSiteName":895,"ogType":896,"canonicalUrls":3363,"schema":3364},"How to install and use the GitLab Kubernetes Operator","Follow these step-by-step instructions to set up the GitLab Kubernetes Operator on a Kubernetes cluster.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749682191/Blog/Hero%20Images/GKO-Thumbnail.png","https://about.gitlab.com/blog/gko-on-ocp","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to install and use the GitLab Kubernetes Operator\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Cesar Saavedra\"}],\n        \"datePublished\": \"2021-11-16\",\n      }",{"title":3360,"description":3361,"authors":3366,"heroImage":3362,"date":3367,"category":14,"tags":3368},[1276],"2021-11-16",[1180,750,233],{"slug":3370,"featured":6,"template":730},"gko-on-ocp","content:en-us:blog:gko-on-ocp.yml","Gko On Ocp","en-us/blog/gko-on-ocp.yml","en-us/blog/gko-on-ocp",{"_path":3376,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":3377,"content":3383,"config":3387,"_id":3389,"_type":16,"title":3390,"_source":17,"_file":3391,"_stem":3392,"_extension":20},"/en-us/blog/machine-learning-on-the-gitlab-devops-platform",{"title":3378,"description":3379,"ogTitle":3378,"ogDescription":3379,"noIndex":6,"ogImage":3380,"ogUrl":3381,"ogSiteName":895,"ogType":896,"canonicalUrls":3381,"schema":3382},"How Comet can streamline machine learning on The GitLab DevOps Platform","Here's a step-by-step look at how to bring ML into software development using Comet on GitLab's DevOps Platform.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749669991/Blog/Hero%20Images/ways-to-encourage-collaboration.jpg","https://about.gitlab.com/blog/machine-learning-on-the-gitlab-devops-platform","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How Comet can streamline machine learning on The GitLab DevOps Platform\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"William Arias\"}],\n        \"datePublished\": \"2021-11-08\",\n      }",{"title":3378,"description":3379,"authors":3384,"heroImage":3380,"date":3385,"category":14,"tags":3386},[723],"2021-11-08",[564,3007,233,865],{"slug":3388,"featured":6,"template":730},"machine-learning-on-the-gitlab-devops-platform","content:en-us:blog:machine-learning-on-the-gitlab-devops-platform.yml","Machine Learning On The Gitlab Devops Platform","en-us/blog/machine-learning-on-the-gitlab-devops-platform.yml","en-us/blog/machine-learning-on-the-gitlab-devops-platform",{"_path":3394,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":3395,"content":3400,"config":3404,"_id":3406,"_type":16,"title":3407,"_source":17,"_file":3408,"_stem":3409,"_extension":20},"/en-us/blog/gitops-with-gitlab-infrastructure-provisioning",{"title":3396,"description":3397,"ogTitle":3396,"ogDescription":3397,"noIndex":6,"ogImage":2578,"ogUrl":3398,"ogSiteName":895,"ogType":896,"canonicalUrls":3398,"schema":3399},"GitOps with GitLab: Infrastructure provisioning with GitLab and Terraform","In part two of our GitOps series, we set up the infrastructure using GitLab and Terraform. Here's everything you need to know.","https://about.gitlab.com/blog/gitops-with-gitlab-infrastructure-provisioning","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"GitOps with GitLab: Infrastructure provisioning with GitLab and Terraform\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Viktor Nagy\"}],\n        \"datePublished\": \"2021-11-04\",\n      }",{"title":3396,"description":3397,"authors":3401,"heroImage":2578,"date":3402,"category":14,"tags":3403},[2139],"2021-11-04",[559,1180,1099],{"slug":3405,"featured":6,"template":730},"gitops-with-gitlab-infrastructure-provisioning","content:en-us:blog:gitops-with-gitlab-infrastructure-provisioning.yml","Gitops With Gitlab Infrastructure Provisioning","en-us/blog/gitops-with-gitlab-infrastructure-provisioning.yml","en-us/blog/gitops-with-gitlab-infrastructure-provisioning",{"_path":3411,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":3412,"content":3417,"config":3422,"_id":3424,"_type":16,"title":3425,"_source":17,"_file":3426,"_stem":3427,"_extension":20},"/en-us/blog/gitops-with-gitlab",{"title":3413,"description":3414,"ogTitle":3413,"ogDescription":3414,"noIndex":6,"ogImage":2578,"ogUrl":3415,"ogSiteName":895,"ogType":896,"canonicalUrls":3415,"schema":3416},"GitOps delivery by connecting Kubernetes clusters to GitLab","This is the first in a seven-part series on GitOps using GitLab's DevOps Platform.","https://about.gitlab.com/blog/gitops-with-gitlab","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Here's how to do GitOps with GitLab\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Viktor Nagy\"}],\n        \"datePublished\": \"2021-10-21\",\n      }",{"title":3418,"description":3414,"authors":3419,"heroImage":2578,"date":3420,"category":14,"tags":3421},"Here's how to do GitOps with GitLab",[2139],"2021-10-21",[559,564,1180],{"slug":3423,"featured":6,"template":730},"gitops-with-gitlab","content:en-us:blog:gitops-with-gitlab.yml","Gitops With Gitlab","en-us/blog/gitops-with-gitlab.yml","en-us/blog/gitops-with-gitlab",{"_path":3429,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":3430,"content":3436,"config":3441,"_id":3443,"_type":16,"title":3444,"_source":17,"_file":3445,"_stem":3446,"_extension":20},"/en-us/blog/gitlab-cnh-for-50k-users",{"title":3431,"description":3432,"ogTitle":3431,"ogDescription":3432,"noIndex":6,"ogImage":3433,"ogUrl":3434,"ogSiteName":895,"ogType":896,"canonicalUrls":3434,"schema":3435},"Ready-To-Run GitLab for 50,000 users with AWS Quick Start","If you have two hours, you can deploy a GitLab instance on EKS for any number of users. All it takes is about 14 clicks! Here's what you need to know.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749680619/Blog/Hero%20Images/construction-blueprint.jpg","https://about.gitlab.com/blog/gitlab-cnh-for-50k-users","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to provision Ready-To-Run GitLab for 50,000 users with the AWS Quick Start\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Darwin Sanoy\"}],\n        \"datePublished\": \"2021-10-06\",\n      }",{"title":3437,"description":3432,"authors":3438,"heroImage":3433,"date":3439,"category":14,"tags":3440},"How to provision Ready-To-Run GitLab for 50,000 users with the AWS Quick Start",[768],"2021-10-06",[582,233,965],{"slug":3442,"featured":6,"template":730},"gitlab-cnh-for-50k-users","content:en-us:blog:gitlab-cnh-for-50k-users.yml","Gitlab Cnh For 50k Users","en-us/blog/gitlab-cnh-for-50k-users.yml","en-us/blog/gitlab-cnh-for-50k-users",{"_path":3448,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":3449,"content":3454,"config":3460,"_id":3462,"_type":16,"title":3463,"_source":17,"_file":3464,"_stem":3465,"_extension":20},"/en-us/blog/gitpod-desktop-app-personal-activities",{"title":3450,"description":3451,"ogTitle":3450,"ogDescription":3451,"noIndex":6,"ogImage":2578,"ogUrl":3452,"ogSiteName":895,"ogType":896,"canonicalUrls":3452,"schema":3453},"Why we built GitDock, our desktop app to navigate your GitLab activities","Life is full of moving parts. We get it. And that's why we created GitDock so you can keep track of all things GitLab right from your desktop.","https://about.gitlab.com/blog/gitpod-desktop-app-personal-activities","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Why we built GitDock, our desktop app to navigate your GitLab activities\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Marcel van Remmerden\"},{\"@type\":\"Person\",\"name\":\"Jeremy Elder\"}],\n        \"datePublished\": \"2021-10-05\",\n      }",{"title":3450,"description":3451,"authors":3455,"heroImage":2578,"date":3458,"category":14,"tags":3459},[3456,3457],"Marcel van Remmerden","Jeremy Elder","2021-10-05",[1099,1316,564],{"slug":3461,"featured":6,"template":730},"gitpod-desktop-app-personal-activities","content:en-us:blog:gitpod-desktop-app-personal-activities.yml","Gitpod Desktop App Personal Activities","en-us/blog/gitpod-desktop-app-personal-activities.yml","en-us/blog/gitpod-desktop-app-personal-activities",{"_path":3467,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":3468,"content":3473,"config":3477,"_id":3479,"_type":16,"title":3480,"_source":17,"_file":3481,"_stem":3482,"_extension":20},"/en-us/blog/how-to-status-checks",{"title":3469,"description":3470,"ogTitle":3469,"ogDescription":3470,"noIndex":6,"ogImage":2578,"ogUrl":3471,"ogSiteName":895,"ogType":896,"canonicalUrls":3471,"schema":3472},"How to use external status checks for merge requests","Want to integrate third-party systems and apps with GitLab merge requests? Here's everything you need to know.","https://about.gitlab.com/blog/how-to-status-checks","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to use external status checks for merge requests\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Cesar Saavedra\"}],\n        \"datePublished\": \"2021-10-04\",\n      }",{"title":3469,"description":3470,"authors":3474,"heroImage":2578,"date":3475,"category":14,"tags":3476},[1276],"2021-10-04",[233,924,564],{"slug":3478,"featured":6,"template":730},"how-to-status-checks","content:en-us:blog:how-to-status-checks.yml","How To Status Checks","en-us/blog/how-to-status-checks.yml","en-us/blog/how-to-status-checks",{"_path":3484,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":3485,"content":3491,"config":3496,"_id":3498,"_type":16,"title":3499,"_source":17,"_file":3500,"_stem":3501,"_extension":20},"/en-us/blog/why-we-spent-the-last-month-eliminating-postgresql-subtransactions",{"title":3486,"description":3487,"ogTitle":3486,"ogDescription":3487,"noIndex":6,"ogImage":3488,"ogUrl":3489,"ogSiteName":895,"ogType":896,"canonicalUrls":3489,"schema":3490},"Why we spent the last month eliminating PostgreSQL subtransactions","How a mysterious stall in database queries uncovered a performance limitation with PostgreSQL.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749669470/Blog/Hero%20Images/nessie.jpg","https://about.gitlab.com/blog/why-we-spent-the-last-month-eliminating-postgresql-subtransactions","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Why we spent the last month eliminating PostgreSQL subtransactions\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Grzegorz Bizon\"},{\"@type\":\"Person\",\"name\":\"Stan Hu\"}],\n        \"datePublished\": \"2021-09-29\",\n      }",{"title":3486,"description":3487,"authors":3492,"heroImage":3488,"date":3494,"category":14,"tags":3495},[3493,877],"Grzegorz Bizon","2021-09-29",[904,1600,2105],{"slug":3497,"featured":6,"template":730},"why-we-spent-the-last-month-eliminating-postgresql-subtransactions","content:en-us:blog:why-we-spent-the-last-month-eliminating-postgresql-subtransactions.yml","Why We Spent The Last Month Eliminating Postgresql Subtransactions","en-us/blog/why-we-spent-the-last-month-eliminating-postgresql-subtransactions.yml","en-us/blog/why-we-spent-the-last-month-eliminating-postgresql-subtransactions",{"_path":3503,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":3504,"content":3510,"config":3513,"_id":3515,"_type":16,"title":3516,"_source":17,"_file":3517,"_stem":3518,"_extension":20},"/en-us/blog/how-to-configure-sidekiq-for-gitlab-at-scale",{"title":3505,"description":3506,"ogTitle":3505,"ogDescription":3506,"noIndex":6,"ogImage":3507,"ogUrl":3508,"ogSiteName":895,"ogType":896,"canonicalUrls":3508,"schema":3509},"How to configure Sidekiq for specialized or large-scale GitLab instances","This tutorial unpacks how to configure Sidekiq that suits your GitLab deployment.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749667068/Blog/Hero%20Images/sidekiqmountain.jpg","https://about.gitlab.com/blog/how-to-configure-sidekiq-for-gitlab-at-scale","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to configure Sidekiq for specialized or large-scale GitLab instances\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Craig Miskell\"}],\n        \"datePublished\": \"2021-09-27\",\n      }",{"title":3505,"description":3506,"authors":3511,"heroImage":3507,"date":3512,"category":14},[1618],"2021-09-27",{"slug":3514,"featured":6,"template":730},"how-to-configure-sidekiq-for-gitlab-at-scale","content:en-us:blog:how-to-configure-sidekiq-for-gitlab-at-scale.yml","How To Configure Sidekiq For Gitlab At Scale","en-us/blog/how-to-configure-sidekiq-for-gitlab-at-scale.yml","en-us/blog/how-to-configure-sidekiq-for-gitlab-at-scale",{"_path":3520,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":3521,"content":3526,"config":3532,"_id":3534,"_type":16,"title":3535,"_source":17,"_file":3536,"_stem":3537,"_extension":20},"/en-us/blog/best-practices-customer-feature-request",{"title":3522,"description":3523,"ogTitle":3522,"ogDescription":3523,"noIndex":6,"ogImage":2578,"ogUrl":3524,"ogSiteName":895,"ogType":896,"canonicalUrls":3524,"schema":3525},"How to incorporate private customer needs into a public product roadmap","We've had lots of experience documenting and tracking private customer feature requests effectively. Here's our best advice and how to get the most out of GitLab issues and issue trackers.","https://about.gitlab.com/blog/best-practices-customer-feature-request","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to incorporate private customer needs into a public product roadmap\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Christina Hupy, Ph.D.\"},{\"@type\":\"Person\",\"name\":\"Neil McCorrison\"}],\n        \"datePublished\": \"2021-09-23\",\n      }",{"title":3522,"description":3523,"authors":3527,"heroImage":2578,"date":3530,"category":14,"tags":3531},[3528,3529],"Christina Hupy, Ph.D.","Neil McCorrison","2021-09-23",[924,750,1100,1507],{"slug":3533,"featured":6,"template":730},"best-practices-customer-feature-request","content:en-us:blog:best-practices-customer-feature-request.yml","Best Practices Customer Feature Request","en-us/blog/best-practices-customer-feature-request.yml","en-us/blog/best-practices-customer-feature-request",{"_path":3539,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":3540,"content":3546,"config":3551,"_id":3553,"_type":16,"title":3554,"_source":17,"_file":3555,"_stem":3556,"_extension":20},"/en-us/blog/gitlab-together-with-terratag-open-source-to-help-you-manage-terraform-resources",{"title":3541,"description":3542,"ogTitle":3541,"ogDescription":3542,"noIndex":6,"ogImage":3543,"ogUrl":3544,"ogSiteName":895,"ogType":896,"canonicalUrls":3544,"schema":3545},"How to use Terratag to manage Terraform tags automatically","This blog addresses how you can do that easily and automatically when using Terraform and Terratag (an open source project by env0) on top of the Gitlab CI/CD platform.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749682137/Blog/Hero%20Images/blog-image.png","https://about.gitlab.com/blog/gitlab-together-with-terratag-open-source-to-help-you-manage-terraform-resources","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to use Terratag to automatically manage tags and labels for your Terraform Code\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Itzik Gan Baruch\"}],\n        \"datePublished\": \"2021-09-14\",\n      }",{"title":3547,"description":3542,"authors":3548,"heroImage":3543,"date":3549,"category":14,"tags":3550},"How to use Terratag to automatically manage tags and labels for your Terraform Code",[1197],"2021-09-14",[564,559],{"slug":3552,"featured":6,"template":730},"gitlab-together-with-terratag-open-source-to-help-you-manage-terraform-resources","content:en-us:blog:gitlab-together-with-terratag-open-source-to-help-you-manage-terraform-resources.yml","Gitlab Together With Terratag Open Source To Help You Manage Terraform Resources","en-us/blog/gitlab-together-with-terratag-open-source-to-help-you-manage-terraform-resources.yml","en-us/blog/gitlab-together-with-terratag-open-source-to-help-you-manage-terraform-resources",{"_path":3558,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":3559,"content":3564,"config":3567,"_id":3569,"_type":16,"title":3570,"_source":17,"_file":3571,"_stem":3572,"_extension":20},"/en-us/blog/specialized-sidekiq-configuration-lessons-from-gitlab-dot-com",{"title":3560,"description":3561,"ogTitle":3560,"ogDescription":3561,"noIndex":6,"ogImage":3507,"ogUrl":3562,"ogSiteName":895,"ogType":896,"canonicalUrls":3562,"schema":3563},"What we learned about configuring Sidekiq from GitLab.com","Sidekiq is a key part of GitLab, and usually works well out-of-the-box, but sometimes it needs more attention at scale.","https://about.gitlab.com/blog/specialized-sidekiq-configuration-lessons-from-gitlab-dot-com","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"What we learned about configuring Sidekiq from GitLab.com\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Craig Miskell\"}],\n        \"datePublished\": \"2021-09-02\",\n      }",{"title":3560,"description":3561,"authors":3565,"heroImage":3507,"date":3566,"category":14},[1618],"2021-09-02",{"slug":3568,"featured":6,"template":730},"specialized-sidekiq-configuration-lessons-from-gitlab-dot-com","content:en-us:blog:specialized-sidekiq-configuration-lessons-from-gitlab-dot-com.yml","Specialized Sidekiq Configuration Lessons From Gitlab Dot Com","en-us/blog/specialized-sidekiq-configuration-lessons-from-gitlab-dot-com.yml","en-us/blog/specialized-sidekiq-configuration-lessons-from-gitlab-dot-com",{"_path":3574,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":3575,"content":3580,"config":3585,"_id":3587,"_type":16,"title":3588,"_source":17,"_file":3589,"_stem":3590,"_extension":20},"/en-us/blog/its-time-to-upgrade-docker-engine",{"title":3576,"description":3577,"ogTitle":3576,"ogDescription":3577,"noIndex":6,"ogImage":1727,"ogUrl":3578,"ogSiteName":895,"ogType":896,"canonicalUrls":3578,"schema":3579},"It's time to update Docker Engine","Now that Alpine Linux 3.14 is being used by more images, it's time to upgrade Docker Engine to 20.10.6 or newer.","https://about.gitlab.com/blog/its-time-to-upgrade-docker-engine","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"It's time to update Docker Engine\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Tomasz Maczukin\"}],\n        \"datePublished\": \"2021-08-26\",\n      }",{"title":3576,"description":3577,"authors":3581,"heroImage":1727,"date":3583,"category":14,"tags":3584},[3582],"Tomasz Maczukin","2021-08-26",[110,925],{"slug":3586,"featured":6,"template":730},"its-time-to-upgrade-docker-engine","content:en-us:blog:its-time-to-upgrade-docker-engine.yml","Its Time To Upgrade Docker Engine","en-us/blog/its-time-to-upgrade-docker-engine.yml","en-us/blog/its-time-to-upgrade-docker-engine",{"_path":3592,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":3593,"content":3599,"config":3603,"_id":3605,"_type":16,"title":3606,"_source":17,"_file":3607,"_stem":3608,"_extension":20},"/en-us/blog/stageless-pipelines",{"title":3594,"description":3595,"ogTitle":3594,"ogDescription":3595,"noIndex":6,"ogImage":3596,"ogUrl":3597,"ogSiteName":895,"ogType":896,"canonicalUrls":3597,"schema":3598},"Write a stageless CI/CD pipeline using GitLab 14.2","With GitLab 14.2, you can write a complete CI/CD pipeline without defining any stages.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749679507/Blog/Hero%20Images/ci-cd.png","https://about.gitlab.com/blog/stageless-pipelines","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Write a stageless CI/CD pipeline using GitLab 14.2\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Dov Hershkovitch\"}],\n        \"datePublished\": \"2021-08-24\",\n      }",{"title":3594,"description":3595,"authors":3600,"heroImage":3596,"date":3601,"category":14,"tags":3602},[1198],"2021-08-24",[1022,1120],{"slug":3604,"featured":6,"template":730},"stageless-pipelines","content:en-us:blog:stageless-pipelines.yml","Stageless Pipelines","en-us/blog/stageless-pipelines.yml","en-us/blog/stageless-pipelines",{"_path":3610,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":3611,"content":3616,"config":3621,"_id":3623,"_type":16,"title":3624,"_source":17,"_file":3625,"_stem":3626,"_extension":20},"/en-us/blog/how-grammatech-and-gitlab-enables-better-devsecops",{"title":3612,"description":3613,"ogTitle":3612,"ogDescription":3613,"noIndex":6,"ogImage":2578,"ogUrl":3614,"ogSiteName":895,"ogType":896,"canonicalUrls":3614,"schema":3615},"How a new integration helps GitLab customers secure their code","GitLab Ultimate customers can use CodeSonar from GrammaTech for SAST and to bake protection into every stage of software development.","https://about.gitlab.com/blog/how-grammatech-and-gitlab-enables-better-devsecops","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How a new integration helps GitLab customers secure their code\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Christian Simko\"}],\n        \"datePublished\": \"2021-08-20\",\n      }",{"title":3612,"description":3613,"authors":3617,"heroImage":2578,"date":3619,"category":14,"tags":3620},[3618],"Christian Simko","2021-08-20",[751,233,1099],{"slug":3622,"featured":6,"template":730},"how-grammatech-and-gitlab-enables-better-devsecops","content:en-us:blog:how-grammatech-and-gitlab-enables-better-devsecops.yml","How Grammatech And Gitlab Enables Better Devsecops","en-us/blog/how-grammatech-and-gitlab-enables-better-devsecops.yml","en-us/blog/how-grammatech-and-gitlab-enables-better-devsecops",{"_path":3628,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":3629,"content":3635,"config":3641,"_id":3643,"_type":16,"title":3644,"_source":17,"_file":3645,"_stem":3646,"_extension":20},"/en-us/blog/100-runners-in-less-than-10mins-and-less-than-10-clicks",{"title":3630,"description":3631,"ogTitle":3630,"ogDescription":3631,"noIndex":6,"ogImage":3632,"ogUrl":3633,"ogSiteName":895,"ogType":896,"canonicalUrls":3633,"schema":3634},"Setting up 100 AWS Graviton Spot Runners for GitLab","Utilizing the GitLab HA Scaling Runner Vending Machine for AWS Automation to setup 100 GitLab runners on AWS Spot.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749669882/Blog/Hero%20Images/hundredgitlabspotrunner.png","https://about.gitlab.com/blog/100-runners-in-less-than-10mins-and-less-than-10-clicks","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to provision 100 AWS Graviton GitLab Spot Runners in 10 Minutes for $2/hour\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Darwin Sanoy\"},{\"@type\":\"Person\",\"name\":\"Nupur Sharma\"}],\n        \"datePublished\": \"2021-08-17\",\n      }",{"title":3636,"description":3631,"authors":3637,"heroImage":3632,"date":3639,"category":14,"tags":3640},"How to provision 100 AWS Graviton GitLab Spot Runners in 10 Minutes for $2/hour",[768,3638],"Nupur Sharma","2021-08-17",[1022,1120,564,965],{"slug":3642,"featured":6,"template":730},"100-runners-in-less-than-10mins-and-less-than-10-clicks","content:en-us:blog:100-runners-in-less-than-10mins-and-less-than-10-clicks.yml","100 Runners In Less Than 10mins And Less Than 10 Clicks","en-us/blog/100-runners-in-less-than-10mins-and-less-than-10-clicks.yml","en-us/blog/100-runners-in-less-than-10mins-and-less-than-10-clicks",{"_path":3648,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":3649,"content":3655,"config":3660,"_id":3662,"_type":16,"title":3663,"_source":17,"_file":3664,"_stem":3665,"_extension":20},"/en-us/blog/understand-highly-technical-spaces",{"title":3650,"description":3651,"ogTitle":3650,"ogDescription":3651,"noIndex":6,"ogImage":3652,"ogUrl":3653,"ogSiteName":895,"ogType":896,"canonicalUrls":3653,"schema":3654},"How I use analogy to design for highly technical spaces","Just how much does a designer need to know about a technical space or product to design for it?","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749668041/Blog/Hero%20Images/Understand-Highly-Technical-Spaces.jpg","https://about.gitlab.com/blog/understand-highly-technical-spaces","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How I use analogy to design for highly technical spaces\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Camellia Yang\"}],\n        \"datePublished\": \"2021-08-13\",\n      }",{"title":3650,"description":3651,"authors":3656,"heroImage":3652,"date":3658,"category":14,"tags":3659},[3657],"Camellia Yang","2021-08-13",[751,1316],{"slug":3661,"featured":6,"template":730},"understand-highly-technical-spaces","content:en-us:blog:understand-highly-technical-spaces.yml","Understand Highly Technical Spaces","en-us/blog/understand-highly-technical-spaces.yml","en-us/blog/understand-highly-technical-spaces",{"_path":3667,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":3668,"content":3673,"config":3678,"_id":3680,"_type":16,"title":3681,"_source":17,"_file":3682,"_stem":3683,"_extension":20},"/en-us/blog/how-to-agentless-gitops-aws",{"title":3669,"description":3670,"ogTitle":3669,"ogDescription":3670,"noIndex":6,"ogImage":2578,"ogUrl":3671,"ogSiteName":895,"ogType":896,"canonicalUrls":3671,"schema":3672},"How to Use Push-Based GitOps with Terraform & AWS ECS/EC2","Learn how GitLab supports agentless approach for GitOps on AWS.","https://about.gitlab.com/blog/how-to-agentless-gitops-aws","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to use a push-based approach for GitOps with Terraform and AWS ECS and EC2\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Cesar Saavedra\"}],\n        \"datePublished\": \"2021-08-10\",\n      }",{"title":3674,"description":3670,"authors":3675,"heroImage":2578,"date":3676,"category":14,"tags":3677},"How to use a push-based approach for GitOps with Terraform and AWS ECS and EC2",[1276],"2021-08-10",[559,564,3007],{"slug":3679,"featured":6,"template":730},"how-to-agentless-gitops-aws","content:en-us:blog:how-to-agentless-gitops-aws.yml","How To Agentless Gitops Aws","en-us/blog/how-to-agentless-gitops-aws.yml","en-us/blog/how-to-agentless-gitops-aws",{"_path":3685,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":3686,"content":3691,"config":3697,"_id":3699,"_type":16,"title":3700,"_source":17,"_file":3701,"_stem":3702,"_extension":20},"/en-us/blog/achieving-23-cost-savings-and-36-performance-gain-using-gitlab-and-gitlab-runner-on-arm-neoverse-based-aws-graviton2-processor",{"title":3687,"description":3688,"ogTitle":3687,"ogDescription":3688,"noIndex":6,"ogImage":1727,"ogUrl":3689,"ogSiteName":895,"ogType":896,"canonicalUrls":3689,"schema":3690},"GitLab on Graviton2: 23% cheaper, 36% higher performance","GitLab and GitLab Runner Performance Gains on Arm based AWS Graviton2","https://about.gitlab.com/blog/achieving-23-cost-savings-and-36-performance-gain-using-gitlab-and-gitlab-runner-on-arm-neoverse-based-aws-graviton2-processor","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"23% Cost savings and 36% performance gain by deploying GitLab on Arm-based AWS Graviton2\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Pranay Bakre\"}],\n        \"datePublished\": \"2021-08-05\",\n      }",{"title":3692,"description":3688,"authors":3693,"heroImage":1727,"date":3695,"category":14,"tags":3696},"23% Cost savings and 36% performance gain by deploying GitLab on Arm-based AWS Graviton2",[3694],"Pranay Bakre","2021-08-05",[1022],{"slug":3698,"featured":6,"template":730},"achieving-23-cost-savings-and-36-performance-gain-using-gitlab-and-gitlab-runner-on-arm-neoverse-based-aws-graviton2-processor","content:en-us:blog:achieving-23-cost-savings-and-36-performance-gain-using-gitlab-and-gitlab-runner-on-arm-neoverse-based-aws-graviton2-processor.yml","Achieving 23 Cost Savings And 36 Performance Gain Using Gitlab And Gitlab Runner On Arm Neoverse Based Aws Graviton2 Processor","en-us/blog/achieving-23-cost-savings-and-36-performance-gain-using-gitlab-and-gitlab-runner-on-arm-neoverse-based-aws-graviton2-processor.yml","en-us/blog/achieving-23-cost-savings-and-36-performance-gain-using-gitlab-and-gitlab-runner-on-arm-neoverse-based-aws-graviton2-processor",{"_path":3704,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":3705,"content":3711,"config":3716,"_id":3718,"_type":16,"title":3719,"_source":17,"_file":3720,"_stem":3721,"_extension":20},"/en-us/blog/ubs-gitlab-devops-platform",{"title":3706,"description":3707,"ogTitle":3706,"ogDescription":3707,"noIndex":6,"ogImage":3708,"ogUrl":3709,"ogSiteName":895,"ogType":896,"canonicalUrls":3709,"schema":3710},"How UBS created their own DevOps platform using GitLab","How GitLab helped power more than a million builds in six months on UBS DevCloud.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749665839/Blog/Hero%20Images/devops.png","https://about.gitlab.com/blog/ubs-gitlab-devops-platform","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How UBS created their own DevOps platform using GitLab\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Sara Kassabian\"}],\n        \"datePublished\": \"2021-08-04\",\n      }",{"title":3706,"description":3707,"authors":3712,"heroImage":3708,"date":3714,"category":14,"tags":3715},[3713],"Sara Kassabian","2021-08-04",[564,809,1022,1507],{"slug":3717,"featured":6,"template":730},"ubs-gitlab-devops-platform","content:en-us:blog:ubs-gitlab-devops-platform.yml","Ubs Gitlab Devops Platform","en-us/blog/ubs-gitlab-devops-platform.yml","en-us/blog/ubs-gitlab-devops-platform",{"_path":3723,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":3724,"content":3730,"config":3735,"_id":3737,"_type":16,"title":3738,"_source":17,"_file":3739,"_stem":3740,"_extension":20},"/en-us/blog/velocity-with-confidence",{"title":3725,"description":3726,"ogTitle":3725,"ogDescription":3726,"noIndex":6,"ogImage":3727,"ogUrl":3728,"ogSiteName":895,"ogType":896,"canonicalUrls":3728,"schema":3729},"How GitLab 14 satisfies the need for speed with modern DevOps","GitLab 14: Ship with velocity, ship with confidence","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749682089/Blog/Hero%20Images/racecar_devops.jpg","https://about.gitlab.com/blog/velocity-with-confidence","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How GitLab 14 satisfies the need for speed with modern DevOps\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Parker Ennis\"}],\n        \"datePublished\": \"2021-07-29\",\n      }",{"title":3725,"description":3726,"authors":3731,"heroImage":3727,"date":3733,"category":14,"tags":3734},[3732],"Parker Ennis","2021-07-29",[564,1099,1022,1120,559],{"slug":3736,"featured":6,"template":730},"velocity-with-confidence","content:en-us:blog:velocity-with-confidence.yml","Velocity With Confidence","en-us/blog/velocity-with-confidence.yml","en-us/blog/velocity-with-confidence",{"_path":3742,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":3743,"content":3749,"config":3754,"_id":3756,"_type":16,"title":3757,"_source":17,"_file":3758,"_stem":3759,"_extension":20},"/en-us/blog/secure-container-images-with-gitlab-and-grype",{"title":3744,"description":3745,"ogTitle":3744,"ogDescription":3745,"noIndex":6,"ogImage":3746,"ogUrl":3747,"ogSiteName":895,"ogType":896,"canonicalUrls":3747,"schema":3748},"How to secure your container images with GitLab and Grype","Learn how to start detecting vulnerabilities in your container images in just a few steps.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749671873/Blog/Hero%20Images/logos_header.jpg","https://about.gitlab.com/blog/secure-container-images-with-gitlab-and-grype","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to secure your container images with GitLab and Grype\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Dan Luhring\"}],\n        \"datePublished\": \"2021-07-28\",\n      }",{"title":3744,"description":3745,"authors":3750,"heroImage":3746,"date":3752,"category":14,"tags":3753},[3751],"Dan Luhring","2021-07-28",[564,751,564],{"slug":3755,"featured":6,"template":730},"secure-container-images-with-gitlab-and-grype","content:en-us:blog:secure-container-images-with-gitlab-and-grype.yml","Secure Container Images With Gitlab And Grype","en-us/blog/secure-container-images-with-gitlab-and-grype.yml","en-us/blog/secure-container-images-with-gitlab-and-grype",{"_path":3761,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":3762,"content":3768,"config":3773,"_id":3775,"_type":16,"title":3776,"_source":17,"_file":3777,"_stem":3778,"_extension":20},"/en-us/blog/how-to-agentless-gitops-vars",{"title":3763,"description":3764,"ogTitle":3763,"ogDescription":3764,"noIndex":6,"ogImage":3765,"ogUrl":3766,"ogSiteName":895,"ogType":896,"canonicalUrls":3766,"schema":3767},"Using push-based GitOps with GitLab scripts and variables","Learn how GitLab supports agentless approach for GitOps with scripting and variables.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749682051/Blog/Hero%20Images/agentless-gitops-vars-cover-880x587.jpg","https://about.gitlab.com/blog/how-to-agentless-gitops-vars","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to use a push-based approach for GitOps with GitLab scripting and variables\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Cesar Saavedra\"}],\n        \"datePublished\": \"2021-07-23\",\n      }",{"title":3769,"description":3764,"authors":3770,"heroImage":3765,"date":3771,"category":14,"tags":3772},"How to use a push-based approach for GitOps with GitLab scripting and variables",[1276],"2021-07-23",[559,564,3007],{"slug":3774,"featured":6,"template":730},"how-to-agentless-gitops-vars","content:en-us:blog:how-to-agentless-gitops-vars.yml","How To Agentless Gitops Vars","en-us/blog/how-to-agentless-gitops-vars.yml","en-us/blog/how-to-agentless-gitops-vars",{"_path":3780,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":3781,"content":3787,"config":3792,"_id":3794,"_type":16,"title":3795,"_source":17,"_file":3796,"_stem":3797,"_extension":20},"/en-us/blog/teams-gitpod-integration-gitlab-speed-up-development",{"title":3782,"description":3783,"ogTitle":3782,"ogDescription":3783,"noIndex":6,"ogImage":3784,"ogUrl":3785,"ogSiteName":895,"ogType":896,"canonicalUrls":3785,"schema":3786},"Teams speed up development with GitLab's Gitpod integration","Learn about Gitpod as cloud development environment, and how its integration into Gitpod helps teams to get more efficient in their DevOps lifecycle.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749667482/Blog/Hero%20Images/cover-image-unsplash.jpg","https://about.gitlab.com/blog/teams-gitpod-integration-gitlab-speed-up-development","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How teams can use the Gitpod integration in GitLab to speed up their development process\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Michael Friedrich\"}],\n        \"datePublished\": \"2021-07-19\",\n      }",{"title":3788,"description":3783,"authors":3789,"heroImage":3784,"date":3790,"category":14,"tags":3791},"How teams can use the Gitpod integration in GitLab to speed up their development process",[862],"2021-07-19",[233,1507,924],{"slug":3793,"featured":6,"template":730},"teams-gitpod-integration-gitlab-speed-up-development","content:en-us:blog:teams-gitpod-integration-gitlab-speed-up-development.yml","Teams Gitpod Integration Gitlab Speed Up Development","en-us/blog/teams-gitpod-integration-gitlab-speed-up-development.yml","en-us/blog/teams-gitpod-integration-gitlab-speed-up-development",{"_path":3799,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":3800,"content":3806,"config":3810,"_id":3812,"_type":16,"title":3813,"_source":17,"_file":3814,"_stem":3815,"_extension":20},"/en-us/blog/gitops-as-the-evolution-of-operations",{"title":3801,"description":3802,"ogTitle":3801,"ogDescription":3802,"noIndex":6,"ogImage":3803,"ogUrl":3804,"ogSiteName":895,"ogType":896,"canonicalUrls":3804,"schema":3805},"GitOps viewed as part of the Ops evolution","Examine the evolution that led to GitOps","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749682062/Blog/Hero%20Images/food-train.jpg","https://about.gitlab.com/blog/gitops-as-the-evolution-of-operations","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"GitOps viewed as part of the Ops evolution\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Viktor Nagy\"}],\n        \"datePublished\": \"2021-07-12\",\n      }",{"title":3801,"description":3802,"authors":3807,"heroImage":3803,"date":3808,"category":14,"tags":3809},[2139],"2021-07-12",[564,559],{"slug":3811,"featured":6,"template":730},"gitops-as-the-evolution-of-operations","content:en-us:blog:gitops-as-the-evolution-of-operations.yml","Gitops As The Evolution Of Operations","en-us/blog/gitops-as-the-evolution-of-operations.yml","en-us/blog/gitops-as-the-evolution-of-operations",{"_path":3817,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":3818,"content":3824,"config":3828,"_id":3830,"_type":16,"title":3831,"_source":17,"_file":3832,"_stem":3833,"_extension":20},"/en-us/blog/how-to-stand-up-gitlab-in-awsmp",{"title":3819,"description":3820,"ogTitle":3819,"ogDescription":3820,"noIndex":6,"ogImage":3821,"ogUrl":3822,"ogSiteName":895,"ogType":896,"canonicalUrls":3822,"schema":3823},"How to stand-up a GitLab instance in AWS Marketplace","This is a quick quide to help you provision a GitLab instance in the AWS Marketplace and setup a Runner.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749682043/Blog/Hero%20Images/awsmp.png","https://about.gitlab.com/blog/how-to-stand-up-gitlab-in-awsmp","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to stand-up a GitLab instance in AWS Marketplace\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Itzik Gan Baruch\"}],\n        \"datePublished\": \"2021-06-30\",\n      }",{"title":3819,"description":3820,"authors":3825,"heroImage":3821,"date":3826,"category":14,"tags":3827},[1197],"2021-06-30",[1507,564],{"slug":3829,"featured":6,"template":730},"how-to-stand-up-gitlab-in-awsmp","content:en-us:blog:how-to-stand-up-gitlab-in-awsmp.yml","How To Stand Up Gitlab In Awsmp","en-us/blog/how-to-stand-up-gitlab-in-awsmp.yml","en-us/blog/how-to-stand-up-gitlab-in-awsmp",{"_path":3835,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":3836,"content":3842,"config":3846,"_id":3848,"_type":16,"title":3849,"_source":17,"_file":3850,"_stem":3851,"_extension":20},"/en-us/blog/how-to-use-agent-based-gitops",{"title":3837,"description":3838,"ogTitle":3837,"ogDescription":3838,"noIndex":6,"ogImage":3839,"ogUrl":3840,"ogSiteName":895,"ogType":896,"canonicalUrls":3840,"schema":3841},"How to use a pull-based (agent-based) approach for GitOps","Learn how GitLab supports agent-based approach for GitOps","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749682037/Blog/Hero%20Images/agent-based-gitops-cover-880x587.jpg","https://about.gitlab.com/blog/how-to-use-agent-based-gitops","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to use a pull-based (agent-based) approach for GitOps\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Cesar Saavedra\"}],\n        \"datePublished\": \"2021-06-23\",\n      }",{"title":3837,"description":3838,"authors":3843,"heroImage":3839,"date":3844,"category":14,"tags":3845},[1276],"2021-06-23",[559,750,1022,564,3007],{"slug":3847,"featured":6,"template":730},"how-to-use-agent-based-gitops","content:en-us:blog:how-to-use-agent-based-gitops.yml","How To Use Agent Based Gitops","en-us/blog/how-to-use-agent-based-gitops.yml","en-us/blog/how-to-use-agent-based-gitops",{"_path":3853,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":3854,"content":3860,"config":3864,"_id":3866,"_type":16,"title":3867,"_source":17,"_file":3868,"_stem":3869,"_extension":20},"/en-us/blog/how-to-become-more-productive-with-gitlab-ci",{"title":3855,"description":3856,"ogTitle":3855,"ogDescription":3856,"noIndex":6,"ogImage":3857,"ogUrl":3858,"ogSiteName":895,"ogType":896,"canonicalUrls":3858,"schema":3859},"How to become more productive with Gitlab CI","Explore some CI/CD strategies that can make your team more efficient and productive.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749667358/Blog/Hero%20Images/gitlab-productivity.jpg","https://about.gitlab.com/blog/how-to-become-more-productive-with-gitlab-ci","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to become more productive with Gitlab CI\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Veethika Mishra\"}],\n        \"datePublished\": \"2021-06-21\",\n      }",{"title":3855,"description":3856,"authors":3861,"heroImage":3857,"date":3862,"category":14,"tags":3863},[1313],"2021-06-21",[1022,1120,750,1099],{"slug":3865,"featured":6,"template":730},"how-to-become-more-productive-with-gitlab-ci","content:en-us:blog:how-to-become-more-productive-with-gitlab-ci.yml","How To Become More Productive With Gitlab Ci","en-us/blog/how-to-become-more-productive-with-gitlab-ci.yml","en-us/blog/how-to-become-more-productive-with-gitlab-ci",{"_path":3871,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":3872,"content":3878,"config":3882,"_id":3884,"_type":16,"title":3885,"_source":17,"_file":3886,"_stem":3887,"_extension":20},"/en-us/blog/why-we-are-building-the-gitlab-environment-toolkit-to-help-deploy-gitlab-at-scale",{"title":3873,"description":3874,"ogTitle":3873,"ogDescription":3874,"noIndex":6,"ogImage":3875,"ogUrl":3876,"ogSiteName":895,"ogType":896,"canonicalUrls":3876,"schema":3877},"The next step in performance testing? The GitLab Environment Toolkit","Learn how we're building a new toolkit to help with performance testing and deploying GitLab at scale.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749682030/Blog/Hero%20Images/gitlab_environment_toolkit_scale.jpg","https://about.gitlab.com/blog/why-we-are-building-the-gitlab-environment-toolkit-to-help-deploy-gitlab-at-scale","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"The next step in performance testing? The GitLab Environment Toolkit\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Grant Young\"}],\n        \"datePublished\": \"2021-06-15\",\n      }",{"title":3873,"description":3874,"authors":3879,"heroImage":3875,"date":3880,"category":14,"tags":3881},[1096],"2021-06-15",[1099,904],{"slug":3883,"featured":6,"template":730},"why-we-are-building-the-gitlab-environment-toolkit-to-help-deploy-gitlab-at-scale","content:en-us:blog:why-we-are-building-the-gitlab-environment-toolkit-to-help-deploy-gitlab-at-scale.yml","Why We Are Building The Gitlab Environment Toolkit To Help Deploy Gitlab At Scale","en-us/blog/why-we-are-building-the-gitlab-environment-toolkit-to-help-deploy-gitlab-at-scale.yml","en-us/blog/why-we-are-building-the-gitlab-environment-toolkit-to-help-deploy-gitlab-at-scale",{"_path":3889,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":3890,"content":3896,"config":3901,"_id":3903,"_type":16,"title":3904,"_source":17,"_file":3905,"_stem":3906,"_extension":20},"/en-us/blog/how-to-get-gitops-right-with-iac-security",{"title":3891,"description":3892,"ogTitle":3891,"ogDescription":3892,"noIndex":6,"ogImage":3893,"ogUrl":3894,"ogSiteName":895,"ogType":896,"canonicalUrls":3894,"schema":3895},"How to get GitOps right with infrastructure as code security","Learn how the GitLab and Indeni integration makes security a core component of your GitOps workflow.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749663403/Blog/Hero%20Images/gitops-partner-cover-image.jpg","https://about.gitlab.com/blog/how-to-get-gitops-right-with-iac-security","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to get GitOps right with infrastructure as code security\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Ulrica de Fort-Menares\"}],\n        \"datePublished\": \"2021-06-10\",\n      }",{"title":3891,"description":3892,"authors":3897,"heroImage":3893,"date":3899,"category":14,"tags":3900},[3898],"Ulrica de Fort-Menares","2021-06-10",[559,751,564,233],{"slug":3902,"featured":6,"template":730},"how-to-get-gitops-right-with-iac-security","content:en-us:blog:how-to-get-gitops-right-with-iac-security.yml","How To Get Gitops Right With Iac Security","en-us/blog/how-to-get-gitops-right-with-iac-security.yml","en-us/blog/how-to-get-gitops-right-with-iac-security",{"_path":3908,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":3909,"content":3915,"config":3921,"_id":3923,"_type":16,"title":3924,"_source":17,"_file":3925,"_stem":3926,"_extension":20},"/en-us/blog/how-to-protect-your-source-code-with-gitlab-and-jscrambler",{"title":3910,"description":3911,"ogTitle":3910,"ogDescription":3911,"noIndex":6,"ogImage":3912,"ogUrl":3913,"ogSiteName":895,"ogType":896,"canonicalUrls":3913,"schema":3914},"How to protect your source code with GitLab and Jscrambler","Learn how to seamlessly protect your source code at build time in just a few steps.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749669529/Blog/Hero%20Images/gitlab-jscrambler-blog-post-protecting-source-code.png","https://about.gitlab.com/blog/how-to-protect-your-source-code-with-gitlab-and-jscrambler","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to protect your source code with GitLab and Jscrambler\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Pedro Fortuna\"},{\"@type\":\"Person\",\"name\":\"Sam Kerr\"}],\n        \"datePublished\": \"2021-06-09\",\n      }",{"title":3910,"description":3911,"authors":3916,"heroImage":3912,"date":3919,"category":14,"tags":3920},[3917,3918],"Pedro Fortuna","Sam Kerr","2021-06-09",[564,751,1099],{"slug":3922,"featured":6,"template":730},"how-to-protect-your-source-code-with-gitlab-and-jscrambler","content:en-us:blog:how-to-protect-your-source-code-with-gitlab-and-jscrambler.yml","How To Protect Your Source Code With Gitlab And Jscrambler","en-us/blog/how-to-protect-your-source-code-with-gitlab-and-jscrambler.yml","en-us/blog/how-to-protect-your-source-code-with-gitlab-and-jscrambler",{"_path":3928,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":3929,"content":3934,"config":3939,"_id":3941,"_type":16,"title":3942,"_source":17,"_file":3943,"_stem":3944,"_extension":20},"/en-us/blog/tuto-mac-m1-gitlab-ci",{"title":3930,"description":3931,"ogTitle":3930,"ogDescription":3931,"noIndex":6,"ogImage":2578,"ogUrl":3932,"ogSiteName":895,"ogType":896,"canonicalUrls":3932,"schema":3933},"How to use Scaleway to self-host your GitLab Runners","Learn how to set up GitLab CI for your iOS and macOS projects using a hosted Mac mini M1.","https://about.gitlab.com/blog/tuto-mac-m1-gitlab-ci","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to use Scaleway to self-host your GitLab Runners\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Benedikt Rollik\"}],\n        \"datePublished\": \"2021-06-07\",\n      }",{"title":3930,"description":3931,"authors":3935,"heroImage":2578,"date":3937,"category":14,"tags":3938},[3936],"Benedikt Rollik","2021-06-07",[792,965,965],{"slug":3940,"featured":6,"template":730},"tuto-mac-m1-gitlab-ci","content:en-us:blog:tuto-mac-m1-gitlab-ci.yml","Tuto Mac M1 Gitlab Ci","en-us/blog/tuto-mac-m1-gitlab-ci.yml","en-us/blog/tuto-mac-m1-gitlab-ci",{"_path":3946,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":3947,"content":3953,"config":3958,"_id":3960,"_type":16,"title":3961,"_source":17,"_file":3962,"_stem":3963,"_extension":20},"/en-us/blog/managing-global-projects-requiring-rapid-response-continuously",{"title":3948,"description":3949,"ogTitle":3948,"ogDescription":3949,"noIndex":6,"ogImage":3950,"ogUrl":3951,"ogSiteName":895,"ogType":896,"canonicalUrls":3951,"schema":3952},"How to leverage distributed engineering teams for rapid response","Rapid response issues can be handled in a compressed time frame if distributed engineering teams can work continuously. Here's what we've learned.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749681331/Blog/Hero%20Images/all-remote-world-banner-1920x1080.png","https://about.gitlab.com/blog/managing-global-projects-requiring-rapid-response-continuously","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to leverage distributed engineering teams for rapid response\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Chris Baus\"}],\n        \"datePublished\": \"2021-06-04\",\n      }",{"title":3948,"description":3949,"authors":3954,"heroImage":3950,"date":3956,"category":14,"tags":3957},[3955],"Chris Baus","2021-06-04",[2512,1099,1790,1507],{"slug":3959,"featured":6,"template":730},"managing-global-projects-requiring-rapid-response-continuously","content:en-us:blog:managing-global-projects-requiring-rapid-response-continuously.yml","Managing Global Projects Requiring Rapid Response Continuously","en-us/blog/managing-global-projects-requiring-rapid-response-continuously.yml","en-us/blog/managing-global-projects-requiring-rapid-response-continuously",{"_path":3965,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":3966,"content":3972,"config":3977,"_id":3979,"_type":16,"title":3980,"_source":17,"_file":3981,"_stem":3982,"_extension":20},"/en-us/blog/advanced-search-data-migrations",{"title":3967,"description":3968,"ogTitle":3967,"ogDescription":3968,"noIndex":6,"ogImage":3969,"ogUrl":3970,"ogSiteName":895,"ogType":896,"canonicalUrls":3970,"schema":3971},"GitLab's data migration process for Advanced Search","We needed a more streamlined data migration process for Advanced search.\nHere's what we did.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749682017/Blog/Hero%20Images/advanced-search-migrations.jpg","https://about.gitlab.com/blog/advanced-search-data-migrations","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"GitLab's data migration process for Advanced Search\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Dmitry Gruzd\"}],\n        \"datePublished\": \"2021-06-01\",\n      }",{"title":3967,"description":3968,"authors":3973,"heroImage":3969,"date":3975,"category":14,"tags":3976},[3974],"Dmitry Gruzd","2021-06-01",[750,2438,924],{"slug":3978,"featured":6,"template":730},"advanced-search-data-migrations","content:en-us:blog:advanced-search-data-migrations.yml","Advanced Search Data Migrations","en-us/blog/advanced-search-data-migrations.yml","en-us/blog/advanced-search-data-migrations",{"_path":3984,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":3985,"content":3991,"config":3996,"_id":3998,"_type":16,"title":3999,"_source":17,"_file":4000,"_stem":4001,"_extension":20},"/en-us/blog/gitlab-and-jira-integration-the-final-steps",{"title":3986,"description":3987,"ogTitle":3986,"ogDescription":3987,"noIndex":6,"ogImage":3988,"ogUrl":3989,"ogSiteName":895,"ogType":896,"canonicalUrls":3989,"schema":3990},"GitLab and Jira integration: the final steps","The last of our three-part series on GitLab and Jira integrations offers a step-by-step look at how the tools work together.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749679490/Blog/Hero%20Images/jira-importer-blog-post.png","https://about.gitlab.com/blog/gitlab-and-jira-integration-the-final-steps","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"GitLab and Jira integration: the final steps\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Tye Davis\"}],\n        \"datePublished\": \"2021-05-24\",\n      }",{"title":3986,"description":3987,"authors":3992,"heroImage":3988,"date":3994,"category":14,"tags":3995},[3993],"Tye Davis","2021-05-24",[1507,233,564],{"slug":3997,"featured":6,"template":730},"gitlab-and-jira-integration-the-final-steps","content:en-us:blog:gitlab-and-jira-integration-the-final-steps.yml","Gitlab And Jira Integration The Final Steps","en-us/blog/gitlab-and-jira-integration-the-final-steps.yml","en-us/blog/gitlab-and-jira-integration-the-final-steps",{"_path":4003,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":4004,"content":4010,"config":4014,"_id":4016,"_type":16,"title":4017,"_source":17,"_file":4018,"_stem":4019,"_extension":20},"/en-us/blog/dag-manual-fix",{"title":4005,"description":4006,"ogTitle":4005,"ogDescription":4006,"noIndex":6,"ogImage":4007,"ogUrl":4008,"ogSiteName":895,"ogType":896,"canonicalUrls":4008,"schema":4009},"How to use manual jobs with `needs:` relationships","Are you using manual jobs and needs relationship in your CI/CD pipeline? Learn more about the fix that might cause your pipeline to behave differently.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749683170/Blog/Hero%20Images/blog_cover2.png","https://about.gitlab.com/blog/dag-manual-fix","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to use manual jobs with `needs:` relationships\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Dov Hershkovitch\"}],\n        \"datePublished\": \"2021-05-20\",\n      }",{"title":4005,"description":4006,"authors":4011,"heroImage":4007,"date":4012,"category":14,"tags":4013},[1198],"2021-05-20",[1022,965,564],{"slug":4015,"featured":6,"template":730},"dag-manual-fix","content:en-us:blog:dag-manual-fix.yml","Dag Manual Fix","en-us/blog/dag-manual-fix.yml","en-us/blog/dag-manual-fix",{"_path":4021,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":4022,"content":4027,"config":4030,"_id":4032,"_type":16,"title":4033,"_source":17,"_file":4034,"_stem":4035,"_extension":20},"/en-us/blog/vscode-workflows-for-working-with-gitlab",{"title":4023,"description":4024,"ogTitle":4023,"ogDescription":4024,"noIndex":6,"ogImage":2394,"ogUrl":4025,"ogSiteName":895,"ogType":896,"canonicalUrls":4025,"schema":4026},"Visual Studio code editor: Eight tips for using GitLab VS Code","Learn how to use the Visual Studio code editor more efficiently and meet some of the GitLab contributors that made these new features happen.","https://about.gitlab.com/blog/vscode-workflows-for-working-with-gitlab","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Visual Studio code editor: Eight tips for using GitLab VS Code\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Tomas Vik\"}],\n        \"datePublished\": \"2021-05-20\",\n      }",{"title":4023,"description":4024,"authors":4028,"heroImage":2394,"date":4012,"category":14,"tags":4029},[3348],[233,728],{"slug":4031,"featured":6,"template":730},"vscode-workflows-for-working-with-gitlab","content:en-us:blog:vscode-workflows-for-working-with-gitlab.yml","Vscode Workflows For Working With Gitlab","en-us/blog/vscode-workflows-for-working-with-gitlab.yml","en-us/blog/vscode-workflows-for-working-with-gitlab",{"_path":4037,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":4038,"content":4044,"config":4049,"_id":4051,"_type":16,"title":4052,"_source":17,"_file":4053,"_stem":4054,"_extension":20},"/en-us/blog/project-management-using-gitlab-platform",{"title":4039,"description":4040,"ogTitle":4039,"ogDescription":4040,"noIndex":6,"ogImage":4041,"ogUrl":4042,"ogSiteName":895,"ogType":896,"canonicalUrls":4042,"schema":4043},"Can DevOps and project management co-exist? Yes, on the daily at GitLab","Stay agile by using GitLab for DevOps project management","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749669575/Blog/Hero%20Images/agilemultipleteams.jpg","https://about.gitlab.com/blog/project-management-using-gitlab-platform","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Can DevOps and project management co-exist? Yes, on the daily at GitLab\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Vick Kelkar\"}],\n        \"datePublished\": \"2021-05-11\",\n      }",{"title":4039,"description":4040,"authors":4045,"heroImage":4041,"date":4047,"category":14,"tags":4048},[4046],"Vick Kelkar","2021-05-11",[1790,1507,750,2512,924],{"slug":4050,"featured":6,"template":730},"project-management-using-gitlab-platform","content:en-us:blog:project-management-using-gitlab-platform.yml","Project Management Using Gitlab Platform","en-us/blog/project-management-using-gitlab-platform.yml","en-us/blog/project-management-using-gitlab-platform",{"_path":4056,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":4057,"content":4063,"config":4068,"_id":4070,"_type":16,"title":4071,"_source":17,"_file":4072,"_stem":4073,"_extension":20},"/en-us/blog/using-web-components-to-encapsulate-css-and-resolve-design-system-conflicts",{"title":4058,"description":4059,"ogTitle":4058,"ogDescription":4059,"noIndex":6,"ogImage":4060,"ogUrl":4061,"ogSiteName":895,"ogType":896,"canonicalUrls":4061,"schema":4062},"Using web components to encapsulate CSS and resolve design system conflicts","How we used web component technologies like the Shadow DOM to make it easy to incrementally adopt our new design system, Slippers.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749679537/Blog/Hero%20Images/slippers-sys.jpg","https://about.gitlab.com/blog/using-web-components-to-encapsulate-css-and-resolve-design-system-conflicts","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Using web components to encapsulate CSS and resolve design system conflicts\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Tyler Williams\"}],\n        \"datePublished\": \"2021-05-03\",\n      }",{"title":4058,"description":4059,"authors":4064,"heroImage":4060,"date":4066,"category":14,"tags":4067},[4065],"Tyler Williams","2021-05-03",[1141,1099],{"slug":4069,"featured":6,"template":730},"using-web-components-to-encapsulate-css-and-resolve-design-system-conflicts","content:en-us:blog:using-web-components-to-encapsulate-css-and-resolve-design-system-conflicts.yml","Using Web Components To Encapsulate Css And Resolve Design System Conflicts","en-us/blog/using-web-components-to-encapsulate-css-and-resolve-design-system-conflicts.yml","en-us/blog/using-web-components-to-encapsulate-css-and-resolve-design-system-conflicts",{"_path":4075,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":4076,"content":4081,"config":4086,"_id":4088,"_type":16,"title":4089,"_source":17,"_file":4090,"_stem":4091,"_extension":20},"/en-us/blog/why-its-crucial-to-break-things-down-into-smallest-iterations",{"title":4077,"description":4078,"ogTitle":4077,"ogDescription":4078,"noIndex":6,"ogImage":2394,"ogUrl":4079,"ogSiteName":895,"ogType":896,"canonicalUrls":4079,"schema":4080},"Why iterative software development is critical","How we learned from our mistakes and adopted an iterative software development mentality to reduce the likelihood of shipping something that doesn't add value.","https://about.gitlab.com/blog/why-its-crucial-to-break-things-down-into-smallest-iterations","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Why iterative software development is critical\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Matej Latin\"}],\n        \"datePublished\": \"2021-04-30\",\n      }",{"title":4077,"description":4078,"authors":4082,"heroImage":2394,"date":4084,"category":14,"tags":4085},[4083],"Matej Latin","2021-04-30",[2934,1099,1316],{"slug":4087,"featured":6,"template":730},"why-its-crucial-to-break-things-down-into-smallest-iterations","content:en-us:blog:why-its-crucial-to-break-things-down-into-smallest-iterations.yml","Why Its Crucial To Break Things Down Into Smallest Iterations","en-us/blog/why-its-crucial-to-break-things-down-into-smallest-iterations.yml","en-us/blog/why-its-crucial-to-break-things-down-into-smallest-iterations",{"_path":4093,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":4094,"content":4099,"config":4104,"_id":4106,"_type":16,"title":4107,"_source":17,"_file":4108,"_stem":4109,"_extension":20},"/en-us/blog/puma-nakayoshi-fork-and-compaction",{"title":4095,"description":4096,"ogTitle":4095,"ogDescription":4096,"noIndex":6,"ogImage":1727,"ogUrl":4097,"ogSiteName":895,"ogType":896,"canonicalUrls":4097,"schema":4098},"Ruby 2.7: Understand and debug problems with heap compaction","An overview of Ruby 2.7 heap compaction and the risks it adds to production Rails applications.","https://about.gitlab.com/blog/puma-nakayoshi-fork-and-compaction","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Ruby 2.7: Understand and debug problems with heap compaction\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Matthias Käppler\"}],\n        \"datePublished\": \"2021-04-28\",\n      }",{"title":4095,"description":4096,"authors":4100,"heroImage":1727,"date":4102,"category":14,"tags":4103},[4101],"Matthias Käppler","2021-04-28",[1451,904,1099],{"slug":4105,"featured":6,"template":730},"puma-nakayoshi-fork-and-compaction","content:en-us:blog:puma-nakayoshi-fork-and-compaction.yml","Puma Nakayoshi Fork And Compaction","en-us/blog/puma-nakayoshi-fork-and-compaction.yml","en-us/blog/puma-nakayoshi-fork-and-compaction",{"_path":4111,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":4112,"content":4118,"config":4123,"_id":4125,"_type":16,"title":4126,"_source":17,"_file":4127,"_stem":4128,"_extension":20},"/en-us/blog/gitops-done-3-ways",{"title":4113,"description":4114,"ogTitle":4113,"ogDescription":4114,"noIndex":6,"ogImage":4115,"ogUrl":4116,"ogSiteName":895,"ogType":896,"canonicalUrls":4116,"schema":4117},"3 Ways to approach GitOps","Learn about how GitLab users can employ GitOps to cover both Kubernetes and non-Kubernetes environments","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749669635/Blog/Hero%20Images/gitops-cover.jpg","https://about.gitlab.com/blog/gitops-done-3-ways","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"3 Ways to approach GitOps\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Saumya Upadhyaya\"},{\"@type\":\"Person\",\"name\":\"Dov Hershkovitch\"}],\n        \"datePublished\": \"2021-04-27\",\n      }",{"title":4113,"description":4114,"authors":4119,"heroImage":4115,"date":4121,"category":14,"tags":4122},[4120,1198],"Saumya Upadhyaya","2021-04-27",[559,1120,1180,582],{"slug":4124,"featured":6,"template":730},"gitops-done-3-ways","content:en-us:blog:gitops-done-3-ways.yml","Gitops Done 3 Ways","en-us/blog/gitops-done-3-ways.yml","en-us/blog/gitops-done-3-ways",{"_path":4130,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":4131,"content":4137,"config":4142,"_id":4144,"_type":16,"title":4145,"_source":17,"_file":4146,"_stem":4147,"_extension":20},"/en-us/blog/devops-workflows-json-format-jq-ci-cd-lint",{"title":4132,"description":4133,"ogTitle":4132,"ogDescription":4133,"noIndex":6,"ogImage":4134,"ogUrl":4135,"ogSiteName":895,"ogType":896,"canonicalUrls":4135,"schema":4136},"JSON formatting and CI/CD linting tips for DevOps workflows","Learn how to filter in JSON data structures and interact with the REST API. Use the GitLab API to lint your CI/CD configuration and dive into Git hooks speeding up your workflows.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749681979/Blog/Hero%20Images/gert-boers-unsplash.jpg","https://about.gitlab.com/blog/devops-workflows-json-format-jq-ci-cd-lint","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Tips for productive DevOps workflows: JSON formatting with jq and CI/CD linting automation\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Michael Friedrich\"}],\n        \"datePublished\": \"2021-04-21\",\n      }",{"title":4138,"description":4133,"authors":4139,"heroImage":4134,"date":4140,"category":14,"tags":4141},"Tips for productive DevOps workflows: JSON formatting with jq and CI/CD linting automation",[862],"2021-04-21",[1022,564,728],{"slug":4143,"featured":6,"template":730},"devops-workflows-json-format-jq-ci-cd-lint","content:en-us:blog:devops-workflows-json-format-jq-ci-cd-lint.yml","Devops Workflows Json Format Jq Ci Cd Lint","en-us/blog/devops-workflows-json-format-jq-ci-cd-lint.yml","en-us/blog/devops-workflows-json-format-jq-ci-cd-lint",{"_path":4149,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":4150,"content":4156,"config":4160,"_id":4162,"_type":16,"title":4163,"_source":17,"_file":4164,"_stem":4165,"_extension":20},"/en-us/blog/gitlab-jira-integration-selfmanaged",{"title":4151,"description":4152,"ogTitle":4151,"ogDescription":4152,"noIndex":6,"ogImage":4153,"ogUrl":4154,"ogSiteName":895,"ogType":896,"canonicalUrls":4154,"schema":4155},"How to achieve a GitLab Jira integration","Check out how to integrate GitLab self-managed with Atlassian Jira to connect your merge requests, branches, and commits to a Jira issue.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749667260/Blog/Hero%20Images/twopeasinapod.jpg","https://about.gitlab.com/blog/gitlab-jira-integration-selfmanaged","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to achieve a GitLab Jira integration\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Tye Davis\"}],\n        \"datePublished\": \"2021-04-12\",\n      }",{"title":4151,"description":4152,"authors":4157,"heroImage":4153,"date":4158,"category":14,"tags":4159},[3993],"2021-04-12",[582,564,1120],{"slug":4161,"featured":6,"template":730},"gitlab-jira-integration-selfmanaged","content:en-us:blog:gitlab-jira-integration-selfmanaged.yml","Gitlab Jira Integration Selfmanaged","en-us/blog/gitlab-jira-integration-selfmanaged.yml","en-us/blog/gitlab-jira-integration-selfmanaged",{"_path":4167,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":4168,"content":4174,"config":4178,"_id":4180,"_type":16,"title":4181,"_source":17,"_file":4182,"_stem":4183,"_extension":20},"/en-us/blog/demystifying-ci-cd-variables",{"title":4169,"description":4170,"ogTitle":4169,"ogDescription":4170,"noIndex":6,"ogImage":4171,"ogUrl":4172,"ogSiteName":895,"ogType":896,"canonicalUrls":4172,"schema":4173},"GitLab environment variables demystified","CI/CD variables are useful (and flexible) tools to control jobs and pipelines. We unpack everything you need to know about GitLab environment variables.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749664679/Blog/Hero%20Images/blog-image-template-1800x945__24_.png","https://about.gitlab.com/blog/demystifying-ci-cd-variables","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"GitLab environment variables demystified\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Veethika Mishra\"}],\n        \"datePublished\": \"2021-04-09\",\n      }",{"title":4169,"description":4170,"authors":4175,"heroImage":4171,"date":4176,"category":14,"tags":4177,"updatedDate":984},[1313],"2021-04-09",[1120,750,1099,1022,110,728],{"slug":4179,"featured":6,"template":730},"demystifying-ci-cd-variables","content:en-us:blog:demystifying-ci-cd-variables.yml","Demystifying Ci Cd Variables","en-us/blog/demystifying-ci-cd-variables.yml","en-us/blog/demystifying-ci-cd-variables",{"_path":4185,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":4186,"content":4191,"config":4196,"_id":4198,"_type":16,"title":4199,"_source":17,"_file":4200,"_stem":4201,"_extension":20},"/en-us/blog/3-debugging-tips-we-learned-from-you",{"title":4187,"description":4188,"ogTitle":4187,"ogDescription":4188,"noIndex":6,"ogImage":2578,"ogUrl":4189,"ogSiteName":895,"ogType":896,"canonicalUrls":4189,"schema":4190},"3 Debugging tips we learned from you","We asked for your most unexpected causes of bugs. Here's what we learned.","https://about.gitlab.com/blog/3-debugging-tips-we-learned-from-you","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"3 Debugging tips we learned from you\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Rebecca Dodd\"}],\n        \"datePublished\": \"2021-03-31\",\n      }",{"title":4187,"description":4188,"authors":4192,"heroImage":2578,"date":4194,"category":14,"tags":4195},[4193],"Rebecca Dodd","2021-03-31",[269],{"slug":4197,"featured":6,"template":730},"3-debugging-tips-we-learned-from-you","content:en-us:blog:3-debugging-tips-we-learned-from-you.yml","3 Debugging Tips We Learned From You","en-us/blog/3-debugging-tips-we-learned-from-you.yml","en-us/blog/3-debugging-tips-we-learned-from-you",{"_path":4203,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":4204,"content":4210,"config":4215,"_id":4217,"_type":16,"title":4218,"_source":17,"_file":4219,"_stem":4220,"_extension":20},"/en-us/blog/five-signs-you-should-think-bigger",{"title":4205,"description":4206,"ogTitle":4205,"ogDescription":4206,"noIndex":6,"ogImage":4207,"ogUrl":4208,"ogSiteName":895,"ogType":896,"canonicalUrls":4208,"schema":4209},"Five signs you should think BIGGER!","Are you a designer who is frustrated with only focusing on the next milestone? Do you feel like you have to answer too many questions in every Issue? Do you feel like your product is not making any progress? **Time to Think Bigger!**","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099620/Blog/Hero%20Images/Blog/Hero%20Images/insights_insights.png_1750099620265.png","https://about.gitlab.com/blog/five-signs-you-should-think-bigger","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Five signs you should think BIGGER!\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Iain Camacho\"}],\n        \"datePublished\": \"2021-03-30\",\n      }",{"title":4205,"description":4206,"authors":4211,"heroImage":4207,"date":4213,"category":14,"tags":4214},[4212],"Iain Camacho","2021-03-30",[1507,1141,1099,2512,965],{"slug":4216,"featured":6,"template":730},"five-signs-you-should-think-bigger","content:en-us:blog:five-signs-you-should-think-bigger.yml","Five Signs You Should Think Bigger","en-us/blog/five-signs-you-should-think-bigger.yml","en-us/blog/five-signs-you-should-think-bigger",{"_path":4222,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":4223,"content":4228,"config":4232,"_id":4234,"_type":16,"title":4235,"_source":17,"_file":4236,"_stem":4237,"_extension":20},"/en-us/blog/integrating-gitlab-com-with-atlassian-jira-cloud",{"title":4224,"description":4225,"ogTitle":4224,"ogDescription":4225,"noIndex":6,"ogImage":4153,"ogUrl":4226,"ogSiteName":895,"ogType":896,"canonicalUrls":4226,"schema":4227},"How to integrate GitLab.com with Jira Cloud","Check out how to use the GitLab App on the Atlassian Marketplace to connect your merge requests, branches, and commits to a Jira issue.","https://about.gitlab.com/blog/integrating-gitlab-com-with-atlassian-jira-cloud","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to integrate GitLab.com with Jira Cloud\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Tye Davis\"}],\n        \"datePublished\": \"2021-03-25\",\n      }",{"title":4224,"description":4225,"authors":4229,"heroImage":4153,"date":4230,"category":14,"tags":4231},[3993],"2021-03-25",[582,564,1120],{"slug":4233,"featured":6,"template":730},"integrating-gitlab-com-with-atlassian-jira-cloud","content:en-us:blog:integrating-gitlab-com-with-atlassian-jira-cloud.yml","Integrating Gitlab Com With Atlassian Jira Cloud","en-us/blog/integrating-gitlab-com-with-atlassian-jira-cloud.yml","en-us/blog/integrating-gitlab-com-with-atlassian-jira-cloud",{"_path":4239,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":4240,"content":4246,"config":4250,"_id":4252,"_type":16,"title":4253,"_source":17,"_file":4254,"_stem":4255,"_extension":20},"/en-us/blog/iteration-and-code-review",{"title":4241,"description":4242,"ogTitle":4241,"ogDescription":4242,"noIndex":6,"ogImage":4243,"ogUrl":4244,"ogSiteName":895,"ogType":896,"canonicalUrls":4244,"schema":4245},"Why small merge requests are key to a great review","Massive merge requests lead to more problems than solutions. We explain how embracing iteration can lead to a better experience for the code author and code review.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749681966/Blog/Hero%20Images/broken_wood.jpg","https://about.gitlab.com/blog/iteration-and-code-review","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Why small merge requests are key to a great review\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"David O'Regan\"}],\n        \"datePublished\": \"2021-03-18\",\n      }",{"title":4241,"description":4242,"authors":4247,"heroImage":4243,"date":4248,"category":14,"tags":4249},[1597],"2021-03-18",[1259,1099],{"slug":4251,"featured":6,"template":730},"iteration-and-code-review","content:en-us:blog:iteration-and-code-review.yml","Iteration And Code Review","en-us/blog/iteration-and-code-review.yml","en-us/blog/iteration-and-code-review",{"_path":4257,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":4258,"content":4264,"config":4268,"_id":4270,"_type":16,"title":4271,"_source":17,"_file":4272,"_stem":4273,"_extension":20},"/en-us/blog/patch-files-for-code-review",{"title":4259,"description":4260,"ogTitle":4259,"ogDescription":4260,"noIndex":6,"ogImage":4261,"ogUrl":4262,"ogSiteName":895,"ogType":896,"canonicalUrls":4262,"schema":4263},"How patch files can transform how you review code","We explain how to use patch files for better code review.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749672273/Blog/Hero%20Images/patch.jpg","https://about.gitlab.com/blog/patch-files-for-code-review","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How patch files can transform how you review code\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"David O'Regan\"}],\n        \"datePublished\": \"2021-03-15\",\n      }",{"title":4259,"description":4260,"authors":4265,"heroImage":4261,"date":4266,"category":14,"tags":4267},[1597],"2021-03-15",[1259,1099],{"slug":4269,"featured":6,"template":730},"patch-files-for-code-review","content:en-us:blog:patch-files-for-code-review.yml","Patch Files For Code Review","en-us/blog/patch-files-for-code-review.yml","en-us/blog/patch-files-for-code-review",{"_path":4275,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":4276,"content":4282,"config":4286,"_id":4288,"_type":16,"title":4289,"_source":17,"_file":4290,"_stem":4291,"_extension":20},"/en-us/blog/tips-for-better-code-review",{"title":4277,"description":4278,"ogTitle":4277,"ogDescription":4278,"noIndex":6,"ogImage":4279,"ogUrl":4280,"ogSiteName":895,"ogType":896,"canonicalUrls":4280,"schema":4281},"How to write a more thoughtful code review","The best code reviews are empathetic and fair. We explain best practices for providing feedback.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749663502/Blog/Hero%20Images/paperclips.jpg","https://about.gitlab.com/blog/tips-for-better-code-review","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to write a more thoughtful code review\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"David O'Regan\"}],\n        \"datePublished\": \"2021-03-09\",\n      }",{"title":4277,"description":4278,"authors":4283,"heroImage":4279,"date":4284,"category":14,"tags":4285},[1597],"2021-03-09",[1259],{"slug":4287,"featured":6,"template":730},"tips-for-better-code-review","content:en-us:blog:tips-for-better-code-review.yml","Tips For Better Code Review","en-us/blog/tips-for-better-code-review.yml","en-us/blog/tips-for-better-code-review",{"_path":4293,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":4294,"content":4299,"config":4305,"_id":4307,"_type":16,"title":4308,"_source":17,"_file":4309,"_stem":4310,"_extension":20},"/en-us/blog/starting-from-the-start-slippers-design-system",{"title":4295,"description":4296,"ogTitle":4295,"ogDescription":4296,"noIndex":6,"ogImage":4060,"ogUrl":4297,"ogSiteName":895,"ogType":896,"canonicalUrls":4297,"schema":4298},"Why design systems benefit everyone","Learn how the GitLab digital experience team built the Slippers design system for our marketing website.","https://about.gitlab.com/blog/starting-from-the-start-slippers-design-system","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Why design systems benefit everyone\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Stephen McGuinness\"}],\n        \"datePublished\": \"2021-03-05\",\n      }",{"title":4295,"description":4296,"authors":4300,"heroImage":4060,"date":4302,"category":14,"tags":4303},[4301],"Stephen McGuinness","2021-03-05",[1507,1099,4304,1316],"UI",{"slug":4306,"featured":6,"template":730},"starting-from-the-start-slippers-design-system","content:en-us:blog:starting-from-the-start-slippers-design-system.yml","Starting From The Start Slippers Design System","en-us/blog/starting-from-the-start-slippers-design-system.yml","en-us/blog/starting-from-the-start-slippers-design-system",{"_path":4312,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":4313,"content":4318,"config":4324,"_id":4326,"_type":16,"title":4327,"_source":17,"_file":4328,"_stem":4329,"_extension":20},"/en-us/blog/production-grade-infra-devsecops-with-five-minute-production",{"title":4314,"description":4315,"ogTitle":4314,"ogDescription":4315,"noIndex":6,"ogImage":3708,"ogUrl":4316,"ogSiteName":895,"ogType":896,"canonicalUrls":4316,"schema":4317},"GitOps & DevSecOps for production infrastructure in minutes","Unlock production-grade infrastructure and development workflows in under five minutes with Five Minute Production App: a blend of solutions offered by AWS, Hashicorp Terraform, and GitLab.","https://about.gitlab.com/blog/production-grade-infra-devsecops-with-five-minute-production","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Production-grade infrastructure, GitOps convergence, and DevSecOps in under 5 minutes\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Sri Rangan\"}],\n        \"datePublished\": \"2021-02-24\",\n      }",{"title":4319,"description":4315,"authors":4320,"heroImage":3708,"date":4322,"category":14,"tags":4323},"Production-grade infrastructure, GitOps convergence, and DevSecOps in under 5 minutes",[4321],"Sri Rangan","2021-02-24",[1022,1120,564,582,559,1451],{"slug":4325,"featured":6,"template":730},"production-grade-infra-devsecops-with-five-minute-production","content:en-us:blog:production-grade-infra-devsecops-with-five-minute-production.yml","Production Grade Infra Devsecops With Five Minute Production","en-us/blog/production-grade-infra-devsecops-with-five-minute-production.yml","en-us/blog/production-grade-infra-devsecops-with-five-minute-production",{"_path":4331,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":4332,"content":4338,"config":4342,"_id":4344,"_type":16,"title":4345,"_source":17,"_file":4346,"_stem":4347,"_extension":20},"/en-us/blog/pipeline-editor-overview",{"title":4333,"description":4334,"ogTitle":4333,"ogDescription":4334,"noIndex":6,"ogImage":4335,"ogUrl":4336,"ogSiteName":895,"ogType":896,"canonicalUrls":4336,"schema":4337},"Meet Pipeline Editor, your one-stop shop for building a CI/CD pipeline","The Pipeline Editor reduces the complexity of configuring your CI/CD pipelines.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749665961/Blog/Hero%20Images/image_cover.jpg","https://about.gitlab.com/blog/pipeline-editor-overview","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Meet Pipeline Editor, your one-stop shop for building a CI/CD pipeline\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Dov Hershkovitch\"}],\n        \"datePublished\": \"2021-02-22\",\n      }",{"title":4333,"description":4334,"authors":4339,"heroImage":4335,"date":4340,"category":14,"tags":4341},[1198],"2021-02-22",[1022,1120,564,750],{"slug":4343,"featured":6,"template":730},"pipeline-editor-overview","content:en-us:blog:pipeline-editor-overview.yml","Pipeline Editor Overview","en-us/blog/pipeline-editor-overview.yml","en-us/blog/pipeline-editor-overview",{"_path":4349,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":4350,"content":4356,"config":4361,"_id":4363,"_type":16,"title":4364,"_source":17,"_file":4365,"_stem":4366,"_extension":20},"/en-us/blog/improve-your-gitlab-productivity-with-these-10-tips",{"title":4351,"description":4352,"ogTitle":4351,"ogDescription":4352,"noIndex":6,"ogImage":4353,"ogUrl":4354,"ogSiteName":895,"ogType":896,"canonicalUrls":4354,"schema":4355},"10 tips to make you a productive GitLab user","Learn how quick actions can make you a more efficient GitLab user.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749666717/Blog/Hero%20Images/cover-image.jpg","https://about.gitlab.com/blog/improve-your-gitlab-productivity-with-these-10-tips","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"10 tips to make you a productive GitLab user\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Michael Friedrich\"},{\"@type\":\"Person\",\"name\":\"Roman Kuba\"}],\n        \"datePublished\": \"2021-02-18\",\n      }",{"title":4351,"description":4352,"authors":4357,"heroImage":4353,"date":4359,"category":14,"tags":4360},[862,4358],"Roman Kuba","2021-02-18",[924,1507,1099],{"slug":4362,"featured":6,"template":730},"improve-your-gitlab-productivity-with-these-10-tips","content:en-us:blog:improve-your-gitlab-productivity-with-these-10-tips.yml","Improve Your Gitlab Productivity With These 10 Tips","en-us/blog/improve-your-gitlab-productivity-with-these-10-tips.yml","en-us/blog/improve-your-gitlab-productivity-with-these-10-tips",{"_path":4368,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":4369,"content":4375,"config":4379,"_id":4381,"_type":16,"title":4382,"_source":17,"_file":4383,"_stem":4384,"_extension":20},"/en-us/blog/engineering-teams-collaborating-remotely",{"title":4370,"description":4371,"ogTitle":4370,"ogDescription":4371,"noIndex":6,"ogImage":4372,"ogUrl":4373,"ogSiteName":895,"ogType":896,"canonicalUrls":4373,"schema":4374},"How to carry out remote work team collaboration","Some tips for successful asynchronous collaboration from all-remote engineering teams.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749681893/Blog/Hero%20Images/remoteengineering.jpg","https://about.gitlab.com/blog/engineering-teams-collaborating-remotely","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to carry out remote work team collaboration\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Sara Kassabian\"}],\n        \"datePublished\": \"2021-02-09\",\n      }",{"title":4370,"description":4371,"authors":4376,"heroImage":4372,"date":4377,"category":14,"tags":4378},[3713],"2021-02-09",[2512,1507],{"slug":4380,"featured":6,"template":730},"engineering-teams-collaborating-remotely","content:en-us:blog:engineering-teams-collaborating-remotely.yml","Engineering Teams Collaborating Remotely","en-us/blog/engineering-teams-collaborating-remotely.yml","en-us/blog/engineering-teams-collaborating-remotely",{"_path":4386,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":4387,"content":4393,"config":4399,"_id":4401,"_type":16,"title":4402,"_source":17,"_file":4403,"_stem":4404,"_extension":20},"/en-us/blog/ci-deployment-and-environments",{"title":4388,"description":4389,"ogTitle":4388,"ogDescription":4389,"noIndex":6,"ogImage":4390,"ogUrl":4391,"ogSiteName":895,"ogType":896,"canonicalUrls":4391,"schema":4392},"How to use GitLab CI to deploy to multiple environments","We walk you through different scenarios to demonstrate the versatility and power of GitLab CI.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749662033/Blog/Hero%20Images/intro.jpg","https://about.gitlab.com/blog/ci-deployment-and-environments","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to use GitLab CI to deploy to multiple environments\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Ivan Nemytchenko\"},{\"@type\":\"Person\",\"name\":\"Cesar Saavedra\"}],\n        \"datePublished\": \"2021-02-05\",\n      }",{"title":4388,"description":4389,"authors":4394,"heroImage":4390,"date":4396,"category":14,"tags":4397,"updatedDate":4398},[4395,1276],"Ivan Nemytchenko","2021-02-05",[1022,1120,728],"2024-07-22",{"slug":4400,"featured":6,"template":730},"ci-deployment-and-environments","content:en-us:blog:ci-deployment-and-environments.yml","Ci Deployment And Environments","en-us/blog/ci-deployment-and-environments.yml","en-us/blog/ci-deployment-and-environments",{"_path":4406,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":4407,"content":4413,"config":4418,"_id":4420,"_type":16,"title":4421,"_source":17,"_file":4422,"_stem":4423,"_extension":20},"/en-us/blog/how-we-automatically-fixed-hundreds-of-ruby-2-7-deprecation-warnings",{"title":4408,"description":4409,"ogTitle":4408,"ogDescription":4409,"noIndex":6,"ogImage":4410,"ogUrl":4411,"ogSiteName":895,"ogType":896,"canonicalUrls":4411,"schema":4412},"How we automatically fixed thousands of Ruby 2.7 deprecation warnings","The upgrade to Ruby 2.7 for GitLab involved thousands of deprecation warnings across hundreds of files. Here's how we fixed most of them.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749681882/Blog/Hero%20Images/daria-nepriakhina-zNU3ErDAbAw-unsplash.jpg","https://about.gitlab.com/blog/how-we-automatically-fixed-hundreds-of-ruby-2-7-deprecation-warnings","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How we automatically fixed thousands of Ruby 2.7 deprecation warnings\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Thong Kuah\"}],\n        \"datePublished\": \"2021-02-03\",\n      }",{"title":4408,"description":4409,"authors":4414,"heroImage":4410,"date":4416,"category":14,"tags":4417},[4415],"Thong Kuah","2021-02-03",[809],{"slug":4419,"featured":6,"template":730},"how-we-automatically-fixed-hundreds-of-ruby-2-7-deprecation-warnings","content:en-us:blog:how-we-automatically-fixed-hundreds-of-ruby-2-7-deprecation-warnings.yml","How We Automatically Fixed Hundreds Of Ruby 2 7 Deprecation Warnings","en-us/blog/how-we-automatically-fixed-hundreds-of-ruby-2-7-deprecation-warnings.yml","en-us/blog/how-we-automatically-fixed-hundreds-of-ruby-2-7-deprecation-warnings",{"_path":4425,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":4426,"content":4432,"config":4439,"_id":4441,"_type":16,"title":4442,"_source":17,"_file":4443,"_stem":4444,"_extension":20},"/en-us/blog/we-need-to-talk-no-proxy",{"title":4427,"description":4428,"ogTitle":4427,"ogDescription":4428,"noIndex":6,"ogImage":4429,"ogUrl":4430,"ogSiteName":895,"ogType":896,"canonicalUrls":4430,"schema":4431},"We need to talk: Can we standardize NO_PROXY?","Subtle differences in proxy setting implementations led to surprising\nproblems for a GitLab customer. Here's how we got to the root of it.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659507/Blog/Hero%20Images/AdobeStock_623844718.jpg","https://about.gitlab.com/blog/we-need-to-talk-no-proxy","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"We need to talk: Can we standardize NO_PROXY?\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Stan Hu\"}],\n        \"datePublished\": \"2021-01-27\",\n      }",{"title":4427,"description":4428,"authors":4433,"heroImage":4429,"date":4434,"updatedDate":4435,"category":14,"tags":4436},[877],"2021-01-27","2025-06-09",[269,1659,4437,4438],"user stories","startups",{"slug":4440,"featured":6,"template":730},"we-need-to-talk-no-proxy","content:en-us:blog:we-need-to-talk-no-proxy.yml","We Need To Talk No Proxy","en-us/blog/we-need-to-talk-no-proxy.yml","en-us/blog/we-need-to-talk-no-proxy",{"_path":4446,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":4447,"content":4452,"config":4456,"_id":4458,"_type":16,"title":4459,"_source":17,"_file":4460,"_stem":4461,"_extension":20},"/en-us/blog/mr-reviews-with-vs-code",{"title":4448,"description":4449,"ogTitle":4448,"ogDescription":4449,"noIndex":6,"ogImage":2394,"ogUrl":4450,"ogSiteName":895,"ogType":896,"canonicalUrls":4450,"schema":4451},"How to do GitLab merge request reviews in VS Code","Code review is critical to modern software development. We're making it easier by bringing merge request reviews right into VS Code.","https://about.gitlab.com/blog/mr-reviews-with-vs-code","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to do GitLab merge request reviews in VS Code\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Tomas Vik\"}],\n        \"datePublished\": \"2021-01-25\",\n      }",{"title":4448,"description":4449,"authors":4453,"heroImage":2394,"date":4454,"category":14,"tags":4455},[3348],"2021-01-25",[1259,233,728],{"slug":4457,"featured":6,"template":730},"mr-reviews-with-vs-code","content:en-us:blog:mr-reviews-with-vs-code.yml","Mr Reviews With Vs Code","en-us/blog/mr-reviews-with-vs-code.yml","en-us/blog/mr-reviews-with-vs-code",{"_path":4463,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":4464,"content":4470,"config":4475,"_id":4477,"_type":16,"title":4478,"_source":17,"_file":4479,"_stem":4480,"_extension":20},"/en-us/blog/high-availability-git-storage-with-praefect",{"title":4465,"description":4466,"ogTitle":4465,"ogDescription":4466,"noIndex":6,"ogImage":4467,"ogUrl":4468,"ogSiteName":895,"ogType":896,"canonicalUrls":4468,"schema":4469},"Meet Praefect: The traffic manager making your Git data highly available","This router and transaction manager ensures there are multiple copies of each Git repository available in the event of an outage – no NFS required.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749669204/Blog/Hero%20Images/traffic-intersection.jpg","https://about.gitlab.com/blog/high-availability-git-storage-with-praefect","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Meet Praefect: The traffic manager making your Git data highly available\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Zeger-Jan van de Weg\"}],\n        \"datePublished\": \"2021-01-21\",\n      }",{"title":4465,"description":4466,"authors":4471,"heroImage":4467,"date":4473,"category":14,"tags":4474},[4472],"Zeger-Jan van de Weg","2021-01-21",[773,792,1099,233,809],{"slug":4476,"featured":6,"template":730},"high-availability-git-storage-with-praefect","content:en-us:blog:high-availability-git-storage-with-praefect.yml","High Availability Git Storage With Praefect","en-us/blog/high-availability-git-storage-with-praefect.yml","en-us/blog/high-availability-git-storage-with-praefect",{"_path":4482,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":4483,"content":4488,"config":4493,"_id":4495,"_type":16,"title":4496,"_source":17,"_file":4497,"_stem":4498,"_extension":20},"/en-us/blog/using-run-parallel-jobs",{"title":4484,"description":4485,"ogTitle":4484,"ogDescription":4485,"noIndex":6,"ogImage":4353,"ogUrl":4486,"ogSiteName":895,"ogType":896,"canonicalUrls":4486,"schema":4487},"How we used parallel CI/CD jobs to increase our productivity","GitLab uses parallel jobs to help long-running jobs run faster.","https://about.gitlab.com/blog/using-run-parallel-jobs","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How we used parallel CI/CD jobs to increase our productivity\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Miguel Rincon\"}],\n        \"datePublished\": \"2021-01-20\",\n      }",{"title":4484,"description":4485,"authors":4489,"heroImage":4353,"date":4491,"category":14,"tags":4492},[4490],"Miguel Rincon","2021-01-20",[1099,1022,1120,904,924],{"slug":4494,"featured":6,"template":730},"using-run-parallel-jobs","content:en-us:blog:using-run-parallel-jobs.yml","Using Run Parallel Jobs","en-us/blog/using-run-parallel-jobs.yml","en-us/blog/using-run-parallel-jobs",{"_path":4500,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":4501,"content":4507,"config":4513,"_id":4515,"_type":16,"title":4516,"_source":17,"_file":4517,"_stem":4518,"_extension":20},"/en-us/blog/this-sre-attempted-to-roll-out-an-haproxy-change",{"title":4502,"description":4503,"ogTitle":4502,"ogDescription":4503,"noIndex":6,"ogImage":4504,"ogUrl":4505,"ogSiteName":895,"ogType":896,"canonicalUrls":4505,"schema":4506},"This SRE's HAProxy Config Change: An Unexpected Journey","This post is about a wild discovery made while investigating strange behavior from HAProxy. We dive into the pathology, describe how we found it, and share some investigative techniques used along the way.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749681844/Blog/Hero%20Images/infra-proxy-protocol-wireshark-header.png","https://about.gitlab.com/blog/this-sre-attempted-to-roll-out-an-haproxy-change","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"This SRE attempted to roll out an HAProxy config change. You won't believe what happened next... \",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Igor Wiedler\"}],\n        \"datePublished\": \"2021-01-14\",\n      }",{"title":4508,"description":4503,"authors":4509,"heroImage":4504,"date":4511,"category":14,"tags":4512},"This SRE attempted to roll out an HAProxy config change. You won't believe what happened next...",[4510],"Igor Wiedler","2021-01-14",[1451,1099],{"slug":4514,"featured":6,"template":730},"this-sre-attempted-to-roll-out-an-haproxy-change","content:en-us:blog:this-sre-attempted-to-roll-out-an-haproxy-change.yml","This Sre Attempted To Roll Out An Haproxy Change","en-us/blog/this-sre-attempted-to-roll-out-an-haproxy-change.yml","en-us/blog/this-sre-attempted-to-roll-out-an-haproxy-change",{"_path":4520,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":4521,"content":4526,"config":4531,"_id":4533,"_type":16,"title":4534,"_source":17,"_file":4535,"_stem":4536,"_extension":20},"/en-us/blog/learn-gitlab-devops-version-control",{"title":4522,"description":4523,"ogTitle":4522,"ogDescription":4523,"noIndex":6,"ogImage":3238,"ogUrl":4524,"ogSiteName":895,"ogType":896,"canonicalUrls":4524,"schema":4525},"GitLab tutorials for secure pipelines, Kubernetes, and more at Learn@GitLab","Learn@GitLab offers videos and self-driven demos so you can get the most out of GitLab at your own pace.","https://about.gitlab.com/blog/learn-gitlab-devops-version-control","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"GitLab tutorials for secure pipelines, Kubernetes, and more at Learn@GitLab\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Chrissie Buchanan\"}],\n        \"datePublished\": \"2021-01-12\",\n      }",{"title":4522,"description":4523,"authors":4527,"heroImage":3238,"date":4529,"category":14,"tags":4530},[4528],"Chrissie Buchanan","2021-01-12",[1099,233,728],{"slug":4532,"featured":6,"template":730},"learn-gitlab-devops-version-control","content:en-us:blog:learn-gitlab-devops-version-control.yml","Learn Gitlab Devops Version Control","en-us/blog/learn-gitlab-devops-version-control.yml","en-us/blog/learn-gitlab-devops-version-control",{"_path":4538,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":4539,"content":4545,"config":4549,"_id":4551,"_type":16,"title":4552,"_source":17,"_file":4553,"_stem":4554,"_extension":20},"/en-us/blog/top-engineering-stories-gitlab",{"title":4540,"description":4541,"ogTitle":4540,"ogDescription":4541,"noIndex":6,"ogImage":4542,"ogUrl":4543,"ogSiteName":895,"ogType":896,"canonicalUrls":4543,"schema":4544},"These are your favorite GitLab engineering stories","From building a Web IDE, to our migration to GCP, to tracking down a bug in NFS – these are some of our most popular engineering blog posts.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749681835/Blog/Hero%20Images/stairs_iteration.jpg","https://about.gitlab.com/blog/top-engineering-stories-gitlab","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"These are your favorite GitLab engineering stories\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Sara Kassabian\"}],\n        \"datePublished\": \"2021-01-07\",\n      }",{"title":4540,"description":4541,"authors":4546,"heroImage":4542,"date":4547,"category":14,"tags":4548},[3713],"2021-01-07",[1099,233],{"slug":4550,"featured":6,"template":730},"top-engineering-stories-gitlab","content:en-us:blog:top-engineering-stories-gitlab.yml","Top Engineering Stories Gitlab","en-us/blog/top-engineering-stories-gitlab.yml","en-us/blog/top-engineering-stories-gitlab",{"_path":4556,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":4557,"content":4563,"config":4568,"_id":4570,"_type":16,"title":4571,"_source":17,"_file":4572,"_stem":4573,"_extension":20},"/en-us/blog/how-we-prevented-security-fixes-leaking-into-our-public-repositories",{"title":4558,"description":4559,"ogTitle":4558,"ogDescription":4559,"noIndex":6,"ogImage":4560,"ogUrl":4561,"ogSiteName":895,"ogType":896,"canonicalUrls":4561,"schema":4562},"How we prevented security fixes leaking into our public repositories","Working in the open makes it difficult to work on security vulnerabilities before they're disclosed, especially when that openness discloses them early!","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749667227/Blog/Hero%20Images/security-leaks-unlocked.jpg","https://about.gitlab.com/blog/how-we-prevented-security-fixes-leaking-into-our-public-repositories","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How we prevented security fixes leaking into our public repositories\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Robert Speicher\"}],\n        \"datePublished\": \"2021-01-04\",\n      }",{"title":4558,"description":4559,"authors":4564,"heroImage":4560,"date":4566,"category":14,"tags":4567},[4565],"Robert Speicher","2021-01-04",[1099,751],{"slug":4569,"featured":6,"template":730},"how-we-prevented-security-fixes-leaking-into-our-public-repositories","content:en-us:blog:how-we-prevented-security-fixes-leaking-into-our-public-repositories.yml","How We Prevented Security Fixes Leaking Into Our Public Repositories","en-us/blog/how-we-prevented-security-fixes-leaking-into-our-public-repositories.yml","en-us/blog/how-we-prevented-security-fixes-leaking-into-our-public-repositories",{"_path":4575,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":4576,"content":4582,"config":4586,"_id":4588,"_type":16,"title":4589,"_source":17,"_file":4590,"_stem":4591,"_extension":20},"/en-us/blog/cd-solution-overview",{"title":4577,"description":4578,"ogTitle":4577,"ogDescription":4578,"noIndex":6,"ogImage":4579,"ogUrl":4580,"ogSiteName":895,"ogType":896,"canonicalUrls":4580,"schema":4581},"How to use GitLab tools for continuous delivery","Learn how to use GitLab technology to release software faster and with less risk.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749682956/Blog/Hero%20Images/CD-continuous-nature-cover-880x586.jpg","https://about.gitlab.com/blog/cd-solution-overview","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to use GitLab tools for continuous delivery\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Cesar Saavedra\"}],\n        \"datePublished\": \"2020-12-17\",\n      }",{"title":4577,"description":4578,"authors":4583,"heroImage":4579,"date":4584,"category":14,"tags":4585},[1276],"2020-12-17",[1120,564,3007],{"slug":4587,"featured":6,"template":730},"cd-solution-overview","content:en-us:blog:cd-solution-overview.yml","Cd Solution Overview","en-us/blog/cd-solution-overview.yml","en-us/blog/cd-solution-overview",{"_path":4593,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":4594,"content":4600,"config":4603,"_id":4605,"_type":16,"title":4606,"_source":17,"_file":4607,"_stem":4608,"_extension":20},"/en-us/blog/gitlab-for-cicd-agile-gitops-cloudnative",{"title":4595,"description":4596,"ogTitle":4595,"ogDescription":4596,"noIndex":6,"ogImage":4597,"ogUrl":4598,"ogSiteName":895,"ogType":896,"canonicalUrls":4598,"schema":4599},"How to use GitLab for Agile, CI/CD, GitOps, and more","Read our example engineering stories from the past two years that show how to use GitLab for you DevOps cycle, including GitOps, CI/CD and more.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749681825/Blog/Hero%20Images/triangle_geo.jpg","https://about.gitlab.com/blog/gitlab-for-cicd-agile-gitops-cloudnative","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to use GitLab for Agile, CI/CD, GitOps, and more\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Sara Kassabian\"}],\n        \"datePublished\": \"2020-12-17\",\n      }",{"title":4595,"description":4596,"authors":4601,"heroImage":4597,"date":4584,"category":14,"tags":4602},[3713],[1022,1120,1099,3007],{"slug":4604,"featured":6,"template":730},"gitlab-for-cicd-agile-gitops-cloudnative","content:en-us:blog:gitlab-for-cicd-agile-gitops-cloudnative.yml","Gitlab For Cicd Agile Gitops Cloudnative","en-us/blog/gitlab-for-cicd-agile-gitops-cloudnative.yml","en-us/blog/gitlab-for-cicd-agile-gitops-cloudnative",{"_path":4610,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":4611,"content":4617,"config":4622,"_id":4624,"_type":16,"title":4625,"_source":17,"_file":4626,"_stem":4627,"_extension":20},"/en-us/blog/deploy-aws",{"title":4612,"description":4613,"ogTitle":4612,"ogDescription":4613,"noIndex":6,"ogImage":4614,"ogUrl":4615,"ogSiteName":895,"ogType":896,"canonicalUrls":4615,"schema":4616},"How to deploy to AWS with GitLab","We believe deploying to the cloud should be easy and boring. The deployment process is the same regardless of what tech stack you're using so why not automate it?","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749672124/Blog/Hero%20Images/aws_rocket.jpg","https://about.gitlab.com/blog/deploy-aws","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to deploy to AWS with GitLab\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Orit Golowinski\"}],\n        \"datePublished\": \"2020-12-15\",\n      }",{"title":4612,"description":4613,"authors":4618,"heroImage":4614,"date":4620,"category":14,"tags":4621},[4619],"Orit Golowinski","2020-12-15",[582,564,1022,1120],{"slug":4623,"featured":6,"template":730},"deploy-aws","content:en-us:blog:deploy-aws.yml","Deploy Aws","en-us/blog/deploy-aws.yml","en-us/blog/deploy-aws",{"_path":4629,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":4630,"content":4636,"config":4640,"_id":4642,"_type":16,"title":4643,"_source":17,"_file":4644,"_stem":4645,"_extension":20},"/en-us/blog/merge-trains-explained",{"title":4631,"description":4632,"ogTitle":4631,"ogDescription":4632,"noIndex":6,"ogImage":4633,"ogUrl":4634,"ogSiteName":895,"ogType":896,"canonicalUrls":4634,"schema":4635},"How to use merge train pipelines with GitLab","Read here an introduction on what merge trains are, how to use them and how to incorporate them to your GitLab project.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749667210/Blog/Hero%20Images/merge-train-explained-banner.jpg","https://about.gitlab.com/blog/merge-trains-explained","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to use merge train pipelines with GitLab\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Veethika Mishra\"}],\n        \"datePublished\": \"2020-12-14\",\n      }",{"title":4631,"description":4632,"authors":4637,"heroImage":4633,"date":4638,"category":14,"tags":4639},[1313],"2020-12-14",[1022,1120,750,564,1099],{"slug":4641,"featured":6,"template":730},"merge-trains-explained","content:en-us:blog:merge-trains-explained.yml","Merge Trains Explained","en-us/blog/merge-trains-explained.yml","en-us/blog/merge-trains-explained",{"_path":4647,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":4648,"content":4654,"config":4660,"_id":4662,"_type":16,"title":4663,"_source":17,"_file":4664,"_stem":4665,"_extension":20},"/en-us/blog/basics-of-gitlab-ci-updated",{"title":4649,"description":4650,"ogTitle":4649,"ogDescription":4650,"noIndex":6,"ogImage":4651,"ogUrl":4652,"ogSiteName":895,"ogType":896,"canonicalUrls":4652,"schema":4653},"Running CI jobs in sequential, parallel, and custom orders","New to continuous integration? Learn how to build your first CI pipeline with GitLab.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749662061/Blog/Hero%20Images/cicdcover.png","https://about.gitlab.com/blog/basics-of-gitlab-ci-updated","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"The basics of CI: How to run jobs sequentially, in parallel, or out of order\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Itzik Gan Baruch\"}],\n        \"datePublished\": \"2020-12-10\",\n      }",{"title":4655,"description":4650,"authors":4656,"heroImage":4651,"date":4657,"category":14,"tags":4658,"updatedDate":4659},"The basics of CI: How to run jobs sequentially, in parallel, or out of order",[1197],"2020-12-10",[1022,728],"2024-04-24",{"slug":4661,"featured":6,"template":730},"basics-of-gitlab-ci-updated","content:en-us:blog:basics-of-gitlab-ci-updated.yml","Basics Of Gitlab Ci Updated","en-us/blog/basics-of-gitlab-ci-updated.yml","en-us/blog/basics-of-gitlab-ci-updated",{"_path":4667,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":4668,"content":4674,"config":4679,"_id":4681,"_type":16,"title":4682,"_source":17,"_file":4683,"_stem":4684,"_extension":20},"/en-us/blog/how-to-fuzz-rust-code",{"title":4669,"description":4670,"ogTitle":4669,"ogDescription":4670,"noIndex":6,"ogImage":4671,"ogUrl":4672,"ogSiteName":895,"ogType":896,"canonicalUrls":4672,"schema":4673},"How to fuzz Rust code continuously","Learn why you should always fuzz test your Rust code, and the code you'll need to do it.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749681441/Blog/Hero%20Images/rust.jpg","https://about.gitlab.com/blog/how-to-fuzz-rust-code","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to fuzz Rust code continuously\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Yevgeny Pats\"}],\n        \"datePublished\": \"2020-12-03\",\n      }",{"title":4669,"description":4670,"authors":4675,"heroImage":4671,"date":4677,"category":14,"tags":4678},[4676],"Yevgeny Pats","2020-12-03",[809,728],{"slug":4680,"featured":6,"template":730},"how-to-fuzz-rust-code","content:en-us:blog:how-to-fuzz-rust-code.yml","How To Fuzz Rust Code","en-us/blog/how-to-fuzz-rust-code.yml","en-us/blog/how-to-fuzz-rust-code",{"_path":4686,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":4687,"content":4692,"config":4696,"_id":4698,"_type":16,"title":4699,"_source":17,"_file":4700,"_stem":4701,"_extension":20},"/en-us/blog/vscode-extension-development-with-gitlab",{"title":4688,"description":4689,"ogTitle":4688,"ogDescription":4689,"noIndex":6,"ogImage":2394,"ogUrl":4690,"ogSiteName":895,"ogType":896,"canonicalUrls":4690,"schema":4691},"VS Code extension development with GitLab","As VS Code editor increases in popularity, find out how GitLab + VS Code can be used for extension development and how we develop the official GitLab VS Code extension.","https://about.gitlab.com/blog/vscode-extension-development-with-gitlab","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"VS Code extension development with GitLab\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Tomas Vik\"}],\n        \"datePublished\": \"2020-11-30\",\n      }",{"title":4688,"description":4689,"authors":4693,"heroImage":2394,"date":4694,"category":14,"tags":4695},[3348],"2020-11-30",[233,728,110],{"slug":4697,"featured":6,"template":730},"vscode-extension-development-with-gitlab","content:en-us:blog:vscode-extension-development-with-gitlab.yml","Vscode Extension Development With Gitlab","en-us/blog/vscode-extension-development-with-gitlab.yml","en-us/blog/vscode-extension-development-with-gitlab",{"_path":4703,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":4704,"content":4710,"config":4715,"_id":4717,"_type":16,"title":4718,"_source":17,"_file":4719,"_stem":4720,"_extension":20},"/en-us/blog/keep-git-history-clean-with-interactive-rebase",{"title":4705,"description":4706,"ogTitle":4705,"ogDescription":4706,"noIndex":6,"ogImage":4707,"ogUrl":4708,"ogSiteName":895,"ogType":896,"canonicalUrls":4708,"schema":4709},"How to keep your Git history clean with interactive rebase","Interactive rebase is one of Git’s most versatile tools. Here's how to use it to correct commit messages, fix mistakes, and more.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749662593/Blog/Hero%20Images/title-image.png","https://about.gitlab.com/blog/keep-git-history-clean-with-interactive-rebase","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to keep your Git history clean with interactive rebase\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Tobias Günther\"}],\n        \"datePublished\": \"2020-11-23\",\n      }",{"title":4705,"description":4706,"authors":4711,"heroImage":4707,"date":4713,"category":14,"tags":4714},[4712],"Tobias Günther","2020-11-23",[792,728],{"slug":4716,"featured":6,"template":730},"keep-git-history-clean-with-interactive-rebase","content:en-us:blog:keep-git-history-clean-with-interactive-rebase.yml","Keep Git History Clean With Interactive Rebase","en-us/blog/keep-git-history-clean-with-interactive-rebase.yml","en-us/blog/keep-git-history-clean-with-interactive-rebase",{"_path":4722,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":4723,"content":4729,"config":4733,"_id":4735,"_type":16,"title":4736,"_source":17,"_file":4737,"_stem":4738,"_extension":20},"/en-us/blog/docker-hub-rate-limit-monitoring",{"title":4724,"description":4725,"ogTitle":4724,"ogDescription":4725,"noIndex":6,"ogImage":4726,"ogUrl":4727,"ogSiteName":895,"ogType":896,"canonicalUrls":4727,"schema":4728},"How to make Docker Hub rate limit monitoring a breeze","Docker Hub Rate Limits are enforced and we need to find ways to monitor the remaining pull requests. Explore some ways to create a monitoring plugin for Nagios/Icinga/Sensu/Zabbix and test-drive a new Prometheus exporter in combination with Grafana.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749681749/Blog/Hero%20Images/vidarnm-unsplash.jpg","https://about.gitlab.com/blog/docker-hub-rate-limit-monitoring","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to make Docker Hub rate limit monitoring a breeze\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Michael Friedrich\"}],\n        \"datePublished\": \"2020-11-18\",\n      }",{"title":4724,"description":4725,"authors":4730,"heroImage":4726,"date":4731,"category":14,"tags":4732},[862],"2020-11-18",[582,564,1180,809,1451],{"slug":4734,"featured":6,"template":730},"docker-hub-rate-limit-monitoring","content:en-us:blog:docker-hub-rate-limit-monitoring.yml","Docker Hub Rate Limit Monitoring","en-us/blog/docker-hub-rate-limit-monitoring.yml","en-us/blog/docker-hub-rate-limit-monitoring",{"_path":4740,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":4741,"content":4746,"config":4750,"_id":4752,"_type":16,"title":4753,"_source":17,"_file":4754,"_stem":4755,"_extension":20},"/en-us/blog/gitlab-for-agile-portfolio-planning-project-management",{"title":4742,"description":4743,"ogTitle":4742,"ogDescription":4743,"noIndex":6,"ogImage":4041,"ogUrl":4744,"ogSiteName":895,"ogType":896,"canonicalUrls":4744,"schema":4745},"How to use GitLab for Agile portfolio planning and project management","GitLab provides features that are flexible enough to be used for scaled Agile portfolio planning and project management, regardless of the framework you choose.","https://about.gitlab.com/blog/gitlab-for-agile-portfolio-planning-project-management","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to use GitLab for Agile portfolio planning and project management\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Victor Hernandez\"},{\"@type\":\"Person\",\"name\":\"Julie Byrne\"}],\n        \"datePublished\": \"2020-11-11\",\n      }",{"title":4742,"description":4743,"authors":4747,"heroImage":4041,"date":4748,"category":14,"tags":4749},[2027,2028],"2020-11-11",[1790,750,924,1507],{"slug":4751,"featured":6,"template":730},"gitlab-for-agile-portfolio-planning-project-management","content:en-us:blog:gitlab-for-agile-portfolio-planning-project-management.yml","Gitlab For Agile Portfolio Planning Project Management","en-us/blog/gitlab-for-agile-portfolio-planning-project-management.yml","en-us/blog/gitlab-for-agile-portfolio-planning-project-management",{"_path":4757,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":4758,"content":4764,"config":4769,"_id":4771,"_type":16,"title":4772,"_source":17,"_file":4773,"_stem":4774,"_extension":20},"/en-us/blog/lessons-in-iteration-from-new-infrastructure-team",{"title":4759,"description":4760,"ogTitle":4759,"ogDescription":4760,"noIndex":6,"ogImage":4761,"ogUrl":4762,"ogSiteName":895,"ogType":896,"canonicalUrls":4762,"schema":4763},"Lessons in iteration from a new team in infrastructure","A new, small team at GitLab discovered that minimum viable change applies to scaling problems too.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749681724/Blog/Hero%20Images/skateboard-iteration.jpg","https://about.gitlab.com/blog/lessons-in-iteration-from-new-infrastructure-team","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Lessons in iteration from a new team in infrastructure\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Sean McGivern\"}],\n        \"datePublished\": \"2020-11-09\",\n      }",{"title":4759,"description":4760,"authors":4765,"heroImage":4761,"date":4767,"category":14,"tags":4768},[4766],"Sean McGivern","2020-11-09",[1099,904,924],{"slug":4770,"featured":6,"template":730},"lessons-in-iteration-from-new-infrastructure-team","content:en-us:blog:lessons-in-iteration-from-new-infrastructure-team.yml","Lessons In Iteration From New Infrastructure Team","en-us/blog/lessons-in-iteration-from-new-infrastructure-team.yml","en-us/blog/lessons-in-iteration-from-new-infrastructure-team",{"_path":4776,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":4777,"content":4783,"config":4788,"_id":4790,"_type":16,"title":4791,"_source":17,"_file":4792,"_stem":4793,"_extension":20},"/en-us/blog/how-we-optimized-our-infrastructure-spend-at-gitlab",{"title":4778,"description":4779,"ogTitle":4778,"ogDescription":4779,"noIndex":6,"ogImage":4780,"ogUrl":4781,"ogSiteName":895,"ogType":896,"canonicalUrls":4781,"schema":4782},"How we optimized infrastructure spend at GitLab","We keep our cloud spend under control with a spend optimization framework – now we're sharing it with you.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749681701/Blog/Hero%20Images/piggy_bank.jpg","https://about.gitlab.com/blog/how-we-optimized-our-infrastructure-spend-at-gitlab","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How we optimized infrastructure spend at GitLab\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Davis Townsend\"}],\n        \"datePublished\": \"2020-10-27\",\n      }",{"title":4778,"description":4779,"authors":4784,"heroImage":4780,"date":4786,"category":14,"tags":4787},[4785],"Davis Townsend","2020-10-27",[925,1099,1507,582],{"slug":4789,"featured":6,"template":730},"how-we-optimized-our-infrastructure-spend-at-gitlab","content:en-us:blog:how-we-optimized-our-infrastructure-spend-at-gitlab.yml","How We Optimized Our Infrastructure Spend At Gitlab","en-us/blog/how-we-optimized-our-infrastructure-spend-at-gitlab.yml","en-us/blog/how-we-optimized-our-infrastructure-spend-at-gitlab",{"_path":4795,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":4796,"content":4802,"config":4807,"_id":4809,"_type":16,"title":4810,"_source":17,"_file":4811,"_stem":4812,"_extension":20},"/en-us/blog/checkmarx-integration",{"title":4797,"description":4798,"ogTitle":4797,"ogDescription":4798,"noIndex":6,"ogImage":4799,"ogUrl":4800,"ogSiteName":895,"ogType":896,"canonicalUrls":4800,"schema":4801},"Get the most out of the Checkmarx integration with GitLab","Make it easier for developers to find bugs and for dev and sec to get along. Here’s what you need to know about the GitLab/Checkmarx integration.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749681659/Blog/Hero%20Images/checkmarx.jpg","https://about.gitlab.com/blog/checkmarx-integration","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Get the most out of the Checkmarx integration with GitLab\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Valerie Silverthorne\"}],\n        \"datePublished\": \"2020-10-12\",\n      }",{"title":4797,"description":4798,"authors":4803,"heroImage":4799,"date":4804,"category":14,"tags":4805},[2267],"2020-10-12",[751,1259,4806],"developer survey",{"slug":4808,"featured":6,"template":730},"checkmarx-integration","content:en-us:blog:checkmarx-integration.yml","Checkmarx Integration","en-us/blog/checkmarx-integration.yml","en-us/blog/checkmarx-integration",{"_path":4814,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":4815,"content":4821,"config":4826,"_id":4828,"_type":16,"title":4829,"_source":17,"_file":4830,"_stem":4831,"_extension":20},"/en-us/blog/incident-management-with-aws-cloudwatch",{"title":4816,"description":4817,"ogTitle":4816,"ogDescription":4817,"noIndex":6,"ogImage":4818,"ogUrl":4819,"ogSiteName":895,"ogType":896,"canonicalUrls":4819,"schema":4820},"How to use GitLab's Incident Management with AWS CloudWatch","It's a straightforward process to set up GitLab Incident Management to work with AWS CloudWatch alarms. Here's what you need to know to get started.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749664070/Blog/Hero%20Images/cloudwatch-gitlab-incident-management-bg.jpg","https://about.gitlab.com/blog/incident-management-with-aws-cloudwatch","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to use GitLab's Incident Management with AWS CloudWatch\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Sean Arnold\"}],\n        \"datePublished\": \"2020-10-08\",\n      }",{"title":4816,"description":4817,"authors":4822,"heroImage":4818,"date":4824,"category":14,"tags":4825},[4823],"Sean Arnold","2020-10-08",[564,233,1451],{"slug":4827,"featured":6,"template":730},"incident-management-with-aws-cloudwatch","content:en-us:blog:incident-management-with-aws-cloudwatch.yml","Incident Management With Aws Cloudwatch","en-us/blog/incident-management-with-aws-cloudwatch.yml","en-us/blog/incident-management-with-aws-cloudwatch",{"_path":4833,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":4834,"content":4840,"config":4844,"_id":4846,"_type":16,"title":4847,"_source":17,"_file":4848,"_stem":4849,"_extension":20},"/en-us/blog/introducing-the-gitlab-kubernetes-agent",{"title":4835,"description":4836,"ogTitle":4835,"ogDescription":4836,"noIndex":6,"ogImage":4837,"ogUrl":4838,"ogSiteName":895,"ogType":896,"canonicalUrls":4838,"schema":4839},"Understand the new GitLab Agent for Kubernetes","Just released in 13.4, our brand new Kubernetes Agent provides a secure and K8s–friendly approach to integrating GitLab with your clusters.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749666262/Blog/Hero%20Images/default-blog-image.png","https://about.gitlab.com/blog/introducing-the-gitlab-kubernetes-agent","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Understand the new GitLab Agent for Kubernetes\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Viktor Nagy\"}],\n        \"datePublished\": \"2020-09-22\",\n      }",{"title":4835,"description":4836,"authors":4841,"heroImage":4837,"date":4842,"category":14,"tags":4843},[2139],"2020-09-22",[1180,2438,582,924],{"slug":4845,"featured":6,"template":730},"introducing-the-gitlab-kubernetes-agent","content:en-us:blog:introducing-the-gitlab-kubernetes-agent.yml","Introducing The Gitlab Kubernetes Agent","en-us/blog/introducing-the-gitlab-kubernetes-agent.yml","en-us/blog/introducing-the-gitlab-kubernetes-agent",{"_path":4851,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":4852,"content":4858,"config":4863,"_id":4865,"_type":16,"title":4866,"_source":17,"_file":4867,"_stem":4868,"_extension":20},"/en-us/blog/year-of-kubernetes",{"title":4853,"description":4854,"ogTitle":4853,"ogDescription":4854,"noIndex":6,"ogImage":4855,"ogUrl":4856,"ogSiteName":895,"ogType":896,"canonicalUrls":4856,"schema":4857},"What we learned after a year of GitLab.com on Kubernetes","It's been one year since we moved GitLab.com to Kubernetes. We unpack the challenges and learnings from this major migration.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749681569/Blog/Hero%20Images/nico-e-AAbjUJsgjvE-unsplash.jpg","https://about.gitlab.com/blog/year-of-kubernetes","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"What we learned after a year of GitLab.com on Kubernetes\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"John Jarvis\"}],\n        \"datePublished\": \"2020-09-16\",\n      }",{"title":4853,"description":4854,"authors":4859,"heroImage":4855,"date":4861,"category":14,"tags":4862},[4860],"John Jarvis","2020-09-16",[1099,1451],{"slug":4864,"featured":6,"template":730},"year-of-kubernetes","content:en-us:blog:year-of-kubernetes.yml","Year Of Kubernetes","en-us/blog/year-of-kubernetes.yml","en-us/blog/year-of-kubernetes",{"_path":4870,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":4871,"content":4877,"config":4882,"_id":4884,"_type":16,"title":4885,"_source":17,"_file":4886,"_stem":4887,"_extension":20},"/en-us/blog/gitlab-pg-upgrade",{"title":4872,"description":4873,"ogTitle":4872,"ogDescription":4873,"noIndex":6,"ogImage":4874,"ogUrl":4875,"ogSiteName":895,"ogType":896,"canonicalUrls":4875,"schema":4876},"How we upgraded PostgreSQL at GitLab.com","We explain the precise maintenance process to execute a major version upgrade of PostgreSQL.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749668002/Blog/Hero%20Images/pg-gear.jpg","https://about.gitlab.com/blog/gitlab-pg-upgrade","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How we upgraded PostgreSQL at GitLab.com\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Jose Finotto\"}],\n        \"datePublished\": \"2020-09-11\",\n      }",{"title":4872,"description":4873,"authors":4878,"heroImage":4874,"date":4880,"category":14,"tags":4881},[4879],"Jose Finotto","2020-09-11",[1451],{"slug":4883,"featured":6,"template":730},"gitlab-pg-upgrade","content:en-us:blog:gitlab-pg-upgrade.yml","Gitlab Pg Upgrade","en-us/blog/gitlab-pg-upgrade.yml","en-us/blog/gitlab-pg-upgrade",{"_path":4889,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":4890,"content":4896,"config":4901,"_id":4903,"_type":16,"title":4904,"_source":17,"_file":4905,"_stem":4906,"_extension":20},"/en-us/blog/is-devops-for-designers",{"title":4891,"description":4892,"ogTitle":4891,"ogDescription":4892,"noIndex":6,"ogImage":4893,"ogUrl":4894,"ogSiteName":895,"ogType":896,"canonicalUrls":4894,"schema":4895},"Can DevOps be beneficial for design and UX?","Look at how DevOps phases can be integrated with design and UX, and why we've built the Figma plugin to help with this.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749681548/Blog/Hero%20Images/GitLab-Figma-header.png","https://about.gitlab.com/blog/is-devops-for-designers","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Can DevOps be beneficial for design and UX?\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Jordi Mon\"}],\n        \"datePublished\": \"2020-09-03\",\n      }",{"title":4891,"description":4892,"authors":4897,"heroImage":4893,"date":4899,"category":14,"tags":4900},[4898],"Jordi Mon","2020-09-03",[1141,4304,1316],{"slug":4902,"featured":6,"template":730},"is-devops-for-designers","content:en-us:blog:is-devops-for-designers.yml","Is Devops For Designers","en-us/blog/is-devops-for-designers.yml","en-us/blog/is-devops-for-designers",{"_path":4908,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":4909,"content":4915,"config":4920,"_id":4922,"_type":16,"title":4923,"_source":17,"_file":4924,"_stem":4925,"_extension":20},"/en-us/blog/using-bazel-to-speed-up-gitlab-ci-builds",{"title":4910,"description":4911,"ogTitle":4910,"ogDescription":4911,"noIndex":6,"ogImage":4912,"ogUrl":4913,"ogSiteName":895,"ogType":896,"canonicalUrls":4913,"schema":4914},"How to use Bazel with GitLab to speed up your builds","We explain why Bazel and GitLab CI are a great match to speed up your build times.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749667132/Blog/Hero%20Images/build-container-image-runner-fargate-codebuild-cover.jpg","https://about.gitlab.com/blog/using-bazel-to-speed-up-gitlab-ci-builds","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to use Bazel with GitLab to speed up your builds\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Jason Yavorska\"}],\n        \"datePublished\": \"2020-09-01\",\n      }",{"title":4910,"description":4911,"authors":4916,"heroImage":4912,"date":4918,"category":14,"tags":4919},[4917],"Jason Yavorska","2020-09-01",[110,233,728],{"slug":4921,"featured":6,"template":730},"using-bazel-to-speed-up-gitlab-ci-builds","content:en-us:blog:using-bazel-to-speed-up-gitlab-ci-builds.yml","Using Bazel To Speed Up Gitlab Ci Builds","en-us/blog/using-bazel-to-speed-up-gitlab-ci-builds.yml","en-us/blog/using-bazel-to-speed-up-gitlab-ci-builds",{"_path":4927,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":4928,"content":4934,"config":4939,"_id":4941,"_type":16,"title":4942,"_source":17,"_file":4943,"_stem":4944,"_extension":20},"/en-us/blog/measuring-engineering-productivity-at-gitlab",{"title":4929,"description":4930,"ogTitle":4929,"ogDescription":4930,"noIndex":6,"ogImage":4931,"ogUrl":4932,"ogSiteName":895,"ogType":896,"canonicalUrls":4932,"schema":4933},"How we measure engineering productivity at GitLab","Learn about how we measure and iterate through this metric","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749681533/Blog/Hero%20Images/background.jpg","https://about.gitlab.com/blog/measuring-engineering-productivity-at-gitlab","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How we measure engineering productivity at GitLab\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Clement Ho\"}],\n        \"datePublished\": \"2020-08-27\",\n      }",{"title":4929,"description":4930,"authors":4935,"heroImage":4931,"date":4937,"category":14,"tags":4938},[4936],"Clement Ho","2020-08-27",[1099],{"slug":4940,"featured":6,"template":730},"measuring-engineering-productivity-at-gitlab","content:en-us:blog:measuring-engineering-productivity-at-gitlab.yml","Measuring Engineering Productivity At Gitlab","en-us/blog/measuring-engineering-productivity-at-gitlab.yml","en-us/blog/measuring-engineering-productivity-at-gitlab",{"_path":4946,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":4947,"content":4953,"config":4959,"_id":4961,"_type":16,"title":4962,"_source":17,"_file":4963,"_stem":4964,"_extension":20},"/en-us/blog/align-engineering-security-appsec-tests-in-ci",{"title":4948,"description":4949,"ogTitle":4948,"ogDescription":4949,"noIndex":6,"ogImage":4950,"ogUrl":4951,"ogSiteName":895,"ogType":896,"canonicalUrls":4951,"schema":4952},"How Developer-Centric AppSec Testing Transforms DevOps Teams","Find and fix security bugs faster by implementing developer-centric application security testing in the CI pipeline. And the bonus? Engineering and security will finally be better aligned.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749681513/Blog/Hero%20Images/stackhawk.jpg","https://about.gitlab.com/blog/align-engineering-security-appsec-tests-in-ci","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How developer-centric AppSec testing can dramatically change your DevOps team\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Joni Klippert\"}],\n        \"datePublished\": \"2020-08-21\",\n      }",{"title":4954,"description":4949,"authors":4955,"heroImage":4950,"date":4957,"category":14,"tags":4958},"How developer-centric AppSec testing can dramatically change your DevOps team",[4956],"Joni Klippert","2020-08-21",[110,1507,564,751,773,924],{"slug":4960,"featured":6,"template":730},"align-engineering-security-appsec-tests-in-ci","content:en-us:blog:align-engineering-security-appsec-tests-in-ci.yml","Align Engineering Security Appsec Tests In Ci","en-us/blog/align-engineering-security-appsec-tests-in-ci.yml","en-us/blog/align-engineering-security-appsec-tests-in-ci",{"_path":4966,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":4967,"content":4973,"config":4977,"_id":4979,"_type":16,"title":4980,"_source":17,"_file":4981,"_stem":4982,"_extension":20},"/en-us/blog/how-gitlab-protects-your-ip",{"title":4968,"description":4969,"ogTitle":4968,"ogDescription":4969,"noIndex":6,"ogImage":4970,"ogUrl":4971,"ogSiteName":895,"ogType":896,"canonicalUrls":4971,"schema":4972},"How GitLab protects your IP","There are many ways in which hosting intellectual property in GitLab is not only secure but also flexible and invites collaboration.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749667110/Blog/Hero%20Images/how-gitlab-protects-your-ip.jpg","https://about.gitlab.com/blog/how-gitlab-protects-your-ip","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How GitLab protects your IP\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Jordi Mon\"}],\n        \"datePublished\": \"2020-08-07\",\n      }",{"title":4968,"description":4969,"authors":4974,"heroImage":4970,"date":4975,"category":14,"tags":4976},[4898],"2020-08-07",[751,1507],{"slug":4978,"featured":6,"template":730},"how-gitlab-protects-your-ip","content:en-us:blog:how-gitlab-protects-your-ip.yml","How Gitlab Protects Your Ip","en-us/blog/how-gitlab-protects-your-ip.yml","en-us/blog/how-gitlab-protects-your-ip",{"_path":4984,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":4985,"content":4991,"config":4996,"_id":4998,"_type":16,"title":4999,"_source":17,"_file":5000,"_stem":5001,"_extension":20},"/en-us/blog/how-gitlab-pages-uses-the-gitlab-api",{"title":4986,"description":4987,"ogTitle":4986,"ogDescription":4987,"noIndex":6,"ogImage":4988,"ogUrl":4989,"ogSiteName":895,"ogType":896,"canonicalUrls":4989,"schema":4990},"How GitLab Pages uses the GitLab API to serve content","GitLab Pages is changing the way it reads a project's configuration to speed up booting times and slowly remove its dependency to NFS.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749679634/Blog/Hero%20Images/retrosupply-jLwVAUtLOAQ-unsplash.jpg","https://about.gitlab.com/blog/how-gitlab-pages-uses-the-gitlab-api-to-serve-content","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How GitLab Pages uses the GitLab API to serve content\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Jaime Martínez\"}],\n        \"datePublished\": \"2020-08-03\",\n      }",{"title":4986,"description":4987,"authors":4992,"heroImage":4988,"date":4994,"category":14,"tags":4995},[4993],"Jaime Martínez","2020-08-03",[1099,1180],{"slug":4997,"featured":6,"template":730},"how-gitlab-pages-uses-the-gitlab-api","content:en-us:blog:how-gitlab-pages-uses-the-gitlab-api.yml","How Gitlab Pages Uses The Gitlab Api","en-us/blog/how-gitlab-pages-uses-the-gitlab-api.yml","en-us/blog/how-gitlab-pages-uses-the-gitlab-api",{"_path":5003,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":5004,"content":5009,"config":5015,"_id":5017,"_type":16,"title":5018,"_source":17,"_file":5019,"_stem":5020,"_extension":20},"/en-us/blog/aws-fargate-codebuild-build-containers-gitlab-runner",{"title":5005,"description":5006,"ogTitle":5005,"ogDescription":5006,"noIndex":6,"ogImage":4912,"ogUrl":5007,"ogSiteName":895,"ogType":896,"canonicalUrls":5007,"schema":5008},"Building containers with GitLab Runner & AWS Fargate executor","Build containers with the AWS Fargate Custom Executor for GitLab Runner and AWS CodeBuild","https://about.gitlab.com/blog/aws-fargate-codebuild-build-containers-gitlab-runner","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to build containers with the AWS Fargate Custom Executor for GitLab Runner and AWS CodeBuild\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Elliot Rushton\"}],\n        \"datePublished\": \"2020-07-31\",\n      }",{"title":5010,"description":5006,"authors":5011,"heroImage":4912,"date":5013,"category":14,"tags":5014},"How to build containers with the AWS Fargate Custom Executor for GitLab Runner and AWS CodeBuild",[5012],"Elliot Rushton","2020-07-31",[110,233,728],{"slug":5016,"featured":6,"template":730},"aws-fargate-codebuild-build-containers-gitlab-runner","content:en-us:blog:aws-fargate-codebuild-build-containers-gitlab-runner.yml","Aws Fargate Codebuild Build Containers Gitlab Runner","en-us/blog/aws-fargate-codebuild-build-containers-gitlab-runner.yml","en-us/blog/aws-fargate-codebuild-build-containers-gitlab-runner",{"_path":5022,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":5023,"content":5029,"config":5032,"_id":5034,"_type":16,"title":5035,"_source":17,"_file":5036,"_stem":5037,"_extension":20},"/en-us/blog/use-gitlab-with-vscode",{"title":5024,"description":5025,"ogTitle":5024,"ogDescription":5025,"noIndex":6,"ogImage":5026,"ogUrl":5027,"ogSiteName":895,"ogType":896,"canonicalUrls":5027,"schema":5028},"How we created a GitLab Workflow Extension for VS Code","Now you can leverage GitLab from within Visual Studio Code with our official GitLab Workflow Extension.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749681469/Blog/Hero%20Images/gitlab-vscode-blog-image2.jpg","https://about.gitlab.com/blog/use-gitlab-with-vscode","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How we created a GitLab Workflow Extension for VS Code\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Roman Kuba\"}],\n        \"datePublished\": \"2020-07-31\",\n      }",{"title":5024,"description":5025,"authors":5030,"heroImage":5026,"date":5013,"category":14,"tags":5031},[4358],[773,1099],{"slug":5033,"featured":6,"template":730},"use-gitlab-with-vscode","content:en-us:blog:use-gitlab-with-vscode.yml","Use Gitlab With Vscode","en-us/blog/use-gitlab-with-vscode.yml","en-us/blog/use-gitlab-with-vscode",{"_path":5039,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":5040,"content":5046,"config":5050,"_id":5052,"_type":16,"title":5053,"_source":17,"_file":5054,"_stem":5055,"_extension":20},"/en-us/blog/effective-ci-cd-pipelines",{"title":5041,"description":5042,"ogTitle":5041,"ogDescription":5042,"noIndex":6,"ogImage":5043,"ogUrl":5044,"ogSiteName":895,"ogType":896,"canonicalUrls":5044,"schema":5045},"Want a more effective CI/CD pipeline? Try our pro tips","Here’s how to take your CI/CD pipeline to the next level with hands on advice about faster builds, better security and more.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749681447/Blog/Hero%20Images/cicdpipelines.jpg","https://about.gitlab.com/blog/effective-ci-cd-pipelines","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Want a more effective CI/CD pipeline? Try our pro tips\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Valerie Silverthorne\"}],\n        \"datePublished\": \"2020-07-29\",\n      }",{"title":5041,"description":5042,"authors":5047,"heroImage":5043,"date":5048,"category":14,"tags":5049},[2267],"2020-07-29",[110,564,233],{"slug":5051,"featured":6,"template":730},"effective-ci-cd-pipelines","content:en-us:blog:effective-ci-cd-pipelines.yml","Effective Ci Cd Pipelines","en-us/blog/effective-ci-cd-pipelines.yml","en-us/blog/effective-ci-cd-pipelines",{"_path":5057,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":5058,"content":5064,"config":5068,"_id":5070,"_type":16,"title":5071,"_source":17,"_file":5072,"_stem":5073,"_extension":20},"/en-us/blog/safe-deploys",{"title":5059,"description":5060,"ogTitle":5059,"ogDescription":5060,"noIndex":6,"ogImage":5061,"ogUrl":5062,"ogSiteName":895,"ogType":896,"canonicalUrls":5062,"schema":5063},"GitLab's guide to safe deployment practices","It's important to safeguard your deployment process. Here's our best advice to protect your environments.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749678412/Blog/Hero%20Images/safe_deploy.jpg","https://about.gitlab.com/blog/safe-deploys","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"GitLab's guide to safe deployment practices\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Orit Golowinski\"}],\n        \"datePublished\": \"2020-07-23\",\n      }",{"title":5059,"description":5060,"authors":5065,"heroImage":5061,"date":5066,"category":14,"tags":5067},[4619],"2020-07-23",[110,2438,751],{"slug":5069,"featured":6,"template":730},"safe-deploys","content:en-us:blog:safe-deploys.yml","Safe Deploys","en-us/blog/safe-deploys.yml","en-us/blog/safe-deploys",{"_path":5075,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":5076,"content":5082,"config":5086,"_id":5088,"_type":16,"title":5089,"_source":17,"_file":5090,"_stem":5091,"_extension":20},"/en-us/blog/integrating-azure-devops-scm-and-gitlab",{"title":5077,"description":5078,"ogTitle":5077,"ogDescription":5078,"noIndex":6,"ogImage":5079,"ogUrl":5080,"ogSiteName":895,"ogType":896,"canonicalUrls":5080,"schema":5081},"How to integrate Azure DevOps repositories with GitLab","How to keep your code in an Azure DevOps repository and run CI/CD with GitLab pipelines.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749664363/Blog/Hero%20Images/aleksey-kuprikov.jpg","https://about.gitlab.com/blog/integrating-azure-devops-scm-and-gitlab","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to integrate Azure DevOps repositories with GitLab\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Itzik Gan Baruch\"}],\n        \"datePublished\": \"2020-07-09\",\n      }",{"title":5077,"description":5078,"authors":5083,"heroImage":5079,"date":5084,"category":14,"tags":5085},[1197],"2020-07-09",[110,1790,728],{"slug":5087,"featured":6,"template":730},"integrating-azure-devops-scm-and-gitlab","content:en-us:blog:integrating-azure-devops-scm-and-gitlab.yml","Integrating Azure Devops Scm And Gitlab","en-us/blog/integrating-azure-devops-scm-and-gitlab.yml","en-us/blog/integrating-azure-devops-scm-and-gitlab",{"_path":5093,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":5094,"content":5100,"config":5105,"_id":5107,"_type":16,"title":5108,"_source":17,"_file":5109,"_stem":5110,"_extension":20},"/en-us/blog/migrating-to-puma-on-gitlab",{"title":5095,"description":5096,"ogTitle":5095,"ogDescription":5096,"noIndex":6,"ogImage":5097,"ogUrl":5098,"ogSiteName":895,"ogType":896,"canonicalUrls":5098,"schema":5099},"How we migrated application servers from Unicorn to Puma","It's been a long journey but with the release of GitLab 13.0 Puma is our default application server. Here's what we did and learned along the way.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749681413/Blog/Hero%20Images/appserverpuma.jpg","https://about.gitlab.com/blog/migrating-to-puma-on-gitlab","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How we migrated application servers from Unicorn to Puma\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Craig Gomes\"}],\n        \"datePublished\": \"2020-07-08\",\n      }",{"title":5095,"description":5096,"authors":5101,"heroImage":5097,"date":5103,"category":14,"tags":5104},[5102],"Craig Gomes","2020-07-08",[1099,750,904],{"slug":5106,"featured":6,"template":730},"migrating-to-puma-on-gitlab","content:en-us:blog:migrating-to-puma-on-gitlab.yml","Migrating To Puma On Gitlab","en-us/blog/migrating-to-puma-on-gitlab.yml","en-us/blog/migrating-to-puma-on-gitlab",{"_path":5112,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":5113,"content":5119,"config":5123,"_id":5125,"_type":16,"title":5126,"_source":17,"_file":5127,"_stem":5128,"_extension":20},"/en-us/blog/secure-stage-for-appsec",{"title":5114,"description":5115,"ogTitle":5114,"ogDescription":5115,"noIndex":6,"ogImage":5116,"ogUrl":5117,"ogSiteName":895,"ogType":896,"canonicalUrls":5117,"schema":5118},"How GitLab's application security dashboard helps AppSec engineers","GitLab Security features help application security engineers collaborate more efficiently and better assess the security posture of the projects they oversee.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749663482/Blog/Hero%20Images/ralph-kayden-4Cg5T03B_8s-unsplash.jpg","https://about.gitlab.com/blog/secure-stage-for-appsec","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How GitLab's application security dashboard helps AppSec engineers\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Fernando Diaz\"}],\n        \"datePublished\": \"2020-07-07\",\n      }",{"title":5114,"description":5115,"authors":5120,"heroImage":5116,"date":5121,"category":14,"tags":5122},[807],"2020-07-07",[751,564,924,1790],{"slug":5124,"featured":6,"template":730},"secure-stage-for-appsec","content:en-us:blog:secure-stage-for-appsec.yml","Secure Stage For Appsec","en-us/blog/secure-stage-for-appsec.yml","en-us/blog/secure-stage-for-appsec",{"_path":5130,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":5131,"content":5137,"config":5141,"_id":5143,"_type":16,"title":5144,"_source":17,"_file":5145,"_stem":5146,"_extension":20},"/en-us/blog/beginner-guide-ci-cd",{"title":5132,"description":5133,"ogTitle":5132,"ogDescription":5133,"noIndex":6,"ogImage":5134,"ogUrl":5135,"ogSiteName":895,"ogType":896,"canonicalUrls":5135,"schema":5136},"GitLab’s guide to CI/CD for beginners","CI/CD is a key part of the DevOps journey. Here’s everything you need to understand about this game-changing process.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749681391/Blog/Hero%20Images/beginnercicd.jpg","https://about.gitlab.com/blog/beginner-guide-ci-cd","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"GitLab’s guide to CI/CD for beginners\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Valerie Silverthorne\"}],\n        \"datePublished\": \"2020-07-06\",\n      }",{"title":5132,"description":5133,"authors":5138,"heroImage":5134,"date":5139,"category":14,"tags":5140},[2267],"2020-07-06",[110,564,1180],{"slug":5142,"featured":6,"template":730},"beginner-guide-ci-cd","content:en-us:blog:beginner-guide-ci-cd.yml","Beginner Guide Ci Cd","en-us/blog/beginner-guide-ci-cd.yml","en-us/blog/beginner-guide-ci-cd",{"_path":5148,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":5149,"content":5154,"config":5159,"_id":5161,"_type":16,"title":5162,"_source":17,"_file":5163,"_stem":5164,"_extension":20},"/en-us/blog/scaling-our-use-of-sidekiq",{"title":5150,"description":5151,"ogTitle":5150,"ogDescription":5151,"noIndex":6,"ogImage":3507,"ogUrl":5152,"ogSiteName":895,"ogType":896,"canonicalUrls":5152,"schema":5153},"How we scaled async workload processing at GitLab.com using Sidekiq","Sidekiq was a great tool for async processing until it couldn't keep up. Here's how we made it scale.","https://about.gitlab.com/blog/scaling-our-use-of-sidekiq","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How we scaled async workload processing at GitLab.com using Sidekiq\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Rachel Nienaber\"}],\n        \"datePublished\": \"2020-06-24\",\n      }",{"title":5150,"description":5151,"authors":5155,"heroImage":3507,"date":5157,"category":14,"tags":5158},[5156],"Rachel Nienaber","2020-06-24",[1099,904,924],{"slug":5160,"featured":6,"template":730},"scaling-our-use-of-sidekiq","content:en-us:blog:scaling-our-use-of-sidekiq.yml","Scaling Our Use Of Sidekiq","en-us/blog/scaling-our-use-of-sidekiq.yml","en-us/blog/scaling-our-use-of-sidekiq",{"_path":5166,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":5167,"content":5173,"config":5177,"_id":5179,"_type":16,"title":5180,"_source":17,"_file":5181,"_stem":5182,"_extension":20},"/en-us/blog/best-practices-for-kubernetes-runners",{"title":5168,"description":5169,"ogTitle":5168,"ogDescription":5169,"noIndex":6,"ogImage":5170,"ogUrl":5171,"ogSiteName":895,"ogType":896,"canonicalUrls":5171,"schema":5172},"Best practices to keep your Kubernetes runners moving","In a presentation at GitLab Commit San Francisco, a senior software engineer from F5 Networks shares some best practices for working with Kubernetes runners.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749681341/Blog/Hero%20Images/trackandfield.jpg","https://about.gitlab.com/blog/best-practices-for-kubernetes-runners","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Best practices to keep your Kubernetes runners moving\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Sara Kassabian\"}],\n        \"datePublished\": \"2020-05-27\",\n      }",{"title":5168,"description":5169,"authors":5174,"heroImage":5170,"date":5175,"category":14,"tags":5176},[3713],"2020-05-27",[1180,110,4437],{"slug":5178,"featured":6,"template":730},"best-practices-for-kubernetes-runners","content:en-us:blog:best-practices-for-kubernetes-runners.yml","Best Practices For Kubernetes Runners","en-us/blog/best-practices-for-kubernetes-runners.yml","en-us/blog/best-practices-for-kubernetes-runners",{"_path":5184,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":5185,"content":5191,"config":5196,"_id":5198,"_type":16,"title":5199,"_source":17,"_file":5200,"_stem":5201,"_extension":20},"/en-us/blog/creating-a-dark-ui-for-gitlabs-web-ide",{"title":5186,"description":5187,"ogTitle":5186,"ogDescription":5187,"noIndex":6,"ogImage":5188,"ogUrl":5189,"ogSiteName":895,"ogType":896,"canonicalUrls":5189,"schema":5190},"How we created a dark UI for GitLab's Web IDE","The Web IDE now has a Dark Mode, and we've put together a few learnings from a design perspective.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749669611/Blog/Hero%20Images/ide-dark-post-banner.png","https://about.gitlab.com/blog/creating-a-dark-ui-for-gitlabs-web-ide","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How we created a dark UI for GitLab's Web IDE\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Marcel van Remmerden\"},{\"@type\":\"Person\",\"name\":\"Jeremy Elder\"}],\n        \"datePublished\": \"2020-05-20\",\n      }",{"title":5186,"description":5187,"authors":5192,"heroImage":5188,"date":5193,"category":14,"tags":5194},[3456,3457],"2020-05-20",[5195,1316,1141,924],"webcast",{"slug":5197,"featured":6,"template":730},"creating-a-dark-ui-for-gitlabs-web-ide","content:en-us:blog:creating-a-dark-ui-for-gitlabs-web-ide.yml","Creating A Dark Ui For Gitlabs Web Ide","en-us/blog/creating-a-dark-ui-for-gitlabs-web-ide.yml","en-us/blog/creating-a-dark-ui-for-gitlabs-web-ide",{"_path":5203,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":5204,"content":5209,"config":5213,"_id":5215,"_type":16,"title":5216,"_source":17,"_file":5217,"_stem":5218,"_extension":20},"/en-us/blog/how-we-release-software-patches",{"title":5205,"description":5206,"ogTitle":5205,"ogDescription":5206,"noIndex":6,"ogImage":4261,"ogUrl":5207,"ogSiteName":895,"ogType":896,"canonicalUrls":5207,"schema":5208},"Inside GitLab: How we release software patches","At GitLab, we tackle software patches in two ways – hands on and automatically. Learn how the release manager works to create and deliver essential fixes with auto-deploy releases on GitLab.com and patch releases for self-managed users.","https://about.gitlab.com/blog/how-we-release-software-patches","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Inside GitLab: How we release software patches\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Sara Kassabian\"}],\n        \"datePublished\": \"2020-05-13\",\n      }",{"title":5205,"description":5206,"authors":5210,"heroImage":4261,"date":5211,"category":14,"tags":5212},[3713],"2020-05-13",[1099],{"slug":5214,"featured":6,"template":730},"how-we-release-software-patches","content:en-us:blog:how-we-release-software-patches.yml","How We Release Software Patches","en-us/blog/how-we-release-software-patches.yml","en-us/blog/how-we-release-software-patches",{"_path":5220,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":5221,"content":5227,"config":5231,"_id":5233,"_type":16,"title":5234,"_source":17,"_file":5235,"_stem":5236,"_extension":20},"/en-us/blog/directed-acyclic-graph",{"title":5222,"description":5223,"ogTitle":5222,"ogDescription":5223,"noIndex":6,"ogImage":5224,"ogUrl":5225,"ogSiteName":895,"ogType":896,"canonicalUrls":5225,"schema":5226},"Get faster and more flexible pipelines with a Directed Acyclic Graph","A Directed Acyclic Graph will let you run pipeline steps out of order, break the stage sequencing, and allow jobs to relate to each other directly.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749681298/Blog/Hero%20Images/james-eades-bfwhP9xodvE-unsplash.jpg","https://about.gitlab.com/blog/directed-acyclic-graph","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Get faster and more flexible pipelines with a Directed Acyclic Graph\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Itzik Gan Baruch\"}],\n        \"datePublished\": \"2020-05-12\",\n      }",{"title":5222,"description":5223,"authors":5228,"heroImage":5224,"date":5229,"category":14,"tags":5230},[1197],"2020-05-12",[110,1790],{"slug":5232,"featured":6,"template":730},"directed-acyclic-graph","content:en-us:blog:directed-acyclic-graph.yml","Directed Acyclic Graph","en-us/blog/directed-acyclic-graph.yml","en-us/blog/directed-acyclic-graph",{"_path":5238,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":5239,"content":5245,"config":5249,"_id":5251,"_type":16,"title":5252,"_source":17,"_file":5253,"_stem":5254,"_extension":20},"/en-us/blog/introducing-autoscaling-gitlab-runners-on-aws-fargate",{"title":5240,"description":5241,"ogTitle":5240,"ogDescription":5241,"noIndex":6,"ogImage":5242,"ogUrl":5243,"ogSiteName":895,"ogType":896,"canonicalUrls":5243,"schema":5244},"How autoscaling GitLab CI works on AWS Fargate","Run your CI jobs as AWS Fargate tasks with GitLab Runner and the Fargate Driver","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749681285/Blog/Hero%20Images/runner-autoscale-fargate-blog-cover.jpg","https://about.gitlab.com/blog/introducing-autoscaling-gitlab-runners-on-aws-fargate","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How autoscaling GitLab CI works on AWS Fargate\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Darren Eastman\"}],\n        \"datePublished\": \"2020-05-11\",\n      }",{"title":5240,"description":5241,"authors":5246,"heroImage":5242,"date":5247,"category":14,"tags":5248},[1694],"2020-05-11",[110,750,904],{"slug":5250,"featured":6,"template":730},"introducing-autoscaling-gitlab-runners-on-aws-fargate","content:en-us:blog:introducing-autoscaling-gitlab-runners-on-aws-fargate.yml","Introducing Autoscaling Gitlab Runners On Aws Fargate","en-us/blog/introducing-autoscaling-gitlab-runners-on-aws-fargate.yml","en-us/blog/introducing-autoscaling-gitlab-runners-on-aws-fargate",{"_path":5256,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":5257,"content":5263,"config":5267,"_id":5269,"_type":16,"title":5270,"_source":17,"_file":5271,"_stem":5272,"_extension":20},"/en-us/blog/observations-on-how-to-iterate-faster",{"title":5258,"description":5259,"ogTitle":5258,"ogDescription":5259,"noIndex":6,"ogImage":5260,"ogUrl":5261,"ogSiteName":895,"ogType":896,"canonicalUrls":5261,"schema":5262},"Why iteration helps increase the merge request rate","How the Monitor:Health team has been able to increase the merge request rate using better iteration, a bias for action, and by writing things down.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749666603/Blog/Hero%20Images/book.jpg","https://about.gitlab.com/blog/observations-on-how-to-iterate-faster","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Why iteration helps increase the merge request rate\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"David O'Regan\"}],\n        \"datePublished\": \"2020-05-06\",\n      }",{"title":5258,"description":5259,"authors":5264,"heroImage":5260,"date":5265,"category":14,"tags":5266},[1597],"2020-05-06",[1099,564],{"slug":5268,"featured":6,"template":730},"observations-on-how-to-iterate-faster","content:en-us:blog:observations-on-how-to-iterate-faster.yml","Observations On How To Iterate Faster","en-us/blog/observations-on-how-to-iterate-faster.yml","en-us/blog/observations-on-how-to-iterate-faster",{"_path":5274,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":5275,"content":5281,"config":5286,"_id":5288,"_type":16,"title":5289,"_source":17,"_file":5290,"_stem":5291,"_extension":20},"/en-us/blog/deploying-application-eks",{"title":5276,"description":5277,"ogTitle":5276,"ogDescription":5277,"noIndex":6,"ogImage":5278,"ogUrl":5279,"ogSiteName":895,"ogType":896,"canonicalUrls":5279,"schema":5280},"Deploying apps to GitLab-managed Amazon EKS with Auto DevOps","A Kubernetes tutorial: Use GitLab AutoDevOps to deploy your applications to Amazon EKS.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749666959/Blog/Hero%20Images/gitlab-aws-cover.png","https://about.gitlab.com/blog/deploying-application-eks","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to deploy your application to a GitLab-managed Amazon EKS cluster with Auto DevOps\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Abubakar Siddiq Ango\"}],\n        \"datePublished\": \"2020-05-05\",\n      }",{"title":5282,"description":5277,"authors":5283,"heroImage":5278,"date":5284,"category":14,"tags":5285},"How to deploy your application to a GitLab-managed Amazon EKS cluster with Auto DevOps",[1333],"2020-05-05",[1180,750,3007,728],{"slug":5287,"featured":6,"template":730},"deploying-application-eks","content:en-us:blog:deploying-application-eks.yml","Deploying Application Eks","en-us/blog/deploying-application-eks.yml","en-us/blog/deploying-application-eks",{"_path":5293,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":5294,"content":5300,"config":5305,"_id":5307,"_type":16,"title":5308,"_source":17,"_file":5309,"_stem":5310,"_extension":20},"/en-us/blog/how-we-built-status-page-mvc",{"title":5295,"description":5296,"ogTitle":5295,"ogDescription":5296,"noIndex":6,"ogImage":5297,"ogUrl":5298,"ogSiteName":895,"ogType":896,"canonicalUrls":5298,"schema":5299},"How we built Status Page","Get the scoop on the process behind engineering and troubleshooting the implementation of the Status Page","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749681270/Blog/Hero%20Images/red-green-chilli.jpg","https://about.gitlab.com/blog/how-we-built-status-page-mvc","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How we built Status Page\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Olena Horal-Koretska\"}],\n        \"datePublished\": \"2020-04-29\",\n      }",{"title":5295,"description":5296,"authors":5301,"heroImage":5297,"date":5303,"category":14,"tags":5304},[5302],"Olena Horal-Koretska","2020-04-29",[564],{"slug":5306,"featured":6,"template":730},"how-we-built-status-page-mvc","content:en-us:blog:how-we-built-status-page-mvc.yml","How We Built Status Page Mvc","en-us/blog/how-we-built-status-page-mvc.yml","en-us/blog/how-we-built-status-page-mvc",{"_path":5312,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":5313,"content":5319,"config":5324,"_id":5326,"_type":16,"title":5327,"_source":17,"_file":5328,"_stem":5329,"_extension":20},"/en-us/blog/parent-child-pipelines",{"title":5314,"description":5315,"ogTitle":5314,"ogDescription":5315,"noIndex":6,"ogImage":5316,"ogUrl":5317,"ogSiteName":895,"ogType":896,"canonicalUrls":5317,"schema":5318},"How to get started with Parent-child pipelines","We introduced improvements to pipelines to help scale applications and their repo structures more effectively. Here's how they work.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749667040/Blog/Hero%20Images/parent_pipeline_graph.png","https://about.gitlab.com/blog/parent-child-pipelines","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to get started with Parent-child pipelines\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Chris Ward\"}],\n        \"datePublished\": \"2020-04-24\",\n      }",{"title":5314,"description":5315,"authors":5320,"heroImage":5316,"date":5322,"category":14,"tags":5323},[5321],"Chris Ward","2020-04-24",[110,750,1099,728],{"slug":5325,"featured":6,"template":730},"parent-child-pipelines","content:en-us:blog:parent-child-pipelines.yml","Parent Child Pipelines","en-us/blog/parent-child-pipelines.yml","en-us/blog/parent-child-pipelines",{"_path":5331,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":5332,"content":5338,"config":5342,"_id":5344,"_type":16,"title":5345,"_source":17,"_file":5346,"_stem":5347,"_extension":20},"/en-us/blog/why-gitops-should-be-workflow-of-choice",{"title":5333,"description":5334,"ogTitle":5333,"ogDescription":5334,"noIndex":6,"ogImage":5335,"ogUrl":5336,"ogSiteName":895,"ogType":896,"canonicalUrls":5336,"schema":5337},"Why GitOps should be the workflow of choice","What is GitOps and how do you apply it in real-world applications?","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749681239/Blog/Hero%20Images/shiro-hatori-WR-ifjFy4CI-unsplash.jpg","https://about.gitlab.com/blog/why-gitops-should-be-workflow-of-choice","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Why GitOps should be the workflow of choice\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Brendan O'Leary\"}],\n        \"datePublished\": \"2020-04-17\",\n      }",{"title":5333,"description":5334,"authors":5339,"heroImage":5335,"date":5340,"category":14,"tags":5341},[2654],"2020-04-17",[110,582,233],{"slug":5343,"featured":6,"template":730},"why-gitops-should-be-workflow-of-choice","content:en-us:blog:why-gitops-should-be-workflow-of-choice.yml","Why Gitops Should Be Workflow Of Choice","en-us/blog/why-gitops-should-be-workflow-of-choice.yml","en-us/blog/why-gitops-should-be-workflow-of-choice",{"_path":5349,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":5350,"content":5356,"config":5362,"_id":5364,"_type":16,"title":5365,"_source":17,"_file":5366,"_stem":5367,"_extension":20},"/en-us/blog/geo-is-available-on-staging-for-gitlab-com",{"title":5351,"description":5352,"ogTitle":5351,"ogDescription":5352,"noIndex":6,"ogImage":5353,"ogUrl":5354,"ogSiteName":895,"ogType":896,"canonicalUrls":5354,"schema":5355},"Why we enabled Geo on the staging environment for GitLab.com","Geo is GitLab's solution for distributed teams and now we can validate and test it at scale.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749669656/Blog/Hero%20Images/donald-giannatti-4qk3nQI3WHY-unsplash-small.jpg","https://about.gitlab.com/blog/geo-is-available-on-staging-for-gitlab-com","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Why we enabled Geo on the staging environment for GitLab.com\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Fabian Zimmer\"},{\"@type\":\"Person\",\"name\":\"Douglas Alexandre\"}],\n        \"datePublished\": \"2020-04-16\",\n      }",{"title":5351,"description":5352,"authors":5357,"heroImage":5353,"date":5360,"category":14,"tags":5361},[5358,5359],"Fabian Zimmer","Douglas Alexandre","2020-04-16",[750,1099,925],{"slug":5363,"featured":6,"template":730},"geo-is-available-on-staging-for-gitlab-com","content:en-us:blog:geo-is-available-on-staging-for-gitlab-com.yml","Geo Is Available On Staging For Gitlab Com","en-us/blog/geo-is-available-on-staging-for-gitlab-com.yml","en-us/blog/geo-is-available-on-staging-for-gitlab-com",{"_path":5369,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":5370,"content":5375,"config":5379,"_id":5381,"_type":16,"title":5382,"_source":17,"_file":5383,"_stem":5384,"_extension":20},"/en-us/blog/conan-c-cpp-package-management-integration",{"title":5371,"description":5372,"ogTitle":5371,"ogDescription":5372,"noIndex":6,"ogImage":4837,"ogUrl":5373,"ogSiteName":895,"ogType":896,"canonicalUrls":5373,"schema":5374},"Modern C and C++: How Conan integration works in GitLab","Conan is a leading C and C++ package manager and it is now available in GitLab. Store and share packages easily with your teams or publicly.","https://about.gitlab.com/blog/conan-c-cpp-package-management-integration","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Modern C and C++: How Conan integration works in GitLab\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Jordi Mon\"}],\n        \"datePublished\": \"2020-03-31\",\n      }",{"title":5371,"description":5372,"authors":5376,"heroImage":4837,"date":5377,"category":14,"tags":5378},[4898],"2020-03-31",[750,233,809,924],{"slug":5380,"featured":6,"template":730},"conan-c-cpp-package-management-integration","content:en-us:blog:conan-c-cpp-package-management-integration.yml","Conan C Cpp Package Management Integration","en-us/blog/conan-c-cpp-package-management-integration.yml","en-us/blog/conan-c-cpp-package-management-integration",{"_path":5386,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":5387,"content":5393,"config":5397,"_id":5399,"_type":16,"title":5400,"_source":17,"_file":5401,"_stem":5402,"_extension":20},"/en-us/blog/gitlab-ci-on-google-kubernetes-engine",{"title":5388,"description":5389,"ogTitle":5388,"ogDescription":5389,"noIndex":6,"ogImage":5390,"ogUrl":5391,"ogSiteName":895,"ogType":896,"canonicalUrls":5391,"schema":5392},"GitLab CI/CD on Google Kubernetes Engine in 15 minutes or less","Install GitLab's Runner on GKE in a few simple steps and get started with GitLab CI/CD pipelines.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749667003/Blog/Hero%20Images/gke_in_15_cover_2.jpg","https://about.gitlab.com/blog/gitlab-ci-on-google-kubernetes-engine","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"GitLab CI/CD on Google Kubernetes Engine in 15 minutes or less\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Elliot Rushton\"}],\n        \"datePublished\": \"2020-03-27\",\n      }",{"title":5388,"description":5389,"authors":5394,"heroImage":5390,"date":5395,"category":14,"tags":5396},[5012],"2020-03-27",[233,1180,582,110,1373,925],{"slug":5398,"featured":6,"template":730},"gitlab-ci-on-google-kubernetes-engine","content:en-us:blog:gitlab-ci-on-google-kubernetes-engine.yml","Gitlab Ci On Google Kubernetes Engine","en-us/blog/gitlab-ci-on-google-kubernetes-engine.yml","en-us/blog/gitlab-ci-on-google-kubernetes-engine",{"_path":5404,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":5405,"content":5411,"config":5416,"_id":5418,"_type":16,"title":5419,"_source":17,"_file":5420,"_stem":5421,"_extension":20},"/en-us/blog/the-trouble-with-technical-interviews",{"title":5406,"description":5407,"ogTitle":5406,"ogDescription":5407,"noIndex":6,"ogImage":5408,"ogUrl":5409,"ogSiteName":895,"ogType":896,"canonicalUrls":5409,"schema":5410},"The main problem with technical interviews","Forget the coding exercise. Here's how to create realistic scenarios for engineering candidates in technical interviews.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749681148/Blog/Hero%20Images/nycbrooklyn.jpg","https://about.gitlab.com/blog/the-trouble-with-technical-interviews","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"The trouble with technical interviews? They aren't like the job you're interviewing for\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Sara Kassabian\"}],\n        \"datePublished\": \"2020-03-19\",\n      }",{"title":5412,"description":5407,"authors":5413,"heroImage":5408,"date":5414,"category":14,"tags":5415},"The trouble with technical interviews? They aren't like the job you're interviewing for",[3713],"2020-03-19",[2105,1099],{"slug":5417,"featured":6,"template":730},"the-trouble-with-technical-interviews","content:en-us:blog:the-trouble-with-technical-interviews.yml","The Trouble With Technical Interviews","en-us/blog/the-trouble-with-technical-interviews.yml","en-us/blog/the-trouble-with-technical-interviews",{"_path":5423,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":5424,"content":5429,"config":5433,"_id":5435,"_type":16,"title":5436,"_source":17,"_file":5437,"_stem":5438,"_extension":20},"/en-us/blog/gitlab-ci-cd-with-firebase",{"title":5425,"description":5426,"ogTitle":5425,"ogDescription":5426,"noIndex":6,"ogImage":4837,"ogUrl":5427,"ogSiteName":895,"ogType":896,"canonicalUrls":5427,"schema":5428},"How to leverage GitLab CI/CD for Google Firebase","Firebase is a powerful backend-as-a-service tool and when combined with GitLab it can be easy to enable continuous deployment of database, serverless and apps.","https://about.gitlab.com/blog/gitlab-ci-cd-with-firebase","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to leverage GitLab CI/CD for Google Firebase\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Brendan O'Leary\"}],\n        \"datePublished\": \"2020-03-16\",\n      }",{"title":5425,"description":5426,"authors":5430,"heroImage":4837,"date":5431,"category":14,"tags":5432},[2654],"2020-03-16",[110,582,233],{"slug":5434,"featured":6,"template":730},"gitlab-ci-cd-with-firebase","content:en-us:blog:gitlab-ci-cd-with-firebase.yml","Gitlab Ci Cd With Firebase","en-us/blog/gitlab-ci-cd-with-firebase.yml","en-us/blog/gitlab-ci-cd-with-firebase",{"_path":5440,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":5441,"content":5446,"config":5450,"_id":5452,"_type":16,"title":5453,"_source":17,"_file":5454,"_stem":5455,"_extension":20},"/en-us/blog/gitlab-eks-integration-how-to",{"title":5442,"description":5443,"ogTitle":5442,"ogDescription":5443,"noIndex":6,"ogImage":5278,"ogUrl":5444,"ogSiteName":895,"ogType":896,"canonicalUrls":5444,"schema":5445},"How to create a Kubernetes cluster on Amazon EKS in GitLab","A Kubernetes tutorial: Create clusters in a few clicks with GitLab and Amazon EKS.","https://about.gitlab.com/blog/gitlab-eks-integration-how-to","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to create a Kubernetes cluster on Amazon EKS in GitLab\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Abubakar Siddiq Ango\"}],\n        \"datePublished\": \"2020-03-09\",\n      }",{"title":5442,"description":5443,"authors":5447,"heroImage":5278,"date":5448,"category":14,"tags":5449},[1333],"2020-03-09",[1180,750,3007],{"slug":5451,"featured":6,"template":730},"gitlab-eks-integration-how-to","content:en-us:blog:gitlab-eks-integration-how-to.yml","Gitlab Eks Integration How To","en-us/blog/gitlab-eks-integration-how-to.yml","en-us/blog/gitlab-eks-integration-how-to",{"_path":5457,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":5458,"content":5464,"config":5468,"_id":5470,"_type":16,"title":5471,"_source":17,"_file":5472,"_stem":5473,"_extension":20},"/en-us/blog/unifylogsmetrics",{"title":5459,"description":5460,"ogTitle":5459,"ogDescription":5460,"noIndex":6,"ogImage":5461,"ogUrl":5462,"ogSiteName":895,"ogType":896,"canonicalUrls":5462,"schema":5463},"How to integrate operation logs and metrics in GitLab","We've added Elasticsearch to our monitoring solution so you can see all your logs and metrics in one view. Here's a first look at this new feature, released in GitLab 12.8.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749666923/Blog/Hero%20Images/logs.png","https://about.gitlab.com/blog/unifylogsmetrics","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to integrate operation logs and metrics in GitLab\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Dov Hershkovitch\"}],\n        \"datePublished\": \"2020-03-03\",\n      }",{"title":5459,"description":5460,"authors":5465,"heroImage":5461,"date":5466,"category":14,"tags":5467},[1198],"2020-03-03",[1180,809,750],{"slug":5469,"featured":6,"template":730},"unifylogsmetrics","content:en-us:blog:unifylogsmetrics.yml","Unifylogsmetrics","en-us/blog/unifylogsmetrics.yml","en-us/blog/unifylogsmetrics",{"_path":5475,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":5476,"content":5482,"config":5487,"_id":5489,"_type":16,"title":5490,"_source":17,"_file":5491,"_stem":5492,"_extension":20},"/en-us/blog/protecting-manual-jobs",{"title":5477,"description":5478,"ogTitle":5477,"ogDescription":5478,"noIndex":6,"ogImage":5479,"ogUrl":5480,"ogSiteName":895,"ogType":896,"canonicalUrls":5480,"schema":5481},"How to limit access to manual pipeline gates and deployments using GitLab","Let's look at how to use protected environments to set up access controls for production deployments and manual gates.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749681105/Blog/Hero%20Images/protect_manual_jobs.jpg","https://about.gitlab.com/blog/protecting-manual-jobs","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to limit access to manual pipeline gates and deployments using GitLab\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Thao Yeager\"}],\n        \"datePublished\": \"2020-02-20\",\n      }",{"title":5477,"description":5478,"authors":5483,"heroImage":5479,"date":5485,"category":14,"tags":5486},[5484],"Thao Yeager","2020-02-20",[110,3007,924,750,564],{"slug":5488,"featured":6,"template":730},"protecting-manual-jobs","content:en-us:blog:protecting-manual-jobs.yml","Protecting Manual Jobs","en-us/blog/protecting-manual-jobs.yml","en-us/blog/protecting-manual-jobs",{"_path":5494,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":5495,"content":5501,"config":5506,"_id":5508,"_type":16,"title":5509,"_source":17,"_file":5510,"_stem":5511,"_extension":20},"/en-us/blog/how-were-building-up-performance-testing-of-gitlab",{"title":5496,"description":5497,"ogTitle":5496,"ogDescription":5497,"noIndex":6,"ogImage":5498,"ogUrl":5499,"ogSiteName":895,"ogType":896,"canonicalUrls":5499,"schema":5500},"How GitLab's QA Team Leverages Performance Testing Tools","We built our open source GitLab Performance tool to evaluate pain points and implement solutions on every GitLab environment.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749681087/Blog/Hero%20Images/performance-server-front.jpg","https://about.gitlab.com/blog/how-were-building-up-performance-testing-of-gitlab","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How our QA team leverages GitLab’s performance testing tool (and you can too)\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Grant Young\"}],\n        \"datePublished\": \"2020-02-18\",\n      }",{"title":5502,"description":5497,"authors":5503,"heroImage":5498,"date":5504,"category":14,"tags":5505},"How our QA team leverages GitLab’s performance testing tool (and you can too)",[1096],"2020-02-18",[904,773],{"slug":5507,"featured":6,"template":730},"how-were-building-up-performance-testing-of-gitlab","content:en-us:blog:how-were-building-up-performance-testing-of-gitlab.yml","How Were Building Up Performance Testing Of Gitlab","en-us/blog/how-were-building-up-performance-testing-of-gitlab.yml","en-us/blog/how-were-building-up-performance-testing-of-gitlab",{"_path":5513,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":5514,"content":5520,"config":5524,"_id":5526,"_type":16,"title":5527,"_source":17,"_file":5528,"_stem":5529,"_extension":20},"/en-us/blog/all-aboard-merge-trains",{"title":5515,"description":5516,"ogTitle":5515,"ogDescription":5516,"noIndex":6,"ogImage":5517,"ogUrl":5518,"ogSiteName":895,"ogType":896,"canonicalUrls":5518,"schema":5519},"How starting merge trains improve efficiency for DevOps","No more queuing and waiting for pipeline results! Read how merge trains will speed up your deployments while making sure master stays green.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749678419/Blog/Hero%20Images/merge_trains.jpg","https://about.gitlab.com/blog/all-aboard-merge-trains","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How starting merge trains improve efficiency for DevOps\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Orit Golowinski\"}],\n        \"datePublished\": \"2020-01-30\",\n      }",{"title":5515,"description":5516,"authors":5521,"heroImage":5517,"date":5522,"category":14,"tags":5523},[4619],"2020-01-30",[110,3007,924,750],{"slug":5525,"featured":6,"template":730},"all-aboard-merge-trains","content:en-us:blog:all-aboard-merge-trains.yml","All Aboard Merge Trains","en-us/blog/all-aboard-merge-trains.yml","en-us/blog/all-aboard-merge-trains",{"_path":5531,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":5532,"content":5538,"config":5542,"_id":5544,"_type":16,"title":5545,"_source":17,"_file":5546,"_stem":5547,"_extension":20},"/en-us/blog/insights",{"title":5533,"description":5534,"ogTitle":5533,"ogDescription":5534,"noIndex":6,"ogImage":5535,"ogUrl":5536,"ogSiteName":895,"ogType":896,"canonicalUrls":5536,"schema":5537},"GitLab: New Tool to Visualize High-Level Project Trends","How our easy to configure Insights technology takes data from issues and merge requests to build visually appealing charts.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749681053/Blog/Hero%20Images/birdseyeview.jpg","https://about.gitlab.com/blog/insights","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"We're dogfooding a tool to help visualize high-level trends in GitLab projects\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Sara Kassabian\"}],\n        \"datePublished\": \"2020-01-30\",\n      }",{"title":5539,"description":5534,"authors":5540,"heroImage":5535,"date":5522,"category":14,"tags":5541},"We're dogfooding a tool to help visualize high-level trends in GitLab projects",[3713],[750,564,1099],{"slug":5543,"featured":6,"template":730},"insights","content:en-us:blog:insights.yml","Insights","en-us/blog/insights.yml","en-us/blog/insights",{"_path":5549,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":5550,"content":5556,"config":5560,"_id":5562,"_type":16,"title":5563,"_source":17,"_file":5564,"_stem":5565,"_extension":20},"/en-us/blog/iteration-on-error-tracking",{"title":5551,"description":5552,"ogTitle":5551,"ogDescription":5552,"noIndex":6,"ogImage":5553,"ogUrl":5554,"ogSiteName":895,"ogType":896,"canonicalUrls":5554,"schema":5555},"Why we scoped down to build up error tracking ","We dig into how shipping small iterations is accelerating delivery on our error tracking product.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749665440/Blog/Hero%20Images/automate-ce-ee-merges.jpg","https://about.gitlab.com/blog/iteration-on-error-tracking","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Why we scoped down to build up error tracking \",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Sara Kassabian\"}],\n        \"datePublished\": \"2020-01-23\",\n      }",{"title":5551,"description":5552,"authors":5557,"heroImage":5553,"date":5558,"category":14,"tags":5559},[3713],"2020-01-23",[564,2105,1451,924],{"slug":5561,"featured":6,"template":730},"iteration-on-error-tracking","content:en-us:blog:iteration-on-error-tracking.yml","Iteration On Error Tracking","en-us/blog/iteration-on-error-tracking.yml","en-us/blog/iteration-on-error-tracking",{"_path":5567,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":5568,"content":5574,"config":5578,"_id":5580,"_type":16,"title":5581,"_source":17,"_file":5582,"_stem":5583,"_extension":20},"/en-us/blog/windows-shared-runner-beta",{"title":5569,"description":5570,"ogTitle":5569,"ogDescription":5570,"noIndex":6,"ogImage":5571,"ogUrl":5572,"ogSiteName":895,"ogType":896,"canonicalUrls":5572,"schema":5573},"Windows Shared Runners beta now available on GitLab.com","Scalable Windows VM's for running Windows build jobs on GitLab.com.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749681027/Blog/Hero%20Images/windows-shared-beta.jpg","https://about.gitlab.com/blog/windows-shared-runner-beta","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Windows Shared Runners beta now available on GitLab.com\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Darren Eastman\"}],\n        \"datePublished\": \"2020-01-21\",\n      }",{"title":5569,"description":5570,"authors":5575,"heroImage":5571,"date":5576,"category":14,"tags":5577},[1694],"2020-01-21",[110],{"slug":5579,"featured":6,"template":730},"windows-shared-runner-beta","content:en-us:blog:windows-shared-runner-beta.yml","Windows Shared Runner Beta","en-us/blog/windows-shared-runner-beta.yml","en-us/blog/windows-shared-runner-beta",{"_path":5585,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":5586,"content":5592,"config":5596,"_id":5598,"_type":16,"title":5599,"_source":17,"_file":5600,"_stem":5601,"_extension":20},"/en-us/blog/gitlab-changes-to-cloudflare",{"title":5587,"description":5588,"ogTitle":5587,"ogDescription":5588,"noIndex":6,"ogImage":5589,"ogUrl":5590,"ogSiteName":895,"ogType":896,"canonicalUrls":5590,"schema":5591},"Why GitLab.com is changing its CDN provider to Cloudflare March 28","Get the scoop on our plan to change GitLab.com to Cloudflare.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749665811/Blog/Hero%20Images/daytime-clouds.jpg","https://about.gitlab.com/blog/gitlab-changes-to-cloudflare","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Why GitLab.com is changing its CDN provider to Cloudflare March 28\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"David Smith\"}],\n        \"datePublished\": \"2020-01-16\",\n      }",{"title":5587,"description":5588,"authors":5593,"heroImage":5589,"date":5594,"category":14,"tags":5595},[2564],"2020-01-16",[904,1451,751],{"slug":5597,"featured":6,"template":730},"gitlab-changes-to-cloudflare","content:en-us:blog:gitlab-changes-to-cloudflare.yml","Gitlab Changes To Cloudflare","en-us/blog/gitlab-changes-to-cloudflare.yml","en-us/blog/gitlab-changes-to-cloudflare",{"_path":5603,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":5604,"content":5609,"config":5614,"_id":5616,"_type":16,"title":5617,"_source":17,"_file":5618,"_stem":5619,"_extension":20},"/en-us/blog/future-merge-requests-realtime-collab",{"title":5605,"description":5606,"ogTitle":5605,"ogDescription":5606,"noIndex":6,"ogImage":2394,"ogUrl":5607,"ogSiteName":895,"ogType":896,"canonicalUrls":5607,"schema":5608},"The future of merge requests: Real-time collaboration","We want to hear your thoughts on the future of merge requests and code review.","https://about.gitlab.com/blog/future-merge-requests-realtime-collab","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"The future of merge requests: Real-time collaboration\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Pedro Moreira da Silva\"}],\n        \"datePublished\": \"2019-12-19\",\n      }",{"title":5605,"description":5606,"authors":5610,"heroImage":2394,"date":5612,"category":14,"tags":5613},[5611],"Pedro Moreira da Silva","2019-12-19",[1259,1507,1316],{"slug":5615,"featured":6,"template":730},"future-merge-requests-realtime-collab","content:en-us:blog:future-merge-requests-realtime-collab.yml","Future Merge Requests Realtime Collab","en-us/blog/future-merge-requests-realtime-collab.yml","en-us/blog/future-merge-requests-realtime-collab",{"_path":5621,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":5622,"content":5628,"config":5632,"_id":5634,"_type":16,"title":5635,"_source":17,"_file":5636,"_stem":5637,"_extension":20},"/en-us/blog/gl-for-pm-prt-2",{"title":5623,"description":5624,"ogTitle":5623,"ogDescription":5624,"noIndex":6,"ogImage":5625,"ogUrl":5626,"ogSiteName":895,"ogType":896,"canonicalUrls":5626,"schema":5627},"2 Examples of how marketing uses GitLab to manage complex projects","How GitLab technology powers integrated marketing campaigns and product marketing projects.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749680908/Blog/Hero%20Images/stickynotes.jpg","https://about.gitlab.com/blog/gl-for-pm-prt-2","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"2 Examples of how marketing uses GitLab to manage complex projects\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Sara Kassabian\"}],\n        \"datePublished\": \"2019-12-11\",\n      }",{"title":5623,"description":5624,"authors":5629,"heroImage":5625,"date":5630,"category":14,"tags":5631},[3713],"2019-12-11",[564,924,1507],{"slug":5633,"featured":6,"template":730},"gl-for-pm-prt-2","content:en-us:blog:gl-for-pm-prt-2.yml","Gl For Pm Prt 2","en-us/blog/gl-for-pm-prt-2.yml","en-us/blog/gl-for-pm-prt-2",{"_path":5639,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":5640,"content":5645,"config":5649,"_id":5651,"_type":16,"title":5652,"_source":17,"_file":5653,"_stem":5654,"_extension":20},"/en-us/blog/gitlab-for-project-management-one",{"title":5641,"description":5642,"ogTitle":5641,"ogDescription":5642,"noIndex":6,"ogImage":5625,"ogUrl":5643,"ogSiteName":895,"ogType":896,"canonicalUrls":5643,"schema":5644},"How our tool fosters collaborative project management","Our marketing team explains how we use GitLab to manage complex projects. Read how GitLab can improve your collaboration on projects.","https://about.gitlab.com/blog/gitlab-for-project-management-one","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How our tool fosters collaborative project management\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Sara Kassabian\"}],\n        \"datePublished\": \"2019-12-06\",\n      }",{"title":5641,"description":5642,"authors":5646,"heroImage":5625,"date":5647,"category":14,"tags":5648},[3713],"2019-12-06",[564,924,1507],{"slug":5650,"featured":6,"template":730},"gitlab-for-project-management-one","content:en-us:blog:gitlab-for-project-management-one.yml","Gitlab For Project Management One","en-us/blog/gitlab-for-project-management-one.yml","en-us/blog/gitlab-for-project-management-one",{"_path":5656,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":5657,"content":5663,"config":5667,"_id":5669,"_type":16,"title":5670,"_source":17,"_file":5671,"_stem":5672,"_extension":20},"/en-us/blog/e-factor-productivity",{"title":5658,"description":5659,"ogTitle":5658,"ogDescription":5659,"noIndex":6,"ogImage":5660,"ogUrl":5661,"ogSiteName":895,"ogType":896,"canonicalUrls":5661,"schema":5662},"Improve your productivity by tracking your time and measuring your E-factor","Sharing my personal experience of how tracking my time while working remotely helped me be more productive.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749673115/Blog/Hero%20Images/e-factor.jpg","https://about.gitlab.com/blog/e-factor-productivity","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Improve your productivity by tracking your time and measuring your E-factor\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Matej Latin\"}],\n        \"datePublished\": \"2019-11-26\",\n      }",{"title":5658,"description":5659,"authors":5664,"heroImage":5660,"date":5665,"category":14,"tags":5666},[4083],"2019-11-26",[1099,1316,1141],{"slug":5668,"featured":6,"template":730},"e-factor-productivity","content:en-us:blog:e-factor-productivity.yml","E Factor Productivity","en-us/blog/e-factor-productivity.yml","en-us/blog/e-factor-productivity",{"_path":5674,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":5675,"content":5680,"config":5685,"_id":5687,"_type":16,"title":5688,"_source":17,"_file":5689,"_stem":5690,"_extension":20},"/en-us/blog/open-sourcing-the-gitter-mobile-apps",{"title":5676,"description":5677,"ogTitle":5676,"ogDescription":5677,"noIndex":6,"ogImage":4353,"ogUrl":5678,"ogSiteName":895,"ogType":896,"canonicalUrls":5678,"schema":5679},"Open-sourcing the Gitter mobile apps","Learn how we open sourced the Android and iOS Gitter apps.","https://about.gitlab.com/blog/open-sourcing-the-gitter-mobile-apps","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Open-sourcing the Gitter mobile apps\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Eric Eastwood\"}],\n        \"datePublished\": \"2019-11-22\",\n      }",{"title":5676,"description":5677,"authors":5681,"heroImage":4353,"date":5683,"category":14,"tags":5684},[5682],"Eric Eastwood","2019-11-22",[809,1507,1600,110],{"slug":5686,"featured":6,"template":730},"open-sourcing-the-gitter-mobile-apps","content:en-us:blog:open-sourcing-the-gitter-mobile-apps.yml","Open Sourcing The Gitter Mobile Apps","en-us/blog/open-sourcing-the-gitter-mobile-apps.yml","en-us/blog/open-sourcing-the-gitter-mobile-apps",{"_path":5692,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":5693,"content":5699,"config":5704,"_id":5706,"_type":16,"title":5707,"_source":17,"_file":5708,"_stem":5709,"_extension":20},"/en-us/blog/tracking-down-missing-tcp-keepalives",{"title":5694,"description":5695,"ogTitle":5694,"ogDescription":5695,"noIndex":6,"ogImage":5696,"ogUrl":5697,"ogSiteName":895,"ogType":896,"canonicalUrls":5697,"schema":5698},"Tracking TCP Keepalives: Lessons in Docker, Golang & GitLab","An in-depth recap of debugging a bug in the Docker client library.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749680874/Blog/Hero%20Images/network.jpg","https://about.gitlab.com/blog/tracking-down-missing-tcp-keepalives","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"What tracking down missing TCP Keepalives taught me about Docker, Golang, and GitLab\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Stan Hu\"}],\n        \"datePublished\": \"2019-11-15\",\n      }",{"title":5700,"description":5695,"authors":5701,"heroImage":5696,"date":5702,"category":14,"tags":5703},"What tracking down missing TCP Keepalives taught me about Docker, Golang, and GitLab",[877],"2019-11-15",[269,792,559,1022,925,1022,965,773,750],{"slug":5705,"featured":6,"template":730},"tracking-down-missing-tcp-keepalives","content:en-us:blog:tracking-down-missing-tcp-keepalives.yml","Tracking Down Missing Tcp Keepalives","en-us/blog/tracking-down-missing-tcp-keepalives.yml","en-us/blog/tracking-down-missing-tcp-keepalives",{"_path":5711,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":5712,"content":5718,"config":5723,"_id":5725,"_type":16,"title":5726,"_source":17,"_file":5727,"_stem":5728,"_extension":20},"/en-us/blog/the-consul-outage-that-never-happened",{"title":5713,"description":5714,"ogTitle":5713,"ogDescription":5714,"noIndex":6,"ogImage":5715,"ogUrl":5716,"ogSiteName":895,"ogType":896,"canonicalUrls":5716,"schema":5717},"The Consul outage that never happened","Sometimes a good plan is the best tool for the job.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749679092/Blog/Hero%20Images/consul-outage-image.jpg","https://about.gitlab.com/blog/the-consul-outage-that-never-happened","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"The Consul outage that never happened\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Devin Sylva\"}],\n        \"datePublished\": \"2019-11-08\",\n      }",{"title":5713,"description":5714,"authors":5719,"heroImage":5715,"date":5721,"category":14,"tags":5722},[5720],"Devin Sylva","2019-11-08",[1451],{"slug":5724,"featured":6,"template":730},"the-consul-outage-that-never-happened","content:en-us:blog:the-consul-outage-that-never-happened.yml","The Consul Outage That Never Happened","en-us/blog/the-consul-outage-that-never-happened.yml","en-us/blog/the-consul-outage-that-never-happened",{"_path":5730,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":5731,"content":5737,"config":5740,"_id":5742,"_type":16,"title":5743,"_source":17,"_file":5744,"_stem":5745,"_extension":20},"/en-us/blog/how-gitlab-pages-made-our-sketch-design-handoffs-easier-and-faster",{"title":5732,"description":5733,"ogTitle":5732,"ogDescription":5733,"noIndex":6,"ogImage":5734,"ogUrl":5735,"ogSiteName":895,"ogType":896,"canonicalUrls":5735,"schema":5736},"How GitLab Pages made our Sketch design handoffs easier and faster","From designer to developer hands, here is our workflow for sharing Sketch design specs using GitLab Pages.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749684206/Blog/Hero%20Images/cover.jpg","https://about.gitlab.com/blog/how-gitlab-pages-made-our-sketch-design-handoffs-easier-and-faster","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How GitLab Pages made our Sketch design handoffs easier and faster\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Pedro Moreira da Silva\"}],\n        \"datePublished\": \"2019-11-07\",\n      }",{"title":5732,"description":5733,"authors":5738,"heroImage":5734,"date":5739,"category":14},[5611],"2019-11-07",{"slug":5741,"featured":6,"template":730},"how-gitlab-pages-made-our-sketch-design-handoffs-easier-and-faster","content:en-us:blog:how-gitlab-pages-made-our-sketch-design-handoffs-easier-and-faster.yml","How Gitlab Pages Made Our Sketch Design Handoffs Easier And Faster","en-us/blog/how-gitlab-pages-made-our-sketch-design-handoffs-easier-and-faster.yml","en-us/blog/how-gitlab-pages-made-our-sketch-design-handoffs-easier-and-faster",{"_path":5747,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":5748,"content":5754,"config":5759,"_id":5761,"_type":16,"title":5762,"_source":17,"_file":5763,"_stem":5764,"_extension":20},"/en-us/blog/adsoul-devops-transition-to-gitlab-ci",{"title":5749,"description":5750,"ogTitle":5749,"ogDescription":5750,"noIndex":6,"ogImage":5751,"ogUrl":5752,"ogSiteName":895,"ogType":896,"canonicalUrls":5752,"schema":5753},"How adSoul transitioned to GitLab CI from Jenkins","adSoul, a marketing automation company, outlines a successful three-phase migration plan for moving to GitLab CI from Jenkins.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749678442/Blog/Hero%20Images/londoncommit.png","https://about.gitlab.com/blog/adsoul-devops-transition-to-gitlab-ci","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How adSoul transitioned to GitLab CI from Jenkins\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Brein Matturro\"}],\n        \"datePublished\": \"2019-11-05\",\n      }",{"title":5749,"description":5750,"authors":5755,"heroImage":5751,"date":5757,"category":14,"tags":5758},[5756],"Brein Matturro","2019-11-05",[110,564,809,904,4438,582],{"slug":5760,"featured":6,"template":730},"adsoul-devops-transition-to-gitlab-ci","content:en-us:blog:adsoul-devops-transition-to-gitlab-ci.yml","Adsoul Devops Transition To Gitlab Ci","en-us/blog/adsoul-devops-transition-to-gitlab-ci.yml","en-us/blog/adsoul-devops-transition-to-gitlab-ci",{"_path":5766,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":5767,"content":5773,"config":5778,"_id":5780,"_type":16,"title":5781,"_source":17,"_file":5782,"_stem":5783,"_extension":20},"/en-us/blog/reviewer-roulette-one-year-on",{"title":5768,"description":5769,"ogTitle":5768,"ogDescription":5769,"noIndex":6,"ogImage":5770,"ogUrl":5771,"ogSiteName":895,"ogType":896,"canonicalUrls":5771,"schema":5772},"Reviewer Roulette: (Just about) one year on","Learn how Reviewer Roulette has evolved at GitLab over the last year.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749672195/Blog/Hero%20Images/play-reviewer-roulette.jpg","https://about.gitlab.com/blog/reviewer-roulette-one-year-on","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Reviewer Roulette: (Just about) one year on\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Nick Thomas\"}],\n        \"datePublished\": \"2019-10-23\",\n      }",{"title":5768,"description":5769,"authors":5774,"heroImage":5770,"date":5776,"category":14,"tags":5777},[5775],"Nick Thomas","2019-10-23",[1259,924,564],{"slug":5779,"featured":6,"template":730},"reviewer-roulette-one-year-on","content:en-us:blog:reviewer-roulette-one-year-on.yml","Reviewer Roulette One Year On","en-us/blog/reviewer-roulette-one-year-on.yml","en-us/blog/reviewer-roulette-one-year-on",{"_path":5785,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":5786,"content":5791,"config":5796,"_id":5798,"_type":16,"title":5799,"_source":17,"_file":5800,"_stem":5801,"_extension":20},"/en-us/blog/database-case-study-store-and-update-namespace-statistics",{"title":5787,"description":5788,"ogTitle":5787,"ogDescription":5788,"noIndex":6,"ogImage":3256,"ogUrl":5789,"ogSiteName":895,"ogType":896,"canonicalUrls":5789,"schema":5790},"Store and update namespace statistics in a performant manner","Explore all the different engineering approaches to store and update the namespace statistics in a performant manner.","https://about.gitlab.com/blog/database-case-study-store-and-update-namespace-statistics","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Store and update namespace statistics in a performant manner\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Mayra Cabrera\"}],\n        \"datePublished\": \"2019-10-14\",\n      }",{"title":5787,"description":5788,"authors":5792,"heroImage":3256,"date":5794,"category":14,"tags":5795},[5793],"Mayra Cabrera","2019-10-14",[1099],{"slug":5797,"featured":6,"template":730},"database-case-study-store-and-update-namespace-statistics","content:en-us:blog:database-case-study-store-and-update-namespace-statistics.yml","Database Case Study Store And Update Namespace Statistics","en-us/blog/database-case-study-store-and-update-namespace-statistics.yml","en-us/blog/database-case-study-store-and-update-namespace-statistics",{"_path":5803,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":5804,"content":5810,"config":5814,"_id":5816,"_type":16,"title":5817,"_source":17,"_file":5818,"_stem":5819,"_extension":20},"/en-us/blog/gitlab-journey-to-cicd",{"title":5805,"description":5806,"ogTitle":5805,"ogDescription":5806,"noIndex":6,"ogImage":5807,"ogUrl":5808,"ogSiteName":895,"ogType":896,"canonicalUrls":5808,"schema":5809},"GitLab's unconventional journey to CI/CD and Kubernetes","How the Delivery team at GitLab used our existing resources to overhaul our system to make way for CI/CD.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749678397/Blog/Hero%20Images/raphael-biscaldi-cicd.jpg","https://about.gitlab.com/blog/gitlab-journey-to-cicd","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"GitLab's unconventional journey to CI/CD and Kubernetes\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Sara Kassabian\"}],\n        \"datePublished\": \"2019-10-03\",\n      }",{"title":5805,"description":5806,"authors":5811,"heroImage":5807,"date":5812,"category":14,"tags":5813},[3713],"2019-10-03",[110,1099],{"slug":5815,"featured":6,"template":730},"gitlab-journey-to-cicd","content:en-us:blog:gitlab-journey-to-cicd.yml","Gitlab Journey To Cicd","en-us/blog/gitlab-journey-to-cicd.yml","en-us/blog/gitlab-journey-to-cicd",{"_path":5821,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":5822,"content":5828,"config":5832,"_id":5834,"_type":16,"title":5835,"_source":17,"_file":5836,"_stem":5837,"_extension":20},"/en-us/blog/why-we-chose-echarts",{"title":5823,"description":5824,"ogTitle":5823,"ogDescription":5824,"noIndex":6,"ogImage":5825,"ogUrl":5826,"ogSiteName":895,"ogType":896,"canonicalUrls":5826,"schema":5827},"Why we chose ECharts for data visualizations","Learn why GitLab switched from D3.js to ECharts as our library of choice for rendering data visualizations.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749666699/Blog/Hero%20Images/banner.jpg","https://about.gitlab.com/blog/why-we-chose-echarts","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Why we chose ECharts for data visualizations\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Clement Ho\"}],\n        \"datePublished\": \"2019-09-30\",\n      }",{"title":5823,"description":5824,"authors":5829,"heroImage":5825,"date":5830,"category":14,"tags":5831},[4936],"2019-09-30",[1099,4304,2105],{"slug":5833,"featured":6,"template":730},"why-we-chose-echarts","content:en-us:blog:why-we-chose-echarts.yml","Why We Chose Echarts","en-us/blog/why-we-chose-echarts.yml","en-us/blog/why-we-chose-echarts",{"_path":5839,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":5840,"content":5846,"config":5850,"_id":5852,"_type":16,"title":5853,"_source":17,"_file":5854,"_stem":5855,"_extension":20},"/en-us/blog/building-a-cicd-pipeline-in-20-mins",{"title":5841,"description":5842,"ogTitle":5841,"ogDescription":5842,"noIndex":6,"ogImage":5843,"ogUrl":5844,"ogSiteName":895,"ogType":896,"canonicalUrls":5844,"schema":5845},"How to build a CI/CD pipeline in 20 minutes or less","Deploying your pipeline to Kubernetes is just a 'git push' away using GitLab's Auto DevOps feature.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749666903/Blog/Hero%20Images/pipeline.jpg","https://about.gitlab.com/blog/building-a-cicd-pipeline-in-20-mins","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to build a CI/CD pipeline in 20 minutes or less\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Sara Kassabian\"}],\n        \"datePublished\": \"2019-09-26\",\n      }",{"title":5841,"description":5842,"authors":5847,"heroImage":5843,"date":5848,"category":14,"tags":5849},[3713],"2019-09-26",[1180,582],{"slug":5851,"featured":6,"template":730},"building-a-cicd-pipeline-in-20-mins","content:en-us:blog:building-a-cicd-pipeline-in-20-mins.yml","Building A Cicd Pipeline In 20 Mins","en-us/blog/building-a-cicd-pipeline-in-20-mins.yml","en-us/blog/building-a-cicd-pipeline-in-20-mins",{"_path":5857,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":5858,"content":5864,"config":5868,"_id":5870,"_type":16,"title":5871,"_source":17,"_file":5872,"_stem":5873,"_extension":20},"/en-us/blog/why-we-created-the-gitlab-memory-team",{"title":5859,"description":5860,"ogTitle":5859,"ogDescription":5860,"noIndex":6,"ogImage":5861,"ogUrl":5862,"ogSiteName":895,"ogType":896,"canonicalUrls":5862,"schema":5863},"Why we created a Memory team at GitLab","GitLab has a memory problem, so we created a specialized team to fix it.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749678549/Blog/Hero%20Images/memory_team_arie-wubben.jpg","https://about.gitlab.com/blog/why-we-created-the-gitlab-memory-team","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Why we created a Memory team at GitLab\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Sara Kassabian\"}],\n        \"datePublished\": \"2019-09-13\",\n      }",{"title":5859,"description":5860,"authors":5865,"heroImage":5861,"date":5866,"category":14,"tags":5867},[3713],"2019-09-13",[1099,904,1451],{"slug":5869,"featured":6,"template":730},"why-we-created-the-gitlab-memory-team","content:en-us:blog:why-we-created-the-gitlab-memory-team.yml","Why We Created The Gitlab Memory Team","en-us/blog/why-we-created-the-gitlab-memory-team.yml","en-us/blog/why-we-created-the-gitlab-memory-team",{"_path":5875,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":5876,"content":5882,"config":5888,"_id":5890,"_type":16,"title":5891,"_source":17,"_file":5892,"_stem":5893,"_extension":20},"/en-us/blog/how-to-avoid-broken-master-with-pipelines-for-merge-requests",{"title":5877,"description":5878,"ogTitle":5877,"ogDescription":5878,"noIndex":6,"ogImage":5879,"ogUrl":5880,"ogSiteName":895,"ogType":896,"canonicalUrls":5880,"schema":5881},"How to prevent broken master with merge trains & pipelines","Do you still run pipelines on source branches? Let's start running them on merge commits!","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749678366/Blog/Hero%20Images/merge-train.jpg","https://about.gitlab.com/blog/how-to-avoid-broken-master-with-pipelines-for-merge-requests","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to avoid broken master with Pipelines for Merged Results and Merge Trains\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Shinya Maeda\"}],\n        \"datePublished\": \"2019-09-11\",\n      }",{"title":5883,"description":5878,"authors":5884,"heroImage":5879,"date":5886,"category":14,"tags":5887},"How to avoid broken master with Pipelines for Merged Results and Merge Trains",[5885],"Shinya Maeda","2019-09-11",[110,3007,924,750],{"slug":5889,"featured":6,"template":730},"how-to-avoid-broken-master-with-pipelines-for-merge-requests","content:en-us:blog:how-to-avoid-broken-master-with-pipelines-for-merge-requests.yml","How To Avoid Broken Master With Pipelines For Merge Requests","en-us/blog/how-to-avoid-broken-master-with-pipelines-for-merge-requests.yml","en-us/blog/how-to-avoid-broken-master-with-pipelines-for-merge-requests",{"_path":5895,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":5896,"content":5902,"config":5906,"_id":5908,"_type":16,"title":5909,"_source":17,"_file":5910,"_stem":5911,"_extension":20},"/en-us/blog/building-build-images",{"title":5897,"description":5898,"ogTitle":5897,"ogDescription":5898,"noIndex":6,"ogImage":5899,"ogUrl":5900,"ogSiteName":895,"ogType":896,"canonicalUrls":5900,"schema":5901},"Getting [meta] with GitLab CI/CD: Building build images","Let's talk about building build images with GitLab CI/CD. The power of Docker as a build platform is unleashed when you get meta.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749678567/Blog/Hero%20Images/building-blocks.jpg","https://about.gitlab.com/blog/building-build-images","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Getting [meta] with GitLab CI/CD: Building build images\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Brendan O'Leary\"}],\n        \"datePublished\": \"2019-08-28\",\n      }",{"title":5897,"description":5898,"authors":5903,"heroImage":5899,"date":5904,"category":14,"tags":5905},[2654],"2019-08-28",[110,1180,728],{"slug":5907,"featured":6,"template":730},"building-build-images","content:en-us:blog:building-build-images.yml","Building Build Images","en-us/blog/building-build-images.yml","en-us/blog/building-build-images",{"_path":5913,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":5914,"content":5919,"config":5923,"_id":5925,"_type":16,"title":5926,"_source":17,"_file":5927,"_stem":5928,"_extension":20},"/en-us/blog/tyranny-of-the-clock",{"title":5915,"description":5916,"ogTitle":5915,"ogDescription":5916,"noIndex":6,"ogImage":2281,"ogUrl":5917,"ogSiteName":895,"ogType":896,"canonicalUrls":5917,"schema":5918},"6 Lessons we learned when debugging a scaling problem on GitLab.com","Get a closer look at how we investigated errors originating from scheduled jobs, and how we stumbled upon \"the tyranny of the clock.\"","https://about.gitlab.com/blog/tyranny-of-the-clock","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"6 Lessons we learned when debugging a scaling problem on GitLab.com\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Craig Miskell\"}],\n        \"datePublished\": \"2019-08-27\",\n      }",{"title":5915,"description":5916,"authors":5920,"heroImage":2281,"date":5921,"category":14,"tags":5922},[1618],"2019-08-27",[792,904,1451],{"slug":5924,"featured":6,"template":730},"tyranny-of-the-clock","content:en-us:blog:tyranny-of-the-clock.yml","Tyranny Of The Clock","en-us/blog/tyranny-of-the-clock.yml","en-us/blog/tyranny-of-the-clock",{"_path":5930,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":5931,"content":5937,"config":5943,"_id":5945,"_type":16,"title":5946,"_source":17,"_file":5947,"_stem":5948,"_extension":20},"/en-us/blog/a-single-codebase-for-gitlab-community-and-enterprise-edition",{"title":5932,"description":5933,"ogTitle":5932,"ogDescription":5933,"noIndex":6,"ogImage":5934,"ogUrl":5935,"ogSiteName":895,"ogType":896,"canonicalUrls":5935,"schema":5936},"Why GitLab uses one codebase for Community & Enterprise","Dive into our decision to switch GitLab over to a single codebase as we review some of the benefits and challenges. Learn more here!","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749671631/Blog/Hero%20Images/merge-ce-ee-codebases.jpg","https://about.gitlab.com/blog/a-single-codebase-for-gitlab-community-and-enterprise-edition","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Update: Why GitLab uses a single codebase for Community and Enterprise editions\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Yorick Peterse\"}],\n        \"datePublished\": \"2019-08-23\",\n      }",{"title":5938,"description":5933,"authors":5939,"heroImage":5934,"date":5941,"category":14,"tags":5942},"Update: Why GitLab uses a single codebase for Community and Enterprise editions",[5940],"Yorick Peterse","2019-08-23",[1099,809],{"slug":5944,"featured":6,"template":730},"a-single-codebase-for-gitlab-community-and-enterprise-edition","content:en-us:blog:a-single-codebase-for-gitlab-community-and-enterprise-edition.yml","A Single Codebase For Gitlab Community And Enterprise Edition","en-us/blog/a-single-codebase-for-gitlab-community-and-enterprise-edition.yml","en-us/blog/a-single-codebase-for-gitlab-community-and-enterprise-edition",{"_path":5950,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":5951,"content":5957,"config":5961,"_id":5963,"_type":16,"title":5964,"_source":17,"_file":5965,"_stem":5966,"_extension":20},"/en-us/blog/a-look-ahead-for-gitlab-cicd",{"title":5952,"description":5953,"ogTitle":5952,"ogDescription":5953,"noIndex":6,"ogImage":5954,"ogUrl":5955,"ogSiteName":895,"ogType":896,"canonicalUrls":5955,"schema":5956},"New up and coming GitLab CI/CD Features","DAG, Multi-project Pipelines, Runner Setup for Kubernetes and more.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749666889/Blog/Hero%20Images/photo-cicd12xlookahead.jpg","https://about.gitlab.com/blog/a-look-ahead-for-gitlab-cicd","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"New up and coming GitLab CI/CD Features\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Jason Yavorska\"}],\n        \"datePublished\": \"2019-08-07\",\n      }",{"title":5952,"description":5953,"authors":5958,"heroImage":5954,"date":5959,"category":14,"tags":5960},[4917],"2019-08-07",[564,110,750],{"slug":5962,"featured":6,"template":730},"a-look-ahead-for-gitlab-cicd","content:en-us:blog:a-look-ahead-for-gitlab-cicd.yml","A Look Ahead For Gitlab Cicd","en-us/blog/a-look-ahead-for-gitlab-cicd.yml","en-us/blog/a-look-ahead-for-gitlab-cicd",{"_path":5968,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":5969,"content":5975,"config":5979,"_id":5981,"_type":16,"title":5982,"_source":17,"_file":5983,"_stem":5984,"_extension":20},"/en-us/blog/feature-flags-continuous-delivery",{"title":5970,"description":5971,"ogTitle":5970,"ogDescription":5971,"noIndex":6,"ogImage":5972,"ogUrl":5973,"ogSiteName":895,"ogType":896,"canonicalUrls":5973,"schema":5974},"Learn more about Feature Flags: The next step in Progressive Delivery","How Feature Flags are continuing the next evolution of continuous delivery.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749670020/Blog/Hero%20Images/feature-flags.jpg","https://about.gitlab.com/blog/feature-flags-continuous-delivery","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Learn more about Feature Flags: The next step in Progressive Delivery\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Chrissie Buchanan\"}],\n        \"datePublished\": \"2019-08-06\",\n      }",{"title":5970,"description":5971,"authors":5976,"heroImage":5972,"date":5977,"category":14,"tags":5978},[4528],"2019-08-06",[110,750],{"slug":5980,"featured":6,"template":730},"feature-flags-continuous-delivery","content:en-us:blog:feature-flags-continuous-delivery.yml","Feature Flags Continuous Delivery","en-us/blog/feature-flags-continuous-delivery.yml","en-us/blog/feature-flags-continuous-delivery",{"_path":5986,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":5987,"content":5993,"config":5997,"_id":5999,"_type":16,"title":6000,"_source":17,"_file":6001,"_stem":6002,"_extension":20},"/en-us/blog/quantifying-ux-positioning-of-the-clone-button",{"title":5988,"description":5989,"ogTitle":5988,"ogDescription":5989,"noIndex":6,"ogImage":5990,"ogUrl":5991,"ogSiteName":895,"ogType":896,"canonicalUrls":5991,"schema":5992},"Quantifying UX: Positioning the clone button","We wanted to move the clone button on the project overview page. Here's how user testing helped us make the right choices.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749672622/Blog/Hero%20Images/positioning-clone-button.jpg","https://about.gitlab.com/blog/quantifying-ux-positioning-of-the-clone-button","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Quantifying UX: Positioning the clone button\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Matej Latin\"}],\n        \"datePublished\": \"2019-07-26\",\n      }",{"title":5988,"description":5989,"authors":5994,"heroImage":5990,"date":5995,"category":14,"tags":5996},[4083],"2019-07-26",[1099,1316,1141],{"slug":5998,"featured":6,"template":730},"quantifying-ux-positioning-of-the-clone-button","content:en-us:blog:quantifying-ux-positioning-of-the-clone-button.yml","Quantifying Ux Positioning Of The Clone Button","en-us/blog/quantifying-ux-positioning-of-the-clone-button.yml","en-us/blog/quantifying-ux-positioning-of-the-clone-button",{"_path":6004,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":6005,"content":6011,"config":6016,"_id":6018,"_type":16,"title":6019,"_source":17,"_file":6020,"_stem":6021,"_extension":20},"/en-us/blog/moving-workflows-to-gitlab-the-case-of-the-hipaa-audit-protocol",{"title":6006,"description":6007,"ogTitle":6006,"ogDescription":6007,"noIndex":6,"ogImage":6008,"ogUrl":6009,"ogSiteName":895,"ogType":896,"canonicalUrls":6009,"schema":6010},"Moving workflows to GitLab: The case of the HIPAA Audit Protocol","With the GitLab API, you can easily move workflows into GitLab. Here’s how we did it for the HIPAA Audit Protocol.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749679716/Blog/Hero%20Images/bright-cardiac-cardiology.jpg","https://about.gitlab.com/blog/moving-workflows-to-gitlab-the-case-of-the-hipaa-audit-protocol","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Moving workflows to GitLab: The case of the HIPAA Audit Protocol\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Luka Trbojevic\"}],\n        \"datePublished\": \"2019-07-25\",\n      }",{"title":6006,"description":6007,"authors":6012,"heroImage":6008,"date":6014,"category":14,"tags":6015},[6013],"Luka Trbojevic","2019-07-25",[1099,809,751],{"slug":6017,"featured":6,"template":730},"moving-workflows-to-gitlab-the-case-of-the-hipaa-audit-protocol","content:en-us:blog:moving-workflows-to-gitlab-the-case-of-the-hipaa-audit-protocol.yml","Moving Workflows To Gitlab The Case Of The Hipaa Audit Protocol","en-us/blog/moving-workflows-to-gitlab-the-case-of-the-hipaa-audit-protocol.yml","en-us/blog/moving-workflows-to-gitlab-the-case-of-the-hipaa-audit-protocol",{"_path":6023,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":6024,"content":6029,"config":6033,"_id":6035,"_type":16,"title":6036,"_source":17,"_file":6037,"_stem":6038,"_extension":20},"/en-us/blog/cross-project-pipeline",{"title":6025,"description":6026,"ogTitle":6025,"ogDescription":6026,"noIndex":6,"ogImage":5843,"ogUrl":6027,"ogSiteName":895,"ogType":896,"canonicalUrls":6027,"schema":6028},"How to trigger multiple pipelines using GitLab CI/CD","Discover how to trigger and visualize pipelines when you set up GitLab CI/CD across multiple projects.","https://about.gitlab.com/blog/cross-project-pipeline","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to trigger multiple pipelines using GitLab CI/CD\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Itzik Gan Baruch\"}],\n        \"datePublished\": \"2019-07-24\",\n      }",{"title":6025,"description":6026,"authors":6030,"heroImage":5843,"date":6031,"category":14,"tags":6032},[1197],"2019-07-24",[110,564,750,773,924],{"slug":6034,"featured":6,"template":730},"cross-project-pipeline","content:en-us:blog:cross-project-pipeline.yml","Cross Project Pipeline","en-us/blog/cross-project-pipeline.yml","en-us/blog/cross-project-pipeline",{"_path":6040,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":6041,"content":6047,"config":6051,"_id":6053,"_type":16,"title":6054,"_source":17,"_file":6055,"_stem":6056,"_extension":20},"/en-us/blog/three-new-support-tools",{"title":6042,"description":6043,"ogTitle":6042,"ogDescription":6043,"noIndex":6,"ogImage":6044,"ogUrl":6045,"ogSiteName":895,"ogType":896,"canonicalUrls":6045,"schema":6046},"We've open sourced 3 tools to help troubleshoot system performance","Say hello to the open source tools our Support team is using to better summarize customer performance data – and find out how they can help you.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749670405/Blog/Hero%20Images/open_source_tools.jpg","https://about.gitlab.com/blog/three-new-support-tools","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"We've open sourced 3 tools to help troubleshoot system performance\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Will Chandler\"},{\"@type\":\"Person\",\"name\":\"Sara Kassabian\"}],\n        \"datePublished\": \"2019-07-24\",\n      }",{"title":6042,"description":6043,"authors":6048,"heroImage":6044,"date":6031,"category":14,"tags":6050},[6049,3713],"Will Chandler",[809,750,1099],{"slug":6052,"featured":6,"template":730},"three-new-support-tools","content:en-us:blog:three-new-support-tools.yml","Three New Support Tools","en-us/blog/three-new-support-tools.yml","en-us/blog/three-new-support-tools",{"_path":6058,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":6059,"content":6065,"config":6069,"_id":6071,"_type":16,"title":6072,"_source":17,"_file":6073,"_stem":6074,"_extension":20},"/en-us/blog/anomaly-detection-using-prometheus",{"title":6060,"description":6061,"ogTitle":6060,"ogDescription":6061,"noIndex":6,"ogImage":6062,"ogUrl":6063,"ogSiteName":895,"ogType":896,"canonicalUrls":6063,"schema":6064},"How to use Prometheus for anomaly detection in GitLab","Explore how Prometheus query language can be used to help you diagnose incidents, detect performance regressions, tackle abuse, and more.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749667819/Blog/Hero%20Images/anomaly-detection-cover.png","https://about.gitlab.com/blog/anomaly-detection-using-prometheus","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to use Prometheus for anomaly detection in GitLab\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Sara Kassabian\"}],\n        \"datePublished\": \"2019-07-23\",\n      }",{"title":6060,"description":6061,"authors":6066,"heroImage":6062,"date":6067,"category":14,"tags":6068},[3713],"2019-07-23",[1099],{"slug":6070,"featured":6,"template":730},"anomaly-detection-using-prometheus","content:en-us:blog:anomaly-detection-using-prometheus.yml","Anomaly Detection Using Prometheus","en-us/blog/anomaly-detection-using-prometheus.yml","en-us/blog/anomaly-detection-using-prometheus",{"_path":6076,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":6077,"content":6083,"config":6087,"_id":6089,"_type":16,"title":6090,"_source":17,"_file":6091,"_stem":6092,"_extension":20},"/en-us/blog/elasticsearch-update",{"title":6078,"description":6079,"ogTitle":6078,"ogDescription":6079,"noIndex":6,"ogImage":6080,"ogUrl":6081,"ogSiteName":895,"ogType":896,"canonicalUrls":6081,"schema":6082},"Update: The challenge of enabling Elasticsearch on GitLab.com","How we got started with enabling Elasticsearch on the largest GitLab instance, GitLab.com.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749666832/Blog/Hero%20Images/enable-global-search-elasticsearch.jpg","https://about.gitlab.com/blog/elasticsearch-update","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Update: The challenge of enabling Elasticsearch on GitLab.com\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Nick Thomas\"}],\n        \"datePublished\": \"2019-07-16\",\n      }",{"title":6078,"description":6079,"authors":6084,"heroImage":6080,"date":6085,"category":14,"tags":6086},[5775],"2019-07-16",[750,233,1099],{"slug":6088,"featured":6,"template":730},"elasticsearch-update","content:en-us:blog:elasticsearch-update.yml","Elasticsearch Update","en-us/blog/elasticsearch-update.yml","en-us/blog/elasticsearch-update",{"_path":6094,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":6095,"content":6101,"config":6106,"_id":6108,"_type":16,"title":6109,"_source":17,"_file":6110,"_stem":6111,"_extension":20},"/en-us/blog/building-a-ux-research-insights-repository",{"title":6096,"description":6097,"ogTitle":6096,"ogDescription":6097,"noIndex":6,"ogImage":6098,"ogUrl":6099,"ogSiteName":895,"ogType":896,"canonicalUrls":6099,"schema":6100},"Why we built a UX Research Insights repository","One of the biggest challenges faced by UX researchers is organizing and storing user research effectively, so that anyone can find and use insights.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749678561/Blog/Hero%20Images/open-course-environment.jpg","https://about.gitlab.com/blog/building-a-ux-research-insights-repository","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Why we built a UX Research Insights repository\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Sarah O’Donnell\"}],\n        \"datePublished\": \"2019-07-10\",\n      }",{"title":6096,"description":6097,"authors":6102,"heroImage":6098,"date":6104,"category":14,"tags":6105},[6103],"Sarah O’Donnell","2019-07-10",[1316,1141],{"slug":6107,"featured":6,"template":730},"building-a-ux-research-insights-repository","content:en-us:blog:building-a-ux-research-insights-repository.yml","Building A Ux Research Insights Repository","en-us/blog/building-a-ux-research-insights-repository.yml","en-us/blog/building-a-ux-research-insights-repository",{"_path":6113,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":6114,"content":6120,"config":6125,"_id":6127,"_type":16,"title":6128,"_source":17,"_file":6129,"_stem":6130,"_extension":20},"/en-us/blog/git-performance-on-nfs",{"title":6115,"description":6116,"ogTitle":6115,"ogDescription":6116,"noIndex":6,"ogImage":6117,"ogUrl":6118,"ogSiteName":895,"ogType":896,"canonicalUrls":6118,"schema":6119},"What we're doing to fix Gitaly NFS performance regressions","How we're improving our Git IO patterns to fix performance regressions when running Gitaly on NFS.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749670065/Blog/Hero%20Images/git-performance-nfs.jpg","https://about.gitlab.com/blog/git-performance-on-nfs","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"What we're doing to fix Gitaly NFS performance regressions\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"James Ramsay\"},{\"@type\":\"Person\",\"name\":\"Zeger-Jan van de Weg\"}],\n        \"datePublished\": \"2019-07-08\",\n      }",{"title":6115,"description":6116,"authors":6121,"heroImage":6117,"date":6123,"category":14,"tags":6124},[6122,4472],"James Ramsay","2019-07-08",[792,904],{"slug":6126,"featured":6,"template":730},"git-performance-on-nfs","content:en-us:blog:git-performance-on-nfs.yml","Git Performance On Nfs","en-us/blog/git-performance-on-nfs.yml","en-us/blog/git-performance-on-nfs",{"_path":6132,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":6133,"content":6139,"config":6143,"_id":6145,"_type":16,"title":6146,"_source":17,"_file":6147,"_stem":6148,"_extension":20},"/en-us/blog/group-conversation-podcast",{"title":6134,"description":6135,"ogTitle":6134,"ogDescription":6135,"noIndex":6,"ogImage":6136,"ogUrl":6137,"ogSiteName":895,"ogType":896,"canonicalUrls":6137,"schema":6138},"How we turn our group conversations into a podcast with GitLab CI/CD","Want to listen to meetings on the go? Senior SRE John Jarvis explains how he turned his favorite remote meetings at GitLab into podcast format.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749678626/Blog/Hero%20Images/group-conversation-podcast.jpg","https://about.gitlab.com/blog/group-conversation-podcast","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How we turn our group conversations into a podcast with GitLab CI/CD\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"John Jarvis\"}],\n        \"datePublished\": \"2019-07-03\",\n      }",{"title":6134,"description":6135,"authors":6140,"heroImage":6136,"date":6141,"category":14,"tags":6142},[4860],"2019-07-03",[1099,2512,110],{"slug":6144,"featured":6,"template":730},"group-conversation-podcast","content:en-us:blog:group-conversation-podcast.yml","Group Conversation Podcast","en-us/blog/group-conversation-podcast.yml","en-us/blog/group-conversation-podcast",{"_path":6150,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":6151,"content":6157,"config":6164,"_id":6166,"_type":16,"title":6167,"_source":17,"_file":6168,"_stem":6169,"_extension":20},"/en-us/blog/using-ansible-and-gitlab-as-infrastructure-for-code",{"ogTitle":6152,"schema":6153,"ogImage":6154,"ogDescription":6155,"ogSiteName":895,"noIndex":6,"ogType":896,"ogUrl":6156,"title":6152,"canonicalUrls":6156,"description":6155},"Build enterprise-grade IaC pipelines with GitLab DevSecOps","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to use GitLab and Ansible to create infrastructure as code\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Brad Downey\"},{\"@type\":\"Person\",\"name\":\"Sara Kassabian\"}],\n        \"datePublished\": \"2019-07-01\",\n      }","https://res.cloudinary.com/about-gitlab-com/image/upload/v1746211002/zlet4rmfg2z0j6lg16mc.png","Learn how to transform infrastructure automation into scalable, secure pipelines using GitLab, Terraform/OpenTofu, and Ansible with integrated security scanning and CI/CD.","https://about.gitlab.com/blog/using-ansible-and-gitlab-as-infrastructure-for-code",{"heroImage":6154,"authors":6158,"updatedDate":6161,"date":6162,"title":6152,"tags":6163,"description":6155,"category":14},[6159,6160],"George Kichukov","Salahddine Aberkan","2025-04-24","2019-07-01",[3007,110],{"slug":6165,"featured":6,"template":730},"using-ansible-and-gitlab-as-infrastructure-for-code","content:en-us:blog:using-ansible-and-gitlab-as-infrastructure-for-code.yml","Using Ansible And Gitlab As Infrastructure For Code","en-us/blog/using-ansible-and-gitlab-as-infrastructure-for-code.yml","en-us/blog/using-ansible-and-gitlab-as-infrastructure-for-code",{"_path":6171,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":6172,"content":6178,"config":6182,"_id":6184,"_type":16,"title":6185,"_source":17,"_file":6186,"_stem":6187,"_extension":20},"/en-us/blog/look-back-on-11-11-cicd",{"title":6173,"description":6174,"ogTitle":6173,"ogDescription":6174,"noIndex":6,"ogImage":6175,"ogUrl":6176,"ogSiteName":895,"ogType":896,"canonicalUrls":6176,"schema":6177},"Looking back on the 11.x releases for GitLab CI/CD","With GitLab 12.0 coming soon, it's a great time to reflect on all the features we've launched since 11.0.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749666857/Blog/Hero%20Images/photo-cicdlookback.jpg","https://about.gitlab.com/blog/look-back-on-11-11-cicd","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Looking back on the 11.x releases for GitLab CI/CD\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Jason Yavorska\"}],\n        \"datePublished\": \"2019-06-19\",\n      }",{"title":6173,"description":6174,"authors":6179,"heroImage":6175,"date":6180,"category":14,"tags":6181},[4917],"2019-06-19",[564,110,750],{"slug":6183,"featured":6,"template":730},"look-back-on-11-11-cicd","content:en-us:blog:look-back-on-11-11-cicd.yml","Look Back On 11 11 Cicd","en-us/blog/look-back-on-11-11-cicd.yml","en-us/blog/look-back-on-11-11-cicd",{"_path":6189,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":6190,"content":6196,"config":6201,"_id":6203,"_type":16,"title":6204,"_source":17,"_file":6205,"_stem":6206,"_extension":20},"/en-us/blog/how-we-migrated-our-markdown-processing-to-commonmark",{"title":6191,"description":6192,"ogTitle":6191,"ogDescription":6192,"noIndex":6,"ogImage":6193,"ogUrl":6194,"ogSiteName":895,"ogType":896,"canonicalUrls":6194,"schema":6195},"How we migrated to CommonMark","A senior backend engineer shares how (and why) we migrated our Markdown processing from RedCarpet to CommonMark.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749671172/Blog/Hero%20Images/markdown-tutorial-cover.png","https://about.gitlab.com/blog/how-we-migrated-our-markdown-processing-to-commonmark","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How we migrated to CommonMark\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Brett Walker\"}],\n        \"datePublished\": \"2019-06-13\",\n      }",{"title":6191,"description":6192,"authors":6197,"heroImage":6193,"date":6199,"category":14,"tags":6200},[6198],"Brett Walker","2019-06-13",[1507],{"slug":6202,"featured":6,"template":730},"how-we-migrated-our-markdown-processing-to-commonmark","content:en-us:blog:how-we-migrated-our-markdown-processing-to-commonmark.yml","How We Migrated Our Markdown Processing To Commonmark","en-us/blog/how-we-migrated-our-markdown-processing-to-commonmark.yml","en-us/blog/how-we-migrated-our-markdown-processing-to-commonmark",{"_path":6208,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":6209,"content":6215,"config":6219,"_id":6221,"_type":16,"title":6222,"_source":17,"_file":6223,"_stem":6224,"_extension":20},"/en-us/blog/it-automation-developer-productivity",{"title":6210,"description":6211,"ogTitle":6210,"ogDescription":6211,"noIndex":6,"ogImage":6212,"ogUrl":6213,"ogSiteName":895,"ogType":896,"canonicalUrls":6213,"schema":6214},"How IT automation impacts developer productivity","See how IT automation promotes a healthier IT culture and unlocks next-level DevOps.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749670529/Blog/Hero%20Images/automate-retrospectives.jpg","https://about.gitlab.com/blog/it-automation-developer-productivity","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How IT automation impacts developer productivity\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Chrissie Buchanan\"}],\n        \"datePublished\": \"2019-05-30\",\n      }",{"title":6210,"description":6211,"authors":6216,"heroImage":6212,"date":6217,"category":14,"tags":6218},[4528],"2019-05-30",[564,1790,110],{"slug":6220,"featured":6,"template":730},"it-automation-developer-productivity","content:en-us:blog:it-automation-developer-productivity.yml","It Automation Developer Productivity","en-us/blog/it-automation-developer-productivity.yml","en-us/blog/it-automation-developer-productivity",{"_path":6226,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":6227,"content":6233,"config":6238,"_id":6240,"_type":16,"title":6241,"_source":17,"_file":6242,"_stem":6243,"_extension":20},"/en-us/blog/upgrade-to-rails5",{"title":6228,"description":6229,"ogTitle":6228,"ogDescription":6229,"noIndex":6,"ogImage":6230,"ogUrl":6231,"ogSiteName":895,"ogType":896,"canonicalUrls":6231,"schema":6232},"The road to Rails 5","Senior Backend Engineer Jan Provaznik shares some of the challenges we encountered when upgrading GitLab to Rails 5 – and how we overcame them.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749683399/Blog/Hero%20Images/road-to-rails-5.jpg","https://about.gitlab.com/blog/upgrade-to-rails5","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"The road to Rails 5\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Jan Provaznik\"}],\n        \"datePublished\": \"2019-05-28\",\n      }",{"title":6228,"description":6229,"authors":6234,"heroImage":6230,"date":6236,"category":14,"tags":6237},[6235],"Jan Provaznik","2019-05-28",[1507,1451,809,269],{"slug":6239,"featured":6,"template":730},"upgrade-to-rails5","content:en-us:blog:upgrade-to-rails5.yml","Upgrade To Rails5","en-us/blog/upgrade-to-rails5.yml","en-us/blog/upgrade-to-rails5",{"_path":6245,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":6246,"content":6252,"config":6256,"_id":6258,"_type":16,"title":6259,"_source":17,"_file":6260,"_stem":6261,"_extension":20},"/en-us/blog/5-teams-that-made-the-switch-to-gitlab-ci-cd",{"title":6247,"description":6248,"ogTitle":6247,"ogDescription":6248,"noIndex":6,"ogImage":6249,"ogUrl":6250,"ogSiteName":895,"ogType":896,"canonicalUrls":6250,"schema":6251},"5 Teams that made the switch to GitLab CI/CD","See what happened when these five teams moved on from old continuous integration and delivery solutions and switched to GitLab CI/CD.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749678657/Blog/Hero%20Images/ci-cd-competitive-campaign-blog-cover.png","https://about.gitlab.com/blog/5-teams-that-made-the-switch-to-gitlab-ci-cd","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"5 Teams that made the switch to GitLab CI/CD\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Chrissie Buchanan\"}],\n        \"datePublished\": \"2019-04-25\",\n      }",{"title":6247,"description":6248,"authors":6253,"heroImage":6249,"date":6254,"category":14,"tags":6255},[4528],"2019-04-25",[1100,564,110],{"slug":6257,"featured":6,"template":730},"5-teams-that-made-the-switch-to-gitlab-ci-cd","content:en-us:blog:5-teams-that-made-the-switch-to-gitlab-ci-cd.yml","5 Teams That Made The Switch To Gitlab Ci Cd","en-us/blog/5-teams-that-made-the-switch-to-gitlab-ci-cd.yml","en-us/blog/5-teams-that-made-the-switch-to-gitlab-ci-cd",{"_path":6263,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":6264,"content":6270,"config":6274,"_id":6276,"_type":16,"title":6277,"_source":17,"_file":6278,"_stem":6279,"_extension":20},"/en-us/blog/progressive-delivery-using-review-apps",{"title":6265,"description":6266,"ogTitle":6265,"ogDescription":6266,"noIndex":6,"ogImage":6267,"ogUrl":6268,"ogSiteName":895,"ogType":896,"canonicalUrls":6268,"schema":6269},"Progressive Delivery: How to get started with Review Apps","Progressive Delivery is the next evolution of continuous delivery, and Review Apps are a key enabler.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749666841/Blog/Hero%20Images/progressive-delivery-review-apps.jpg","https://about.gitlab.com/blog/progressive-delivery-using-review-apps","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Progressive Delivery: How to get started with Review Apps\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Jason Yavorska\"}],\n        \"datePublished\": \"2019-04-19\",\n      }",{"title":6265,"description":6266,"authors":6271,"heroImage":6267,"date":6272,"category":14,"tags":6273},[4917],"2019-04-19",[110,750,1022],{"slug":6275,"featured":6,"template":730},"progressive-delivery-using-review-apps","content:en-us:blog:progressive-delivery-using-review-apps.yml","Progressive Delivery Using Review Apps","en-us/blog/progressive-delivery-using-review-apps.yml","en-us/blog/progressive-delivery-using-review-apps",{"_path":6281,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":6282,"content":6288,"config":6293,"_id":6295,"_type":16,"title":6296,"_source":17,"_file":6297,"_stem":6298,"_extension":20},"/en-us/blog/more-performant-and-robust-task-lists-in-gitlab",{"title":6283,"description":6284,"ogTitle":6283,"ogDescription":6284,"noIndex":6,"ogImage":6285,"ogUrl":6286,"ogSiteName":895,"ogType":896,"canonicalUrls":6286,"schema":6287},"How we delivered more performant and robust task lists in GitLab","How simple checkboxes became a challenging engineering problem – and how we fixed it.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749668319/Blog/Hero%20Images/more-robust-task-lists.jpg","https://about.gitlab.com/blog/more-performant-and-robust-task-lists-in-gitlab","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How we delivered more performant and robust task lists in GitLab\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Fatih Acet\"},{\"@type\":\"Person\",\"name\":\"Brett Walker\"}],\n        \"datePublished\": \"2019-04-05\",\n      }",{"title":6283,"description":6284,"authors":6289,"heroImage":6285,"date":6291,"category":14,"tags":6292},[6290,6198],"Fatih Acet","2019-04-05",[2105,1099],{"slug":6294,"featured":6,"template":730},"more-performant-and-robust-task-lists-in-gitlab","content:en-us:blog:more-performant-and-robust-task-lists-in-gitlab.yml","More Performant And Robust Task Lists In Gitlab","en-us/blog/more-performant-and-robust-task-lists-in-gitlab.yml","en-us/blog/more-performant-and-robust-task-lists-in-gitlab",{"_path":6300,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":6301,"content":6307,"config":6311,"_id":6313,"_type":16,"title":6314,"_source":17,"_file":6315,"_stem":6316,"_extension":20},"/en-us/blog/application-modernization-best-practices",{"title":6302,"description":6303,"ogTitle":6302,"ogDescription":6303,"noIndex":6,"ogImage":6304,"ogUrl":6305,"ogSiteName":895,"ogType":896,"canonicalUrls":6305,"schema":6306},"7 Best practices for application modernization","Use these best practices to avoid common pitfalls on the application modernization journey.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749671258/Blog/Hero%20Images/just-commit-blog-cover.png","https://about.gitlab.com/blog/application-modernization-best-practices","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"7 Best practices for application modernization\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Chrissie Buchanan\"}],\n        \"datePublished\": \"2019-03-27\",\n      }",{"title":6302,"description":6303,"authors":6308,"heroImage":6304,"date":6309,"category":14,"tags":6310},[4528],"2019-03-27",[1022,564],{"slug":6312,"featured":6,"template":730},"application-modernization-best-practices","content:en-us:blog:application-modernization-best-practices.yml","Application Modernization Best Practices","en-us/blog/application-modernization-best-practices.yml","en-us/blog/application-modernization-best-practices",{"_path":6318,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":6319,"content":6325,"config":6331,"_id":6333,"_type":16,"title":6334,"_source":17,"_file":6335,"_stem":6336,"_extension":20},"/en-us/blog/connecting-gitlab-and-pantheon-streamline-wordpress-drupal-workflows",{"title":6320,"description":6321,"ogTitle":6320,"ogDescription":6321,"noIndex":6,"ogImage":6322,"ogUrl":6323,"ogSiteName":895,"ogType":896,"canonicalUrls":6323,"schema":6324},"Streamlining Drupal and WordPress with GitLab and Pantheon","Our guest author, a Developer Programs Engineer at Pantheon, shares how to automate WordPress deployments using GitLab CI/CD.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749680516/Blog/Hero%20Images/gitlab-pantheon.png","https://about.gitlab.com/blog/connecting-gitlab-and-pantheon-streamline-wordpress-drupal-workflows","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to connect GitLab and Pantheon to streamline Drupal and WordPress workflows\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Andrew Taylor\"}],\n        \"datePublished\": \"2019-03-26\",\n      }",{"title":6326,"description":6321,"authors":6327,"heroImage":6322,"date":6329,"category":14,"tags":6330},"How to connect GitLab and Pantheon to streamline Drupal and WordPress workflows",[6328],"Andrew Taylor","2019-03-26",[564,233,269,924],{"slug":6332,"featured":6,"template":730},"connecting-gitlab-and-pantheon-streamline-wordpress-drupal-workflows","content:en-us:blog:connecting-gitlab-and-pantheon-streamline-wordpress-drupal-workflows.yml","Connecting Gitlab And Pantheon Streamline Wordpress Drupal Workflows","en-us/blog/connecting-gitlab-and-pantheon-streamline-wordpress-drupal-workflows.yml","en-us/blog/connecting-gitlab-and-pantheon-streamline-wordpress-drupal-workflows",{"_path":6338,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":6339,"content":6344,"config":6350,"_id":6352,"_type":16,"title":6353,"_source":17,"_file":6354,"_stem":6355,"_extension":20},"/en-us/blog/enabling-global-search-elasticsearch-gitlab-com",{"title":6340,"description":6341,"ogTitle":6340,"ogDescription":6341,"noIndex":6,"ogImage":6080,"ogUrl":6342,"ogSiteName":895,"ogType":896,"canonicalUrls":6342,"schema":6343},"Lessons from implementing global code search on GitLab.com","Read about some of the dead ends we've encountered on the way to enabling global code search on GitLab.com, and how we're working on a way forward.","https://about.gitlab.com/blog/enabling-global-search-elasticsearch-gitlab-com","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Lessons from our journey to enable global code search with Elasticsearch on GitLab.com\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Mario de la Ossa\"}],\n        \"datePublished\": \"2019-03-20\",\n      }",{"title":6345,"description":6341,"authors":6346,"heroImage":6080,"date":6348,"category":14,"tags":6349},"Lessons from our journey to enable global code search with Elasticsearch on GitLab.com",[6347],"Mario de la Ossa","2019-03-20",[750,233,1099],{"slug":6351,"featured":6,"template":730},"enabling-global-search-elasticsearch-gitlab-com","content:en-us:blog:enabling-global-search-elasticsearch-gitlab-com.yml","Enabling Global Search Elasticsearch Gitlab Com","en-us/blog/enabling-global-search-elasticsearch-gitlab-com.yml","en-us/blog/enabling-global-search-elasticsearch-gitlab-com",{"_path":6357,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":6358,"content":6363,"config":6367,"_id":6369,"_type":16,"title":6370,"_source":17,"_file":6371,"_stem":6372,"_extension":20},"/en-us/blog/application-modernization-examples",{"title":6359,"description":6360,"ogTitle":6359,"ogDescription":6360,"noIndex":6,"ogImage":6304,"ogUrl":6361,"ogSiteName":895,"ogType":896,"canonicalUrls":6361,"schema":6362},"Examples of legacy modernisation projects","Discover how four teams committed to the application modernization process.","https://about.gitlab.com/blog/application-modernization-examples","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Examples of legacy modernisation projects\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Chrissie Buchanan\"}],\n        \"datePublished\": \"2019-03-14\",\n      }",{"title":6359,"description":6360,"authors":6364,"heroImage":6304,"date":6365,"category":14,"tags":6366},[4528],"2019-03-14",[110,564,582],{"slug":6368,"featured":6,"template":730},"application-modernization-examples","content:en-us:blog:application-modernization-examples.yml","Application Modernization Examples","en-us/blog/application-modernization-examples.yml","en-us/blog/application-modernization-examples",{"_path":6374,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":6375,"content":6380,"config":6384,"_id":6386,"_type":16,"title":6387,"_source":17,"_file":6388,"_stem":6389,"_extension":20},"/en-us/blog/how-we-used-gitlab-to-automate-our-monthly-retrospectives",{"title":6376,"description":6377,"ogTitle":6376,"ogDescription":6377,"noIndex":6,"ogImage":6212,"ogUrl":6378,"ogSiteName":895,"ogType":896,"canonicalUrls":6378,"schema":6379},"How we use GitLab to automate our monthly retrospectives","How one engineering team is using GitLab CI to automate asynchronous retrospectives, making collaboration across four continents a breeze.","https://about.gitlab.com/blog/how-we-used-gitlab-to-automate-our-monthly-retrospectives","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How we use GitLab to automate our monthly retrospectives\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Sean McGivern\"}],\n        \"datePublished\": \"2019-03-07\",\n      }",{"title":6376,"description":6377,"authors":6381,"heroImage":6212,"date":6382,"category":14,"tags":6383},[4766],"2019-03-07",[110,1507,1099,924],{"slug":6385,"featured":6,"template":730},"how-we-used-gitlab-to-automate-our-monthly-retrospectives","content:en-us:blog:how-we-used-gitlab-to-automate-our-monthly-retrospectives.yml","How We Used Gitlab To Automate Our Monthly Retrospectives","en-us/blog/how-we-used-gitlab-to-automate-our-monthly-retrospectives.yml","en-us/blog/how-we-used-gitlab-to-automate-our-monthly-retrospectives",{"_path":6391,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":6392,"content":6398,"config":6402,"_id":6404,"_type":16,"title":6405,"_source":17,"_file":6406,"_stem":6407,"_extension":20},"/en-us/blog/ios-publishing-with-gitlab-and-fastlane",{"title":6393,"description":6394,"ogTitle":6393,"ogDescription":6394,"noIndex":6,"ogImage":6395,"ogUrl":6396,"ogSiteName":895,"ogType":896,"canonicalUrls":6396,"schema":6397},"How to publish iOS apps to the App Store with GitLab and fastlane","See how GitLab, together with fastlane, can build, sign, and publish apps for iOS to the App Store.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749680470/Blog/Hero%20Images/ios-publishing-cover.jpg","https://about.gitlab.com/blog/ios-publishing-with-gitlab-and-fastlane","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to publish iOS apps to the App Store with GitLab and fastlane\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Jason Yavorska\"}],\n        \"datePublished\": \"2019-03-06\",\n      }",{"title":6393,"description":6394,"authors":6399,"heroImage":6395,"date":6400,"category":14,"tags":6401},[4917],"2019-03-06",[110,233,750],{"slug":6403,"featured":6,"template":730},"ios-publishing-with-gitlab-and-fastlane","content:en-us:blog:ios-publishing-with-gitlab-and-fastlane.yml","Ios Publishing With Gitlab And Fastlane","en-us/blog/ios-publishing-with-gitlab-and-fastlane.yml","en-us/blog/ios-publishing-with-gitlab-and-fastlane",{"_path":6409,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":6410,"content":6415,"config":6420,"_id":6422,"_type":16,"title":6423,"_source":17,"_file":6424,"_stem":6425,"_extension":20},"/en-us/blog/merging-ce-and-ee-codebases",{"title":6411,"description":6412,"ogTitle":6411,"ogDescription":6412,"noIndex":6,"ogImage":5934,"ogUrl":6413,"ogSiteName":895,"ogType":896,"canonicalUrls":6413,"schema":6414},"GitLab might move to a single Rails codebase","We're considering moving towards a single Rails repository by combining the two existing repositories – here's why, and what would change.","https://about.gitlab.com/blog/merging-ce-and-ee-codebases","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"GitLab might move to a single Rails codebase\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Marin Jankovski\"}],\n        \"datePublished\": \"2019-02-21\",\n      }",{"title":6411,"description":6412,"authors":6416,"heroImage":5934,"date":6418,"category":14,"tags":6419},[6417],"Marin Jankovski","2019-02-21",[1099,269,279,809],{"slug":6421,"featured":6,"template":730},"merging-ce-and-ee-codebases","content:en-us:blog:merging-ce-and-ee-codebases.yml","Merging Ce And Ee Codebases","en-us/blog/merging-ce-and-ee-codebases.yml","en-us/blog/merging-ce-and-ee-codebases",{"_path":6427,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":6428,"content":6434,"config":6438,"_id":6440,"_type":16,"title":6441,"_source":17,"_file":6442,"_stem":6443,"_extension":20},"/en-us/blog/start-using-pages-quickly",{"title":6429,"description":6430,"ogTitle":6429,"ogDescription":6430,"noIndex":6,"ogImage":6431,"ogUrl":6432,"ogSiteName":895,"ogType":896,"canonicalUrls":6432,"schema":6433},"New: How to get up and running quickly using GitLab Pages templates","We're introducing bundled GitLab Pages templates, so let's take a look at how easy it really is now to get up and running with a new site.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749679908/Blog/Hero%20Images/pages-templates-cover-image.jpg","https://about.gitlab.com/blog/start-using-pages-quickly","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"New: How to get up and running quickly using GitLab Pages templates\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Jason Yavorska\"}],\n        \"datePublished\": \"2019-02-20\",\n      }",{"title":6429,"description":6430,"authors":6435,"heroImage":6431,"date":6436,"category":14,"tags":6437},[4917],"2019-02-20",[3007,750,1099,809],{"slug":6439,"featured":6,"template":730},"start-using-pages-quickly","content:en-us:blog:start-using-pages-quickly.yml","Start Using Pages Quickly","en-us/blog/start-using-pages-quickly.yml","en-us/blog/start-using-pages-quickly",{"_path":6445,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":6446,"content":6452,"config":6457,"_id":6459,"_type":16,"title":6460,"_source":17,"_file":6461,"_stem":6462,"_extension":20},"/en-us/blog/delayed-replication-for-disaster-recovery-with-postgresql",{"title":6447,"description":6448,"ogTitle":6447,"ogDescription":6448,"noIndex":6,"ogImage":6449,"ogUrl":6450,"ogSiteName":895,"ogType":896,"canonicalUrls":6450,"schema":6451},"How we used delayed replication for disaster recovery with PostgreSQL","Replication is no backup. Or is it? Let's take a look at delayed replication and how we used it to recover from accidental label deletion.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749683349/Blog/Hero%20Images/mathew-schwartz-397471-unsplash.jpg","https://about.gitlab.com/blog/delayed-replication-for-disaster-recovery-with-postgresql","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How we used delayed replication for disaster recovery with PostgreSQL\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Andreas Brandl\"}],\n        \"datePublished\": \"2019-02-13\",\n      }",{"title":6447,"description":6448,"authors":6453,"heroImage":6449,"date":6455,"category":14,"tags":6456},[6454],"Andreas Brandl","2019-02-13",[1099,809],{"slug":6458,"featured":6,"template":730},"delayed-replication-for-disaster-recovery-with-postgresql","content:en-us:blog:delayed-replication-for-disaster-recovery-with-postgresql.yml","Delayed Replication For Disaster Recovery With Postgresql","en-us/blog/delayed-replication-for-disaster-recovery-with-postgresql.yml","en-us/blog/delayed-replication-for-disaster-recovery-with-postgresql",{"_path":6464,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":6465,"content":6471,"config":6476,"_id":6478,"_type":16,"title":6479,"_source":17,"_file":6480,"_stem":6481,"_extension":20},"/en-us/blog/start-using-git",{"title":6466,"description":6467,"ogTitle":6466,"ogDescription":6467,"noIndex":6,"ogImage":6468,"ogUrl":6469,"ogSiteName":895,"ogType":896,"canonicalUrls":6469,"schema":6470},"How to tidy up your merge requests with Git","Here's how to use a Git feature that saves a lot of time and cleans up your MRs.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749672243/Blog/Hero%20Images/git-tricks-cover-image.png","https://about.gitlab.com/blog/start-using-git","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to tidy up your merge requests with Git\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Ronald van Zon\"}],\n        \"datePublished\": \"2019-02-07\",\n      }",{"title":6466,"description":6467,"authors":6472,"heroImage":6468,"date":6474,"category":14,"tags":6475},[6473],"Ronald van Zon","2019-02-07",[4437,924,792],{"slug":6477,"featured":6,"template":730},"start-using-git","content:en-us:blog:start-using-git.yml","Start Using Git","en-us/blog/start-using-git.yml","en-us/blog/start-using-git",{"_path":6483,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":6484,"content":6489,"config":6494,"_id":6496,"_type":16,"title":6497,"_source":17,"_file":6498,"_stem":6499,"_extension":20},"/en-us/blog/multi-account-aws-sam-deployments-with-gitlab-ci",{"title":6485,"description":6486,"ogTitle":6485,"ogDescription":6486,"noIndex":6,"ogImage":5278,"ogUrl":6487,"ogSiteName":895,"ogType":896,"canonicalUrls":6487,"schema":6488},"How to set up multi-account AWS SAM deployments with GitLab CI/CD","Our guest author, an AWS Serverless hero, shares how to automate SAM deployments using GitLab CI/CD.","https://about.gitlab.com/blog/multi-account-aws-sam-deployments-with-gitlab-ci","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to set up multi-account AWS SAM deployments with GitLab CI/CD\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Forrest Brazeal\"}],\n        \"datePublished\": \"2019-02-04\",\n      }",{"title":6485,"description":6486,"authors":6490,"heroImage":5278,"date":6492,"category":14,"tags":6493},[6491],"Forrest Brazeal","2019-02-04",[110,3007,233,809,1451,4437],{"slug":6495,"featured":6,"template":730},"multi-account-aws-sam-deployments-with-gitlab-ci","content:en-us:blog:multi-account-aws-sam-deployments-with-gitlab-ci.yml","Multi Account Aws Sam Deployments With Gitlab Ci","en-us/blog/multi-account-aws-sam-deployments-with-gitlab-ci.yml","en-us/blog/multi-account-aws-sam-deployments-with-gitlab-ci",{"_path":6501,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":6502,"content":6508,"config":6513,"_id":6515,"_type":16,"title":6516,"_source":17,"_file":6517,"_stem":6518,"_extension":20},"/en-us/blog/pre-commit-post-deploy-is-dead",{"title":6503,"description":6504,"ogTitle":6503,"ogDescription":6504,"noIndex":6,"ogImage":6505,"ogUrl":6506,"ogSiteName":895,"ogType":896,"canonicalUrls":6506,"schema":6507},"Pre-commit and post-deploy code reviews are dead","In a world with Git, pre-commit and post-deploy code reviews are relics that can be eliminated from your workflow.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749678861/Blog/Hero%20Images/pre-commit.jpg","https://about.gitlab.com/blog/pre-commit-post-deploy-is-dead","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Pre-commit and post-deploy code reviews are dead\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Aricka Flowers\"}],\n        \"datePublished\": \"2019-01-31\",\n      }",{"title":6503,"description":6504,"authors":6509,"heroImage":6505,"date":6511,"category":14,"tags":6512},[6510],"Aricka Flowers","2019-01-31",[1259,792,924],{"slug":6514,"featured":6,"template":730},"pre-commit-post-deploy-is-dead","content:en-us:blog:pre-commit-post-deploy-is-dead.yml","Pre Commit Post Deploy Is Dead","en-us/blog/pre-commit-post-deploy-is-dead.yml","en-us/blog/pre-commit-post-deploy-is-dead",{"_path":6520,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":6521,"content":6528,"config":6533,"_id":6535,"_type":16,"title":6536,"_source":17,"_file":6537,"_stem":6538,"_extension":20},"/en-us/blog/android-publishing-with-gitlab-and-fastlane",{"title":6522,"description":6523,"ogTitle":6524,"ogDescription":6523,"noIndex":6,"ogImage":6525,"ogUrl":6526,"ogSiteName":895,"ogType":896,"canonicalUrls":6526,"schema":6527},"Publishing Android apps to Play Store with GitLab & fastlane","See how GitLab, together with fastlane, can build, sign, and publish apps for Android to the Google Play Store.","HPublishing Android apps to Play Store with GitLab & fastlane","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749679918/Blog/Hero%20Images/android-fastlane-pipeline.png","https://about.gitlab.com/blog/android-publishing-with-gitlab-and-fastlane","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to publish Android apps to the Google Play Store with GitLab and fastlane\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Jason Yavorska\"}],\n        \"datePublished\": \"2019-01-28\",\n      }",{"title":6529,"description":6523,"authors":6530,"heroImage":6525,"date":6531,"category":14,"tags":6532},"How to publish Android apps to the Google Play Store with GitLab and fastlane",[4917],"2019-01-28",[110,233,925,750],{"slug":6534,"featured":6,"template":730},"android-publishing-with-gitlab-and-fastlane","content:en-us:blog:android-publishing-with-gitlab-and-fastlane.yml","Android Publishing With Gitlab And Fastlane","en-us/blog/android-publishing-with-gitlab-and-fastlane.yml","en-us/blog/android-publishing-with-gitlab-and-fastlane",{"_path":6540,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":6541,"content":6547,"config":6552,"_id":6554,"_type":16,"title":6555,"_source":17,"_file":6556,"_stem":6557,"_extension":20},"/en-us/blog/support-microsoft-exchange-google-groups-incoming-email",{"title":6542,"description":6543,"ogTitle":6542,"ogDescription":6543,"noIndex":6,"ogImage":6544,"ogUrl":6545,"ogSiteName":895,"ogType":896,"canonicalUrls":6545,"schema":6546},"Microsoft Exchange & Google Groups now supported by GitLab","You now have even more choices when configuring an email server for your self-managed GitLab instance","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749684071/Blog/Hero%20Images/mailboxes.jpg","https://about.gitlab.com/blog/support-microsoft-exchange-google-groups-incoming-email","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"GitLab now supports Microsoft Exchange and Google Groups for incoming email features like Service Desk\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Victor Wu\"}],\n        \"datePublished\": \"2019-01-23\",\n      }",{"title":6548,"description":6543,"authors":6549,"heroImage":6544,"date":6551,"category":14},"GitLab now supports Microsoft Exchange and Google Groups for incoming email features like Service Desk",[6550],"Victor Wu","2019-01-23",{"slug":6553,"featured":6,"template":730},"support-microsoft-exchange-google-groups-incoming-email","content:en-us:blog:support-microsoft-exchange-google-groups-incoming-email.yml","Support Microsoft Exchange Google Groups Incoming Email","en-us/blog/support-microsoft-exchange-google-groups-incoming-email.yml","en-us/blog/support-microsoft-exchange-google-groups-incoming-email",{"_path":6559,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":6560,"content":6566,"config":6571,"_id":6573,"_type":16,"title":6574,"_source":17,"_file":6575,"_stem":6576,"_extension":20},"/en-us/blog/inside-our-new-development-team-lead-persona",{"title":6561,"description":6562,"ogTitle":6561,"ogDescription":6562,"noIndex":6,"ogImage":6563,"ogUrl":6564,"ogSiteName":895,"ogType":896,"canonicalUrls":6564,"schema":6565},"What are the best and worst parts about being a development team lead?","Dev leads, we feel you. Here's a deep dive into our interviews with development team leads, and the new persona they informed.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749668224/Blog/Hero%20Images/inside-our-new-development-team-lead-persona.jpg","https://about.gitlab.com/blog/inside-our-new-development-team-lead-persona","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"What are the best and worst parts about being a development team lead?\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Katherine Okpara\"}],\n        \"datePublished\": \"2019-01-18\",\n      }",{"title":6561,"description":6562,"authors":6567,"heroImage":6563,"date":6569,"category":14,"tags":6570},[6568],"Katherine Okpara","2019-01-18",[773,924,1316],{"slug":6572,"featured":6,"template":730},"inside-our-new-development-team-lead-persona","content:en-us:blog:inside-our-new-development-team-lead-persona.yml","Inside Our New Development Team Lead Persona","en-us/blog/inside-our-new-development-team-lead-persona.yml","en-us/blog/inside-our-new-development-team-lead-persona",{"_path":6578,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":6579,"content":6585,"config":6590,"_id":6592,"_type":16,"title":6593,"_source":17,"_file":6594,"_stem":6595,"_extension":20},"/en-us/blog/marker-io-gitlab-integration",{"title":6580,"description":6581,"ogTitle":6580,"ogDescription":6581,"noIndex":6,"ogImage":6582,"ogUrl":6583,"ogSiteName":895,"ogType":896,"canonicalUrls":6583,"schema":6584},"How to radically simplify bug reporting in GitLab","Marie Hargitt from Marker.io shares how product teams can empower colleagues to report actionable issues in GitLab, without driving developers crazy.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749679899/Blog/Hero%20Images/gitlab-marker-io.png","https://about.gitlab.com/blog/marker-io-gitlab-integration","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to radically simplify bug reporting in GitLab\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Marie Hargitt\"}],\n        \"datePublished\": \"2019-01-09\",\n      }",{"title":6580,"description":6581,"authors":6586,"heroImage":6582,"date":6588,"category":14,"tags":6589},[6587],"Marie Hargitt","2019-01-09",[1507,233,924],{"slug":6591,"featured":6,"template":730},"marker-io-gitlab-integration","content:en-us:blog:marker-io-gitlab-integration.yml","Marker Io Gitlab Integration","en-us/blog/marker-io-gitlab-integration.yml","en-us/blog/marker-io-gitlab-integration",{"_path":6597,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":6598,"content":6604,"config":6610,"_id":6612,"_type":16,"title":6613,"_source":17,"_file":6614,"_stem":6615,"_extension":20},"/en-us/blog/configure-post",{"title":6599,"description":6600,"ogTitle":6599,"ogDescription":6600,"noIndex":6,"ogImage":6601,"ogUrl":6602,"ogSiteName":895,"ogType":896,"canonicalUrls":6602,"schema":6603},"GitLab restructures to boost cross-functional collaboration","Implementing a new structure sounds like a big change, but our Configure group is here to give you the scoop.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749678839/Blog/Hero%20Images/inside-look-at-new-cross-functional-teams-at-gitlab.jpg","https://about.gitlab.com/blog/configure-post","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"We restructured to allow better cross-functional collaboration — here's how it's going.\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Emily von Hoffmann\"}],\n        \"datePublished\": \"2018-12-13\",\n      }",{"title":6605,"description":6600,"authors":6606,"heroImage":6601,"date":6608,"category":14,"tags":6609},"We restructured to allow better cross-functional collaboration — here's how it's going.",[6607],"Emily von Hoffmann","2018-12-13",[750,1507],{"slug":6611,"featured":6,"template":730},"configure-post","content:en-us:blog:configure-post.yml","Configure Post","en-us/blog/configure-post.yml","en-us/blog/configure-post",{"_path":6617,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":6618,"content":6624,"config":6629,"_id":6631,"_type":16,"title":6632,"_source":17,"_file":6633,"_stem":6634,"_extension":20},"/en-us/blog/gitlab-hackerone-bug-bounty-program-is-public-today",{"title":6619,"description":6620,"ogTitle":6619,"ogDescription":6620,"noIndex":6,"ogImage":6621,"ogUrl":6622,"ogSiteName":895,"ogType":896,"canonicalUrls":6622,"schema":6623},"GitLab's HackerOne Bug Bounty Program is public today","With 200 reported vulnerabilities and $200,000 awarded already, our bug bounty program is now public and open for your contributions.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749666816/Blog/Hero%20Images/security-cover.png","https://about.gitlab.com/blog/gitlab-hackerone-bug-bounty-program-is-public-today","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"GitLab's HackerOne Bug Bounty Program is public today\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Kathy Wang\"}],\n        \"datePublished\": \"2018-12-12\",\n      }",{"title":6619,"description":6620,"authors":6625,"heroImage":6621,"date":6627,"category":14,"tags":6628},[6626],"Kathy Wang","2018-12-12",[269,751],{"slug":6630,"featured":6,"template":730},"gitlab-hackerone-bug-bounty-program-is-public-today","content:en-us:blog:gitlab-hackerone-bug-bounty-program-is-public-today.yml","Gitlab Hackerone Bug Bounty Program Is Public Today","en-us/blog/gitlab-hackerone-bug-bounty-program-is-public-today.yml","en-us/blog/gitlab-hackerone-bug-bounty-program-is-public-today",{"_path":6636,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":6637,"content":6643,"config":6648,"_id":6650,"_type":16,"title":6651,"_source":17,"_file":6652,"_stem":6653,"_extension":20},"/en-us/blog/friends-dont-let-friends-add-options-to-code",{"title":6638,"description":6639,"ogTitle":6638,"ogDescription":6639,"noIndex":6,"ogImage":6640,"ogUrl":6641,"ogSiteName":895,"ogType":896,"canonicalUrls":6641,"schema":6642},"Friends don't let friends add options to code","Creating optional features burdens users and applications – here's how we avoid adding options.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749678953/Blog/Hero%20Images/options.jpg","https://about.gitlab.com/blog/friends-dont-let-friends-add-options-to-code","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Friends don't let friends add options to code\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Suri Patel\"}],\n        \"datePublished\": \"2018-12-10\",\n      }",{"title":6638,"description":6639,"authors":6644,"heroImage":6640,"date":6646,"category":14,"tags":6647},[6645],"Suri Patel","2018-12-10",[1099,1316,809,924],{"slug":6649,"featured":6,"template":730},"friends-dont-let-friends-add-options-to-code","content:en-us:blog:friends-dont-let-friends-add-options-to-code.yml","Friends Dont Let Friends Add Options To Code","en-us/blog/friends-dont-let-friends-add-options-to-code.yml","en-us/blog/friends-dont-let-friends-add-options-to-code",{"_path":6655,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":6656,"content":6661,"config":6664,"_id":6666,"_type":16,"title":6667,"_source":17,"_file":6668,"_stem":6669,"_extension":20},"/en-us/blog/git-protocol-v2-enabled-for-ssh-on-gitlab-dot-com",{"title":6657,"description":6658,"ogTitle":6657,"ogDescription":6658,"noIndex":6,"ogImage":2578,"ogUrl":6659,"ogSiteName":895,"ogType":896,"canonicalUrls":6659,"schema":6660},"Git Protocol v2 now enabled for SSH on GitLab.com","Fetch faster using Git Protocol v2 – here's how.","https://about.gitlab.com/blog/git-protocol-v2-enabled-for-ssh-on-gitlab-dot-com","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Git Protocol v2 now enabled for SSH on GitLab.com\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"James Ramsay\"}],\n        \"datePublished\": \"2018-12-10\",\n      }",{"title":6657,"description":6658,"authors":6662,"heroImage":2578,"date":6646,"category":14,"tags":6663},[6122],[792,1451,2438],{"slug":6665,"featured":6,"template":730},"git-protocol-v2-enabled-for-ssh-on-gitlab-dot-com","content:en-us:blog:git-protocol-v2-enabled-for-ssh-on-gitlab-dot-com.yml","Git Protocol V2 Enabled For Ssh On Gitlab Dot Com","en-us/blog/git-protocol-v2-enabled-for-ssh-on-gitlab-dot-com.yml","en-us/blog/git-protocol-v2-enabled-for-ssh-on-gitlab-dot-com",{"_path":6671,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":6672,"content":6677,"config":6682,"_id":6684,"_type":16,"title":6685,"_source":17,"_file":6686,"_stem":6687,"_extension":20},"/en-us/blog/gitlab-runner-update-required-to-use-auto-devops-and-sast",{"title":6673,"description":6674,"ogTitle":6673,"ogDescription":6674,"noIndex":6,"ogImage":4837,"ogUrl":6675,"ogSiteName":895,"ogType":896,"canonicalUrls":6675,"schema":6676},"GitLab Runner update required to use SAST in Auto DevOps","Make sure you upgrade GitLab Runner to 11.5+ to coninue using SAST in Auto DevOps.","https://about.gitlab.com/blog/gitlab-runner-update-required-to-use-auto-devops-and-sast","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"GitLab Runner update required to use SAST in Auto DevOps\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Fabio Busatto\"}],\n        \"datePublished\": \"2018-12-06\",\n      }",{"title":6673,"description":6674,"authors":6678,"heroImage":4837,"date":6680,"category":14,"tags":6681},[6679],"Fabio Busatto","2018-12-06",[1022,564,750,2438,751],{"slug":6683,"featured":6,"template":730},"gitlab-runner-update-required-to-use-auto-devops-and-sast","content:en-us:blog:gitlab-runner-update-required-to-use-auto-devops-and-sast.yml","Gitlab Runner Update Required To Use Auto Devops And Sast","en-us/blog/gitlab-runner-update-required-to-use-auto-devops-and-sast.yml","en-us/blog/gitlab-runner-update-required-to-use-auto-devops-and-sast",{"_path":6689,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":6690,"content":6696,"config":6702,"_id":6704,"_type":16,"title":6705,"_source":17,"_file":6706,"_stem":6707,"_extension":20},"/en-us/blog/availability-postgres-patroni",{"title":6691,"description":6692,"ogTitle":6691,"ogDescription":6692,"noIndex":6,"ogImage":6693,"ogUrl":6694,"ogSiteName":895,"ogType":896,"canonicalUrls":6694,"schema":6695},"Introducing Patroni as the Postgres Failover Manager on GitLab.com","GitLab.com is introducing Patroni as the Postgres Failover Manager on GitLab.com.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749671280/Blog/Hero%20Images/gitlab-gke-integration-cover.png","https://about.gitlab.com/blog/availability-postgres-patroni","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Introducing Patroni as the Postgres Failover Manager on GitLab.com\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Gerardo Lopez-Fernandez\"}],\n        \"datePublished\": \"2018-12-05\",\n      }",{"title":6691,"description":6692,"authors":6697,"heroImage":6693,"date":6699,"category":14,"tags":6700},[6698],"Gerardo Lopez-Fernandez","2018-12-05",[750,750,1790,6701,1790,1600],"bug bounty",{"slug":6703,"featured":6,"template":730},"availability-postgres-patroni","content:en-us:blog:availability-postgres-patroni.yml","Availability Postgres Patroni","en-us/blog/availability-postgres-patroni.yml","en-us/blog/availability-postgres-patroni",{"_path":6709,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":6710,"content":6716,"config":6721,"_id":6723,"_type":16,"title":6724,"_source":17,"_file":6725,"_stem":6726,"_extension":20},"/en-us/blog/microservices-integrated-solution",{"title":6711,"description":6712,"ogTitle":6711,"ogDescription":6712,"noIndex":6,"ogImage":6713,"ogUrl":6714,"ogSiteName":895,"ogType":896,"canonicalUrls":6714,"schema":6715},"Tackling the microservices repository explosion challenge","Microservices have spawned an explosion of dependent projects with multiple repos, creating the need for an integrated solution – we're working on it right now.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749662898/Blog/Hero%20Images/microservices-explosion.jpg","https://about.gitlab.com/blog/microservices-integrated-solution","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"It's raining repos: The microservices repo explosion, and what we're doing about it\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Aricka Flowers\"}],\n        \"datePublished\": \"2018-11-26\",\n      }",{"title":6717,"description":6712,"authors":6718,"heroImage":6713,"date":6719,"category":14,"tags":6720},"It's raining repos: The microservices repo explosion, and what we're doing about it",[6510],"2018-11-26",[1022,233,1180,751,773],{"slug":6722,"featured":6,"template":730},"microservices-integrated-solution","content:en-us:blog:microservices-integrated-solution.yml","Microservices Integrated Solution","en-us/blog/microservices-integrated-solution.yml","en-us/blog/microservices-integrated-solution",{"_path":6728,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":6729,"content":6734,"config":6739,"_id":6741,"_type":16,"title":6742,"_source":17,"_file":6743,"_stem":6744,"_extension":20},"/en-us/blog/new-elasticsearch-version-requirements",{"title":6730,"description":6731,"ogTitle":6730,"ogDescription":6731,"noIndex":6,"ogImage":4837,"ogUrl":6732,"ogSiteName":895,"ogType":896,"canonicalUrls":6732,"schema":6733},"GitLab 11.5 adds Elasticsearch 6, removes ES 5.5 support","GitLab 11.5 will support Elasticsearch version 6 and 5.6, sunsetting support for versions 5.5 and earlier.","https://about.gitlab.com/blog/new-elasticsearch-version-requirements","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"GitLab 11.5 to support Elasticsearch 6, sunset support for Elasticsearch 5.5\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Mario de la Ossa\"}],\n        \"datePublished\": \"2018-11-16\",\n      }",{"title":6735,"description":6731,"authors":6736,"heroImage":4837,"date":6737,"category":14,"tags":6738},"GitLab 11.5 to support Elasticsearch 6, sunset support for Elasticsearch 5.5",[6347],"2018-11-16",[750,2438],{"slug":6740,"featured":6,"template":730},"new-elasticsearch-version-requirements","content:en-us:blog:new-elasticsearch-version-requirements.yml","New Elasticsearch Version Requirements","en-us/blog/new-elasticsearch-version-requirements.yml","en-us/blog/new-elasticsearch-version-requirements",{"_path":6746,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":6747,"content":6753,"config":6757,"_id":6759,"_type":16,"title":6760,"_source":17,"_file":6761,"_stem":6762,"_extension":20},"/en-us/blog/how-we-spent-two-weeks-hunting-an-nfs-bug",{"title":6748,"description":6749,"ogTitle":6748,"ogDescription":6749,"noIndex":6,"ogImage":6750,"ogUrl":6751,"ogSiteName":895,"ogType":896,"canonicalUrls":6751,"schema":6752},"How we spent two weeks hunting an NFS bug in the Linux kernel","Here's an in-depth recap of debugging a GitLab issue that culminated in a patch for the Linux kernel.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749672173/Blog/Hero%20Images/nfs-bug-hunt-detective.jpg","https://about.gitlab.com/blog/how-we-spent-two-weeks-hunting-an-nfs-bug","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How we spent two weeks hunting an NFS bug in the Linux kernel\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Stan Hu\"}],\n        \"datePublished\": \"2018-11-14\",\n      }",{"title":6748,"description":6749,"authors":6754,"heroImage":6750,"date":6755,"category":14,"tags":6756},[877],"2018-11-14",[269,792,1099,809],{"slug":6758,"featured":6,"template":730},"how-we-spent-two-weeks-hunting-an-nfs-bug","content:en-us:blog:how-we-spent-two-weeks-hunting-an-nfs-bug.yml","How We Spent Two Weeks Hunting An Nfs Bug","en-us/blog/how-we-spent-two-weeks-hunting-an-nfs-bug.yml","en-us/blog/how-we-spent-two-weeks-hunting-an-nfs-bug",{"_path":6764,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":6765,"content":6770,"config":6775,"_id":6777,"_type":16,"title":6778,"_source":17,"_file":6779,"_stem":6780,"_extension":20},"/en-us/blog/use-multiproject-pipelines-with-gitlab-cicd",{"title":6766,"description":6767,"ogTitle":6766,"ogDescription":6767,"noIndex":6,"ogImage":2578,"ogUrl":6768,"ogSiteName":895,"ogType":896,"canonicalUrls":6768,"schema":6769},"Multi-project pipelines for streamlined repository workflow","You can connect CI/CD pipelines and artifacts for multiple related projects to make managing interactions easy.","https://about.gitlab.com/blog/use-multiproject-pipelines-with-gitlab-cicd","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to streamline interactions between multiple repositories with multi-project pipelines\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Fabio Busatto\"}],\n        \"datePublished\": \"2018-10-31\",\n      }",{"title":6771,"description":6767,"authors":6772,"heroImage":2578,"date":6773,"category":14,"tags":6774},"How to streamline interactions between multiple repositories with multi-project pipelines",[6679],"2018-10-31",[110],{"slug":6776,"featured":6,"template":730},"use-multiproject-pipelines-with-gitlab-cicd","content:en-us:blog:use-multiproject-pipelines-with-gitlab-cicd.yml","Use Multiproject Pipelines With Gitlab Cicd","en-us/blog/use-multiproject-pipelines-with-gitlab-cicd.yml","en-us/blog/use-multiproject-pipelines-with-gitlab-cicd",{"_path":6782,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":6783,"content":6788,"config":6792,"_id":6794,"_type":16,"title":6795,"_source":17,"_file":6796,"_stem":6797,"_extension":20},"/en-us/blog/setting-up-gitlab-ci-for-android-projects",{"title":6784,"description":6785,"ogTitle":6784,"ogDescription":6785,"noIndex":6,"ogImage":5825,"ogUrl":6786,"ogSiteName":895,"ogType":896,"canonicalUrls":6786,"schema":6787},"Setting up GitLab CI for Android projects","Learn how to set up GitLab CI to ensure your Android app compiles and passes tests.","https://about.gitlab.com/blog/setting-up-gitlab-ci-for-android-projects","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Setting up GitLab CI for Android projects\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Jason Yavorska\"}],\n        \"datePublished\": \"2018-10-24\",\n      }",{"title":6784,"description":6785,"authors":6789,"heroImage":5825,"date":6790,"category":14,"tags":6791},[4917],"2018-10-24",[110,4437],{"slug":6793,"featured":6,"template":730},"setting-up-gitlab-ci-for-android-projects","content:en-us:blog:setting-up-gitlab-ci-for-android-projects.yml","Setting Up Gitlab Ci For Android Projects","en-us/blog/setting-up-gitlab-ci-for-android-projects.yml","en-us/blog/setting-up-gitlab-ci-for-android-projects",{"_path":6799,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":6800,"content":6806,"config":6810,"_id":6812,"_type":16,"title":6813,"_source":17,"_file":6814,"_stem":6815,"_extension":20},"/en-us/blog/personas-and-empathy-building",{"title":6801,"description":6802,"ogTitle":6801,"ogDescription":6802,"noIndex":6,"ogImage":6803,"ogUrl":6804,"ogSiteName":895,"ogType":896,"canonicalUrls":6804,"schema":6805},"How we use personas to build empathy for different types of users","Welcome to our series on the new GitLab personas!","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749678789/Blog/Hero%20Images/how-we-use-personas-to-gain-empathy.jpg","https://about.gitlab.com/blog/personas-and-empathy-building","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How we use personas to build empathy for different types of users\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Katherine Okpara\"}],\n        \"datePublished\": \"2018-10-12\",\n      }",{"title":6801,"description":6802,"authors":6807,"heroImage":6803,"date":6808,"category":14,"tags":6809},[6568],"2018-10-12",[773,924],{"slug":6811,"featured":6,"template":730},"personas-and-empathy-building","content:en-us:blog:personas-and-empathy-building.yml","Personas And Empathy Building","en-us/blog/personas-and-empathy-building.yml","en-us/blog/personas-and-empathy-building",{"_path":6817,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":6818,"content":6824,"config":6827,"_id":6829,"_type":16,"title":6830,"_source":17,"_file":6831,"_stem":6832,"_extension":20},"/en-us/blog/strategies-to-reduce-cycle-times",{"title":6819,"description":6820,"ogTitle":6819,"ogDescription":6820,"noIndex":6,"ogImage":6821,"ogUrl":6822,"ogSiteName":895,"ogType":896,"canonicalUrls":6822,"schema":6823},"10 strategies for cycle time reduction","Engineering leads share strategies on how to speed up cycle times.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749668437/Blog/Hero%20Images/faster-cycle-times.jpg","https://about.gitlab.com/blog/strategies-to-reduce-cycle-times","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"10 strategies for cycle time reduction\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Suri Patel\"}],\n        \"datePublished\": \"2018-10-12\",\n      }",{"title":6819,"description":6820,"authors":6825,"heroImage":6821,"date":6808,"category":14,"tags":6826},[6645],[924,1507],{"slug":6828,"featured":6,"template":730},"strategies-to-reduce-cycle-times","content:en-us:blog:strategies-to-reduce-cycle-times.yml","Strategies To Reduce Cycle Times","en-us/blog/strategies-to-reduce-cycle-times.yml","en-us/blog/strategies-to-reduce-cycle-times",{"_path":6834,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":6835,"content":6840,"config":6844,"_id":6846,"_type":16,"title":6847,"_source":17,"_file":6848,"_stem":6849,"_extension":20},"/en-us/blog/gitlab-com-stability-post-gcp-migration",{"title":6836,"description":6837,"ogTitle":6836,"ogDescription":6837,"noIndex":6,"ogImage":6693,"ogUrl":6838,"ogSiteName":895,"ogType":896,"canonicalUrls":6838,"schema":6839},"What's up with GitLab.com? Check out the latest data on its stability","Let's take a look at the data on the stability of GitLab.com from before and after our recent migration from Azure to GCP, and dive into why things are looking up.","https://about.gitlab.com/blog/gitlab-com-stability-post-gcp-migration","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"What's up with GitLab.com? Check out the latest data on its stability\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Andrew Newdigate\"}],\n        \"datePublished\": \"2018-10-11\",\n      }",{"title":6836,"description":6837,"authors":6841,"heroImage":6693,"date":6842,"category":14,"tags":6843},[1617],"2018-10-11",[1373,925,1099,1180,881,904],{"slug":6845,"featured":6,"template":730},"gitlab-com-stability-post-gcp-migration","content:en-us:blog:gitlab-com-stability-post-gcp-migration.yml","Gitlab Com Stability Post Gcp Migration","en-us/blog/gitlab-com-stability-post-gcp-migration.yml","en-us/blog/gitlab-com-stability-post-gcp-migration",{"_path":6851,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":6852,"content":6858,"config":6863,"_id":6865,"_type":16,"title":6866,"_source":17,"_file":6867,"_stem":6868,"_extension":20},"/en-us/blog/meltano-functional-group-update-post",{"title":6853,"description":6854,"ogTitle":6853,"ogDescription":6854,"noIndex":6,"ogImage":6855,"ogUrl":6856,"ogSiteName":895,"ogType":896,"canonicalUrls":6856,"schema":6857},"New Meltano personas, priorities, and updates from the team","There's a lot going on — here are some of the highlights on user research, dogfooding Meltano, embedding engineers, and hiring!","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749678847/Blog/Hero%20Images/meltano-fgu.jpg","https://about.gitlab.com/blog/meltano-functional-group-update-post","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"New Meltano personas, priorities, and updates from the team\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Jacob Schatz\"}],\n        \"datePublished\": \"2018-10-08\",\n      }",{"title":6853,"description":6854,"authors":6859,"heroImage":6855,"date":6861,"category":14,"tags":6862},[6860],"Jacob Schatz","2018-10-08",[3007,750,792,1099,924],{"slug":6864,"featured":6,"template":730},"meltano-functional-group-update-post","content:en-us:blog:meltano-functional-group-update-post.yml","Meltano Functional Group Update Post","en-us/blog/meltano-functional-group-update-post.yml","en-us/blog/meltano-functional-group-update-post",{"_path":6870,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":6871,"content":6877,"config":6882,"_id":6884,"_type":16,"title":6885,"_source":17,"_file":6886,"_stem":6887,"_extension":20},"/en-us/blog/working-on-two-git-branches-at-the-same-time",{"title":6872,"description":6873,"ogTitle":6872,"ogDescription":6873,"noIndex":6,"ogImage":6874,"ogUrl":6875,"ogSiteName":895,"ogType":896,"canonicalUrls":6875,"schema":6876},"How to work on two Git branches at the same time","Watch the demo on how using the GitLab Web IDE and your local dev environment to work on two branches at once can help save time.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749678782/Blog/Hero%20Images/working-on-two-git-branches-at-the-same-time.jpg","https://about.gitlab.com/blog/working-on-two-git-branches-at-the-same-time","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to work on two Git branches at the same time\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"William Chia\"}],\n        \"datePublished\": \"2018-10-03\",\n      }",{"title":6872,"description":6873,"authors":6878,"heroImage":6874,"date":6880,"category":14,"tags":6881},[6879],"William Chia","2018-10-03",[3007,750,792,1099,924],{"slug":6883,"featured":6,"template":730},"working-on-two-git-branches-at-the-same-time","content:en-us:blog:working-on-two-git-branches-at-the-same-time.yml","Working On Two Git Branches At The Same Time","en-us/blog/working-on-two-git-branches-at-the-same-time.yml","en-us/blog/working-on-two-git-branches-at-the-same-time",{"_path":6889,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":6890,"content":6896,"config":6901,"_id":6903,"_type":16,"title":6904,"_source":17,"_file":6905,"_stem":6906,"_extension":20},"/en-us/blog/why-all-organizations-need-prometheus",{"title":6891,"description":6892,"ogTitle":6891,"ogDescription":6892,"noIndex":6,"ogImage":6893,"ogUrl":6894,"ogSiteName":895,"ogType":896,"canonicalUrls":6894,"schema":6895},"Why Prometheus is for everyone","You think you don't need Prometheus – I'm here to tell you why you're wrong. Learn why GitLab uses Prometheus, and why your organization should be using it too!","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749678778/Blog/Hero%20Images/monitoring-cover.png","https://about.gitlab.com/blog/why-all-organizations-need-prometheus","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Why Prometheus is for everyone\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Lee Matos\"}],\n        \"datePublished\": \"2018-09-27\",\n      }",{"title":6891,"description":6892,"authors":6897,"heroImage":6893,"date":6899,"category":14,"tags":6900},[6898],"Lee Matos","2018-09-27",[750,1099,904],{"slug":6902,"featured":6,"template":730},"why-all-organizations-need-prometheus","content:en-us:blog:why-all-organizations-need-prometheus.yml","Why All Organizations Need Prometheus","en-us/blog/why-all-organizations-need-prometheus.yml","en-us/blog/why-all-organizations-need-prometheus",{"_path":6908,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":6909,"content":6915,"config":6920,"_id":6922,"_type":16,"title":6923,"_source":17,"_file":6924,"_stem":6925,"_extension":20},"/en-us/blog/how-we-built-gitlab-geo",{"title":6910,"description":6911,"ogTitle":6910,"ogDescription":6911,"noIndex":6,"ogImage":6912,"ogUrl":6913,"ogSiteName":895,"ogType":896,"canonicalUrls":6913,"schema":6914},"How we built GitLab Geo","Take a deep dive into the many architectural decisions we made while building GitLab Geo.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749678985/Blog/Hero%20Images/how-we-built-geo-cover.jpg","https://about.gitlab.com/blog/how-we-built-gitlab-geo","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How we built GitLab Geo\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Gabriel Mazetto\"}],\n        \"datePublished\": \"2018-09-14\",\n      }",{"title":6910,"description":6911,"authors":6916,"heroImage":6912,"date":6918,"category":14,"tags":6919},[6917],"Gabriel Mazetto","2018-09-14",[750,1099],{"slug":6921,"featured":6,"template":730},"how-we-built-gitlab-geo","content:en-us:blog:how-we-built-gitlab-geo.yml","How We Built Gitlab Geo","en-us/blog/how-we-built-gitlab-geo.yml","en-us/blog/how-we-built-gitlab-geo",{"_path":6927,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":6928,"content":6934,"config":6939,"_id":6941,"_type":16,"title":6942,"_source":17,"_file":6943,"_stem":6944,"_extension":20},"/en-us/blog/inside-gitlab-security-dashboards",{"title":6929,"description":6930,"ogTitle":6929,"ogDescription":6930,"noIndex":6,"ogImage":6931,"ogUrl":6932,"ogSiteName":895,"ogType":896,"canonicalUrls":6932,"schema":6933},"Security dashboards secure applications at DevOps speed","GitLab Security Dashboards enable security professionals to view vulnerabilities across a project. Here’s an inside look.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749678710/Blog/Hero%20Images/inside-gitlab-security-dashboards.jpg","https://about.gitlab.com/blog/inside-gitlab-security-dashboards","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How can teams secure applications at DevOps speed? Security Dashboards are here to help.\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Cindy Blake\"}],\n        \"datePublished\": \"2018-09-14\",\n      }",{"title":6935,"description":6930,"authors":6936,"heroImage":6931,"date":6918,"category":14,"tags":6938},"How can teams secure applications at DevOps speed? Security Dashboards are here to help.",[6937],"Cindy Blake",[564,750,1099,751],{"slug":6940,"featured":6,"template":730},"inside-gitlab-security-dashboards","content:en-us:blog:inside-gitlab-security-dashboards.yml","Inside Gitlab Security Dashboards","en-us/blog/inside-gitlab-security-dashboards.yml","en-us/blog/inside-gitlab-security-dashboards",{"_path":6946,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":6947,"content":6953,"config":6958,"_id":6960,"_type":16,"title":6961,"_source":17,"_file":6962,"_stem":6963,"_extension":20},"/en-us/blog/the-road-to-gitaly-1-0",{"title":6948,"description":6949,"ogTitle":6948,"ogDescription":6949,"noIndex":6,"ogImage":6950,"ogUrl":6951,"ogSiteName":895,"ogType":896,"canonicalUrls":6951,"schema":6952},"GitLab no longer requires NFS: The road to Gitaly v1.0","How we went from vertical to horizontal scaling without depending on NFS by creating our own Git RPC service.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749670092/Blog/Hero%20Images/road-to-gitaly.jpg","https://about.gitlab.com/blog/the-road-to-gitaly-1-0","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"The road to Gitaly v1.0 (aka, why GitLab doesn't require NFS for storing Git data anymore)\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Zeger-Jan van de Weg\"}],\n        \"datePublished\": \"2018-09-12\",\n      }",{"title":6954,"description":6949,"authors":6955,"heroImage":6950,"date":6956,"category":14,"tags":6957},"The road to Gitaly v1.0 (aka, why GitLab doesn't require NFS for storing Git data anymore)",[4472],"2018-09-12",[1099,792,904],{"slug":6959,"featured":6,"template":730},"the-road-to-gitaly-1-0","content:en-us:blog:the-road-to-gitaly-1-0.yml","The Road To Gitaly 1 0","en-us/blog/the-road-to-gitaly-1-0.yml","en-us/blog/the-road-to-gitaly-1-0",{"_path":6965,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":6966,"content":6972,"config":6976,"_id":6978,"_type":16,"title":6979,"_source":17,"_file":6980,"_stem":6981,"_extension":20},"/en-us/blog/deep-dive-into-gitlabs-ux-design-process",{"title":6967,"description":6968,"ogTitle":6967,"ogDescription":6968,"noIndex":6,"ogImage":6969,"ogUrl":6970,"ogSiteName":895,"ogType":896,"canonicalUrls":6970,"schema":6971},"A deep dive into GitLab's UX design process","The UX team shares how they communicate, plan, share, and tackle improvements one iteration at a time.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749678759/Blog/Hero%20Images/designwebcast.jpg","https://about.gitlab.com/blog/deep-dive-into-gitlabs-ux-design-process","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"A deep dive into GitLab's UX design process\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Suri Patel\"}],\n        \"datePublished\": \"2018-09-05\",\n      }",{"title":6967,"description":6968,"authors":6973,"heroImage":6969,"date":6974,"category":14,"tags":6975},[6645],"2018-09-05",[1099,1316,5195,1141],{"slug":6977,"featured":6,"template":730},"deep-dive-into-gitlabs-ux-design-process","content:en-us:blog:deep-dive-into-gitlabs-ux-design-process.yml","Deep Dive Into Gitlabs Ux Design Process","en-us/blog/deep-dive-into-gitlabs-ux-design-process.yml","en-us/blog/deep-dive-into-gitlabs-ux-design-process",{"_path":6983,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":6984,"content":6989,"config":6993,"_id":6995,"_type":16,"title":6996,"_source":17,"_file":6997,"_stem":6998,"_extension":20},"/en-us/blog/gitlab-pages-update",{"title":6985,"description":6986,"ogTitle":6985,"ogDescription":6986,"noIndex":6,"ogImage":6693,"ogUrl":6987,"ogSiteName":895,"ogType":896,"canonicalUrls":6987,"schema":6988},"Update about GitLab Pages","If you are using GitLab Pages with a custom domain, you may need to update your DNS.","https://about.gitlab.com/blog/gitlab-pages-update","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Update about GitLab Pages\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"David Smith\"}],\n        \"datePublished\": \"2018-08-28\",\n      }",{"title":6985,"description":6986,"authors":6990,"heroImage":6693,"date":6991,"category":14,"tags":6992},[2564],"2018-08-28",[925,582,1373,1180],{"slug":6994,"featured":6,"template":730},"gitlab-pages-update","content:en-us:blog:gitlab-pages-update.yml","Gitlab Pages Update","en-us/blog/gitlab-pages-update.yml","en-us/blog/gitlab-pages-update",{"_path":7000,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":7001,"content":7006,"config":7010,"_id":7012,"_type":16,"title":7013,"_source":17,"_file":7014,"_stem":7015,"_extension":20},"/en-us/blog/gitlab-markdown-tutorial",{"title":7002,"description":7003,"ogTitle":7002,"ogDescription":7003,"noIndex":6,"ogImage":6193,"ogUrl":7004,"ogSiteName":895,"ogType":896,"canonicalUrls":7004,"schema":7005},"A 5-minute Markdown tutorial","New to GitLab? New to Markdown? Here's a quick explainer on using Markdown to format text all over GitLab.","https://about.gitlab.com/blog/gitlab-markdown-tutorial","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"A 5-minute Markdown tutorial\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Rebecca Dodd\"}],\n        \"datePublished\": \"2018-08-17\",\n      }",{"title":7002,"description":7003,"authors":7007,"heroImage":6193,"date":7008,"category":14,"tags":7009},[4193],"2018-08-17",[3007,1099],{"slug":7011,"featured":6,"template":730},"gitlab-markdown-tutorial","content:en-us:blog:gitlab-markdown-tutorial.yml","Gitlab Markdown Tutorial","en-us/blog/gitlab-markdown-tutorial.yml","en-us/blog/gitlab-markdown-tutorial",{"_path":7017,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":7018,"content":7024,"config":7028,"_id":7030,"_type":16,"title":7031,"_source":17,"_file":7032,"_stem":7033,"_extension":20},"/en-us/blog/gitlab-auto-devops-in-action",{"title":7019,"description":7020,"ogTitle":7019,"ogDescription":7020,"noIndex":6,"ogImage":7021,"ogUrl":7022,"ogSiteName":895,"ogType":896,"canonicalUrls":7022,"schema":7023},"GitLab Auto DevOps in action","See how the only single application for the entire DevOps lifecycle helps you deliver better software, faster.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749664015/Blog/Hero%20Images/laptop.jpg","https://about.gitlab.com/blog/gitlab-auto-devops-in-action","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"GitLab Auto DevOps in action\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Aricka Flowers\"}],\n        \"datePublished\": \"2018-08-10\",\n      }",{"title":7019,"description":7020,"authors":7025,"heroImage":7021,"date":7026,"category":14,"tags":7027},[6510],"2018-08-10",[564,1099,773,924,751,1451,750],{"slug":7029,"featured":6,"template":730},"gitlab-auto-devops-in-action","content:en-us:blog:gitlab-auto-devops-in-action.yml","Gitlab Auto Devops In Action","en-us/blog/gitlab-auto-devops-in-action.yml","en-us/blog/gitlab-auto-devops-in-action",{"_path":7035,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":7036,"content":7042,"config":7047,"_id":7049,"_type":16,"title":7050,"_source":17,"_file":7051,"_stem":7052,"_extension":20},"/en-us/blog/how-devops-and-gitlab-cicd-enhance-a-frontend-workflow",{"title":7037,"description":7038,"ogTitle":7037,"ogDescription":7038,"noIndex":6,"ogImage":7039,"ogUrl":7040,"ogSiteName":895,"ogType":896,"canonicalUrls":7040,"schema":7041},"How DevOps and GitLab CI/CD enhance a frontend workflow","The GitLab frontend team uses DevOps and CI/CD to ensure code consistency, fast delivery, and simple automation.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749679026/Blog/Hero%20Images/frontendworkflow.jpg","https://about.gitlab.com/blog/how-devops-and-gitlab-cicd-enhance-a-frontend-workflow","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How DevOps and GitLab CI/CD enhance a frontend workflow\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"José Iván Vargas\"}],\n        \"datePublished\": \"2018-08-09\",\n      }",{"title":7037,"description":7038,"authors":7043,"heroImage":7039,"date":7045,"category":14,"tags":7046},[7044],"José Iván Vargas","2018-08-09",[2105,924,1022,564],{"slug":7048,"featured":6,"template":730},"how-devops-and-gitlab-cicd-enhance-a-frontend-workflow","content:en-us:blog:how-devops-and-gitlab-cicd-enhance-a-frontend-workflow.yml","How Devops And Gitlab Cicd Enhance A Frontend Workflow","en-us/blog/how-devops-and-gitlab-cicd-enhance-a-frontend-workflow.yml","en-us/blog/how-devops-and-gitlab-cicd-enhance-a-frontend-workflow",{"_path":7054,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":7055,"content":7061,"config":7064,"_id":7066,"_type":16,"title":7067,"_source":17,"_file":7068,"_stem":7069,"_extension":20},"/en-us/blog/why-you-should-join-the-gitlab-security-team",{"title":7056,"description":7057,"ogTitle":7056,"ogDescription":7057,"noIndex":6,"ogImage":7058,"ogUrl":7059,"ogSiteName":895,"ogType":896,"canonicalUrls":7059,"schema":7060},"Why you should join the GitLab security team","Meet Director of Security Kathy Wang for a look inside our remote (and growing!) security team.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749668486/Blog/Hero%20Images/why-you-should-join-the-gitlab-security-team.jpg","https://about.gitlab.com/blog/why-you-should-join-the-gitlab-security-team","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Why you should join the GitLab security team\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Emily von Hoffmann\"}],\n        \"datePublished\": \"2018-08-09\",\n      }",{"title":7056,"description":7057,"authors":7062,"heroImage":7058,"date":7045,"category":14,"tags":7063},[6607],[751],{"slug":7065,"featured":6,"template":730},"why-you-should-join-the-gitlab-security-team","content:en-us:blog:why-you-should-join-the-gitlab-security-team.yml","Why You Should Join The Gitlab Security Team","en-us/blog/why-you-should-join-the-gitlab-security-team.yml","en-us/blog/why-you-should-join-the-gitlab-security-team",{"_path":7071,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":7072,"content":7078,"config":7083,"_id":7085,"_type":16,"title":7086,"_source":17,"_file":7087,"_stem":7088,"_extension":20},"/en-us/blog/git-happens",{"title":7073,"description":7074,"ogTitle":7073,"ogDescription":7074,"noIndex":6,"ogImage":7075,"ogUrl":7076,"ogSiteName":895,"ogType":896,"canonicalUrls":7076,"schema":7077},"Git happens! 6 Common Git mistakes and how to fix them","Whether you added the wrong file, committed directly to master, or some other mishap, we've got you covered.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749678743/Blog/Hero%20Images/fix-common-git-mistakes.jpg","https://about.gitlab.com/blog/git-happens","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Git happens! 6 Common Git mistakes and how to fix them\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Sam Beckham\"}],\n        \"datePublished\": \"2018-08-08\",\n      }",{"title":7073,"description":7074,"authors":7079,"heroImage":7075,"date":7081,"category":14,"tags":7082},[7080],"Sam Beckham","2018-08-08",[792],{"slug":7084,"featured":6,"template":730},"git-happens","content:en-us:blog:git-happens.yml","Git Happens","en-us/blog/git-happens.yml","en-us/blog/git-happens",{"_path":7090,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":7091,"content":7097,"config":7101,"_id":7103,"_type":16,"title":7104,"_source":17,"_file":7105,"_stem":7106,"_extension":20},"/en-us/blog/understanding-kubernestes-rbac",{"title":7092,"description":7093,"ogTitle":7092,"ogDescription":7093,"noIndex":6,"ogImage":7094,"ogUrl":7095,"ogSiteName":895,"ogType":896,"canonicalUrls":7095,"schema":7096},"What you need to know about Kubernetes RBAC","Role-based access control is now default, and expected in most Kubernetes deployments. Here's the What, Why and How of RBAC.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749678884/Blog/Hero%20Images/understanding-kubernetes-rbac-post-cover.jpg","https://about.gitlab.com/blog/understanding-kubernestes-rbac","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"What you need to know about Kubernetes RBAC\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Abubakar Siddiq Ango\"}],\n        \"datePublished\": \"2018-08-07\",\n      }",{"title":7092,"description":7093,"authors":7098,"heroImage":7094,"date":7099,"category":14,"tags":7100},[1333],"2018-08-07",[1180,582],{"slug":7102,"featured":6,"template":730},"understanding-kubernestes-rbac","content:en-us:blog:understanding-kubernestes-rbac.yml","Understanding Kubernestes Rbac","en-us/blog/understanding-kubernestes-rbac.yml","en-us/blog/understanding-kubernestes-rbac",{"_path":7108,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":7109,"content":7115,"config":7119,"_id":7121,"_type":16,"title":7122,"_source":17,"_file":7123,"_stem":7124,"_extension":20},"/en-us/blog/using-the-gitlab-ci-slash-cd-for-smart-home-configuration-management",{"title":7110,"description":7111,"ogTitle":7110,"ogDescription":7111,"noIndex":6,"ogImage":7112,"ogUrl":7113,"ogSiteName":895,"ogType":896,"canonicalUrls":7113,"schema":7114},"How to simplify your smart home configuration with GitLab CI/CD","How to use GitLab pipelines to automatically test and deploy new home-assistant configurations, wherever you are.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749678717/Blog/Hero%20Images/ci-smart-home-configuration.jpg","https://about.gitlab.com/blog/using-the-gitlab-ci-slash-cd-for-smart-home-configuration-management","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to simplify your smart home configuration with GitLab CI/CD\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Mario de la Ossa\"}],\n        \"datePublished\": \"2018-08-02\",\n      }",{"title":7110,"description":7111,"authors":7116,"heroImage":7112,"date":7117,"category":14,"tags":7118},[6347],"2018-08-02",[1022,792],{"slug":7120,"featured":6,"template":730},"using-the-gitlab-ci-slash-cd-for-smart-home-configuration-management","content:en-us:blog:using-the-gitlab-ci-slash-cd-for-smart-home-configuration-management.yml","Using The Gitlab Ci Slash Cd For Smart Home Configuration Management","en-us/blog/using-the-gitlab-ci-slash-cd-for-smart-home-configuration-management.yml","en-us/blog/using-the-gitlab-ci-slash-cd-for-smart-home-configuration-management",{"_path":7126,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":7127,"content":7132,"config":7136,"_id":7138,"_type":16,"title":7139,"_source":17,"_file":7140,"_stem":7141,"_extension":20},"/en-us/blog/gcp-move-update",{"title":7128,"description":7129,"ogTitle":7128,"ogDescription":7129,"noIndex":6,"ogImage":6693,"ogUrl":7130,"ogSiteName":895,"ogType":896,"canonicalUrls":7130,"schema":7131},"Update on our planned move from Azure to Google Cloud Platform","GitLab.com is migrating to Google Cloud Platform August 11 – here’s what this means for you now and in the future.","https://about.gitlab.com/blog/gcp-move-update","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Update on our planned move from Azure to Google Cloud Platform\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"David Smith\"}],\n        \"datePublished\": \"2018-07-19\",\n      }",{"title":7128,"description":7129,"authors":7133,"heroImage":6693,"date":7134,"category":14,"tags":7135},[2564],"2018-07-19",[925,582,1373,1180],{"slug":7137,"featured":6,"template":730},"gcp-move-update","content:en-us:blog:gcp-move-update.yml","Gcp Move Update","en-us/blog/gcp-move-update.yml","en-us/blog/gcp-move-update",{"_path":7143,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":7144,"content":7150,"config":7154,"_id":7156,"_type":16,"title":7157,"_source":17,"_file":7158,"_stem":7159,"_extension":20},"/en-us/blog/solving-gitlabs-changelog-conflict-crisis",{"title":7145,"description":7146,"ogTitle":7145,"ogDescription":7146,"noIndex":6,"ogImage":7147,"ogUrl":7148,"ogSiteName":895,"ogType":896,"canonicalUrls":7148,"schema":7149},"How we solved GitLab's CHANGELOG conflict crisis","How we eliminated changelog-related merge conflicts and automated a crucial part of our release process.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749672139/Blog/Hero%20Images/solving-gitlab-changelog-crisis.jpg","https://about.gitlab.com/blog/solving-gitlabs-changelog-conflict-crisis","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How we solved GitLab's CHANGELOG conflict crisis\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Robert Speicher\"}],\n        \"datePublished\": \"2018-07-03\",\n      }",{"title":7145,"description":7146,"authors":7151,"heroImage":7147,"date":7152,"category":14,"tags":7153},[4565],"2018-07-03",[1099,924],{"slug":7155,"featured":6,"template":730},"solving-gitlabs-changelog-conflict-crisis","content:en-us:blog:solving-gitlabs-changelog-conflict-crisis.yml","Solving Gitlabs Changelog Conflict Crisis","en-us/blog/solving-gitlabs-changelog-conflict-crisis.yml","en-us/blog/solving-gitlabs-changelog-conflict-crisis",{"_path":7161,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":7162,"content":7168,"config":7172,"_id":7174,"_type":16,"title":7175,"_source":17,"_file":7176,"_stem":7177,"_extension":20},"/en-us/blog/introducing-auto-breakfast-from-gitlab",{"title":7163,"description":7164,"ogTitle":7163,"ogDescription":7164,"noIndex":6,"ogImage":7165,"ogUrl":7166,"ogSiteName":895,"ogType":896,"canonicalUrls":7166,"schema":7167},"Introducing Auto Breakfast from GitLab (sort of)","GitLab can't make you breakfast? This is what happens when you tell a GitLab team member whose favorite catchphrase is \"Challenge accepted.\"","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749680054/Blog/Hero%20Images/auto-breakfast.jpg","https://about.gitlab.com/blog/introducing-auto-breakfast-from-gitlab","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Introducing Auto Breakfast from GitLab (sort of)\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Brendan O'Leary\"}],\n        \"datePublished\": \"2018-06-29\",\n      }",{"title":7163,"description":7164,"authors":7169,"heroImage":7165,"date":7170,"category":14,"tags":7171},[2654],"2018-06-29",[1022,4437],{"slug":7173,"featured":6,"template":730},"introducing-auto-breakfast-from-gitlab","content:en-us:blog:introducing-auto-breakfast-from-gitlab.yml","Introducing Auto Breakfast From Gitlab","en-us/blog/introducing-auto-breakfast-from-gitlab.yml","en-us/blog/introducing-auto-breakfast-from-gitlab",{"_path":7179,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":7180,"content":7185,"config":7191,"_id":7193,"_type":16,"title":7194,"_source":17,"_file":7195,"_stem":7196,"_extension":20},"/en-us/blog/play-reviewer-roulette",{"title":7181,"description":7182,"ogTitle":7181,"ogDescription":7182,"noIndex":6,"ogImage":5770,"ogUrl":7183,"ogSiteName":895,"ogType":896,"canonicalUrls":7183,"schema":7184},"Reviewer roulette: Easy way to find merge request reviewers","Finding the right reviewer for a merge request can be tough. Reviewer Roulette makes the decision easier – by making it random!","https://about.gitlab.com/blog/play-reviewer-roulette","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Let's play Reviewer Roulette! An easy way to find a reviewer for your merge request\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Dennis Tang\"}],\n        \"datePublished\": \"2018-06-28\",\n      }",{"title":7186,"description":7182,"authors":7187,"heroImage":5770,"date":7189,"category":14,"tags":7190},"Let's play Reviewer Roulette! An easy way to find a reviewer for your merge request",[7188],"Dennis Tang","2018-06-28",[1099,1507,2105],{"slug":7192,"featured":6,"template":730},"play-reviewer-roulette","content:en-us:blog:play-reviewer-roulette.yml","Play Reviewer Roulette","en-us/blog/play-reviewer-roulette.yml","en-us/blog/play-reviewer-roulette",{"_path":7198,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":7199,"content":7204,"config":7208,"_id":7210,"_type":16,"title":7211,"_source":17,"_file":7212,"_stem":7213,"_extension":20},"/en-us/blog/moving-to-gcp",{"title":7200,"description":7201,"ogTitle":7200,"ogDescription":7201,"noIndex":6,"ogImage":6693,"ogUrl":7202,"ogSiteName":895,"ogType":896,"canonicalUrls":7202,"schema":7203},"We’re moving from Azure to Google Cloud Platform","GitLab.com is migrating to Google Cloud Platform – here’s what this means for you now and in the future.","https://about.gitlab.com/blog/moving-to-gcp","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"We’re moving from Azure to Google Cloud Platform\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Andrew Newdigate\"}],\n        \"datePublished\": \"2018-06-25\",\n      }",{"title":7200,"description":7201,"authors":7205,"heroImage":6693,"date":7206,"category":14,"tags":7207},[1617],"2018-06-25",[925,582,1373,1180],{"slug":7209,"featured":6,"template":730},"moving-to-gcp","content:en-us:blog:moving-to-gcp.yml","Moving To Gcp","en-us/blog/moving-to-gcp.yml","en-us/blog/moving-to-gcp",{"_path":7215,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":7216,"content":7222,"config":7227,"_id":7229,"_type":16,"title":7230,"_source":17,"_file":7231,"_stem":7232,"_extension":20},"/en-us/blog/autoscale-continuous-deployment-gitlab-runner-digital-ocean",{"title":7217,"description":7218,"ogTitle":7217,"ogDescription":7218,"noIndex":6,"ogImage":7219,"ogUrl":7220,"ogSiteName":895,"ogType":896,"canonicalUrls":7220,"schema":7221},"How to autoscale continuous deployment with GitLab Runner on DigitalOcean","Our friends over at DigitalOcean share how to configure a highly scalable, responsive and cost-effective GitLab infrastructure.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749680042/Blog/Hero%20Images/gitlab-digitalocean-cover.jpg","https://about.gitlab.com/blog/autoscale-continuous-deployment-gitlab-runner-digital-ocean","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to autoscale continuous deployment with GitLab Runner on DigitalOcean\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Owen Williams\"}],\n        \"datePublished\": \"2018-06-19\",\n      }",{"title":7217,"description":7218,"authors":7223,"heroImage":7219,"date":7225,"category":14,"tags":7226},[7224],"Owen Williams","2018-06-19",[1022,233],{"slug":7228,"featured":6,"template":730},"autoscale-continuous-deployment-gitlab-runner-digital-ocean","content:en-us:blog:autoscale-continuous-deployment-gitlab-runner-digital-ocean.yml","Autoscale Continuous Deployment Gitlab Runner Digital Ocean","en-us/blog/autoscale-continuous-deployment-gitlab-runner-digital-ocean.yml","en-us/blog/autoscale-continuous-deployment-gitlab-runner-digital-ocean",{"_path":7234,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":7235,"content":7241,"config":7246,"_id":7248,"_type":16,"title":7249,"_source":17,"_file":7250,"_stem":7251,"_extension":20},"/en-us/blog/introducing-gitlab-s-integrated-development-environment",{"title":7236,"description":7237,"ogTitle":7236,"ogDescription":7237,"noIndex":6,"ogImage":7238,"ogUrl":7239,"ogSiteName":895,"ogType":896,"canonicalUrls":7239,"schema":7240},"Meet the GitLab Web IDE","Here's how we went from a proof of concept to a new feature that makes it even easier for everyone to edit inside of GitLab.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749678812/Blog/Hero%20Images/web-ide-cover.jpg","https://about.gitlab.com/blog/introducing-gitlab-s-integrated-development-environment","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Meet the GitLab Web IDE\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Dimitrie Hoekstra\"}],\n        \"datePublished\": \"2018-06-15\",\n      }",{"title":7236,"description":7237,"authors":7242,"heroImage":7238,"date":7244,"category":14,"tags":7245},[7243],"Dimitrie Hoekstra","2018-06-15",[1099,2105,1316],{"slug":7247,"featured":6,"template":730},"introducing-gitlab-s-integrated-development-environment","content:en-us:blog:introducing-gitlab-s-integrated-development-environment.yml","Introducing Gitlab S Integrated Development Environment","en-us/blog/introducing-gitlab-s-integrated-development-environment.yml","en-us/blog/introducing-gitlab-s-integrated-development-environment",{"_path":7253,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":7254,"content":7260,"config":7265,"_id":7267,"_type":16,"title":7268,"_source":17,"_file":7269,"_stem":7270,"_extension":20},"/en-us/blog/keeping-git-commit-history-clean",{"title":7255,"description":7256,"ogTitle":7255,"ogDescription":7256,"noIndex":6,"ogImage":7257,"ogUrl":7258,"ogSiteName":895,"ogType":896,"canonicalUrls":7258,"schema":7259},"How (and why!) to keep your Git commit history clean","Git commit history is very easy to mess up, here's how you can fix it!","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659457/Blog/Hero%20Images/keep-git-commit-history-clean.jpg","https://about.gitlab.com/blog/keeping-git-commit-history-clean","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How (and why!) to keep your Git commit history clean\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Kushal Pandya\"}],\n        \"datePublished\": \"2018-06-07\",\n      }",{"title":7255,"description":7256,"authors":7261,"heroImage":7257,"date":7263,"category":14,"tags":7264},[7262],"Kushal Pandya","2018-06-07",[792,924],{"slug":7266,"featured":6,"template":730},"keeping-git-commit-history-clean","content:en-us:blog:keeping-git-commit-history-clean.yml","Keeping Git Commit History Clean","en-us/blog/keeping-git-commit-history-clean.yml","en-us/blog/keeping-git-commit-history-clean",{"_path":7272,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":7273,"content":7279,"config":7283,"_id":7285,"_type":16,"title":7286,"_source":17,"_file":7287,"_stem":7288,"_extension":20},"/en-us/blog/journey-in-native-unicode-emoji",{"title":7274,"description":7275,"ogTitle":7274,"ogDescription":7275,"noIndex":6,"ogImage":7276,"ogUrl":7277,"ogSiteName":895,"ogType":896,"canonicalUrls":7277,"schema":7278},"Our journey in switching to native Unicode emoji","Unicode is hard. Here's a guide to getting native Unicode Emoji right 👌. Learn more!","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749672573/Blog/Hero%20Images/journey-in-native-unicode-emoji-cover.png","https://about.gitlab.com/blog/journey-in-native-unicode-emoji","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Our journey in switching to native Unicode emoji\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Eric Eastwood\"}],\n        \"datePublished\": \"2018-05-30\",\n      }",{"title":7274,"description":7275,"authors":7280,"heroImage":7276,"date":7281,"category":14,"tags":7282},[5682],"2018-05-30",[2105],{"slug":7284,"featured":6,"template":730},"journey-in-native-unicode-emoji","content:en-us:blog:journey-in-native-unicode-emoji.yml","Journey In Native Unicode Emoji","en-us/blog/journey-in-native-unicode-emoji.yml","en-us/blog/journey-in-native-unicode-emoji",{"_path":7290,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":7291,"content":7296,"config":7300,"_id":7302,"_type":16,"title":7303,"_source":17,"_file":7304,"_stem":7305,"_extension":20},"/en-us/blog/gke-webcast-recap-post",{"title":7292,"description":7293,"ogTitle":7292,"ogDescription":7293,"noIndex":6,"ogImage":6693,"ogUrl":7294,"ogSiteName":895,"ogType":896,"canonicalUrls":7294,"schema":7295},"Scalable app deployment with GitLab and Google Cloud Platform","Get the power to spin up a Kubernetes cluster managed by Google Cloud Platform in a few clicks – watch the demo of our native integration.","https://about.gitlab.com/blog/gke-webcast-recap-post","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Scalable app deployment with GitLab and Google Cloud Platform\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Suri Patel\"}],\n        \"datePublished\": \"2018-05-10\",\n      }",{"title":7292,"description":7293,"authors":7297,"heroImage":6693,"date":7298,"category":14,"tags":7299},[6645],"2018-05-10",[1373,925,1180,5195,3007],{"slug":7301,"featured":6,"template":730},"gke-webcast-recap-post","content:en-us:blog:gke-webcast-recap-post.yml","Gke Webcast Recap Post","en-us/blog/gke-webcast-recap-post.yml","en-us/blog/gke-webcast-recap-post",{"_path":7307,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":7308,"content":7313,"config":7318,"_id":7320,"_type":16,"title":7321,"_source":17,"_file":7322,"_stem":7323,"_extension":20},"/en-us/blog/using-gitlab-ci-to-build-gitlab-faster",{"title":7309,"description":7310,"ogTitle":7309,"ogDescription":7310,"noIndex":6,"ogImage":5553,"ogUrl":7311,"ogSiteName":895,"ogType":896,"canonicalUrls":7311,"schema":7312},"How we used GitLab CI to build GitLab faster","Here's how we went from a daily manual merge of GitLab Core into GitLab Enterprise to automated merges every three hours.","https://about.gitlab.com/blog/using-gitlab-ci-to-build-gitlab-faster","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How we used GitLab CI to build GitLab faster\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Rémy Coutable\"}],\n        \"datePublished\": \"2018-05-02\",\n      }",{"title":7309,"description":7310,"authors":7314,"heroImage":5553,"date":7316,"category":14,"tags":7317},[7315],"Rémy Coutable","2018-05-02",[1099,1022],{"slug":7319,"featured":6,"template":730},"using-gitlab-ci-to-build-gitlab-faster","content:en-us:blog:using-gitlab-ci-to-build-gitlab-faster.yml","Using Gitlab Ci To Build Gitlab Faster","en-us/blog/using-gitlab-ci-to-build-gitlab-faster.yml","en-us/blog/using-gitlab-ci-to-build-gitlab-faster",{"_path":7325,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":7326,"content":7331,"config":7335,"_id":7337,"_type":16,"title":7338,"_source":17,"_file":7339,"_stem":7340,"_extension":20},"/en-us/blog/getting-started-gitlab-ci-gcp",{"title":7327,"description":7328,"ogTitle":7327,"ogDescription":7328,"noIndex":6,"ogImage":6693,"ogUrl":7329,"ogSiteName":895,"ogType":896,"canonicalUrls":7329,"schema":7330},"Getting started with GitLab CI/CD and Google Cloud Platform","Discover how easy it is to set up CI/CD and Kubernetes deployment with our integration with Google Kubernetes Engine.","https://about.gitlab.com/blog/getting-started-gitlab-ci-gcp","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Getting started with GitLab CI/CD and Google Cloud Platform\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"GitLab\"}],\n        \"datePublished\": \"2018-04-24\",\n      }",{"title":7327,"description":7328,"authors":7332,"heroImage":6693,"date":7333,"category":14,"tags":7334},[1077],"2018-04-24",[925,1373,1180,3007],{"slug":7336,"featured":6,"template":730},"getting-started-gitlab-ci-gcp","content:en-us:blog:getting-started-gitlab-ci-gcp.yml","Getting Started Gitlab Ci Gcp","en-us/blog/getting-started-gitlab-ci-gcp.yml","en-us/blog/getting-started-gitlab-ci-gcp",{"_path":7342,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":7343,"content":7349,"config":7354,"_id":7356,"_type":16,"title":7357,"_source":17,"_file":7358,"_stem":7359,"_extension":20},"/en-us/blog/five-things-i-wish-i-knew-about-kubernetes",{"title":7344,"description":7345,"ogTitle":7344,"ogDescription":7345,"noIndex":6,"ogImage":7346,"ogUrl":7347,"ogSiteName":895,"ogType":896,"canonicalUrls":7347,"schema":7348},"5 things I wish I'd known about Kubernetes before I started","Looking to dive into Kubernetes? Here’s some advice on how to get started from a GitLab engineer.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749670146/Blog/Hero%20Images/containers-for-five-things-kubernetes-blog-post.jpg","https://about.gitlab.com/blog/five-things-i-wish-i-knew-about-kubernetes","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"5 things I wish I'd known about Kubernetes before I started\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Jason Plum\"}],\n        \"datePublished\": \"2018-04-16\",\n      }",{"title":7344,"description":7345,"authors":7350,"heroImage":7346,"date":7352,"category":14,"tags":7353},[7351],"Jason Plum","2018-04-16",[1180],{"slug":7355,"featured":6,"template":730},"five-things-i-wish-i-knew-about-kubernetes","content:en-us:blog:five-things-i-wish-i-knew-about-kubernetes.yml","Five Things I Wish I Knew About Kubernetes","en-us/blog/five-things-i-wish-i-knew-about-kubernetes.yml","en-us/blog/five-things-i-wish-i-knew-about-kubernetes",{"_path":7361,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":7362,"content":7368,"config":7374,"_id":7376,"_type":16,"title":7377,"_source":17,"_file":7378,"_stem":7379,"_extension":20},"/en-us/blog/monitoring-your-gitlab-environment-with-the-elk-stack",{"title":7363,"description":7364,"ogTitle":7363,"ogDescription":7364,"noIndex":6,"ogImage":7365,"ogUrl":7366,"ogSiteName":895,"ogType":896,"canonicalUrls":7366,"schema":7367},"GitLab monitoring: Setting up Logz.io and ELK stack","ELK, together with GitLab’s logging framework, gives organizations a comprehensive view for monitoring, troubleshooting, and analyzing team activity.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749680160/Blog/Hero%20Images/gitlab-logz-io-cover.png","https://about.gitlab.com/blog/monitoring-your-gitlab-environment-with-the-elk-stack","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to set up advanced monitoring for your GitLab environment with Logz.io and the ELK stack\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Daniel Berman\"}],\n        \"datePublished\": \"2018-04-13\",\n      }",{"title":7369,"description":7364,"authors":7370,"heroImage":7365,"date":7372,"category":14,"tags":7373},"How to set up advanced monitoring for your GitLab environment with Logz.io and the ELK stack",[7371],"Daniel Berman","2018-04-13",[233],{"slug":7375,"featured":6,"template":730},"monitoring-your-gitlab-environment-with-the-elk-stack","content:en-us:blog:monitoring-your-gitlab-environment-with-the-elk-stack.yml","Monitoring Your Gitlab Environment With The Elk Stack","en-us/blog/monitoring-your-gitlab-environment-with-the-elk-stack.yml","en-us/blog/monitoring-your-gitlab-environment-with-the-elk-stack",{"_path":7381,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":7382,"content":7387,"config":7391,"_id":7393,"_type":16,"title":7394,"_source":17,"_file":7395,"_stem":7396,"_extension":20},"/en-us/blog/polishing-gitlabs-ui-a-new-color-system",{"title":7383,"description":7384,"ogTitle":7383,"ogDescription":7384,"noIndex":6,"ogImage":2394,"ogUrl":7385,"ogSiteName":895,"ogType":896,"canonicalUrls":7385,"schema":7386},"Polishing GitLab’s UI: A new color system","Senior UX Designer Pedro Moreira da Silva takes us on a deep dive into how the UX team improved the GitLab UI’s color palette.","https://about.gitlab.com/blog/polishing-gitlabs-ui-a-new-color-system","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Polishing GitLab’s UI: A new color system\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Pedro Moreira da Silva\"}],\n        \"datePublished\": \"2018-03-29\",\n      }",{"title":7383,"description":7384,"authors":7388,"heroImage":2394,"date":7389,"category":14,"tags":7390},[5611],"2018-03-29",[1099,1141,1316,4304],{"slug":7392,"featured":6,"template":730},"polishing-gitlabs-ui-a-new-color-system","content:en-us:blog:polishing-gitlabs-ui-a-new-color-system.yml","Polishing Gitlabs Ui A New Color System","en-us/blog/polishing-gitlabs-ui-a-new-color-system.yml","en-us/blog/polishing-gitlabs-ui-a-new-color-system",{"_path":7398,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":7399,"content":7405,"config":7410,"_id":7412,"_type":16,"title":7413,"_source":17,"_file":7414,"_stem":7415,"_extension":20},"/en-us/blog/use-cases-for-epics",{"title":7400,"description":7401,"ogTitle":7400,"ogDescription":7401,"noIndex":6,"ogImage":7402,"ogUrl":7403,"ogSiteName":895,"ogType":896,"canonicalUrls":7403,"schema":7404},"How the GitLab UX team uses epics","UX Manager Sarrah Vesselov shares how the UX team is using epics to manage their workflow.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749680187/Blog/Hero%20Images/how-ux-team-uses-epics.jpg","https://about.gitlab.com/blog/use-cases-for-epics","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How the GitLab UX team uses epics\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Sarrah Vesselov\"}],\n        \"datePublished\": \"2018-03-19\",\n      }",{"title":7400,"description":7401,"authors":7406,"heroImage":7402,"date":7408,"category":14,"tags":7409},[7407],"Sarrah Vesselov","2018-03-19",[1790,924,1507,1316],{"slug":7411,"featured":6,"template":730},"use-cases-for-epics","content:en-us:blog:use-cases-for-epics.yml","Use Cases For Epics","en-us/blog/use-cases-for-epics.yml","en-us/blog/use-cases-for-epics",{"_path":7417,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":7418,"content":7424,"config":7428,"_id":7430,"_type":16,"title":7431,"_source":17,"_file":7432,"_stem":7433,"_extension":20},"/en-us/blog/the-on-call-handover-at-gitlab",{"title":7419,"description":7420,"ogTitle":7419,"ogDescription":7420,"noIndex":6,"ogImage":7421,"ogUrl":7422,"ogSiteName":895,"ogType":896,"canonicalUrls":7422,"schema":7423},"How our production team runs the weekly on-call handover","Senior Production Engineer John Jarvis explains our handover process for on-call incidents in a fully remote and distributed team.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749678661/Blog/Hero%20Images/production-on-call-handover.jpg","https://about.gitlab.com/blog/the-on-call-handover-at-gitlab","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How our production team runs the weekly on-call handover\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"John Jarvis\"}],\n        \"datePublished\": \"2018-03-14\",\n      }",{"title":7419,"description":7420,"authors":7425,"heroImage":7421,"date":7426,"category":14,"tags":7427},[4860],"2018-03-14",[1099,1451],{"slug":7429,"featured":6,"template":730},"the-on-call-handover-at-gitlab","content:en-us:blog:the-on-call-handover-at-gitlab.yml","The On Call Handover At Gitlab","en-us/blog/the-on-call-handover-at-gitlab.yml","en-us/blog/the-on-call-handover-at-gitlab",{"_path":7435,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":7436,"content":7442,"config":7446,"_id":7448,"_type":16,"title":7449,"_source":17,"_file":7450,"_stem":7451,"_extension":20},"/en-us/blog/gitlab-vscode-extension",{"title":7437,"description":7438,"ogTitle":7437,"ogDescription":7438,"noIndex":6,"ogImage":7439,"ogUrl":7440,"ogSiteName":895,"ogType":896,"canonicalUrls":7440,"schema":7441},"A VS Code extension for GitLab: GitLab Workflow","Senior Frontend Engineer Fatih Acet created a VS Code extension, GitLab Workflow, which allows you to do many GitLab-specific tasks quickly and easily.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749680196/Blog/Hero%20Images/vs-code-extension-gitlab-workflow.jpg","https://about.gitlab.com/blog/gitlab-vscode-extension","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"A VS Code extension for GitLab: GitLab Workflow\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Fatih Acet\"}],\n        \"datePublished\": \"2018-03-01\",\n      }",{"title":7437,"description":7438,"authors":7443,"heroImage":7439,"date":7444,"category":14,"tags":7445},[6290],"2018-03-01",[3007,809,233],{"slug":7447,"featured":6,"template":730},"gitlab-vscode-extension","content:en-us:blog:gitlab-vscode-extension.yml","Gitlab Vscode Extension","en-us/blog/gitlab-vscode-extension.yml","en-us/blog/gitlab-vscode-extension",{"_path":7453,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":7454,"content":7460,"config":7465,"_id":7467,"_type":16,"title":7468,"_source":17,"_file":7469,"_stem":7470,"_extension":20},"/en-us/blog/how-we-added-eslint-into-vue",{"title":7455,"description":7456,"ogTitle":7455,"ogDescription":7456,"noIndex":6,"ogImage":7457,"ogUrl":7458,"ogSiteName":895,"ogType":896,"canonicalUrls":7458,"schema":7459},"How eslint-plugin-vue improved our code reviews","A few months ago we felt the need to build a style guide for Vue and now are using eslint-vue-plugin, which is saving us time in our code reviews.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749680227/Blog/Hero%20Images/code_cover_image.jpg","https://about.gitlab.com/blog/how-we-added-eslint-into-vue","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How eslint-plugin-vue improved our code reviews\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Filipa Lacerda\"}],\n        \"datePublished\": \"2018-02-13\",\n      }",{"title":7455,"description":7456,"authors":7461,"heroImage":7457,"date":7463,"category":14,"tags":7464},[7462],"Filipa Lacerda","2018-02-13",[1099,2105],{"slug":7466,"featured":6,"template":730},"how-we-added-eslint-into-vue","content:en-us:blog:how-we-added-eslint-into-vue.yml","How We Added Eslint Into Vue","en-us/blog/how-we-added-eslint-into-vue.yml","en-us/blog/how-we-added-eslint-into-vue",{"_path":7472,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":7473,"content":7479,"config":7484,"_id":7486,"_type":16,"title":7487,"_source":17,"_file":7488,"_stem":7489,"_extension":20},"/en-us/blog/crowdin-localization-for-agile-projects",{"title":7474,"description":7475,"ogTitle":7474,"ogDescription":7475,"noIndex":6,"ogImage":7476,"ogUrl":7477,"ogSiteName":895,"ogType":896,"canonicalUrls":7477,"schema":7478},"Automate your localization with GitLab + Crowdin","Complete your development workflow by integrating GitLab with Crowdin to help your product speak the same language as the people it’s built for.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749680247/Blog/Hero%20Images/gitlab-crowdin-cover.png","https://about.gitlab.com/blog/crowdin-localization-for-agile-projects","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Automate your localization with GitLab + Crowdin\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Khrystyna Humenna\"}],\n        \"datePublished\": \"2018-02-06\",\n      }",{"title":7474,"description":7475,"authors":7480,"heroImage":7476,"date":7482,"category":14,"tags":7483},[7481],"Khrystyna Humenna","2018-02-06",[233],{"slug":7485,"featured":6,"template":730},"crowdin-localization-for-agile-projects","content:en-us:blog:crowdin-localization-for-agile-projects.yml","Crowdin Localization For Agile Projects","en-us/blog/crowdin-localization-for-agile-projects.yml","en-us/blog/crowdin-localization-for-agile-projects",{"_path":7491,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":7492,"content":7498,"config":7503,"_id":7505,"_type":16,"title":7506,"_source":17,"_file":7507,"_stem":7508,"_extension":20},"/en-us/blog/test-all-the-things-gitlab-ci-docker-examples",{"title":7493,"description":7494,"ogTitle":7493,"ogDescription":7494,"noIndex":6,"ogImage":7495,"ogUrl":7496,"ogSiteName":895,"ogType":896,"canonicalUrls":7496,"schema":7497},"Test all the things in GitLab CI with Docker by example","Running tests is easier than you think – guest author Gabriel Le Breton shares his presentation about testing everything automatically with GitLab CI/CD.","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","https://about.gitlab.com/blog/test-all-the-things-gitlab-ci-docker-examples","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Test all the things in GitLab CI with Docker by example\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Gabriel Le Breton\"}],\n        \"datePublished\": \"2018-02-05\",\n      }",{"title":7493,"description":7494,"authors":7499,"heroImage":7495,"date":7501,"category":14,"tags":7502},[7500],"Gabriel Le Breton","2018-02-05",[4437,110],{"slug":7504,"featured":6,"template":730},"test-all-the-things-gitlab-ci-docker-examples","content:en-us:blog:test-all-the-things-gitlab-ci-docker-examples.yml","Test All The Things Gitlab Ci Docker Examples","en-us/blog/test-all-the-things-gitlab-ci-docker-examples.yml","en-us/blog/test-all-the-things-gitlab-ci-docker-examples",{"_path":7510,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":7511,"content":7516,"config":7520,"_id":7522,"_type":16,"title":7523,"_source":17,"_file":7524,"_stem":7525,"_extension":20},"/en-us/blog/how-a-fix-in-go-19-sped-up-our-gitaly-service-by-30x",{"title":7512,"description":7513,"ogTitle":7512,"ogDescription":7513,"noIndex":6,"ogImage":2394,"ogUrl":7514,"ogSiteName":895,"ogType":896,"canonicalUrls":7514,"schema":7515},"How a fix in Go 1.9 sped up our Gitaly service by 30x","After noticing a worrying pattern in Gitaly's performance, we uncovered an issue with fork locking affecting virtual memory size. Here's how we figured out the problem and how to fix it.","https://about.gitlab.com/blog/how-a-fix-in-go-19-sped-up-our-gitaly-service-by-30x","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How a fix in Go 1.9 sped up our Gitaly service by 30x\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Andrew Newdigate\"}],\n        \"datePublished\": \"2018-01-23\",\n      }",{"title":7512,"description":7513,"authors":7517,"heroImage":2394,"date":7518,"category":14,"tags":7519},[1617],"2018-01-23",[1099,904],{"slug":7521,"featured":6,"template":730},"how-a-fix-in-go-19-sped-up-our-gitaly-service-by-30x","content:en-us:blog:how-a-fix-in-go-19-sped-up-our-gitaly-service-by-30x.yml","How A Fix In Go 19 Sped Up Our Gitaly Service By 30x","en-us/blog/how-a-fix-in-go-19-sped-up-our-gitaly-service-by-30x.yml","en-us/blog/how-a-fix-in-go-19-sped-up-our-gitaly-service-by-30x",{"_path":7527,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":7528,"content":7534,"config":7539,"_id":7541,"_type":16,"title":7542,"_source":17,"_file":7543,"_stem":7544,"_extension":20},"/en-us/blog/a-beginners-guide-to-continuous-integration",{"title":7529,"description":7530,"ogTitle":7529,"ogDescription":7530,"noIndex":6,"ogImage":7531,"ogUrl":7532,"ogSiteName":895,"ogType":896,"canonicalUrls":7532,"schema":7533},"A beginner's guide to continuous integration","Here's how to help everyone on your team, like designers and testers, get started with GitLab CI.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749679800/Blog/Hero%20Images/beginners-guide-to-ci.jpg","https://about.gitlab.com/blog/a-beginners-guide-to-continuous-integration","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"A beginner's guide to continuous integration\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Riccardo Padovani\"}],\n        \"datePublished\": \"2018-01-22\",\n      }",{"title":7529,"description":7530,"authors":7535,"heroImage":7531,"date":7537,"category":14,"tags":7538},[7536],"Riccardo Padovani","2018-01-22",[110,4437],{"slug":7540,"featured":6,"template":730},"a-beginners-guide-to-continuous-integration","content:en-us:blog:a-beginners-guide-to-continuous-integration.yml","A Beginners Guide To Continuous Integration","en-us/blog/a-beginners-guide-to-continuous-integration.yml","en-us/blog/a-beginners-guide-to-continuous-integration",{"_path":7546,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":7547,"content":7553,"config":7557,"_id":7559,"_type":16,"title":7560,"_source":17,"_file":7561,"_stem":7562,"_extension":20},"/en-us/blog/comment-on-commits-feature-tutorial",{"title":7548,"description":7549,"ogTitle":7548,"ogDescription":7549,"noIndex":6,"ogImage":7550,"ogUrl":7551,"ogSiteName":895,"ogType":896,"canonicalUrls":7551,"schema":7552},"Demo: How to use Merge Request Commit Discussions","You can now hold discussions on specific commits within a merge request – check out how it works in this video.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749680285/Blog/Hero%20Images/merge-request-commit-discussions.jpg","https://about.gitlab.com/blog/comment-on-commits-feature-tutorial","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Demo: How to use Merge Request Commit Discussions\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Victor Wu\"}],\n        \"datePublished\": \"2018-01-04\",\n      }",{"title":7548,"description":7549,"authors":7554,"heroImage":7550,"date":7555,"category":14,"tags":7556},[6550],"2018-01-04",[750,1507],{"slug":7558,"featured":6,"template":730},"comment-on-commits-feature-tutorial","content:en-us:blog:comment-on-commits-feature-tutorial.yml","Comment On Commits Feature Tutorial","en-us/blog/comment-on-commits-feature-tutorial.yml","en-us/blog/comment-on-commits-feature-tutorial",{"_path":7564,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":7565,"content":7570,"config":7574,"_id":7576,"_type":16,"title":7577,"_source":17,"_file":7578,"_stem":7579,"_extension":20},"/en-us/blog/conducting-remote-ux-research",{"title":7566,"description":7567,"ogTitle":7566,"ogDescription":7567,"noIndex":6,"ogImage":2394,"ogUrl":7568,"ogSiteName":895,"ogType":896,"canonicalUrls":7568,"schema":7569},"Conducting remote UX research at GitLab","Learn about the different kinds of UX research we conduct at GitLab.","https://about.gitlab.com/blog/conducting-remote-ux-research","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Conducting remote UX research at GitLab\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Sarah O’Donnell\"}],\n        \"datePublished\": \"2017-12-20\",\n      }",{"title":7566,"description":7567,"authors":7571,"heroImage":2394,"date":7572,"category":14,"tags":7573},[6103],"2017-12-20",[2512,1099,1316],{"slug":7575,"featured":6,"template":730},"conducting-remote-ux-research","content:en-us:blog:conducting-remote-ux-research.yml","Conducting Remote Ux Research","en-us/blog/conducting-remote-ux-research.yml","en-us/blog/conducting-remote-ux-research",{"_path":7581,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":7582,"content":7588,"config":7593,"_id":7595,"_type":16,"title":7596,"_source":17,"_file":7597,"_stem":7598,"_extension":20},"/en-us/blog/moving-to-headless-chrome",{"title":7583,"description":7584,"ogTitle":7583,"ogDescription":7584,"noIndex":6,"ogImage":7585,"ogUrl":7586,"ogSiteName":895,"ogType":896,"canonicalUrls":7586,"schema":7587},"How GitLab switched to Headless Chrome for testing","A detailed explanation with examples of how GitLab made the switch to headless Chrome.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749680270/Blog/Hero%20Images/headless-chrome-cover.jpg","https://about.gitlab.com/blog/moving-to-headless-chrome","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How GitLab switched to Headless Chrome for testing\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Mike Greiling\"}],\n        \"datePublished\": \"2017-12-19\",\n      }",{"title":7583,"description":7584,"authors":7589,"heroImage":7585,"date":7591,"category":14,"tags":7592},[7590],"Mike Greiling","2017-12-19",[1099,2105,773],{"slug":7594,"featured":6,"template":730},"moving-to-headless-chrome","content:en-us:blog:moving-to-headless-chrome.yml","Moving To Headless Chrome","en-us/blog/moving-to-headless-chrome.yml","en-us/blog/moving-to-headless-chrome",{"_path":7600,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":7601,"content":7606,"config":7611,"_id":7613,"_type":16,"title":7614,"_source":17,"_file":7615,"_stem":7616,"_extension":20},"/en-us/blog/gitlab-design-library",{"title":7602,"description":7603,"ogTitle":7602,"ogDescription":7603,"noIndex":6,"ogImage":2394,"ogUrl":7604,"ogSiteName":895,"ogType":896,"canonicalUrls":7604,"schema":7605},"Scaling design: The start of system thinking","How we began the process of introducing a design system to GitLab.","https://about.gitlab.com/blog/gitlab-design-library","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Scaling design: The start of system thinking\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Taurie Davis\"}],\n        \"datePublished\": \"2017-12-12\",\n      }",{"title":7602,"description":7603,"authors":7607,"heroImage":2394,"date":7609,"category":14,"tags":7610},[7608],"Taurie Davis","2017-12-12",[1141,1316,1099],{"slug":7612,"featured":6,"template":730},"gitlab-design-library","content:en-us:blog:gitlab-design-library.yml","Gitlab Design Library","en-us/blog/gitlab-design-library.yml","en-us/blog/gitlab-design-library",{"_path":7618,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":7619,"content":7624,"config":7629,"_id":7631,"_type":16,"title":7632,"_source":17,"_file":7633,"_stem":7634,"_extension":20},"/en-us/blog/illustrations-and-icons-on-gitlab-com",{"title":7620,"description":7621,"ogTitle":7620,"ogDescription":7621,"noIndex":6,"ogImage":4353,"ogUrl":7622,"ogSiteName":895,"ogType":896,"canonicalUrls":7622,"schema":7623},"Inside GitLab: Illustrations and icons on GitLab.com","Learn how our UX team creates icons and illustrations.","https://about.gitlab.com/blog/illustrations-and-icons-on-gitlab-com","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Inside GitLab: Illustrations and icons on GitLab.com\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Hazel Yang\"}],\n        \"datePublished\": \"2017-12-04\",\n      }",{"title":7620,"description":7621,"authors":7625,"heroImage":4353,"date":7627,"category":14,"tags":7628},[7626],"Hazel Yang","2017-12-04",[1141,1316,1099],{"slug":7630,"featured":6,"template":730},"illustrations-and-icons-on-gitlab-com","content:en-us:blog:illustrations-and-icons-on-gitlab-com.yml","Illustrations And Icons On Gitlab Com","en-us/blog/illustrations-and-icons-on-gitlab-com.yml","en-us/blog/illustrations-and-icons-on-gitlab-com",{"_path":7636,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":7637,"content":7643,"config":7647,"_id":7649,"_type":16,"title":7650,"_source":17,"_file":7651,"_stem":7652,"_extension":20},"/en-us/blog/support-engineering-at-gitlab",{"title":7638,"description":7639,"ogTitle":7638,"ogDescription":7639,"noIndex":6,"ogImage":7640,"ogUrl":7641,"ogSiteName":895,"ogType":896,"canonicalUrls":7641,"schema":7642},"At your service: Support Engineering at GitLab","A new series from GitLab Support Engineering about what we do and how we do it. All remotely of course!","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749678875/Blog/Hero%20Images/support-series-cover.png","https://about.gitlab.com/blog/support-engineering-at-gitlab","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"At your service: Support Engineering at GitLab\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Lee Matos\"}],\n        \"datePublished\": \"2017-12-01\",\n      }",{"title":7638,"description":7639,"authors":7644,"heroImage":7640,"date":7645,"category":14,"tags":7646},[6898],"2017-12-01",[1099],{"slug":7648,"featured":6,"template":730},"support-engineering-at-gitlab","content:en-us:blog:support-engineering-at-gitlab.yml","Support Engineering At Gitlab","en-us/blog/support-engineering-at-gitlab.yml","en-us/blog/support-engineering-at-gitlab",{"_path":7654,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":7655,"content":7661,"config":7665,"_id":7667,"_type":16,"title":7668,"_source":17,"_file":7669,"_stem":7670,"_extension":20},"/en-us/blog/containers-kubernetes-basics",{"title":7656,"description":7657,"ogTitle":7656,"ogDescription":7657,"noIndex":6,"ogImage":7658,"ogUrl":7659,"ogSiteName":895,"ogType":896,"canonicalUrls":7659,"schema":7660},"Kubernetes & containers, and where cloud native fits in – the basics","Brush up on your understanding of these concepts key to modern development.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749671296/Blog/Hero%20Images/containers-kubernetes-basics.jpg","https://about.gitlab.com/blog/containers-kubernetes-basics","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Kubernetes & containers, and where cloud native fits in – the basics\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Rebecca Dodd\"}],\n        \"datePublished\": \"2017-11-30\",\n      }",{"title":7656,"description":7657,"authors":7662,"heroImage":7658,"date":7663,"category":14,"tags":7664},[4193],"2017-11-30",[1180,582],{"slug":7666,"featured":6,"template":730},"containers-kubernetes-basics","content:en-us:blog:containers-kubernetes-basics.yml","Containers Kubernetes Basics","en-us/blog/containers-kubernetes-basics.yml","en-us/blog/containers-kubernetes-basics",{"_path":7672,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":7673,"content":7679,"config":7684,"_id":7686,"_type":16,"title":7687,"_source":17,"_file":7688,"_stem":7689,"_extension":20},"/en-us/blog/go-tools-and-gitlab-how-to-do-continuous-integration-like-a-boss",{"title":7674,"description":7675,"ogTitle":7674,"ogDescription":7675,"noIndex":6,"ogImage":7676,"ogUrl":7677,"ogSiteName":895,"ogType":896,"canonicalUrls":7677,"schema":7678},"Go tools and GitLab: How to do continuous integration like a boss","How the team at Pantomath makes their lives easier with GitLab CI.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749667978/Blog/Hero%20Images/go-tools-and-gitlab.jpg","https://about.gitlab.com/blog/go-tools-and-gitlab-how-to-do-continuous-integration-like-a-boss","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Go tools and GitLab: How to do continuous integration like a boss\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Julien Andrieux\"}],\n        \"datePublished\": \"2017-11-27\",\n      }",{"title":7674,"description":7675,"authors":7680,"heroImage":7676,"date":7682,"category":14,"tags":7683},[7681],"Julien Andrieux","2017-11-27",[110,4437,728],{"slug":7685,"featured":6,"template":730},"go-tools-and-gitlab-how-to-do-continuous-integration-like-a-boss","content:en-us:blog:go-tools-and-gitlab-how-to-do-continuous-integration-like-a-boss.yml","Go Tools And Gitlab How To Do Continuous Integration Like A Boss","en-us/blog/go-tools-and-gitlab-how-to-do-continuous-integration-like-a-boss.yml","en-us/blog/go-tools-and-gitlab-how-to-do-continuous-integration-like-a-boss",{"_path":7691,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":7692,"content":7698,"config":7703,"_id":7705,"_type":16,"title":7706,"_source":17,"_file":7707,"_stem":7708,"_extension":20},"/en-us/blog/autoscale-ci-runners",{"title":7693,"description":7694,"ogTitle":7693,"ogDescription":7694,"noIndex":6,"ogImage":7695,"ogUrl":7696,"ogSiteName":895,"ogType":896,"canonicalUrls":7696,"schema":7697},"Autoscale GitLab CI/CD runners and save 90% on EC2 costs","Guest author Max Woolf shows how his team makes big savings with an autoscaling cluster of GitLab CI/CD runners.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749680305/Blog/Hero%20Images/autoscale-gitlab-ci-runners.jpg","https://about.gitlab.com/blog/autoscale-ci-runners","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Autoscale GitLab CI/CD runners and save 90% on EC2 costs\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Max Woolf\"}],\n        \"datePublished\": \"2017-11-23\",\n      }",{"title":7693,"description":7694,"authors":7699,"heroImage":7695,"date":7701,"category":14,"tags":7702},[7700],"Max Woolf","2017-11-23",[4437,110],{"slug":7704,"featured":6,"template":730},"autoscale-ci-runners","content:en-us:blog:autoscale-ci-runners.yml","Autoscale Ci Runners","en-us/blog/autoscale-ci-runners.yml","en-us/blog/autoscale-ci-runners",{"_path":7710,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":7711,"content":7717,"config":7722,"_id":7724,"_type":16,"title":7725,"_source":17,"_file":7726,"_stem":7727,"_extension":20},"/en-us/blog/working-with-yaml-gitlab-ci-android",{"title":7712,"description":7713,"ogTitle":7712,"ogDescription":7713,"noIndex":6,"ogImage":7714,"ogUrl":7715,"ogSiteName":895,"ogType":896,"canonicalUrls":7715,"schema":7716},"Working with YAML in GitLab CI from the Android perspective","Guest author Renato Stanic shares a sample YAML configuration for Android projects, which helps his team with faster, more iterative development.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749665524/Blog/Hero%20Images/yaml-gitlab-ci-android.png","https://about.gitlab.com/blog/working-with-yaml-gitlab-ci-android","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Working with YAML in GitLab CI from the Android perspective\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Renato Stanic\"}],\n        \"datePublished\": \"2017-11-20\",\n      }",{"title":7712,"description":7713,"authors":7718,"heroImage":7714,"date":7720,"category":14,"tags":7721},[7719],"Renato Stanic","2017-11-20",[110,4437],{"slug":7723,"featured":6,"template":730},"working-with-yaml-gitlab-ci-android","content:en-us:blog:working-with-yaml-gitlab-ci-android.yml","Working With Yaml Gitlab Ci Android","en-us/blog/working-with-yaml-gitlab-ci-android.yml","en-us/blog/working-with-yaml-gitlab-ci-android",{"_path":7729,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":7730,"content":7736,"config":7740,"_id":7742,"_type":16,"title":7743,"_source":17,"_file":7744,"_stem":7745,"_extension":20},"/en-us/blog/humangeo-switches-jenkins-gitlab-ci",{"title":7731,"description":7732,"ogTitle":7731,"ogDescription":7732,"noIndex":6,"ogImage":7733,"ogUrl":7734,"ogSiteName":895,"ogType":896,"canonicalUrls":7734,"schema":7735},"HumanGeo switched from Jenkins to GitLab and cut costs by 1/3","Management overhead was bogging down the team at HumanGeo. GitLab freed up more than just cash.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749680315/Blog/Hero%20Images/humangeo-switches-jenkins-to-gitlab.jpg","https://about.gitlab.com/blog/humangeo-switches-jenkins-gitlab-ci","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"HumanGeo switched from Jenkins to GitLab and cut costs by 1/3\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"William Chia\"}],\n        \"datePublished\": \"2017-11-14\",\n      }",{"title":7731,"description":7732,"authors":7737,"heroImage":7733,"date":7738,"category":14,"tags":7739},[6879],"2017-11-14",[1100,1022,4437],{"slug":7741,"featured":6,"template":730},"humangeo-switches-jenkins-gitlab-ci","content:en-us:blog:humangeo-switches-jenkins-gitlab-ci.yml","Humangeo Switches Jenkins Gitlab Ci","en-us/blog/humangeo-switches-jenkins-gitlab-ci.yml","en-us/blog/humangeo-switches-jenkins-gitlab-ci",{"_path":7747,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":7748,"content":7754,"config":7758,"_id":7760,"_type":16,"title":7761,"_source":17,"_file":7762,"_stem":7763,"_extension":20},"/en-us/blog/gitlab-vue-one-year-later",{"title":7749,"description":7750,"ogTitle":7749,"ogDescription":7750,"noIndex":6,"ogImage":7751,"ogUrl":7752,"ogSiteName":895,"ogType":896,"canonicalUrls":7752,"schema":7753},"How we do Vue: one year later","How we, at GitLab, write VueJS, one year later.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749680321/Blog/Hero%20Images/vue-title.jpg","https://about.gitlab.com/blog/gitlab-vue-one-year-later","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How we do Vue: one year later\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Jacob Schatz\"}],\n        \"datePublished\": \"2017-11-09\",\n      }",{"title":7749,"description":7750,"authors":7755,"heroImage":7751,"date":7756,"category":14,"tags":7757},[6860],"2017-11-09",[2105,1099],{"slug":7759,"featured":6,"template":730},"gitlab-vue-one-year-later","content:en-us:blog:gitlab-vue-one-year-later.yml","Gitlab Vue One Year Later","en-us/blog/gitlab-vue-one-year-later.yml","en-us/blog/gitlab-vue-one-year-later",{"_path":7765,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":7766,"content":7772,"config":7777,"_id":7779,"_type":16,"title":7780,"_source":17,"_file":7781,"_stem":7782,"_extension":20},"/en-us/blog/automating-boring-git-operations-gitlab-ci",{"title":7767,"description":7768,"ogTitle":7767,"ogDescription":7768,"noIndex":6,"ogImage":7769,"ogUrl":7770,"ogSiteName":895,"ogType":896,"canonicalUrls":7770,"schema":7771},"GitBot – automating boring Git operations with CI","Guest author Kristian Larsson shares how he automates some common Git operations, like rebase, using GitLab CI.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749672374/Blog/Hero%20Images/gitbot-automate-git-operations.jpg","https://about.gitlab.com/blog/automating-boring-git-operations-gitlab-ci","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"GitBot – automating boring Git operations with CI\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Kristian Larsson\"}],\n        \"datePublished\": \"2017-11-02\",\n      }",{"title":7767,"description":7768,"authors":7773,"heroImage":7769,"date":7775,"category":14,"tags":7776},[7774],"Kristian Larsson","2017-11-02",[110,4437,792],{"slug":7778,"featured":6,"template":730},"automating-boring-git-operations-gitlab-ci","content:en-us:blog:automating-boring-git-operations-gitlab-ci.yml","Automating Boring Git Operations Gitlab Ci","en-us/blog/automating-boring-git-operations-gitlab-ci.yml","en-us/blog/automating-boring-git-operations-gitlab-ci",{"_path":7784,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":7785,"content":7790,"config":7794,"_id":7796,"_type":16,"title":7797,"_source":17,"_file":7798,"_stem":7799,"_extension":20},"/en-us/blog/scaling-the-gitlab-database",{"title":7786,"description":7787,"ogTitle":7786,"ogDescription":7787,"noIndex":6,"ogImage":5825,"ogUrl":7788,"ogSiteName":895,"ogType":896,"canonicalUrls":7788,"schema":7789},"Scaling the GitLab database","An in-depth look at the challenges faced when scaling the GitLab database and the solutions we applied to help solve the problems with our database setup.","https://about.gitlab.com/blog/scaling-the-gitlab-database","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Scaling the GitLab database\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Yorick Peterse\"}],\n        \"datePublished\": \"2017-10-02\",\n      }",{"title":7786,"description":7787,"authors":7791,"heroImage":5825,"date":7792,"category":14,"tags":7793},[5940],"2017-10-02",[1099,1451],{"slug":7795,"featured":6,"template":730},"scaling-the-gitlab-database","content:en-us:blog:scaling-the-gitlab-database.yml","Scaling The Gitlab Database","en-us/blog/scaling-the-gitlab-database.yml","en-us/blog/scaling-the-gitlab-database",{"_path":7801,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":7802,"content":7808,"config":7814,"_id":7816,"_type":16,"title":7817,"_source":17,"_file":7818,"_stem":7819,"_extension":20},"/en-us/blog/how-to-create-a-ci-cd-pipeline-with-auto-deploy-to-kubernetes-using-gitlab",{"title":7803,"description":7804,"ogTitle":7803,"ogDescription":7804,"noIndex":6,"ogImage":7805,"ogUrl":7806,"ogSiteName":895,"ogType":896,"canonicalUrls":7806,"schema":7807},"CI/CD pipeline: GitLab & Helm for Kubernetes Auto Deploy","One user walks through how he tried GitLab caching and split the job into multiple steps to get better feedback.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749664472/Blog/Hero%20Images/gitlabflatlogomap.png","https://about.gitlab.com/blog/how-to-create-a-ci-cd-pipeline-with-auto-deploy-to-kubernetes-using-gitlab","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to create a CI/CD pipeline with Auto Deploy to Kubernetes using GitLab and Helm\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Sergey Nuzhdin\"}],\n        \"datePublished\": \"2017-09-21\",\n      }",{"title":7809,"description":7804,"authors":7810,"heroImage":7805,"date":7812,"category":14,"tags":7813},"How to create a CI/CD pipeline with Auto Deploy to Kubernetes using GitLab and Helm",[7811],"Sergey Nuzhdin","2017-09-21",[1022,1120,728,4437],{"slug":7815,"featured":6,"template":730},"how-to-create-a-ci-cd-pipeline-with-auto-deploy-to-kubernetes-using-gitlab","content:en-us:blog:how-to-create-a-ci-cd-pipeline-with-auto-deploy-to-kubernetes-using-gitlab.yml","How To Create A Ci Cd Pipeline With Auto Deploy To Kubernetes Using Gitlab","en-us/blog/how-to-create-a-ci-cd-pipeline-with-auto-deploy-to-kubernetes-using-gitlab.yml","en-us/blog/how-to-create-a-ci-cd-pipeline-with-auto-deploy-to-kubernetes-using-gitlab",{"_path":7821,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":7822,"content":7828,"config":7833,"_id":7835,"_type":16,"title":7836,"_source":17,"_file":7837,"_stem":7838,"_extension":20},"/en-us/blog/vuejs-app-gitlab",{"title":7823,"description":7824,"ogTitle":7823,"ogDescription":7824,"noIndex":6,"ogImage":7825,"ogUrl":7826,"ogSiteName":895,"ogType":896,"canonicalUrls":7826,"schema":7827},"How to use GitLab CI/CD for Vue.js","Learn how to get the most out of GitLab CI/CD with this guide.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749680363/Blog/Hero%20Images/build-test-deploy-vue.jpg","https://about.gitlab.com/blog/vuejs-app-gitlab","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to use GitLab CI/CD for Vue.js\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Simon Tarchichi\"}],\n        \"datePublished\": \"2017-09-12\",\n      }",{"title":7823,"description":7824,"authors":7829,"heroImage":7825,"date":7831,"category":14,"tags":7832},[7830],"Simon Tarchichi","2017-09-12",[110,4437],{"slug":7834,"featured":6,"template":730},"vuejs-app-gitlab","content:en-us:blog:vuejs-app-gitlab.yml","Vuejs App Gitlab","en-us/blog/vuejs-app-gitlab.yml","en-us/blog/vuejs-app-gitlab",{"_path":7840,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":7841,"content":7847,"config":7851,"_id":7853,"_type":16,"title":7854,"_source":17,"_file":7855,"_stem":7856,"_extension":20},"/en-us/blog/how-to-automatically-create-a-new-mr-on-gitlab-with-gitlab-ci",{"title":7842,"description":7843,"ogTitle":7842,"ogDescription":7843,"noIndex":6,"ogImage":7844,"ogUrl":7845,"ogSiteName":895,"ogType":896,"canonicalUrls":7845,"schema":7846},"How to automatically create a new MR on GitLab with GitLab CI","With this script, every time we push a commit, GitLab CI checks if the branch that commit belongs to already has an open MR and, if not, creates one.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749679783/Blog/Hero%20Images/whats-next-for-gitlab-ci.jpg","https://about.gitlab.com/blog/how-to-automatically-create-a-new-mr-on-gitlab-with-gitlab-ci","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to automatically create a new MR on GitLab with GitLab CI\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Riccardo Padovani\"}],\n        \"datePublished\": \"2017-09-05\",\n      }",{"title":7842,"description":7843,"authors":7848,"heroImage":7844,"date":7849,"category":14,"tags":7850},[7536],"2017-09-05",[110,4437,728],{"slug":7852,"featured":6,"template":730},"how-to-automatically-create-a-new-mr-on-gitlab-with-gitlab-ci","content:en-us:blog:how-to-automatically-create-a-new-mr-on-gitlab-with-gitlab-ci.yml","How To Automatically Create A New Mr On Gitlab With Gitlab Ci","en-us/blog/how-to-automatically-create-a-new-mr-on-gitlab-with-gitlab-ci.yml","en-us/blog/how-to-automatically-create-a-new-mr-on-gitlab-with-gitlab-ci",{"_path":7858,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":7859,"content":7865,"config":7870,"_id":7872,"_type":16,"title":7873,"_source":17,"_file":7874,"_stem":7875,"_extension":20},"/en-us/blog/migrating-your-jira-issues-into-gitlab",{"title":7860,"description":7861,"ogTitle":7860,"ogDescription":7861,"noIndex":6,"ogImage":7862,"ogUrl":7863,"ogSiteName":895,"ogType":896,"canonicalUrls":7863,"schema":7864},"Migrating your JIRA issues to GitLab","We're migrating all of our working tools to open-source ones, and moving to GitLab has made all the difference.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749667509/Blog/Hero%20Images/continuous-integration-from-jenkins-to-gitlab-using-docker.jpg","https://about.gitlab.com/blog/migrating-your-jira-issues-into-gitlab","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Migrating your JIRA issues to GitLab\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Abdulkader Benchi\"}],\n        \"datePublished\": \"2017-08-21\",\n      }",{"title":7860,"description":7861,"authors":7866,"heroImage":7862,"date":7868,"category":14,"tags":7869},[7867],"Abdulkader Benchi","2017-08-21",[233,924],{"slug":7871,"featured":6,"template":730},"migrating-your-jira-issues-into-gitlab","content:en-us:blog:migrating-your-jira-issues-into-gitlab.yml","Migrating Your Jira Issues Into Gitlab","en-us/blog/migrating-your-jira-issues-into-gitlab.yml","en-us/blog/migrating-your-jira-issues-into-gitlab",{"_path":7877,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":7878,"content":7883,"config":7888,"_id":7890,"_type":16,"title":7891,"_source":17,"_file":7892,"_stem":7893,"_extension":20},"/en-us/blog/how-to-auto-deploy-a-gitlab-dot-com-project-to-google-cloud",{"title":7879,"description":7880,"ogTitle":7879,"ogDescription":7880,"noIndex":6,"ogImage":2338,"ogUrl":7881,"ogSiteName":895,"ogType":896,"canonicalUrls":7881,"schema":7882},"Auto Deploy a GitLab.com project to Google Cloud","How to get started with our auto deploy feature using Google Kubernetes Engine.","https://about.gitlab.com/blog/how-to-auto-deploy-a-gitlab-dot-com-project-to-google-cloud","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Auto Deploy a GitLab.com project to Google Cloud\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Dmitriy Zaporozhets\"}],\n        \"datePublished\": \"2017-08-10\",\n      }",{"title":7879,"description":7880,"authors":7884,"heroImage":2338,"date":7886,"category":14,"tags":7887},[7885],"Dmitriy Zaporozhets","2017-08-10",[925,1373],{"slug":7889,"featured":6,"template":730},"how-to-auto-deploy-a-gitlab-dot-com-project-to-google-cloud","content:en-us:blog:how-to-auto-deploy-a-gitlab-dot-com-project-to-google-cloud.yml","How To Auto Deploy A Gitlab Dot Com Project To Google Cloud","en-us/blog/how-to-auto-deploy-a-gitlab-dot-com-project-to-google-cloud.yml","en-us/blog/how-to-auto-deploy-a-gitlab-dot-com-project-to-google-cloud",{"_path":7895,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":7896,"content":7902,"config":7907,"_id":7909,"_type":16,"title":7910,"_source":17,"_file":7911,"_stem":7912,"_extension":20},"/en-us/blog/git-wars-switching-to-gitlab",{"title":7897,"description":7898,"ogTitle":7897,"ogDescription":7898,"noIndex":6,"ogImage":7899,"ogUrl":7900,"ogSiteName":895,"ogType":896,"canonicalUrls":7900,"schema":7901},"Git Wars: Why I'm switching to GitLab","New GitLab user Christopher Watson puts us through our paces and weighs up his Git hosting options.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749680411/Blog/Hero%20Images/git-wars-switching-to-gitlab.jpg","https://about.gitlab.com/blog/git-wars-switching-to-gitlab","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Git Wars: Why I'm switching to GitLab\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Christopher Watson\"}],\n        \"datePublished\": \"2017-07-19\",\n      }",{"title":7897,"description":7898,"authors":7903,"heroImage":7899,"date":7905,"category":14,"tags":7906},[7904],"Christopher Watson","2017-07-19",[792,809,4437],{"slug":7908,"featured":6,"template":730},"git-wars-switching-to-gitlab","content:en-us:blog:git-wars-switching-to-gitlab.yml","Git Wars Switching To Gitlab","en-us/blog/git-wars-switching-to-gitlab.yml","en-us/blog/git-wars-switching-to-gitlab",{"_path":7914,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":7915,"content":7921,"config":7927,"_id":7929,"_type":16,"title":7930,"_source":17,"_file":7931,"_stem":7932,"_extension":20},"/en-us/blog/how-we-use-gitlab-at-the-province-of-nova-scotia",{"title":7916,"description":7917,"ogTitle":7916,"ogDescription":7917,"noIndex":6,"ogImage":7918,"ogUrl":7919,"ogSiteName":895,"ogType":896,"canonicalUrls":7919,"schema":7920},"How we use GitLab at the Province of Nova Scotia","The Unix operations team at the Province of Nova Scotia decided to implement GitLab for source control and CI/CD. Here's how we started exploring DevOps.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749670226/Blog/Hero%20Images/how-we-use-gitlab-at-nova-scotia.jpg","https://about.gitlab.com/blog/how-we-use-gitlab-at-the-province-of-nova-scotia","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How we use GitLab at the Province of Nova Scotia\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Steven Zinck\"},{\"@type\":\"Person\",\"name\":\"Paul Badcock\"}],\n        \"datePublished\": \"2017-07-18\",\n      }",{"title":7916,"description":7917,"authors":7922,"heroImage":7918,"date":7925,"category":14,"tags":7926},[7923,7924],"Steven Zinck","Paul Badcock","2017-07-18",[564,110,924],{"slug":7928,"featured":6,"template":730},"how-we-use-gitlab-at-the-province-of-nova-scotia","content:en-us:blog:how-we-use-gitlab-at-the-province-of-nova-scotia.yml","How We Use Gitlab At The Province Of Nova Scotia","en-us/blog/how-we-use-gitlab-at-the-province-of-nova-scotia.yml","en-us/blog/how-we-use-gitlab-at-the-province-of-nova-scotia",{"_path":7934,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":7935,"content":7941,"config":7945,"_id":7947,"_type":16,"title":7948,"_source":17,"_file":7949,"_stem":7950,"_extension":20},"/en-us/blog/redesigning-gitlabs-navigation",{"title":7936,"description":7937,"ogTitle":7936,"ogDescription":7937,"noIndex":6,"ogImage":7938,"ogUrl":7939,"ogSiteName":895,"ogType":896,"canonicalUrls":7939,"schema":7940},"Redesigning GitLab's navigation","After a series of research and brainstorming sessions, we are excited to share with the community our redesign of GitLab's navigation.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749679771/Blog/Hero%20Images/redesign-navigation-cover-image.jpg","https://about.gitlab.com/blog/redesigning-gitlabs-navigation","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Redesigning GitLab's navigation\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Taurie Davis\"}],\n        \"datePublished\": \"2017-07-17\",\n      }",{"title":7936,"description":7937,"authors":7942,"heroImage":7938,"date":7943,"category":14,"tags":7944},[7608],"2017-07-17",[1316],{"slug":7946,"featured":6,"template":730},"redesigning-gitlabs-navigation","content:en-us:blog:redesigning-gitlabs-navigation.yml","Redesigning Gitlabs Navigation","en-us/blog/redesigning-gitlabs-navigation.yml","en-us/blog/redesigning-gitlabs-navigation",{"_path":7952,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":7953,"content":7959,"config":7964,"_id":7966,"_type":16,"title":7967,"_source":17,"_file":7968,"_stem":7969,"_extension":20},"/en-us/blog/making-ci-easier-with-gitlab",{"title":7954,"description":7955,"ogTitle":7954,"ogDescription":7955,"noIndex":6,"ogImage":7956,"ogUrl":7957,"ogSiteName":895,"ogType":896,"canonicalUrls":7957,"schema":7958},"Making CI/CD easier with GitLab","The team at Trek10 tries to consider the need for automation and repeatability with everything they do. One team member gives a crash course in GitLab CI/CD and explains how they use it.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749680423/Blog/Hero%20Images/making-ci-easier-with-gitlab.jpg","https://about.gitlab.com/blog/making-ci-easier-with-gitlab","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Making CI/CD easier with GitLab\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Rob Ribeiro\"}],\n        \"datePublished\": \"2017-07-13\",\n      }",{"title":7954,"description":7955,"authors":7960,"heroImage":7956,"date":7962,"category":14,"tags":7963},[7961],"Rob Ribeiro","2017-07-13",[110,4437],{"slug":7965,"featured":6,"template":730},"making-ci-easier-with-gitlab","content:en-us:blog:making-ci-easier-with-gitlab.yml","Making Ci Easier With Gitlab","en-us/blog/making-ci-easier-with-gitlab.yml","en-us/blog/making-ci-easier-with-gitlab",{"_path":7971,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":7972,"content":7978,"config":7983,"_id":7985,"_type":16,"title":7986,"_source":17,"_file":7987,"_stem":7988,"_extension":20},"/en-us/blog/dockerizing-review-apps",{"title":7973,"description":7974,"ogTitle":7973,"ogDescription":7974,"noIndex":6,"ogImage":7975,"ogUrl":7976,"ogSiteName":895,"ogType":896,"canonicalUrls":7976,"schema":7977},"Dockerizing GitLab Review Apps","A GitLab user shows us how to deploy Docker containers as a Review App.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749680430/Blog/Hero%20Images/dockerizing-review-apps.jpg","https://about.gitlab.com/blog/dockerizing-review-apps","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Dockerizing GitLab Review Apps\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Stephan Hochdörfer\"}],\n        \"datePublished\": \"2017-07-11\",\n      }",{"title":7973,"description":7974,"authors":7979,"heroImage":7975,"date":7981,"category":14,"tags":7982},[7980],"Stephan Hochdörfer","2017-07-11",[4437,110],{"slug":7984,"featured":6,"template":730},"dockerizing-review-apps","content:en-us:blog:dockerizing-review-apps.yml","Dockerizing Review Apps","en-us/blog/dockerizing-review-apps.yml","en-us/blog/dockerizing-review-apps",{"_path":7990,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":7991,"content":7997,"config":8001,"_id":8003,"_type":16,"title":8004,"_source":17,"_file":8005,"_stem":8006,"_extension":20},"/en-us/blog/discovering-gitlabs-personas",{"title":7992,"description":7993,"ogTitle":7992,"ogDescription":7993,"noIndex":6,"ogImage":7994,"ogUrl":7995,"ogSiteName":895,"ogType":896,"canonicalUrls":7995,"schema":7996},"Discovering GitLab’s personas","Our User Experience (UX) Researcher updates us on the progress of GitLab’s personas","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749679763/Blog/Hero%20Images/discovering_gitlabs_personas.jpg","https://about.gitlab.com/blog/discovering-gitlabs-personas","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Discovering GitLab’s personas\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Sarah O’Donnell\"}],\n        \"datePublished\": \"2017-06-08\",\n      }",{"title":7992,"description":7993,"authors":7998,"heroImage":7994,"date":7999,"category":14,"tags":8000},[6103],"2017-06-08",[1316],{"slug":8002,"featured":6,"template":730},"discovering-gitlabs-personas","content:en-us:blog:discovering-gitlabs-personas.yml","Discovering Gitlabs Personas","en-us/blog/discovering-gitlabs-personas.yml","en-us/blog/discovering-gitlabs-personas",{"_path":8008,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8009,"content":8015,"config":8020,"_id":8022,"_type":16,"title":8023,"_source":17,"_file":8024,"_stem":8025,"_extension":20},"/en-us/blog/continuous-integration-ticketmaster",{"title":8010,"description":8011,"ogTitle":8010,"ogDescription":8011,"noIndex":6,"ogImage":8012,"ogUrl":8013,"ogSiteName":895,"ogType":896,"canonicalUrls":8013,"schema":8014},"How GitLab CI supported Ticketmaster's ramp up to weekly mobile releases","Ticketmaster Android developer Jeff Kelsey shares why GitLab CI was a game changer for his team.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749682946/Blog/Hero%20Images/tm-cover-image-small.jpg","https://about.gitlab.com/blog/continuous-integration-ticketmaster","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How GitLab CI supported Ticketmaster's ramp up to weekly mobile releases\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Jeff Kelsey\"}],\n        \"datePublished\": \"2017-06-07\",\n      }",{"title":8010,"description":8011,"authors":8016,"heroImage":8012,"date":8018,"category":14,"tags":8019},[8017],"Jeff Kelsey","2017-06-07",[1100,110,4437],{"slug":8021,"featured":6,"template":730},"continuous-integration-ticketmaster","content:en-us:blog:continuous-integration-ticketmaster.yml","Continuous Integration Ticketmaster","en-us/blog/continuous-integration-ticketmaster.yml","en-us/blog/continuous-integration-ticketmaster",{"_path":8027,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8028,"content":8034,"config":8038,"_id":8040,"_type":16,"title":8041,"_source":17,"_file":8042,"_stem":8043,"_extension":20},"/en-us/blog/fast-and-natural-continuous-integration-with-gitlab-ci",{"title":8029,"description":8030,"ogTitle":8029,"ogDescription":8030,"noIndex":6,"ogImage":8031,"ogUrl":8032,"ogSiteName":895,"ogType":896,"canonicalUrls":8032,"schema":8033},"Fast and natural continuous integration with GitLab CI","An overview of GitLab Continuous Integration and Delivery, and the main features of the tool.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749684106/Blog/Hero%20Images/fast-and-natural-continuous-integration-with-gitlab-ci.jpg","https://about.gitlab.com/blog/fast-and-natural-continuous-integration-with-gitlab-ci","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Fast and natural continuous integration with GitLab CI\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Samuel Alfageme\"}],\n        \"datePublished\": \"2017-05-22\",\n      }",{"title":8029,"description":8030,"authors":8035,"heroImage":8031,"date":8037,"category":14},[8036],"Samuel Alfageme","2017-05-22",{"slug":8039,"featured":6,"template":730},"fast-and-natural-continuous-integration-with-gitlab-ci","content:en-us:blog:fast-and-natural-continuous-integration-with-gitlab-ci.yml","Fast And Natural Continuous Integration With Gitlab Ci","en-us/blog/fast-and-natural-continuous-integration-with-gitlab-ci.yml","en-us/blog/fast-and-natural-continuous-integration-with-gitlab-ci",{"_path":8045,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8046,"content":8052,"config":8056,"_id":8058,"_type":16,"title":8059,"_source":17,"_file":8060,"_stem":8061,"_extension":20},"/en-us/blog/devops-containers-gitlab-openshift",{"title":8047,"description":8048,"ogTitle":8047,"ogDescription":8048,"noIndex":6,"ogImage":8049,"ogUrl":8050,"ogSiteName":895,"ogType":896,"canonicalUrls":8050,"schema":8051},"Demo - Auto Deploy from GitLab to an OpenShift container cluster","See how to reliably and repeatably build, test, and deploy an application in a container from GitLab to the OpenShift container cluster.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749671657/Blog/Hero%20Images/devops-openshift-webcast-blog-cover.png","https://about.gitlab.com/blog/devops-containers-gitlab-openshift","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Demo - Auto Deploy from GitLab to an OpenShift container cluster\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Erica Lindberg\"}],\n        \"datePublished\": \"2017-05-16\",\n      }",{"title":8047,"description":8048,"authors":8053,"heroImage":8049,"date":8055,"category":14},[8054],"Erica Lindberg","2017-05-16",{"slug":8057,"featured":6,"template":730},"devops-containers-gitlab-openshift","content:en-us:blog:devops-containers-gitlab-openshift.yml","Devops Containers Gitlab Openshift","en-us/blog/devops-containers-gitlab-openshift.yml","en-us/blog/devops-containers-gitlab-openshift",{"_path":8063,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8064,"content":8070,"config":8074,"_id":8076,"_type":16,"title":8077,"_source":17,"_file":8078,"_stem":8079,"_extension":20},"/en-us/blog/how-to-use-macstadium-and-gitlab-ci-to-build-your-macos-or-ios-projects",{"title":8065,"description":8066,"ogTitle":8065,"ogDescription":8066,"noIndex":6,"ogImage":8067,"ogUrl":8068,"ogSiteName":895,"ogType":896,"canonicalUrls":8068,"schema":8069},"How to use GitLab CI and MacStadium to build your macOS or iOS projects","Learn how to use GitLab CI on MacStadium's mini servers to build your macOS or iOS projects.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749671709/Blog/Hero%20Images/macstadium-datacenter.jpg","https://about.gitlab.com/blog/how-to-use-macstadium-and-gitlab-ci-to-build-your-macos-or-ios-projects","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to use GitLab CI and MacStadium to build your macOS or iOS projects\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Achilleas Pipinellis\"}],\n        \"datePublished\": \"2017-05-15\",\n      }",{"title":8065,"description":8066,"authors":8071,"heroImage":8067,"date":8073,"category":14},[8072],"Achilleas Pipinellis","2017-05-15",{"slug":8075,"featured":6,"template":730},"how-to-use-macstadium-and-gitlab-ci-to-build-your-macos-or-ios-projects","content:en-us:blog:how-to-use-macstadium-and-gitlab-ci-to-build-your-macos-or-ios-projects.yml","How To Use Macstadium And Gitlab Ci To Build Your Macos Or Ios Projects","en-us/blog/how-to-use-macstadium-and-gitlab-ci-to-build-your-macos-or-ios-projects.yml","en-us/blog/how-to-use-macstadium-and-gitlab-ci-to-build-your-macos-or-ios-projects",{"_path":8081,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8082,"content":8088,"config":8091,"_id":8093,"_type":16,"title":8094,"_source":17,"_file":8095,"_stem":8096,"_extension":20},"/en-us/blog/demo-service-desk",{"title":8083,"description":8084,"ogTitle":8083,"ogDescription":8084,"noIndex":6,"ogImage":8085,"ogUrl":8086,"ogSiteName":895,"ogType":896,"canonicalUrls":8086,"schema":8087},"Demo - GitLab Service Desk","In 9.1, we introduced our new Service Desk feature, allowing your customers to reach you inside GitLab simply by using a support email address.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749684042/Blog/Hero%20Images/demo-service-desk.jpg","https://about.gitlab.com/blog/demo-service-desk","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Demo - GitLab Service Desk\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Victor Wu\"}],\n        \"datePublished\": \"2017-05-09\",\n      }",{"title":8083,"description":8084,"authors":8089,"heroImage":8085,"date":8090,"category":14},[6550],"2017-05-09",{"slug":8092,"featured":6,"template":730},"demo-service-desk","content:en-us:blog:demo-service-desk.yml","Demo Service Desk","en-us/blog/demo-service-desk.yml","en-us/blog/demo-service-desk",{"_path":8098,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8099,"content":8105,"config":8108,"_id":8110,"_type":16,"title":8111,"_source":17,"_file":8112,"_stem":8113,"_extension":20},"/en-us/blog/mapping-work-to-do-versus-time-with-burndown-charts",{"title":8100,"description":8101,"ogTitle":8100,"ogDescription":8101,"noIndex":6,"ogImage":8102,"ogUrl":8103,"ogSiteName":895,"ogType":896,"canonicalUrls":8103,"schema":8104},"Demo - Mapping work versus time, with burndown charts","Our Frontend Lead Jacob Schatz explains how managers and ICs can benefit from our burndown chart feature, released in GitLab 9.1.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749666633/Blog/Hero%20Images/gitlab-2016-in-review-cover.png","https://about.gitlab.com/blog/mapping-work-to-do-versus-time-with-burndown-charts","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Demo - Mapping work versus time, with burndown charts\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Emily von Hoffmann\"}],\n        \"datePublished\": \"2017-04-25\",\n      }",{"title":8100,"description":8101,"authors":8106,"heroImage":8102,"date":8107,"category":14},[6607],"2017-04-25",{"slug":8109,"featured":6,"template":730},"mapping-work-to-do-versus-time-with-burndown-charts","content:en-us:blog:mapping-work-to-do-versus-time-with-burndown-charts.yml","Mapping Work To Do Versus Time With Burndown Charts","en-us/blog/mapping-work-to-do-versus-time-with-burndown-charts.yml","en-us/blog/mapping-work-to-do-versus-time-with-burndown-charts",{"_path":8115,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8116,"content":8122,"config":8125,"_id":8127,"_type":16,"title":8128,"_source":17,"_file":8129,"_stem":8130,"_extension":20},"/en-us/blog/cloud-native-demo",{"title":8117,"description":8118,"ogTitle":8117,"ogDescription":8118,"noIndex":6,"ogImage":8119,"ogUrl":8120,"ogSiteName":895,"ogType":896,"canonicalUrls":8120,"schema":8121},"Demo: cloud native development with GitLab","See how you can leverage the power of the cloud with GitLab 9.0.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749671482/Blog/Hero%20Images/cloud-native-demo.png","https://about.gitlab.com/blog/cloud-native-demo","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Demo: cloud native development with GitLab\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Rebecca Dodd\"}],\n        \"datePublished\": \"2017-04-18\",\n      }",{"title":8117,"description":8118,"authors":8123,"heroImage":8119,"date":8124,"category":14},[4193],"2017-04-18",{"slug":8126,"featured":6,"template":730},"cloud-native-demo","content:en-us:blog:cloud-native-demo.yml","Cloud Native Demo","en-us/blog/cloud-native-demo.yml","en-us/blog/cloud-native-demo",{"_path":8132,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8133,"content":8138,"config":8141,"_id":8143,"_type":16,"title":8144,"_source":17,"_file":8145,"_stem":8146,"_extension":20},"/en-us/blog/ci-cd-demo",{"title":8134,"description":8135,"ogTitle":8134,"ogDescription":8135,"noIndex":6,"ogImage":1968,"ogUrl":8136,"ogSiteName":895,"ogType":896,"canonicalUrls":8136,"schema":8137},"Demo: CI/CD with GitLab in action","Watch our video to see how to get started using CI/CD with GitLab.","https://about.gitlab.com/blog/ci-cd-demo","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Demo: CI/CD with GitLab in action\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Rebecca Dodd\"}],\n        \"datePublished\": \"2017-03-13\",\n      }",{"title":8134,"description":8135,"authors":8139,"heroImage":1968,"date":8140,"category":14},[4193],"2017-03-13",{"slug":8142,"featured":6,"template":730},"ci-cd-demo","content:en-us:blog:ci-cd-demo.yml","Ci Cd Demo","en-us/blog/ci-cd-demo.yml","en-us/blog/ci-cd-demo",{"_path":8148,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8149,"content":8154,"config":8158,"_id":8160,"_type":16,"title":8161,"_source":17,"_file":8162,"_stem":8163,"_extension":20},"/en-us/blog/why-we-are-not-leaving-the-cloud",{"title":8150,"description":8151,"ogTitle":8150,"ogDescription":8151,"noIndex":6,"ogImage":2578,"ogUrl":8152,"ogSiteName":895,"ogType":896,"canonicalUrls":8152,"schema":8153},"Why we are not leaving the cloud","What we learned from our community vetting our proposal to leave the cloud.","https://about.gitlab.com/blog/why-we-are-not-leaving-the-cloud","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Why we are not leaving the cloud\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Sean Packham\"}],\n        \"datePublished\": \"2017-03-02\",\n      }",{"title":8150,"description":8151,"authors":8155,"heroImage":2578,"date":8157,"category":14},[8156],"Sean Packham","2017-03-02",{"slug":8159,"featured":6,"template":730},"why-we-are-not-leaving-the-cloud","content:en-us:blog:why-we-are-not-leaving-the-cloud.yml","Why We Are Not Leaving The Cloud","en-us/blog/why-we-are-not-leaving-the-cloud.yml","en-us/blog/why-we-are-not-leaving-the-cloud",{"_path":8165,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8166,"content":8172,"config":8175,"_id":8177,"_type":16,"title":8178,"_source":17,"_file":8179,"_stem":8180,"_extension":20},"/en-us/blog/how-our-ux-team-worked-through-ideation-using-the-four-step-sketch",{"title":8167,"description":8168,"ogTitle":8167,"ogDescription":8168,"noIndex":6,"ogImage":8169,"ogUrl":8170,"ogSiteName":895,"ogType":896,"canonicalUrls":8170,"schema":8171},"How our UX team worked through ideation using the Four-Step Sketch","During our recent Summit, the UX team customized the Google Ventures Design Sprint process to tackle some of our larger feature proposals.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749684097/Blog/Hero%20Images/facilitating-ideas--overview.jpg","https://about.gitlab.com/blog/how-our-ux-team-worked-through-ideation-using-the-four-step-sketch","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How our UX team worked through ideation using the Four-Step Sketch\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Taurie Davis\"}],\n        \"datePublished\": \"2017-02-23\",\n      }",{"title":8167,"description":8168,"authors":8173,"heroImage":8169,"date":8174,"category":14},[7608],"2017-02-23",{"slug":8176,"featured":6,"template":730},"how-our-ux-team-worked-through-ideation-using-the-four-step-sketch","content:en-us:blog:how-our-ux-team-worked-through-ideation-using-the-four-step-sketch.yml","How Our Ux Team Worked Through Ideation Using The Four Step Sketch","en-us/blog/how-our-ux-team-worked-through-ideation-using-the-four-step-sketch.yml","en-us/blog/how-our-ux-team-worked-through-ideation-using-the-four-step-sketch",{"_path":8182,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8183,"content":8189,"config":8193,"_id":8195,"_type":16,"title":8196,"_source":17,"_file":8197,"_stem":8198,"_extension":20},"/en-us/blog/setting-up-gitlab-pages-with-cloudflare-certificates",{"title":8184,"description":8185,"ogTitle":8184,"ogDescription":8185,"noIndex":6,"ogImage":8186,"ogUrl":8187,"ogSiteName":895,"ogType":896,"canonicalUrls":8187,"schema":8188},"Setting up GitLab Pages with Cloudflare Certificates","How to set up GitLab Pages with a Cloudflare SSL/TLS Certificate for your (sub)domain","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749671091/Blog/Hero%20Images/lock.jpg","https://about.gitlab.com/blog/setting-up-gitlab-pages-with-cloudflare-certificates","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Setting up GitLab Pages with Cloudflare Certificates\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Marcia Ramos\"}],\n        \"datePublished\": \"2017-02-07\",\n      }",{"title":8184,"description":8185,"authors":8190,"heroImage":8186,"date":8192,"category":14},[8191],"Marcia Ramos","2017-02-07",{"slug":8194,"featured":6,"template":730},"setting-up-gitlab-pages-with-cloudflare-certificates","content:en-us:blog:setting-up-gitlab-pages-with-cloudflare-certificates.yml","Setting Up Gitlab Pages With Cloudflare Certificates","en-us/blog/setting-up-gitlab-pages-with-cloudflare-certificates.yml","en-us/blog/setting-up-gitlab-pages-with-cloudflare-certificates",{"_path":8200,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8201,"content":8207,"config":8210,"_id":8212,"_type":16,"title":8213,"_source":17,"_file":8214,"_stem":8215,"_extension":20},"/en-us/blog/vue-big-plan",{"title":8202,"description":8203,"ogTitle":8202,"ogDescription":8203,"noIndex":6,"ogImage":8204,"ogUrl":8205,"ogSiteName":895,"ogType":896,"canonicalUrls":8205,"schema":8206},"Our big Frontend plan revealed","Our long term plan to make GitLab as fast and performant as possible with Vue and webpack.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749683983/Blog/Hero%20Images/vue-big-plan-cover.png","https://about.gitlab.com/blog/vue-big-plan","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Our big Frontend plan revealed\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Jacob Schatz\"}],\n        \"datePublished\": \"2017-02-06\",\n      }",{"title":8202,"description":8203,"authors":8208,"heroImage":8204,"date":8209,"category":14},[6860],"2017-02-06",{"slug":8211,"featured":6,"template":730},"vue-big-plan","content:en-us:blog:vue-big-plan.yml","Vue Big Plan","en-us/blog/vue-big-plan.yml","en-us/blog/vue-big-plan",{"_path":8217,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8218,"content":8223,"config":8226,"_id":8228,"_type":16,"title":8229,"_source":17,"_file":8230,"_stem":8231,"_extension":20},"/en-us/blog/gitlab-dot-com-database-incident",{"title":8219,"description":8220,"ogTitle":8219,"ogDescription":8220,"noIndex":6,"ogImage":2578,"ogUrl":8221,"ogSiteName":895,"ogType":896,"canonicalUrls":8221,"schema":8222},"GitLab.com database incident","Yesterday we had a serious incident with one of our databases. We lost six hours of database data (issues, merge requests, users, comments, snippets, etc.) for GitLab.com.","https://about.gitlab.com/blog/gitlab-dot-com-database-incident","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"GitLab.com database incident\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"GitLab\"}],\n        \"datePublished\": \"2017-02-01\",\n      }",{"title":8219,"description":8220,"authors":8224,"heroImage":2578,"date":8225,"category":14},[1077],"2017-02-01",{"slug":8227,"featured":6,"template":730},"gitlab-dot-com-database-incident","content:en-us:blog:gitlab-dot-com-database-incident.yml","Gitlab Dot Com Database Incident","en-us/blog/gitlab-dot-com-database-incident.yml","en-us/blog/gitlab-dot-com-database-incident",{"_path":8233,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8234,"content":8240,"config":8243,"_id":8245,"_type":16,"title":8246,"_source":17,"_file":8247,"_stem":8248,"_extension":20},"/en-us/blog/getting-started-with-git-lfs-tutorial",{"title":8235,"description":8236,"ogTitle":8235,"ogDescription":8236,"noIndex":6,"ogImage":8237,"ogUrl":8238,"ogSiteName":895,"ogType":896,"canonicalUrls":8238,"schema":8239},"Getting started with Git LFS","Managing large files efficiently with Git LFS","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749683977/Blog/Hero%20Images/lfs-website.png","https://about.gitlab.com/blog/getting-started-with-git-lfs-tutorial","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Getting started with Git LFS\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Tobias Günther\"}],\n        \"datePublished\": \"2017-01-30\",\n      }",{"title":8235,"description":8236,"authors":8241,"heroImage":8237,"date":8242,"category":14},[4712],"2017-01-30",{"slug":8244,"featured":6,"template":730},"getting-started-with-git-lfs-tutorial","content:en-us:blog:getting-started-with-git-lfs-tutorial.yml","Getting Started With Git Lfs Tutorial","en-us/blog/getting-started-with-git-lfs-tutorial.yml","en-us/blog/getting-started-with-git-lfs-tutorial",{"_path":8250,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8251,"content":8257,"config":8260,"_id":8262,"_type":16,"title":8263,"_source":17,"_file":8264,"_stem":8265,"_extension":20},"/en-us/blog/designing-for-the-modern-developer-recap",{"title":8252,"description":8253,"ogTitle":8252,"ogDescription":8253,"noIndex":6,"ogImage":8254,"ogUrl":8255,"ogSiteName":895,"ogType":896,"canonicalUrls":8255,"schema":8256},"Designing for the modern developer","Recap and recording from our recent webcast featuring the GitLab user experience (UX) team","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749683970/Blog/Hero%20Images/designing-for-the-modern-developer.jpg","https://about.gitlab.com/blog/designing-for-the-modern-developer-recap","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Designing for the modern developer\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Emily von Hoffmann\"}],\n        \"datePublished\": \"2017-01-24\",\n      }",{"title":8252,"description":8253,"authors":8258,"heroImage":8254,"date":8259,"category":14},[6607],"2017-01-24",{"slug":8261,"featured":6,"template":730},"designing-for-the-modern-developer-recap","content:en-us:blog:designing-for-the-modern-developer-recap.yml","Designing For The Modern Developer Recap","en-us/blog/designing-for-the-modern-developer-recap.yml","en-us/blog/designing-for-the-modern-developer-recap",{"_path":8267,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8268,"content":8274,"config":8277,"_id":8279,"_type":16,"title":8280,"_source":17,"_file":8281,"_stem":8282,"_extension":20},"/en-us/blog/video-tutorial-idea-to-production-on-google-container-engine-gke",{"title":8269,"description":8270,"ogTitle":8269,"ogDescription":8270,"noIndex":6,"ogImage":8271,"ogUrl":8272,"ogSiteName":895,"ogType":896,"canonicalUrls":8272,"schema":8273},"Video tutorial: Idea to Production on Google Kubernetes Engine (GKE)","Watch the complete video tutorial to find out how you can take your team's productivity to the next level.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749671572/Blog/Hero%20Images/idea-to-production-gke.jpg","https://about.gitlab.com/blog/video-tutorial-idea-to-production-on-google-container-engine-gke","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Video tutorial: Idea to Production on Google Kubernetes Engine (GKE)\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Sean Packham\"}],\n        \"datePublished\": \"2017-01-23\",\n      }",{"title":8269,"description":8270,"authors":8275,"heroImage":8271,"date":8276,"category":14},[8156],"2017-01-23",{"slug":8278,"featured":6,"template":730},"video-tutorial-idea-to-production-on-google-container-engine-gke","content:en-us:blog:video-tutorial-idea-to-production-on-google-container-engine-gke.yml","Video Tutorial Idea To Production On Google Container Engine Gke","en-us/blog/video-tutorial-idea-to-production-on-google-container-engine-gke.yml","en-us/blog/video-tutorial-idea-to-production-on-google-container-engine-gke",{"_path":8284,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8285,"content":8291,"config":8294,"_id":8296,"_type":16,"title":8297,"_source":17,"_file":8298,"_stem":8299,"_extension":20},"/en-us/blog/the-importance-of-ux-personas",{"title":8286,"description":8287,"ogTitle":8286,"ogDescription":8287,"noIndex":6,"ogImage":8288,"ogUrl":8289,"ogSiteName":895,"ogType":896,"canonicalUrls":8289,"schema":8290},"Why we use personas in product development","Our User Experience (UX) Researcher explains what personas are and how they change the way teams work","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749683959/Blog/Hero%20Images/the-importance-of-ux-personas.jpg","https://about.gitlab.com/blog/the-importance-of-ux-personas","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Why we use personas in product development\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Sarah O’Donnell\"}],\n        \"datePublished\": \"2017-01-09\",\n      }",{"title":8286,"description":8287,"authors":8292,"heroImage":8288,"date":8293,"category":14},[6103],"2017-01-09",{"slug":8295,"featured":6,"template":730},"the-importance-of-ux-personas","content:en-us:blog:the-importance-of-ux-personas.yml","The Importance Of Ux Personas","en-us/blog/the-importance-of-ux-personas.yml","en-us/blog/the-importance-of-ux-personas",{"_path":8301,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8302,"content":8308,"config":8312,"_id":8314,"_type":16,"title":8315,"_source":17,"_file":8316,"_stem":8317,"_extension":20},"/en-us/blog/behind-the-scenes-how-we-built-review-apps",{"title":8303,"description":8304,"ogTitle":8303,"ogDescription":8304,"noIndex":6,"ogImage":8305,"ogUrl":8306,"ogSiteName":895,"ogType":896,"canonicalUrls":8306,"schema":8307},"Behind the scenes: How we built Review Apps","GitLab's Head of Product shares an inside look at iterating on one of our latest features","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749668402/Blog/Hero%20Images/code-gitlab-tanuki.png","https://about.gitlab.com/blog/behind-the-scenes-how-we-built-review-apps","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Behind the scenes: How we built Review Apps\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Mark Pundsack\"}],\n        \"datePublished\": \"2017-01-04\",\n      }",{"title":8303,"description":8304,"authors":8309,"heroImage":8305,"date":8311,"category":14},[8310],"Mark Pundsack","2017-01-04",{"slug":8313,"featured":6,"template":730},"behind-the-scenes-how-we-built-review-apps","content:en-us:blog:behind-the-scenes-how-we-built-review-apps.yml","Behind The Scenes How We Built Review Apps","en-us/blog/behind-the-scenes-how-we-built-review-apps.yml","en-us/blog/behind-the-scenes-how-we-built-review-apps",{"_path":8319,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8320,"content":8326,"config":8329,"_id":8331,"_type":16,"title":8332,"_source":17,"_file":8333,"_stem":8334,"_extension":20},"/en-us/blog/a-creative-agencys-gitlab-wishlist",{"title":8321,"description":8322,"ogTitle":8321,"ogDescription":8322,"noIndex":6,"ogImage":8323,"ogUrl":8324,"ogSiteName":895,"ogType":896,"canonicalUrls":8324,"schema":8325},"Customer story: A creative agency's GitLab wishlist","A Lukkien developer shares his team's challenges with Git and GitLab for their UX designs, and requests a few tweaks they'd find useful.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749670681/Blog/Hero%20Images/a-creative-agencys-gitlab-wishlist.jpg","https://about.gitlab.com/blog/a-creative-agencys-gitlab-wishlist","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Customer story: A creative agency's GitLab wishlist\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Emily von Hoffmann\"}],\n        \"datePublished\": \"2016-12-15\",\n      }",{"title":8321,"description":8322,"authors":8327,"heroImage":8323,"date":8328,"category":14},[6607],"2016-12-15",{"slug":8330,"featured":6,"template":730},"a-creative-agencys-gitlab-wishlist","content:en-us:blog:a-creative-agencys-gitlab-wishlist.yml","A Creative Agencys Gitlab Wishlist","en-us/blog/a-creative-agencys-gitlab-wishlist.yml","en-us/blog/a-creative-agencys-gitlab-wishlist",{"_path":8336,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8337,"content":8343,"config":8348,"_id":8350,"_type":16,"title":8351,"_source":17,"_file":8352,"_stem":8353,"_extension":20},"/en-us/blog/continuous-delivery-of-a-spring-boot-application-with-gitlab-ci-and-kubernetes",{"title":8338,"description":8339,"ogTitle":8338,"ogDescription":8339,"noIndex":6,"ogImage":8340,"ogUrl":8341,"ogSiteName":895,"ogType":896,"canonicalUrls":8341,"schema":8342},"Spring Boot delivery with GitLab CI and Kubernetes","Create a Continuous Delivery pipeline to deploy a Spring Boot app with GitLab CI and Kubernetes to Google Cloud Container Engine","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749672314/Blog/Hero%20Images/dew-leaf.jpg","https://about.gitlab.com/blog/continuous-delivery-of-a-spring-boot-application-with-gitlab-ci-and-kubernetes","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Continuous delivery of a Spring Boot application with GitLab CI and Kubernetes\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Marco Lenzo\"}],\n        \"datePublished\": \"2016-12-14\",\n      }",{"title":8344,"description":8339,"authors":8345,"heroImage":8340,"date":8347,"category":14},"Continuous delivery of a Spring Boot application with GitLab CI and Kubernetes",[8346],"Marco Lenzo","2016-12-14",{"slug":8349,"featured":6,"template":730},"continuous-delivery-of-a-spring-boot-application-with-gitlab-ci-and-kubernetes","content:en-us:blog:continuous-delivery-of-a-spring-boot-application-with-gitlab-ci-and-kubernetes.yml","Continuous Delivery Of A Spring Boot Application With Gitlab Ci And Kubernetes","en-us/blog/continuous-delivery-of-a-spring-boot-application-with-gitlab-ci-and-kubernetes.yml","en-us/blog/continuous-delivery-of-a-spring-boot-application-with-gitlab-ci-and-kubernetes",{"_path":8355,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8356,"content":8361,"config":8364,"_id":8366,"_type":16,"title":8367,"_source":17,"_file":8368,"_stem":8369,"_extension":20},"/en-us/blog/proposed-server-purchase-for-gitlab-com",{"title":8357,"description":8358,"ogTitle":8357,"ogDescription":8358,"noIndex":6,"ogImage":4837,"ogUrl":8359,"ogSiteName":895,"ogType":896,"canonicalUrls":8359,"schema":8360},"Proposed server purchase for GitLab.com","What hardware we're considering purchasing now that we have to move GitLab.com to metal.","https://about.gitlab.com/blog/proposed-server-purchase-for-gitlab-com","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Proposed server purchase for GitLab.com\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Sid Sijbrandij\"}],\n        \"datePublished\": \"2016-12-11\",\n      }",{"title":8357,"description":8358,"authors":8362,"heroImage":4837,"date":8363,"category":14},[2380],"2016-12-11",{"slug":8365,"featured":6,"template":730},"proposed-server-purchase-for-gitlab-com","content:en-us:blog:proposed-server-purchase-for-gitlab-com.yml","Proposed Server Purchase For Gitlab Com","en-us/blog/proposed-server-purchase-for-gitlab-com.yml","en-us/blog/proposed-server-purchase-for-gitlab-com",{"_path":8371,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8372,"content":8377,"config":8380,"_id":8382,"_type":16,"title":8383,"_source":17,"_file":8384,"_stem":8385,"_extension":20},"/en-us/blog/git-tips-and-tricks",{"title":8373,"description":8374,"ogTitle":8373,"ogDescription":8374,"noIndex":6,"ogImage":6468,"ogUrl":8375,"ogSiteName":895,"ogType":896,"canonicalUrls":8375,"schema":8376},"Git tips and tricks","Handy Git commands for everyday use","https://about.gitlab.com/blog/git-tips-and-tricks","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Git tips and tricks\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Achilleas Pipinellis\"}],\n        \"datePublished\": \"2016-12-08\",\n      }",{"title":8373,"description":8374,"authors":8378,"heroImage":6468,"date":8379,"category":14},[8072],"2016-12-08",{"slug":8381,"featured":6,"template":730},"git-tips-and-tricks","content:en-us:blog:git-tips-and-tricks.yml","Git Tips And Tricks","en-us/blog/git-tips-and-tricks.yml","en-us/blog/git-tips-and-tricks",{"_path":8387,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8388,"content":8393,"config":8397,"_id":8399,"_type":16,"title":8400,"_source":17,"_file":8401,"_stem":8402,"_extension":20},"/en-us/blog/building-a-new-gitlab-docs-site-with-nanoc-gitlab-ci-and-gitlab-pages",{"title":8389,"description":8390,"ogTitle":8389,"ogDescription":8390,"noIndex":6,"ogImage":5260,"ogUrl":8391,"ogSiteName":895,"ogType":896,"canonicalUrls":8391,"schema":8392},"Building a new GitLab Docs site with Nanoc, GitLab CI, and GitLab Pages","How we built the new GitLab Docs portal from the ground up","https://about.gitlab.com/blog/building-a-new-gitlab-docs-site-with-nanoc-gitlab-ci-and-gitlab-pages","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Building a new GitLab Docs site with Nanoc, GitLab CI, and GitLab Pages\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Connor Shea\"}],\n        \"datePublished\": \"2016-12-07\",\n      }",{"title":8389,"description":8390,"authors":8394,"heroImage":5260,"date":8396,"category":14},[8395],"Connor Shea","2016-12-07",{"slug":8398,"featured":6,"template":730},"building-a-new-gitlab-docs-site-with-nanoc-gitlab-ci-and-gitlab-pages","content:en-us:blog:building-a-new-gitlab-docs-site-with-nanoc-gitlab-ci-and-gitlab-pages.yml","Building A New Gitlab Docs Site With Nanoc Gitlab Ci And Gitlab Pages","en-us/blog/building-a-new-gitlab-docs-site-with-nanoc-gitlab-ci-and-gitlab-pages.yml","en-us/blog/building-a-new-gitlab-docs-site-with-nanoc-gitlab-ci-and-gitlab-pages",{"_path":8404,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8405,"content":8411,"config":8414,"_id":8416,"_type":16,"title":8417,"_source":17,"_file":8418,"_stem":8419,"_extension":20},"/en-us/blog/how-to-keep-your-fork-up-to-date-with-its-origin",{"title":8406,"description":8407,"ogTitle":8406,"ogDescription":8407,"noIndex":6,"ogImage":8408,"ogUrl":8409,"ogSiteName":895,"ogType":896,"canonicalUrls":8409,"schema":8410},"How to keep your fork up to date with its origin","GitLab Repository Mirroring: the best way to keep your fork up-to-date!","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749666587/Blog/Hero%20Images/fork.png","https://about.gitlab.com/blog/how-to-keep-your-fork-up-to-date-with-its-origin","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to keep your fork up to date with its origin\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Marcia Ramos\"}],\n        \"datePublished\": \"2016-12-01\",\n      }",{"title":8406,"description":8407,"authors":8412,"heroImage":8408,"date":8413,"category":14},[8191],"2016-12-01",{"slug":8415,"featured":6,"template":730},"how-to-keep-your-fork-up-to-date-with-its-origin","content:en-us:blog:how-to-keep-your-fork-up-to-date-with-its-origin.yml","How To Keep Your Fork Up To Date With Its Origin","en-us/blog/how-to-keep-your-fork-up-to-date-with-its-origin.yml","en-us/blog/how-to-keep-your-fork-up-to-date-with-its-origin",{"_path":8421,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8422,"content":8428,"config":8431,"_id":8433,"_type":16,"title":8434,"_source":17,"_file":8435,"_stem":8436,"_extension":20},"/en-us/blog/gitlab-is-a-slam-dunk",{"title":8423,"description":8424,"ogTitle":8423,"ogDescription":8424,"noIndex":6,"ogImage":8425,"ogUrl":8426,"ogSiteName":895,"ogType":896,"canonicalUrls":8426,"schema":8427},"'GitLab is a slam dunk': One team lead weighs his options","Developer Warren Postma shares his opinions on VCS, after years of trying out all the alternatives.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749663798/Blog/Hero%20Images/gitlab-is-a-slam-dunk.jpg","https://about.gitlab.com/blog/gitlab-is-a-slam-dunk","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"'GitLab is a slam dunk': One team lead weighs his options\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Emily von Hoffmann\"}],\n        \"datePublished\": \"2016-11-27\",\n      }",{"title":8423,"description":8424,"authors":8429,"heroImage":8425,"date":8430,"category":14},[6607],"2016-11-27",{"slug":8432,"featured":6,"template":730},"gitlab-is-a-slam-dunk","content:en-us:blog:gitlab-is-a-slam-dunk.yml","Gitlab Is A Slam Dunk","en-us/blog/gitlab-is-a-slam-dunk.yml","en-us/blog/gitlab-is-a-slam-dunk",{"_path":8438,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8439,"content":8445,"config":8449,"_id":8451,"_type":16,"title":8452,"_source":17,"_file":8453,"_stem":8454,"_extension":20},"/en-us/blog/why-choose-bare-metal",{"title":8440,"description":8441,"ogTitle":8440,"ogDescription":8441,"noIndex":6,"ogImage":8442,"ogUrl":8443,"ogSiteName":895,"ogType":896,"canonicalUrls":8443,"schema":8444},"How we knew it was time to leave the cloud","How we're solving storage and performance issues as we scale.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749683600/Blog/Hero%20Images/data.png","https://about.gitlab.com/blog/why-choose-bare-metal","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How we knew it was time to leave the cloud\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Pablo Carranza\"}],\n        \"datePublished\": \"2016-11-10\",\n      }",{"title":8440,"description":8441,"authors":8446,"heroImage":8442,"date":8448,"category":14},[8447],"Pablo Carranza","2016-11-10",{"slug":8450,"featured":6,"template":730},"why-choose-bare-metal","content:en-us:blog:why-choose-bare-metal.yml","Why Choose Bare Metal","en-us/blog/why-choose-bare-metal.yml","en-us/blog/why-choose-bare-metal",{"_path":8456,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8457,"content":8462,"config":8465,"_id":8467,"_type":16,"title":8468,"_source":17,"_file":8469,"_stem":8470,"_extension":20},"/en-us/blog/publish-code-coverage-report-with-gitlab-pages",{"title":8458,"description":8458,"ogTitle":8458,"ogDescription":8458,"noIndex":6,"ogImage":8459,"ogUrl":8460,"ogSiteName":895,"ogType":896,"canonicalUrls":8460,"schema":8461},"Publish code coverage report with GitLab Pages","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749672293/Blog/Hero%20Images/code-coverage-report-stats.png","https://about.gitlab.com/blog/publish-code-coverage-report-with-gitlab-pages","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Publish code coverage report with GitLab Pages\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Grzegorz Bizon\"}],\n        \"datePublished\": \"2016-11-03\",\n      }",{"title":8458,"description":8458,"authors":8463,"heroImage":8459,"date":8464,"category":14},[3493],"2016-11-03",{"slug":8466,"featured":6,"template":730},"publish-code-coverage-report-with-gitlab-pages","content:en-us:blog:publish-code-coverage-report-with-gitlab-pages.yml","Publish Code Coverage Report With Gitlab Pages","en-us/blog/publish-code-coverage-report-with-gitlab-pages.yml","en-us/blog/publish-code-coverage-report-with-gitlab-pages",{"_path":8472,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8473,"content":8478,"config":8481,"_id":8483,"_type":16,"title":8484,"_source":17,"_file":8485,"_stem":8486,"_extension":20},"/en-us/blog/why-we-chose-vue",{"title":8474,"description":8475,"ogTitle":8474,"ogDescription":8475,"noIndex":6,"ogImage":4837,"ogUrl":8476,"ogSiteName":895,"ogType":896,"canonicalUrls":8476,"schema":8477},"Why we chose Vue.js","Why GitLab went with Vue.js","https://about.gitlab.com/blog/why-we-chose-vue","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Why we chose Vue.js\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Jacob Schatz\"}],\n        \"datePublished\": \"2016-10-20\",\n      }",{"title":8474,"description":8475,"authors":8479,"heroImage":4837,"date":8480,"category":14},[6860],"2016-10-20",{"slug":8482,"featured":6,"template":730},"why-we-chose-vue","content:en-us:blog:why-we-chose-vue.yml","Why We Chose Vue","en-us/blog/why-we-chose-vue.yml","en-us/blog/why-we-chose-vue",{"_path":8488,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8489,"content":8495,"config":8499,"_id":8501,"_type":16,"title":8502,"_source":17,"_file":8503,"_stem":8504,"_extension":20},"/en-us/blog/automated-debian-package-build-with-gitlab-ci",{"title":8490,"description":8491,"ogTitle":8490,"ogDescription":8491,"noIndex":6,"ogImage":8492,"ogUrl":8493,"ogSiteName":895,"ogType":896,"canonicalUrls":8493,"schema":8494},"Automated Debian Package Build with GitLab CI","Continuous Deployment with GitLab: how to build and deploy a Debian Package with GitLab CI","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749684154/Blog/Hero%20Images/adfinis-sygroup-cover.png","https://about.gitlab.com/blog/automated-debian-package-build-with-gitlab-ci","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Automated Debian Package Build with GitLab CI\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Adfinis SyGroup\"}],\n        \"datePublished\": \"2016-10-12\",\n      }",{"title":8490,"description":8491,"authors":8496,"heroImage":8492,"date":8498,"category":14},[8497],"Adfinis SyGroup","2016-10-12",{"slug":8500,"featured":6,"template":730},"automated-debian-package-build-with-gitlab-ci","content:en-us:blog:automated-debian-package-build-with-gitlab-ci.yml","Automated Debian Package Build With Gitlab Ci","en-us/blog/automated-debian-package-build-with-gitlab-ci.yml","en-us/blog/automated-debian-package-build-with-gitlab-ci",{"_path":8506,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8507,"content":8513,"config":8516,"_id":8518,"_type":16,"title":8519,"_source":17,"_file":8520,"_stem":8521,"_extension":20},"/en-us/blog/wrapping-text",{"title":8508,"description":8509,"ogTitle":8508,"ogDescription":8509,"noIndex":6,"ogImage":8510,"ogUrl":8511,"ogSiteName":895,"ogType":896,"canonicalUrls":8511,"schema":8512},"To Wrap or Not to Wrap: One of Life's Greatest Questions","Breaking lines: useful or painful?","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749683906/Blog/Hero%20Images/wrap-not-to-wrap-text.png","https://about.gitlab.com/blog/wrapping-text","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"To Wrap or Not to Wrap: One of Life's Greatest Questions\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Marcia Ramos\"}],\n        \"datePublished\": \"2016-10-11\",\n      }",{"title":8508,"description":8509,"authors":8514,"heroImage":8510,"date":8515,"category":14},[8191],"2016-10-11",{"slug":8517,"featured":6,"template":730},"wrapping-text","content:en-us:blog:wrapping-text.yml","Wrapping Text","en-us/blog/wrapping-text.yml","en-us/blog/wrapping-text",{"_path":8523,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8524,"content":8530,"config":8533,"_id":8535,"_type":16,"title":8536,"_source":17,"_file":8537,"_stem":8538,"_extension":20},"/en-us/blog/infrastructure-update",{"title":8525,"description":8526,"ogTitle":8525,"ogDescription":8526,"noIndex":6,"ogImage":8527,"ogUrl":8528,"ogSiteName":895,"ogType":896,"canonicalUrls":8528,"schema":8529},"GitLab Infrastructure Update","Hear how we're working through infrastructure challenges as we scale.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749683895/Blog/Hero%20Images/infrastructure.jpg","https://about.gitlab.com/blog/infrastructure-update","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"GitLab Infrastructure Update\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Pablo Carranza\"}],\n        \"datePublished\": \"2016-09-26\",\n      }",{"title":8525,"description":8526,"authors":8531,"heroImage":8527,"date":8532,"category":14},[8447],"2016-09-26",{"slug":8534,"featured":6,"template":730},"infrastructure-update","content:en-us:blog:infrastructure-update.yml","Infrastructure Update","en-us/blog/infrastructure-update.yml","en-us/blog/infrastructure-update",{"_path":8540,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8541,"content":8547,"config":8551,"_id":8553,"_type":16,"title":8554,"_source":17,"_file":8555,"_stem":8556,"_extension":20},"/en-us/blog/posting-to-your-gitlab-pages-blog-from-ios",{"title":8542,"description":8543,"ogTitle":8542,"ogDescription":8543,"noIndex":6,"ogImage":8544,"ogUrl":8545,"ogSiteName":895,"ogType":896,"canonicalUrls":8545,"schema":8546},"Posting to your GitLab Pages blog from iOS","Tutorial: Learn how to post to your GitLab Pages blog from anywhere, using your iOS device.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749684176/Blog/Hero%20Images/ios-writing-anywhere.png","https://about.gitlab.com/blog/posting-to-your-gitlab-pages-blog-from-ios","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Posting to your GitLab Pages blog from iOS\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Angelo Stavrow\"}],\n        \"datePublished\": \"2016-08-19\",\n      }",{"title":8542,"description":8543,"authors":8548,"heroImage":8544,"date":8550,"category":14},[8549],"Angelo Stavrow","2016-08-19",{"slug":8552,"featured":6,"template":730},"posting-to-your-gitlab-pages-blog-from-ios","content:en-us:blog:posting-to-your-gitlab-pages-blog-from-ios.yml","Posting To Your Gitlab Pages Blog From Ios","en-us/blog/posting-to-your-gitlab-pages-blog-from-ios.yml","en-us/blog/posting-to-your-gitlab-pages-blog-from-ios",{"_path":8558,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8559,"content":8565,"config":8569,"_id":8571,"_type":16,"title":8572,"_source":17,"_file":8573,"_stem":8574,"_extension":20},"/en-us/blog/building-an-elixir-release-into-docker-image-using-gitlab-ci-part-1",{"title":8560,"description":8561,"ogTitle":8560,"ogDescription":8561,"noIndex":6,"ogImage":8562,"ogUrl":8563,"ogSiteName":895,"ogType":896,"canonicalUrls":8563,"schema":8564},"Building an Elixir Release into a Docker image using GitLab CI - Part 1","Deploying projects written in Elixir/Erlang to production with Docker Containers and GitLab CI!","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749665223/Blog/Hero%20Images/containers.jpg","https://about.gitlab.com/blog/building-an-elixir-release-into-docker-image-using-gitlab-ci-part-1","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Building an Elixir Release into a Docker image using GitLab CI - Part 1\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Alexander Malaev\"}],\n        \"datePublished\": \"2016-08-11\",\n      }",{"title":8560,"description":8561,"authors":8566,"heroImage":8562,"date":8568,"category":14},[8567],"Alexander Malaev","2016-08-11",{"slug":8570,"featured":6,"template":730},"building-an-elixir-release-into-docker-image-using-gitlab-ci-part-1","content:en-us:blog:building-an-elixir-release-into-docker-image-using-gitlab-ci-part-1.yml","Building An Elixir Release Into Docker Image Using Gitlab Ci Part 1","en-us/blog/building-an-elixir-release-into-docker-image-using-gitlab-ci-part-1.yml","en-us/blog/building-an-elixir-release-into-docker-image-using-gitlab-ci-part-1",{"_path":8576,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8577,"content":8581,"config":8584,"_id":8586,"_type":16,"title":8587,"_source":17,"_file":8588,"_stem":8589,"_extension":20},"/en-us/blog/continuous-integration-delivery-and-deployment-with-gitlab",{"title":8578,"ogTitle":8578,"noIndex":6,"ogImage":7862,"ogUrl":8579,"ogSiteName":895,"ogType":896,"canonicalUrls":8579,"schema":8580},"Continuous Integration, Delivery, and Deployment with GitLab","https://about.gitlab.com/blog/continuous-integration-delivery-and-deployment-with-gitlab","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Continuous Integration, Delivery, and Deployment with GitLab\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Marcia Ramos\"}],\n        \"datePublished\": \"2016-08-05\",\n      }",{"title":8578,"authors":8582,"heroImage":7862,"date":8583,"category":14},[8191],"2016-08-05",{"slug":8585,"featured":6,"template":730},"continuous-integration-delivery-and-deployment-with-gitlab","content:en-us:blog:continuous-integration-delivery-and-deployment-with-gitlab.yml","Continuous Integration Delivery And Deployment With Gitlab","en-us/blog/continuous-integration-delivery-and-deployment-with-gitlab.yml","en-us/blog/continuous-integration-delivery-and-deployment-with-gitlab",{"_path":8591,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8592,"content":8598,"config":8602,"_id":8604,"_type":16,"title":8605,"_source":17,"_file":8606,"_stem":8607,"_extension":20},"/en-us/blog/building-our-web-app-on-gitlab-ci",{"title":8593,"description":8594,"ogTitle":8593,"ogDescription":8594,"noIndex":6,"ogImage":8595,"ogUrl":8596,"ogSiteName":895,"ogType":896,"canonicalUrls":8596,"schema":8597},"Building our web-app on GitLab CI","5 reasons why Captain Train migrated from Jenkins to GitLab CI","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749684187/Blog/Hero%20Images/building-our-web-app-on-gitlab-ci-cover.jpg","https://about.gitlab.com/blog/building-our-web-app-on-gitlab-ci","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Building our web-app on GitLab CI\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Pierre de La Morinerie\"}],\n        \"datePublished\": \"2016-07-22\",\n      }",{"title":8593,"description":8594,"authors":8599,"heroImage":8595,"date":8601,"category":14},[8600],"Pierre de La Morinerie","2016-07-22",{"slug":8603,"featured":6,"template":730},"building-our-web-app-on-gitlab-ci","content:en-us:blog:building-our-web-app-on-gitlab-ci.yml","Building Our Web App On Gitlab Ci","en-us/blog/building-our-web-app-on-gitlab-ci.yml","en-us/blog/building-our-web-app-on-gitlab-ci",{"_path":8609,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8610,"content":8616,"config":8619,"_id":8621,"_type":16,"title":8622,"_source":17,"_file":8623,"_stem":8624,"_extension":20},"/en-us/blog/markdown-kramdown-tips-and-tricks",{"title":8611,"description":8612,"ogTitle":8611,"ogDescription":8612,"noIndex":6,"ogImage":8613,"ogUrl":8614,"ogSiteName":895,"ogType":896,"canonicalUrls":8614,"schema":8615},"Markdown Kramdown Tips and Tricks","Learn how to apply classes to markdown, create ToCs, embed iframes and much more!","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749671850/Blog/Hero%20Images/markdown-kramdown-tips-and-tricks-cover.png","https://about.gitlab.com/blog/markdown-kramdown-tips-and-tricks","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Markdown Kramdown Tips and Tricks\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Marcia Ramos\"}],\n        \"datePublished\": \"2016-07-19\",\n      }",{"title":8611,"description":8612,"authors":8617,"heroImage":8613,"date":8618,"category":14},[8191],"2016-07-19",{"slug":8620,"featured":6,"template":730},"markdown-kramdown-tips-and-tricks","content:en-us:blog:markdown-kramdown-tips-and-tricks.yml","Markdown Kramdown Tips And Tricks","en-us/blog/markdown-kramdown-tips-and-tricks.yml","en-us/blog/markdown-kramdown-tips-and-tricks",{"_path":8626,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8627,"content":8633,"config":8637,"_id":8639,"_type":16,"title":8640,"_source":17,"_file":8641,"_stem":8642,"_extension":20},"/en-us/blog/how-to-setup-a-gitlab-instance-on-microsoft-azure",{"title":8628,"description":8629,"ogTitle":8628,"ogDescription":8629,"noIndex":6,"ogImage":8630,"ogUrl":8631,"ogSiteName":895,"ogType":896,"canonicalUrls":8631,"schema":8632},"How to Set Up a GitLab Instance on Microsoft Azure","Learn how to set up a GitLab Instance on Microsoft Azure with this tutorial","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749672257/Blog/Hero%20Images/gitlab-on-azure-cover.jpg","https://about.gitlab.com/blog/how-to-setup-a-gitlab-instance-on-microsoft-azure","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to Set Up a GitLab Instance on Microsoft Azure\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Dave Wentzel\"}],\n        \"datePublished\": \"2016-07-13\",\n      }",{"title":8628,"description":8629,"authors":8634,"heroImage":8630,"date":8636,"category":14},[8635],"Dave Wentzel","2016-07-13",{"slug":8638,"featured":6,"template":730},"how-to-setup-a-gitlab-instance-on-microsoft-azure","content:en-us:blog:how-to-setup-a-gitlab-instance-on-microsoft-azure.yml","How To Setup A Gitlab Instance On Microsoft Azure","en-us/blog/how-to-setup-a-gitlab-instance-on-microsoft-azure.yml","en-us/blog/how-to-setup-a-gitlab-instance-on-microsoft-azure",{"_path":8644,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8645,"content":8650,"config":8653,"_id":8655,"_type":16,"title":8656,"_source":17,"_file":8657,"_stem":8658,"_extension":20},"/en-us/blog/get-started-with-openshift-origin-3-and-gitlab",{"title":8646,"description":8647,"ogTitle":8646,"ogDescription":8647,"noIndex":6,"ogImage":4837,"ogUrl":8648,"ogSiteName":895,"ogType":896,"canonicalUrls":8648,"schema":8649},"Get started with OpenShift Origin 3 and GitLab","In this tutorial, we will see how to deploy GitLab in OpenShift using GitLab's official Docker image","https://about.gitlab.com/blog/get-started-with-openshift-origin-3-and-gitlab","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Get started with OpenShift Origin 3 and GitLab\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Achilleas Pipinellis\"}],\n        \"datePublished\": \"2016-06-28\",\n      }",{"title":8646,"description":8647,"authors":8651,"heroImage":4837,"date":8652,"category":14},[8072],"2016-06-28",{"slug":8654,"featured":6,"template":730},"get-started-with-openshift-origin-3-and-gitlab","content:en-us:blog:get-started-with-openshift-origin-3-and-gitlab.yml","Get Started With Openshift Origin 3 And Gitlab","en-us/blog/get-started-with-openshift-origin-3-and-gitlab.yml","en-us/blog/get-started-with-openshift-origin-3-and-gitlab",{"_path":8660,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8661,"content":8667,"config":8670,"_id":8672,"_type":16,"title":8673,"_source":17,"_file":8674,"_stem":8675,"_extension":20},"/en-us/blog/secure-gitlab-pages-with-startssl",{"title":8662,"description":8663,"ogTitle":8662,"ogDescription":8663,"noIndex":6,"ogImage":8664,"ogUrl":8665,"ogSiteName":895,"ogType":896,"canonicalUrls":8665,"schema":8666},"Secure GitLab Pages with StartSSL","A quick overview on SSL/TLS certificates and StartCom CA and a comparison between StartSSL Class 1 and Let's Encrypt.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749684890/Blog/Hero%20Images/startssl-gitlab-pages-cover.jpg","https://about.gitlab.com/blog/secure-gitlab-pages-with-startssl","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Secure GitLab Pages with StartSSL\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Marcia Ramos\"}],\n        \"datePublished\": \"2016-06-24\",\n      }",{"title":8662,"description":8663,"authors":8668,"heroImage":8664,"date":8669,"category":14},[8191],"2016-06-24",{"slug":8671,"featured":6,"template":730},"secure-gitlab-pages-with-startssl","content:en-us:blog:secure-gitlab-pages-with-startssl.yml","Secure Gitlab Pages With Startssl","en-us/blog/secure-gitlab-pages-with-startssl.yml","en-us/blog/secure-gitlab-pages-with-startssl",{"_path":8677,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8678,"content":8684,"config":8688,"_id":8690,"_type":16,"title":8691,"_source":17,"_file":8692,"_stem":8693,"_extension":20},"/en-us/blog/how-we-scale-gitlab-by-having-docker-built-in",{"title":8679,"description":8680,"ogTitle":8679,"ogDescription":8680,"noIndex":6,"ogImage":8681,"ogUrl":8682,"ogSiteName":895,"ogType":896,"canonicalUrls":8682,"schema":8683},"How we scale GitLab by having Docker built in","Read on for more details on how we scale GitLab by having Docker built in.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749684707/Blog/Hero%20Images/scale-GitLab-Docker-built-in-cover.png","https://about.gitlab.com/blog/how-we-scale-gitlab-by-having-docker-built-in","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How we scale GitLab by having Docker built in\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"DJ Mountney\"}],\n        \"datePublished\": \"2016-06-21\",\n      }",{"title":8679,"description":8680,"authors":8685,"heroImage":8681,"date":8687,"category":14},[8686],"DJ Mountney","2016-06-21",{"slug":8689,"featured":6,"template":730},"how-we-scale-gitlab-by-having-docker-built-in","content:en-us:blog:how-we-scale-gitlab-by-having-docker-built-in.yml","How We Scale Gitlab By Having Docker Built In","en-us/blog/how-we-scale-gitlab-by-having-docker-built-in.yml","en-us/blog/how-we-scale-gitlab-by-having-docker-built-in",{"_path":8695,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8696,"content":8702,"config":8705,"_id":8707,"_type":16,"title":8708,"_source":17,"_file":8709,"_stem":8710,"_extension":20},"/en-us/blog/ssg-overview-gitlab-pages-part-3-examples-ci",{"title":8697,"description":8698,"ogTitle":8697,"ogDescription":8698,"noIndex":6,"ogImage":8699,"ogUrl":8700,"ogSiteName":895,"ogType":896,"canonicalUrls":8700,"schema":8701},"SSGs Part 3: Build any SSG site with GitLab Pages","Which SSGs can I use with GitLab Pages? How to set up GitLab CI to build my SSG site? Where can I find some examples?","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749684858/Blog/Hero%20Images/ssg-overview-gitlab-pages-part-3-cover.jpg","https://about.gitlab.com/blog/ssg-overview-gitlab-pages-part-3-examples-ci","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"SSGs Part 3: Build any SSG site with GitLab Pages\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Marcia Ramos\"}],\n        \"datePublished\": \"2016-06-17\",\n      }",{"title":8697,"description":8698,"authors":8703,"heroImage":8699,"date":8704,"category":14},[8191],"2016-06-17",{"slug":8706,"featured":6,"template":730},"ssg-overview-gitlab-pages-part-3-examples-ci","content:en-us:blog:ssg-overview-gitlab-pages-part-3-examples-ci.yml","Ssg Overview Gitlab Pages Part 3 Examples Ci","en-us/blog/ssg-overview-gitlab-pages-part-3-examples-ci.yml","en-us/blog/ssg-overview-gitlab-pages-part-3-examples-ci",{"_path":8712,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8713,"content":8719,"config":8722,"_id":8724,"_type":16,"title":8725,"_source":17,"_file":8726,"_stem":8727,"_extension":20},"/en-us/blog/ssg-overview-gitlab-pages-part-2",{"title":8714,"description":8715,"ogTitle":8714,"ogDescription":8715,"noIndex":6,"ogImage":8716,"ogUrl":8717,"ogSiteName":895,"ogType":896,"canonicalUrls":8717,"schema":8718},"SSGs Part 2: What are modern static site generators","This is Part 2: Modern Static Site Generators, where we provide you with an overview on the subject.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749684846/Blog/Hero%20Images/ssg-overview-gitlab-pages-cover.jpg","https://about.gitlab.com/blog/ssg-overview-gitlab-pages-part-2","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"SSGs Part 2: What are modern static site generators\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Marcia Ramos\"}],\n        \"datePublished\": \"2016-06-10\",\n      }",{"title":8714,"description":8715,"authors":8720,"heroImage":8716,"date":8721,"category":14},[8191],"2016-06-10",{"slug":8723,"featured":6,"template":730},"ssg-overview-gitlab-pages-part-2","content:en-us:blog:ssg-overview-gitlab-pages-part-2.yml","Ssg Overview Gitlab Pages Part 2","en-us/blog/ssg-overview-gitlab-pages-part-2.yml","en-us/blog/ssg-overview-gitlab-pages-part-2",{"_path":8729,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8730,"content":8736,"config":8740,"_id":8742,"_type":16,"title":8743,"_source":17,"_file":8744,"_stem":8745,"_extension":20},"/en-us/blog/getting-started-with-gitlab-development-kit",{"title":8731,"description":8732,"ogTitle":8731,"ogDescription":8732,"noIndex":6,"ogImage":8733,"ogUrl":8734,"ogSiteName":895,"ogType":896,"canonicalUrls":8734,"schema":8735},"Getting Started with GitLab Development Kit","This post is helpful if you've considered developing a feature or fix for GitLab but are unsure how to set up a development environment.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749684698/Blog/Hero%20Images/getting-started-with-gitlab-development-kit.jpg","https://about.gitlab.com/blog/getting-started-with-gitlab-development-kit","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Getting Started with GitLab Development Kit\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Drew Blessing\"}],\n        \"datePublished\": \"2016-06-08\",\n      }",{"title":8731,"description":8732,"authors":8737,"heroImage":8733,"date":8739,"category":14},[8738],"Drew Blessing","2016-06-08",{"slug":8741,"featured":6,"template":730},"getting-started-with-gitlab-development-kit","content:en-us:blog:getting-started-with-gitlab-development-kit.yml","Getting Started With Gitlab Development Kit","en-us/blog/getting-started-with-gitlab-development-kit.yml","en-us/blog/getting-started-with-gitlab-development-kit",{"_path":8747,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8748,"content":8754,"config":8757,"_id":8759,"_type":16,"title":8760,"_source":17,"_file":8761,"_stem":8762,"_extension":20},"/en-us/blog/ssg-overview-gitlab-pages-part-1-dynamic-x-static",{"title":8749,"description":8750,"ogTitle":8749,"ogDescription":8750,"noIndex":6,"ogImage":8751,"ogUrl":8752,"ogSiteName":895,"ogType":896,"canonicalUrls":8752,"schema":8753},"SSGs Part 1: A Static vs Dynamic Website","This is Part 1: A Dynamic vs Static Website, where we go over their differences, pros and cons.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749684818/Blog/Hero%20Images/part-1-static-x-dynamic-cover.jpg","https://about.gitlab.com/blog/ssg-overview-gitlab-pages-part-1-dynamic-x-static","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"SSGs Part 1: A Static vs Dynamic Website\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Marcia Ramos\"}],\n        \"datePublished\": \"2016-06-03\",\n      }",{"title":8749,"description":8750,"authors":8755,"heroImage":8751,"date":8756,"category":14},[8191],"2016-06-03",{"slug":8758,"featured":6,"template":730},"ssg-overview-gitlab-pages-part-1-dynamic-x-static","content:en-us:blog:ssg-overview-gitlab-pages-part-1-dynamic-x-static.yml","Ssg Overview Gitlab Pages Part 1 Dynamic X Static","en-us/blog/ssg-overview-gitlab-pages-part-1-dynamic-x-static.yml","en-us/blog/ssg-overview-gitlab-pages-part-1-dynamic-x-static",{"_path":8764,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8765,"content":8770,"config":8773,"_id":8775,"_type":16,"title":8776,"_source":17,"_file":8777,"_stem":8778,"_extension":20},"/en-us/blog/gitlab-container-registry",{"title":8766,"description":8767,"ogTitle":8766,"ogDescription":8767,"noIndex":6,"ogImage":8562,"ogUrl":8768,"ogSiteName":895,"ogType":896,"canonicalUrls":8768,"schema":8769},"Introducing GitLab Container Registry","Built on open source software, GitLab Container Registry isn't just a standalone registry; it's completely integrated with GitLab.","https://about.gitlab.com/blog/gitlab-container-registry","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Introducing GitLab Container Registry\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Mark Pundsack\"}],\n        \"datePublished\": \"2016-05-23\",\n      }",{"title":8766,"description":8767,"authors":8771,"heroImage":8562,"date":8772,"category":14},[8310],"2016-05-23",{"slug":8774,"featured":6,"template":730},"gitlab-container-registry","content:en-us:blog:gitlab-container-registry.yml","Gitlab Container Registry","en-us/blog/gitlab-container-registry.yml","en-us/blog/gitlab-container-registry",{"_path":8780,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8781,"content":8787,"config":8790,"_id":8792,"_type":16,"title":8793,"_source":17,"_file":8794,"_stem":8795,"_extension":20},"/en-us/blog/getting-started-gitlab-and-shippable",{"title":8782,"description":8783,"ogTitle":8782,"ogDescription":8783,"noIndex":6,"ogImage":8784,"ogUrl":8785,"ogSiteName":895,"ogType":896,"canonicalUrls":8785,"schema":8786},"Getting Started with GitLab and Shippable Continuous Integration"," To know more about how to set up Shippable CI with GitLab, read on.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749672330/Blog/Hero%20Images/1-aye_aye_gitlab.png","https://about.gitlab.com/blog/getting-started-gitlab-and-shippable","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Getting Started with GitLab and Shippable Continuous Integration\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"GitLab\"}],\n        \"datePublished\": \"2016-05-05\",\n      }",{"title":8782,"description":8783,"authors":8788,"heroImage":8784,"date":8789,"category":14},[1077],"2016-05-05",{"slug":8791,"featured":6,"template":730},"getting-started-gitlab-and-shippable","content:en-us:blog:getting-started-gitlab-and-shippable.yml","Getting Started Gitlab And Shippable","en-us/blog/getting-started-gitlab-and-shippable.yml","en-us/blog/getting-started-gitlab-and-shippable",{"_path":8797,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8798,"content":8804,"config":8807,"_id":8809,"_type":16,"title":8810,"_source":17,"_file":8811,"_stem":8812,"_extension":20},"/en-us/blog/look-into-gitlab-infrastructure",{"title":8799,"description":8800,"ogTitle":8799,"ogDescription":8800,"noIndex":6,"ogImage":8801,"ogUrl":8802,"ogSiteName":895,"ogType":896,"canonicalUrls":8802,"schema":8803},"An inside look at the infrastructure of GitLab.com","In this post, you'll find out just how many servers we use. You'll gain some perspective on what those servers are up to.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749684519/Blog/Hero%20Images/goal.jpg","https://about.gitlab.com/blog/look-into-gitlab-infrastructure","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"An inside look at the infrastructure of GitLab.com\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Tomasz Maczukin\"}],\n        \"datePublished\": \"2016-04-29\",\n      }",{"title":8799,"description":8800,"authors":8805,"heroImage":8801,"date":8806,"category":14},[3582],"2016-04-29",{"slug":8808,"featured":6,"template":730},"look-into-gitlab-infrastructure","content:en-us:blog:look-into-gitlab-infrastructure.yml","Look Into Gitlab Infrastructure","en-us/blog/look-into-gitlab-infrastructure.yml","en-us/blog/look-into-gitlab-infrastructure",{"_path":8814,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8815,"content":8821,"config":8825,"_id":8827,"_type":16,"title":8828,"_source":17,"_file":8829,"_stem":8830,"_extension":20},"/en-us/blog/getting-started-with-gitlab-and-digitalocean",{"title":8816,"description":8817,"ogTitle":8816,"ogDescription":8817,"noIndex":6,"ogImage":8818,"ogUrl":8819,"ogSiteName":895,"ogType":896,"canonicalUrls":8819,"schema":8820},"Getting started with GitLab and DigitalOcean","This tutorial is adapted from the How To Use the GitLab One-Click Install Image to Manage Git Repositories tutorial on DigitalOcean.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749672941/Blog/Hero%20Images/sharks-paper.jpg","https://about.gitlab.com/blog/getting-started-with-gitlab-and-digitalocean","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Getting started with GitLab and DigitalOcean\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Achilleas Pipinellis\"}],\n        \"datePublished\": \"2016-04-27\",\n      }",{"title":8816,"description":8817,"authors":8822,"heroImage":8818,"date":8823,"category":14,"tags":8824},[8072],"2016-04-27",[233],{"slug":8826,"featured":6,"template":730},"getting-started-with-gitlab-and-digitalocean","content:en-us:blog:getting-started-with-gitlab-and-digitalocean.yml","Getting Started With Gitlab And Digitalocean","en-us/blog/getting-started-with-gitlab-and-digitalocean.yml","en-us/blog/getting-started-with-gitlab-and-digitalocean",{"_path":8832,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8833,"content":8839,"config":8842,"_id":8844,"_type":16,"title":8845,"_source":17,"_file":8846,"_stem":8847,"_extension":20},"/en-us/blog/how-to-set-up-gitlab-runner-on-digitalocean",{"title":8834,"description":8835,"ogTitle":8834,"ogDescription":8835,"noIndex":6,"ogImage":8836,"ogUrl":8837,"ogSiteName":895,"ogType":896,"canonicalUrls":8837,"schema":8838},"How to set up GitLab Runner on DigitalOcean","In this tutorial we will explore how easy it is to install and set up your own Runner on DigitalOcean.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749684667/Blog/Hero%20Images/runners.jpg","https://about.gitlab.com/blog/how-to-set-up-gitlab-runner-on-digitalocean","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to set up GitLab Runner on DigitalOcean\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Achilleas Pipinellis\"}],\n        \"datePublished\": \"2016-04-19\",\n      }",{"title":8834,"description":8835,"authors":8840,"heroImage":8836,"date":8841,"category":14},[8072],"2016-04-19",{"slug":8843,"featured":6,"template":730},"how-to-set-up-gitlab-runner-on-digitalocean","content:en-us:blog:how-to-set-up-gitlab-runner-on-digitalocean.yml","How To Set Up Gitlab Runner On Digitalocean","en-us/blog/how-to-set-up-gitlab-runner-on-digitalocean.yml","en-us/blog/how-to-set-up-gitlab-runner-on-digitalocean",{"_path":8849,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8850,"content":8856,"config":8859,"_id":8861,"_type":16,"title":8862,"_source":17,"_file":8863,"_stem":8864,"_extension":20},"/en-us/blog/a-brief-history-of-gitlab-workhorse",{"title":8851,"description":8852,"ogTitle":8851,"ogDescription":8852,"noIndex":6,"ogImage":8853,"ogUrl":8854,"ogSiteName":895,"ogType":896,"canonicalUrls":8854,"schema":8855},"A Brief History of GitLab Workhorse","A Brief History of GitLab Workhorse - in this blog post I will reflect on how we got there.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749684809/Blog/Hero%20Images/gopher.jpg","https://about.gitlab.com/blog/a-brief-history-of-gitlab-workhorse","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"A Brief History of GitLab Workhorse\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Jacob Vosmaer\"}],\n        \"datePublished\": \"2016-04-12\",\n      }",{"title":8851,"description":8852,"authors":8857,"heroImage":8853,"date":8858,"category":14},[3170],"2016-04-12",{"slug":8860,"featured":6,"template":730},"a-brief-history-of-gitlab-workhorse","content:en-us:blog:a-brief-history-of-gitlab-workhorse.yml","A Brief History Of Gitlab Workhorse","en-us/blog/a-brief-history-of-gitlab-workhorse.yml","en-us/blog/a-brief-history-of-gitlab-workhorse",{"_path":8866,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8867,"content":8873,"config":8877,"_id":8879,"_type":16,"title":8880,"_source":17,"_file":8881,"_stem":8882,"_extension":20},"/en-us/blog/tutorial-securing-your-gitlab-pages-with-tls-and-letsencrypt",{"title":8868,"description":8869,"ogTitle":8868,"ogDescription":8869,"noIndex":6,"ogImage":8870,"ogUrl":8871,"ogSiteName":895,"ogType":896,"canonicalUrls":8871,"schema":8872},"Tutorial: Securing your GitLab Pages with TLS and Let's Encrypt","In this post we will talk about HTTPS and how to add it to your GitLab Pages site with Let's Encrypt","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749672214/Blog/Hero%20Images/altssh.jpg","https://about.gitlab.com/blog/tutorial-securing-your-gitlab-pages-with-tls-and-letsencrypt","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Tutorial: Securing your GitLab Pages with TLS and Let's Encrypt\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Guest author André Miranda\"}],\n        \"datePublished\": \"2016-04-11\",\n      }",{"title":8868,"description":8869,"authors":8874,"heroImage":8870,"date":8876,"category":14},[8875],"Guest author André Miranda","2016-04-11",{"slug":8878,"featured":6,"template":730},"tutorial-securing-your-gitlab-pages-with-tls-and-letsencrypt","content:en-us:blog:tutorial-securing-your-gitlab-pages-with-tls-and-letsencrypt.yml","Tutorial Securing Your Gitlab Pages With Tls And Letsencrypt","en-us/blog/tutorial-securing-your-gitlab-pages-with-tls-and-letsencrypt.yml","en-us/blog/tutorial-securing-your-gitlab-pages-with-tls-and-letsencrypt",{"_path":8884,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8885,"content":8891,"config":8894,"_id":8896,"_type":16,"title":8897,"_source":17,"_file":8898,"_stem":8899,"_extension":20},"/en-us/blog/gitlab-pages-setup",{"title":8886,"description":8887,"ogTitle":8886,"ogDescription":8887,"noIndex":6,"ogImage":8888,"ogUrl":8889,"ogSiteName":895,"ogType":896,"canonicalUrls":8889,"schema":8890},"Hosting on GitLab.com with GitLab Pages","Learn how to host your website on GitLab.com with GitLab Pages","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749671069/Blog/Hero%20Images/gitlab-pages-setup-cover.jpg","https://about.gitlab.com/blog/gitlab-pages-setup","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Hosting on GitLab.com with GitLab Pages\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Marcia Ramos\"}],\n        \"datePublished\": \"2016-04-07\",\n      }",{"title":8886,"description":8887,"authors":8892,"heroImage":8888,"date":8893,"category":14},[8191],"2016-04-07",{"slug":8895,"featured":6,"template":730},"gitlab-pages-setup","content:en-us:blog:gitlab-pages-setup.yml","Gitlab Pages Setup","en-us/blog/gitlab-pages-setup.yml","en-us/blog/gitlab-pages-setup",{"_path":8901,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8902,"content":8908,"config":8912,"_id":8914,"_type":16,"title":8915,"_source":17,"_file":8916,"_stem":8917,"_extension":20},"/en-us/blog/shared-runners",{"title":8903,"description":8904,"ogTitle":8903,"ogDescription":8904,"noIndex":6,"ogImage":8905,"ogUrl":8906,"ogSiteName":895,"ogType":896,"canonicalUrls":8906,"schema":8907},"GitLab.com Shared Runners use Autoscaling","With the latest release of GitLab Runner 1.1, we've introduced autoscaling to help us meet the growing demand","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749684484/Blog/Hero%20Images/agile.jpg","https://about.gitlab.com/blog/shared-runners","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"GitLab.com Shared Runners use Autoscaling\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Kamil Trzciński\"}],\n        \"datePublished\": \"2016-04-05\",\n      }",{"title":8903,"description":8904,"authors":8909,"heroImage":8905,"date":8911,"category":14},[8910],"Kamil Trzciński","2016-04-05",{"slug":8913,"featured":6,"template":730},"shared-runners","content:en-us:blog:shared-runners.yml","Shared Runners","en-us/blog/shared-runners.yml","en-us/blog/shared-runners",{"_path":8919,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8920,"content":8926,"config":8929,"_id":8931,"_type":16,"title":8932,"_source":17,"_file":8933,"_stem":8934,"_extension":20},"/en-us/blog/gitlab-pages-get-started",{"title":8921,"description":8922,"ogTitle":8921,"ogDescription":8922,"noIndex":6,"ogImage":8923,"ogUrl":8924,"ogSiteName":895,"ogType":896,"canonicalUrls":8924,"schema":8925},"Get Started with GitLab Pages","We've since added some great resources to help you get started with Gitlab Pages, including this handy quickstart guide.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749684195/Blog/Hero%20Images/ios-development.jpg","https://about.gitlab.com/blog/gitlab-pages-get-started","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Get Started with GitLab Pages\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Achilleas Pipinellis\"}],\n        \"datePublished\": \"2016-04-04\",\n      }",{"title":8921,"description":8922,"authors":8927,"heroImage":8923,"date":8928,"category":14},[8072],"2016-04-04",{"slug":8930,"featured":6,"template":730},"gitlab-pages-get-started","content:en-us:blog:gitlab-pages-get-started.yml","Gitlab Pages Get Started","en-us/blog/gitlab-pages-get-started.yml","en-us/blog/gitlab-pages-get-started",{"_path":8936,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8937,"content":8943,"config":8946,"_id":8948,"_type":16,"title":8949,"_source":17,"_file":8950,"_stem":8951,"_extension":20},"/en-us/blog/using-omnibus-gitlab-to-ship-gitlab",{"title":8938,"description":8939,"ogTitle":8938,"ogDescription":8939,"noIndex":6,"ogImage":8940,"ogUrl":8941,"ogSiteName":895,"ogType":896,"canonicalUrls":8941,"schema":8942},"Using the Omnibus GitLab package to ship GitLab","Take a look at what kind of decisions we need to make on every release of GitLab and how omnibus-gitlab package fits into this process.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749684635/Blog/Hero%20Images/cat-in-the-box.jpg","https://about.gitlab.com/blog/using-omnibus-gitlab-to-ship-gitlab","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Using the Omnibus GitLab package to ship GitLab\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Marin Jankovski\"}],\n        \"datePublished\": \"2016-03-21\",\n      }",{"title":8938,"description":8939,"authors":8944,"heroImage":8940,"date":8945,"category":14},[6417],"2016-03-21",{"slug":8947,"featured":6,"template":730},"using-omnibus-gitlab-to-ship-gitlab","content:en-us:blog:using-omnibus-gitlab-to-ship-gitlab.yml","Using Omnibus Gitlab To Ship Gitlab","en-us/blog/using-omnibus-gitlab-to-ship-gitlab.yml","en-us/blog/using-omnibus-gitlab-to-ship-gitlab",{"_path":8953,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8954,"content":8959,"config":8962,"_id":8964,"_type":16,"title":8965,"_source":17,"_file":8966,"_stem":8967,"_extension":20},"/en-us/blog/fast-search-using-postgresql-trigram",{"title":8955,"description":8956,"ogTitle":8955,"ogDescription":8956,"noIndex":6,"ogImage":2578,"ogUrl":8957,"ogSiteName":895,"ogType":896,"canonicalUrls":8957,"schema":8958},"Fast Search Using PostgreSQL Trigram Text Indexes","In this article we'll look at how these indexes work and how they can be used to speed up queries using LIKE conditions.","https://about.gitlab.com/blog/fast-search-using-postgresql-trigram-indexes","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Fast Search Using PostgreSQL Trigram Text Indexes\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Yorick Peterse\"}],\n        \"datePublished\": \"2016-03-18\",\n      }",{"title":8955,"description":8956,"authors":8960,"heroImage":2578,"date":8961,"category":14},[5940],"2016-03-18",{"slug":8963,"featured":6,"template":730},"fast-search-using-postgresql-trigram","content:en-us:blog:fast-search-using-postgresql-trigram.yml","Fast Search Using Postgresql Trigram","en-us/blog/fast-search-using-postgresql-trigram.yml","en-us/blog/fast-search-using-postgresql-trigram",{"_path":8969,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8970,"content":8975,"config":8978,"_id":8980,"_type":16,"title":8981,"_source":17,"_file":8982,"_stem":8983,"_extension":20},"/en-us/blog/setting-up-gitlab-ci-for-ios-projects",{"title":8971,"description":8972,"ogTitle":8971,"ogDescription":8972,"noIndex":6,"ogImage":8923,"ogUrl":8973,"ogSiteName":895,"ogType":896,"canonicalUrls":8973,"schema":8974},"Setting up GitLab CI for iOS projects","Learn how to set up GitLab CI for your iOS projects.","https://about.gitlab.com/blog/setting-up-gitlab-ci-for-ios-projects","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Setting up GitLab CI for iOS projects\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Angelo Stavrow\"}],\n        \"datePublished\": \"2016-03-10\",\n      }",{"title":8971,"description":8972,"authors":8976,"heroImage":8923,"date":8977,"category":14},[8549],"2016-03-10",{"slug":8979,"featured":6,"template":730},"setting-up-gitlab-ci-for-ios-projects","content:en-us:blog:setting-up-gitlab-ci-for-ios-projects.yml","Setting Up Gitlab Ci For Ios Projects","en-us/blog/setting-up-gitlab-ci-for-ios-projects.yml","en-us/blog/setting-up-gitlab-ci-for-ios-projects",{"_path":8985,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":8986,"content":8992,"config":8996,"_id":8998,"_type":16,"title":8999,"_source":17,"_file":9000,"_stem":9001,"_extension":20},"/en-us/blog/gitlab-tutorial-its-all-connected",{"title":8987,"description":8988,"ogTitle":8987,"ogDescription":8988,"noIndex":6,"ogImage":8989,"ogUrl":8990,"ogSiteName":895,"ogType":896,"canonicalUrls":8990,"schema":8991},"Tutorial: It's all connected in GitLab","In GitLab, everything you do can be cross-linked and referenced. This improves discoverability and reduces duplicate effort.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749683732/Blog/Hero%20Images/stars.png","https://about.gitlab.com/blog/gitlab-tutorial-its-all-connected","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Tutorial: It's all connected in GitLab\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Heather McNamee\"}],\n        \"datePublished\": \"2016-03-08\",\n      }",{"title":8987,"description":8988,"authors":8993,"heroImage":8989,"date":8995,"category":14},[8994],"Heather McNamee","2016-03-08",{"slug":8997,"featured":6,"template":730},"gitlab-tutorial-its-all-connected","content:en-us:blog:gitlab-tutorial-its-all-connected.yml","Gitlab Tutorial Its All Connected","en-us/blog/gitlab-tutorial-its-all-connected.yml","en-us/blog/gitlab-tutorial-its-all-connected",{"_path":9003,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":9004,"content":9009,"config":9013,"_id":9015,"_type":16,"title":9016,"_source":17,"_file":9017,"_stem":9018,"_extension":20},"/en-us/blog/gitlab-runner-with-docker",{"title":9005,"description":9006,"ogTitle":9005,"ogDescription":9006,"noIndex":6,"ogImage":2578,"ogUrl":9007,"ogSiteName":895,"ogType":896,"canonicalUrls":9007,"schema":9008},"Setting up GitLab Runner For Continuous Integration","This tutorial will demonstrate how to get started with a CI workflow using GitLab Runner.","https://about.gitlab.com/blog/gitlab-runner-with-docker","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Setting up GitLab Runner For Continuous Integration\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Ahmet Kizilay\"}],\n        \"datePublished\": \"2016-03-01\",\n      }",{"title":9005,"description":9006,"authors":9010,"heroImage":2578,"date":9012,"category":14},[9011],"Ahmet Kizilay","2016-03-01",{"slug":9014,"featured":6,"template":730},"gitlab-runner-with-docker","content:en-us:blog:gitlab-runner-with-docker.yml","Gitlab Runner With Docker","en-us/blog/gitlab-runner-with-docker.yml","en-us/blog/gitlab-runner-with-docker",{"_path":9020,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":9021,"content":9026,"config":9029,"_id":9031,"_type":16,"title":9032,"_source":17,"_file":9033,"_stem":9034,"_extension":20},"/en-us/blog/making-gitlab-faster",{"title":9022,"description":9023,"ogTitle":9022,"ogDescription":9023,"noIndex":6,"ogImage":2578,"ogUrl":9024,"ogSiteName":895,"ogType":896,"canonicalUrls":9024,"schema":9025},"Making GitLab Faster","In GitLab 8.5 we shipped numerous performance improvements. In this article we'll take a look at some of these changes and the process involved in finding and resolving these issues.","https://about.gitlab.com/blog/making-gitlab-faster","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Making GitLab Faster\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Yorick Peterse\"}],\n        \"datePublished\": \"2016-02-25\",\n      }",{"title":9022,"description":9023,"authors":9027,"heroImage":2578,"date":9028,"category":14},[5940],"2016-02-25",{"slug":9030,"featured":6,"template":730},"making-gitlab-faster","content:en-us:blog:making-gitlab-faster.yml","Making Gitlab Faster","en-us/blog/making-gitlab-faster.yml","en-us/blog/making-gitlab-faster",{"_path":9036,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":9037,"content":9042,"config":9045,"_id":9047,"_type":16,"title":9048,"_source":17,"_file":9049,"_stem":9050,"_extension":20},"/en-us/blog/gitlab-dot-com-now-supports-an-alternate-git-plus-ssh-port",{"title":9038,"description":9039,"ogTitle":9038,"ogDescription":9039,"noIndex":6,"ogImage":8870,"ogUrl":9040,"ogSiteName":895,"ogType":896,"canonicalUrls":9040,"schema":9041},"GitLab.com now supports an alternate git+ssh port","You'd be happy to know that GitLab.com now runs an alternate git+ssh port (443) which you can use whenever you are in a place where port 22 is blocked.","https://about.gitlab.com/blog/gitlab-dot-com-now-supports-an-alternate-git-plus-ssh-port","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"GitLab.com now supports an alternate git+ssh port\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Achilleas Pipinellis\"}],\n        \"datePublished\": \"2016-02-18\",\n      }",{"title":9038,"description":9039,"authors":9043,"heroImage":8870,"date":9044,"category":14},[8072],"2016-02-18",{"slug":9046,"featured":6,"template":730},"gitlab-dot-com-now-supports-an-alternate-git-plus-ssh-port","content:en-us:blog:gitlab-dot-com-now-supports-an-alternate-git-plus-ssh-port.yml","Gitlab Dot Com Now Supports An Alternate Git Plus Ssh Port","en-us/blog/gitlab-dot-com-now-supports-an-alternate-git-plus-ssh-port.yml","en-us/blog/gitlab-dot-com-now-supports-an-alternate-git-plus-ssh-port",{"_path":9052,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":9053,"content":9058,"config":9061,"_id":9063,"_type":16,"title":9064,"_source":17,"_file":9065,"_stem":9066,"_extension":20},"/en-us/blog/feature-highlight-create-files-and-directories-from-files-page",{"title":9054,"description":9055,"ogTitle":9054,"ogDescription":9055,"noIndex":6,"ogImage":2578,"ogUrl":9056,"ogSiteName":895,"ogType":896,"canonicalUrls":9056,"schema":9057},"Feature Highlight: Create files and directories from the Files page","In this feature highlight we look at how you can create a new file, directory, branch or tag from the file browser.","https://about.gitlab.com/blog/feature-highlight-create-files-and-directories-from-files-page","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Feature Highlight: Create files and directories from the Files page\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Drew Blessing\"}],\n        \"datePublished\": \"2016-02-10\",\n      }",{"title":9054,"description":9055,"authors":9059,"heroImage":2578,"date":9060,"category":14},[8738],"2016-02-10",{"slug":9062,"featured":6,"template":730},"feature-highlight-create-files-and-directories-from-files-page","content:en-us:blog:feature-highlight-create-files-and-directories-from-files-page.yml","Feature Highlight Create Files And Directories From Files Page","en-us/blog/feature-highlight-create-files-and-directories-from-files-page.yml","en-us/blog/feature-highlight-create-files-and-directories-from-files-page",{"_path":9068,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":9069,"content":9075,"config":9078,"_id":9080,"_type":16,"title":9081,"_source":17,"_file":9082,"_stem":9083,"_extension":20},"/en-us/blog/getting-started-with-gitlab-and-gitlab-ci",{"title":9070,"description":9071,"ogTitle":9070,"ogDescription":9071,"noIndex":6,"ogImage":9072,"ogUrl":9073,"ogSiteName":895,"ogType":896,"canonicalUrls":9073,"schema":9074},"Getting started with GitLab and GitLab CI","This is the start of a series of posts to get you started with GitLab and GitLab CI.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749684532/Blog/Hero%20Images/stairwaycompressed.jpg","https://about.gitlab.com/blog/getting-started-with-gitlab-and-gitlab-ci","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Getting started with GitLab and GitLab CI\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Achilleas Pipinellis\"}],\n        \"datePublished\": \"2015-12-14\",\n      }",{"title":9070,"description":9071,"authors":9076,"heroImage":9072,"date":9077,"category":14},[8072],"2015-12-14",{"slug":9079,"featured":6,"template":730},"getting-started-with-gitlab-and-gitlab-ci","content:en-us:blog:getting-started-with-gitlab-and-gitlab-ci.yml","Getting Started With Gitlab And Gitlab Ci","en-us/blog/getting-started-with-gitlab-and-gitlab-ci.yml","en-us/blog/getting-started-with-gitlab-and-gitlab-ci",{"_path":9085,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":9086,"content":9091,"config":9095,"_id":9097,"_type":16,"title":9098,"_source":17,"_file":9099,"_stem":9100,"_extension":20},"/en-us/blog/quayio",{"title":9087,"description":9088,"ogTitle":9087,"ogDescription":9088,"noIndex":6,"ogImage":2578,"ogUrl":9089,"ogSiteName":895,"ogType":896,"canonicalUrls":9089,"schema":9090},"Integrate GitLab-hosted Docker projects with Quay.io","Continuous Integration of GitLab-Hosted Docker Projects with Quay.io","https://about.gitlab.com/blog/quayio","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Continuous Integration of GitLab-Hosted Docker Projects with Quay.io\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Joseph Schorr from CoreOS\"}],\n        \"datePublished\": \"2015-08-19\",\n      }",{"title":9088,"description":9088,"authors":9092,"heroImage":2578,"date":9094,"category":14},[9093],"Joseph Schorr from CoreOS","2015-08-19",{"slug":9096,"featured":6,"template":730},"quayio","content:en-us:blog:quayio.yml","Quayio","en-us/blog/quayio.yml","en-us/blog/quayio",{"_path":9102,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":9103,"content":9108,"config":9112,"_id":9114,"_type":16,"title":9115,"_source":17,"_file":9116,"_stem":9117,"_extension":20},"/en-us/blog/feature-highlight-merge-request-approvals",{"title":9104,"description":9105,"ogTitle":9104,"ogDescription":9105,"noIndex":6,"ogImage":2578,"ogUrl":9106,"ogSiteName":895,"ogType":896,"canonicalUrls":9106,"schema":9107},"Feature Highlight: Merge Request Approvals","If you want keep code quality high, it is important that you use a code review process. In GitLab, the best way to do this is by using Merge Requests. Read how to approve merge requests here.","https://about.gitlab.com/blog/feature-highlight-merge-request-approvals","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Feature Highlight: Merge Request Approvals\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Job van der Voort\"}],\n        \"datePublished\": \"2015-07-29\",\n      }",{"title":9104,"description":9105,"authors":9109,"heroImage":2578,"date":9111,"category":14},[9110],"Job van der Voort","2015-07-29",{"slug":9113,"featured":6,"template":730},"feature-highlight-merge-request-approvals","content:en-us:blog:feature-highlight-merge-request-approvals.yml","Feature Highlight Merge Request Approvals","en-us/blog/feature-highlight-merge-request-approvals.yml","en-us/blog/feature-highlight-merge-request-approvals",{"_path":9119,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":9120,"content":9125,"config":9128,"_id":9130,"_type":16,"title":9131,"_source":17,"_file":9132,"_stem":9133,"_extension":20},"/en-us/blog/implementing-gitlab-ci-dot-yml",{"title":9121,"description":9122,"ogTitle":9121,"ogDescription":9122,"noIndex":6,"ogImage":2578,"ogUrl":9123,"ogSiteName":895,"ogType":896,"canonicalUrls":9123,"schema":9124},"Implementing .gitlab-ci.yml","We replacing GitLab CI jobs with a .gitlab-ci.yml and wanted to share the details of that process with you and would love to hear what you think.","https://about.gitlab.com/blog/implementing-gitlab-ci-dot-yml","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Implementing .gitlab-ci.yml\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Job van der Voort\"}],\n        \"datePublished\": \"2015-06-08\",\n      }",{"title":9121,"description":9122,"authors":9126,"heroImage":2578,"date":9127,"category":14},[9110],"2015-06-08",{"slug":9129,"featured":6,"template":730},"implementing-gitlab-ci-dot-yml","content:en-us:blog:implementing-gitlab-ci-dot-yml.yml","Implementing Gitlab Ci Dot Yml","en-us/blog/implementing-gitlab-ci-dot-yml.yml","en-us/blog/implementing-gitlab-ci-dot-yml",{"_path":9135,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":9136,"content":9141,"config":9144,"_id":9146,"_type":16,"title":9147,"_source":17,"_file":9148,"_stem":9149,"_extension":20},"/en-us/blog/how-gitlab-uses-unicorn-and-unicorn-worker-killer",{"title":9137,"description":9138,"ogTitle":9137,"ogDescription":9138,"noIndex":6,"ogImage":2578,"ogUrl":9139,"ogSiteName":895,"ogType":896,"canonicalUrls":9139,"schema":9140},"How GitLab uses Unicorn and unicorn-worker-killer","We just wrote some new documentation on how Gitlab uses Unicorn and unicorn-worker-killer, available on doc.gitlab.com. Read here!","https://about.gitlab.com/blog/how-gitlab-uses-unicorn-and-unicorn-worker-killer","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How GitLab uses Unicorn and unicorn-worker-killer\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Jacob Vosmaer\"}],\n        \"datePublished\": \"2015-06-05\",\n      }",{"title":9137,"description":9138,"authors":9142,"heroImage":2578,"date":9143,"category":14},[3170],"2015-06-05",{"slug":9145,"featured":6,"template":730},"how-gitlab-uses-unicorn-and-unicorn-worker-killer","content:en-us:blog:how-gitlab-uses-unicorn-and-unicorn-worker-killer.yml","How Gitlab Uses Unicorn And Unicorn Worker Killer","en-us/blog/how-gitlab-uses-unicorn-and-unicorn-worker-killer.yml","en-us/blog/how-gitlab-uses-unicorn-and-unicorn-worker-killer",{"_path":9151,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":9152,"content":9157,"config":9160,"_id":9162,"_type":16,"title":9163,"_source":17,"_file":9164,"_stem":9165,"_extension":20},"/en-us/blog/gitlab-dot-com-outage-on-2015-05-29",{"title":9153,"description":9154,"ogTitle":9153,"ogDescription":9154,"noIndex":6,"ogImage":2578,"ogUrl":9155,"ogSiteName":895,"ogType":896,"canonicalUrls":9155,"schema":9156},"GitLab.com outage on 2015-05-29","A quick summary of the causes and solutions regarding the GitLab.com outage on 2015-05-29","https://about.gitlab.com/blog/gitlab-dot-com-outage-on-2015-05-29","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"GitLab.com outage on 2015-05-29\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Jacob Vosmaer\"}],\n        \"datePublished\": \"2015-06-04\",\n      }",{"title":9153,"description":9154,"authors":9158,"heroImage":2578,"date":9159,"category":14},[3170],"2015-06-04",{"slug":9161,"featured":6,"template":730},"gitlab-dot-com-outage-on-2015-05-29","content:en-us:blog:gitlab-dot-com-outage-on-2015-05-29.yml","Gitlab Dot Com Outage On 2015 05 29","en-us/blog/gitlab-dot-com-outage-on-2015-05-29.yml","en-us/blog/gitlab-dot-com-outage-on-2015-05-29",{"_path":9167,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":9168,"content":9173,"config":9176,"_id":9178,"_type":16,"title":9179,"_source":17,"_file":9180,"_stem":9181,"_extension":20},"/en-us/blog/version-check",{"title":9169,"description":9170,"ogTitle":9169,"ogDescription":9170,"noIndex":6,"ogImage":2578,"ogUrl":9171,"ogSiteName":895,"ogType":896,"canonicalUrls":9171,"schema":9172},"Version Check Functionality","We're working on a version check function for GitLab to reduce the problem of outdated servers which can be a security problem and provide a bad user experience","https://about.gitlab.com/blog/version-check","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Version Check Functionality\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Sid Sijbrandij\"}],\n        \"datePublished\": \"2015-05-07\",\n      }",{"title":9169,"description":9170,"authors":9174,"heroImage":2578,"date":9175,"category":14},[2380],"2015-05-07",{"slug":9177,"featured":6,"template":730},"version-check","content:en-us:blog:version-check.yml","Version Check","en-us/blog/version-check.yml","en-us/blog/version-check",{"_path":9183,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":9184,"content":9189,"config":9192,"_id":9194,"_type":16,"title":9195,"_source":17,"_file":9196,"_stem":9197,"_extension":20},"/en-us/blog/unofficial-gitlab-ci-runner",{"title":9185,"description":9186,"ogTitle":9185,"ogDescription":9186,"noIndex":6,"ogImage":2578,"ogUrl":9187,"ogSiteName":895,"ogType":896,"canonicalUrls":9187,"schema":9188},"Unofficial GitLab CI Runner","GitLab CI Multi-purpose Runner is yet another CI runner, but this time written in Go with a vast number of features that leverage all the latest technologies.","https://about.gitlab.com/blog/unofficial-gitlab-ci-runner","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Unofficial GitLab CI Runner\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Kamil Trzciński\"}],\n        \"datePublished\": \"2015-04-17\",\n      }",{"title":9185,"description":9186,"authors":9190,"heroImage":2578,"date":9191,"category":14},[8910],"2015-04-17",{"slug":9193,"featured":6,"template":730},"unofficial-gitlab-ci-runner","content:en-us:blog:unofficial-gitlab-ci-runner.yml","Unofficial Gitlab Ci Runner","en-us/blog/unofficial-gitlab-ci-runner.yml","en-us/blog/unofficial-gitlab-ci-runner",{"_path":9199,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":9200,"content":9206,"config":9209,"_id":9211,"_type":16,"title":9212,"_source":17,"_file":9213,"_stem":9214,"_extension":20},"/en-us/blog/moving-all-your-data",{"title":9201,"description":9202,"ogTitle":9201,"ogDescription":9202,"noIndex":6,"ogImage":9203,"ogUrl":9204,"ogSiteName":895,"ogType":896,"canonicalUrls":9204,"schema":9205},"Moving all your data, 9TB edition","At GitLab B.V. we are working on an infrastructure upgrade to give more CPU power and storage space to GitLab.com. Learn more here!","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749684774/Blog/Hero%20Images/van.jpg","https://about.gitlab.com/blog/moving-all-your-data","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"Moving all your data, 9TB edition\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Jacob Vosmaer\"}],\n        \"datePublished\": \"2015-03-09\",\n      }",{"title":9201,"description":9202,"authors":9207,"heroImage":9203,"date":9208,"category":14},[3170],"2015-03-09",{"slug":9210,"featured":6,"template":730},"moving-all-your-data","content:en-us:blog:moving-all-your-data.yml","Moving All Your Data","en-us/blog/moving-all-your-data.yml","en-us/blog/moving-all-your-data",{"_path":9216,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":9217,"content":9223,"config":9226,"_id":9228,"_type":16,"title":9229,"_source":17,"_file":9230,"_stem":9231,"_extension":20},"/en-us/blog/how-to-install-gitlab",{"title":9218,"description":9219,"ogTitle":9218,"ogDescription":9219,"noIndex":6,"ogImage":9220,"ogUrl":9221,"ogSiteName":895,"ogType":896,"canonicalUrls":9221,"schema":9222},"How to install GitLab on your own domain","Want to get your first own GitLab instance running? Use these easy to follow instructions and you will be active in no time!","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749684373/Blog/Hero%20Images/installing.jpg","https://about.gitlab.com/blog/how-to-install-gitlab","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How to install GitLab on your own domain\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Job van der Voort\"}],\n        \"datePublished\": \"2015-02-24\",\n      }",{"title":9218,"description":9219,"authors":9224,"heroImage":9220,"date":9225,"category":14},[9110],"2015-02-24",{"slug":9227,"featured":6,"template":730},"how-to-install-gitlab","content:en-us:blog:how-to-install-gitlab.yml","How To Install Gitlab","en-us/blog/how-to-install-gitlab.yml","en-us/blog/how-to-install-gitlab",{"_path":9233,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":9234,"content":9240,"config":9243,"_id":9245,"_type":16,"title":9246,"_source":17,"_file":9247,"_stem":9248,"_extension":20},"/en-us/blog/gitlab-reduced-merge-conflicts-by-90-percent-with-changelog-placeholders",{"title":9235,"description":9236,"ogTitle":9235,"ogDescription":9236,"noIndex":6,"ogImage":9237,"ogUrl":9238,"ogSiteName":895,"ogType":896,"canonicalUrls":9238,"schema":9239},"GitLab reduced merge conflicts by 90% with changelog placeholders","By utilising changelog placeholders GitLab reduced merge conflicts by 90 percent! Read more here.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749683633/Blog/Hero%20Images/changelog.jpg","https://about.gitlab.com/blog/gitlab-reduced-merge-conflicts-by-90-percent-with-changelog-placeholders","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"GitLab reduced merge conflicts by 90% with changelog placeholders\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Sid Sijbrandij\"}],\n        \"datePublished\": \"2015-02-10\",\n      }",{"title":9235,"description":9236,"authors":9241,"heroImage":9237,"date":9242,"category":14},[2380],"2015-02-10",{"slug":9244,"featured":6,"template":730},"gitlab-reduced-merge-conflicts-by-90-percent-with-changelog-placeholders","content:en-us:blog:gitlab-reduced-merge-conflicts-by-90-percent-with-changelog-placeholders.yml","Gitlab Reduced Merge Conflicts By 90 Percent With Changelog Placeholders","en-us/blog/gitlab-reduced-merge-conflicts-by-90-percent-with-changelog-placeholders.yml","en-us/blog/gitlab-reduced-merge-conflicts-by-90-percent-with-changelog-placeholders",{"_path":9250,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":9251,"content":9257,"config":9261,"_id":9263,"_type":16,"title":9264,"_source":17,"_file":9265,"_stem":9266,"_extension":20},"/en-us/blog/7-reasons-why-you-should-be-using-ci",{"title":9252,"description":9253,"ogTitle":9252,"ogDescription":9253,"noIndex":6,"ogImage":9254,"ogUrl":9255,"ogSiteName":895,"ogType":896,"canonicalUrls":9255,"schema":9256},"7 reasons why you should be using Continuous Integration","View the 7 resons why you and your business should be using Continuous Integration for exceptional results!","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749684339/Blog/Hero%20Images/vespa.jpg","https://about.gitlab.com/blog/7-reasons-why-you-should-be-using-ci","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"7 reasons why you should be using Continuous Integration\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Patricio Cano\"}],\n        \"datePublished\": \"2015-02-03\",\n      }",{"title":9252,"description":9253,"authors":9258,"heroImage":9254,"date":9260,"category":14},[9259],"Patricio Cano","2015-02-03",{"slug":9262,"featured":6,"template":730},"7-reasons-why-you-should-be-using-ci","content:en-us:blog:7-reasons-why-you-should-be-using-ci.yml","7 Reasons Why You Should Be Using Ci","en-us/blog/7-reasons-why-you-should-be-using-ci.yml","en-us/blog/7-reasons-why-you-should-be-using-ci",{"_path":9268,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":9269,"content":9274,"config":9277,"_id":9279,"_type":16,"title":9280,"_source":17,"_file":9281,"_stem":9282,"_extension":20},"/en-us/blog/ship-log-data-off-site-using-udp",{"title":9270,"description":9271,"ogTitle":9270,"ogDescription":9271,"noIndex":6,"ogImage":2578,"ogUrl":9272,"ogSiteName":895,"ogType":896,"canonicalUrls":9272,"schema":9273},"How you can send your logs ballistically using UDP","With GitLab Enterprise Edition 7.1 and up Omnibus packages, we introduced UDP log shipping.","https://about.gitlab.com/blog/ship-log-data-off-site-using-udp","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"How you can send your logs ballistically using UDP\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Job van der Voort\"}],\n        \"datePublished\": \"2014-12-08\",\n      }",{"title":9270,"description":9271,"authors":9275,"heroImage":2578,"date":9276,"category":14},[9110],"2014-12-08",{"slug":9278,"featured":6,"template":730},"ship-log-data-off-site-using-udp","content:en-us:blog:ship-log-data-off-site-using-udp.yml","Ship Log Data Off Site Using Udp","en-us/blog/ship-log-data-off-site-using-udp.yml","en-us/blog/ship-log-data-off-site-using-udp",{"_path":9284,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":9285,"content":9290,"config":9293,"_id":9295,"_type":16,"title":9296,"_source":17,"_file":9297,"_stem":9298,"_extension":20},"/en-us/blog/gitlab-omnibus-packages-now-include-gitlab-ci",{"title":9286,"description":9287,"ogTitle":9286,"ogDescription":9287,"noIndex":6,"ogImage":2578,"ogUrl":9288,"ogSiteName":895,"ogType":896,"canonicalUrls":9288,"schema":9289},"GitLab Omnibus packages now include GitLab CI","Today we are excited to announce that our Omnibus packages now include the GitLab CI Coordinator.","https://about.gitlab.com/blog/gitlab-omnibus-packages-now-include-gitlab-ci","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"GitLab Omnibus packages now include GitLab CI\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"Jacob Vosmaer\"}],\n        \"datePublished\": \"2014-11-06\",\n      }",{"title":9286,"description":9287,"authors":9291,"heroImage":2578,"date":9292,"category":14},[3170],"2014-11-06",{"slug":9294,"featured":6,"template":730},"gitlab-omnibus-packages-now-include-gitlab-ci","content:en-us:blog:gitlab-omnibus-packages-now-include-gitlab-ci.yml","Gitlab Omnibus Packages Now Include Gitlab Ci","en-us/blog/gitlab-omnibus-packages-now-include-gitlab-ci.yml","en-us/blog/gitlab-omnibus-packages-now-include-gitlab-ci",{"_path":9300,"_dir":246,"_draft":6,"_partial":6,"_locale":7,"seo":9301,"content":9306,"config":9309,"_id":9311,"_type":16,"title":9312,"_source":17,"_file":9313,"_stem":9314,"_extension":20},"/en-us/blog/gitlab-without-gitolite",{"title":9302,"description":9303,"ogTitle":9302,"ogDescription":9303,"noIndex":6,"ogImage":7805,"ogUrl":9304,"ogSiteName":895,"ogType":896,"canonicalUrls":9304,"schema":9305},"GitLab without gitolite","Yeap GitLab 5.0 will be without gitolite. Read this artlicle to learn more.","https://about.gitlab.com/blog/gitlab-without-gitolite","\n                        {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Article\",\n        \"headline\": \"GitLab without gitolite\",\n        \"author\": [{\"@type\":\"Person\",\"name\":\"GitLab\"}],\n        \"datePublished\": \"2013-02-12\",\n      }",{"title":9302,"description":9303,"authors":9307,"heroImage":7805,"date":9308,"category":14},[1077],"2013-02-12",{"slug":9310,"featured":6,"template":730},"gitlab-without-gitolite","content:en-us:blog:gitlab-without-gitolite.yml","Gitlab Without Gitolite","en-us/blog/gitlab-without-gitolite.yml","en-us/blog/gitlab-without-gitolite",{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"seo":9316,"content":9317,"config":9318,"_id":15,"_type":16,"title":9,"_source":17,"_file":18,"_stem":19,"_extension":20},{"title":9,"description":10},{"name":9},{"template":13,"slug":14,"hide":6},1761814413256]