[{"data":1,"prerenderedAt":2809},["ShallowReactive",2],{"/en-us/blog/tags/tutorial":3,"navigation-en-us":18,"banner-en-us":418,"footer-en-us":428,"tutorial-tag-posts-en-us":670},{"id":4,"title":5,"body":6,"category":6,"config":7,"content":9,"description":6,"extension":11,"meta":12,"navigation":13,"path":14,"seo":15,"slug":6,"stem":16,"testContent":6,"type":6,"__hash__":17},"blogTags/en-us/blog/tags/tutorial.yml","Tutorial",null,{"template":8},"BlogTag",{"tag":10,"tagSlug":10},"tutorial","yml",{},true,"/en-us/blog/tags/tutorial",{},"en-us/blog/tags/tutorial","GAuA5J2_RZhJCA33jUzcQseQHREa7IRqeRey0S31WLY",{"data":19},{"logo":20,"freeTrial":25,"sales":30,"login":35,"items":40,"search":348,"minimal":379,"duo":398,"pricingDeployment":408},{"config":21},{"href":22,"dataGaName":23,"dataGaLocation":24},"/","gitlab logo","header",{"text":26,"config":27},"Get free trial",{"href":28,"dataGaName":29,"dataGaLocation":24},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":31,"config":32},"Talk to sales",{"href":33,"dataGaName":34,"dataGaLocation":24},"/sales/","sales",{"text":36,"config":37},"Sign in",{"href":38,"dataGaName":39,"dataGaLocation":24},"https://gitlab.com/users/sign_in/","sign in",[41,68,163,168,269,329],{"text":42,"config":43,"cards":45},"Platform",{"dataNavLevelOne":44},"platform",[46,52,60],{"title":42,"description":47,"link":48},"The intelligent orchestration platform for DevSecOps",{"text":49,"config":50},"Explore our Platform",{"href":51,"dataGaName":44,"dataGaLocation":24},"/platform/",{"title":53,"description":54,"link":55},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":56,"config":57},"Meet GitLab Duo",{"href":58,"dataGaName":59,"dataGaLocation":24},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":61,"description":62,"link":63},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":64,"config":65},"Learn more",{"href":66,"dataGaName":67,"dataGaLocation":24},"/why-gitlab/","why gitlab",{"text":69,"left":13,"config":70,"link":72,"lists":76,"footer":145},"Product",{"dataNavLevelOne":71},"solutions",{"text":73,"config":74},"View all Solutions",{"href":75,"dataGaName":71,"dataGaLocation":24},"/solutions/",[77,101,124],{"title":78,"description":79,"link":80,"items":85},"Automation","CI/CD and automation to accelerate deployment",{"config":81},{"icon":82,"href":83,"dataGaName":84,"dataGaLocation":24},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[86,90,93,97],{"text":87,"config":88},"CI/CD",{"href":89,"dataGaLocation":24,"dataGaName":87},"/solutions/continuous-integration/",{"text":53,"config":91},{"href":58,"dataGaLocation":24,"dataGaName":92},"gitlab duo agent platform - product menu",{"text":94,"config":95},"Source Code Management",{"href":96,"dataGaLocation":24,"dataGaName":94},"/solutions/source-code-management/",{"text":98,"config":99},"Automated Software Delivery",{"href":83,"dataGaLocation":24,"dataGaName":100},"Automated software delivery",{"title":102,"description":103,"link":104,"items":109},"Security","Deliver code faster without compromising security",{"config":105},{"href":106,"dataGaName":107,"dataGaLocation":24,"icon":108},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[110,114,119],{"text":111,"config":112},"Application Security Testing",{"href":106,"dataGaName":113,"dataGaLocation":24},"Application security testing",{"text":115,"config":116},"Software Supply Chain Security",{"href":117,"dataGaLocation":24,"dataGaName":118},"/solutions/supply-chain/","Software supply chain security",{"text":120,"config":121},"Software Compliance",{"href":122,"dataGaName":123,"dataGaLocation":24},"/solutions/software-compliance/","software compliance",{"title":125,"link":126,"items":131},"Measurement",{"config":127},{"icon":128,"href":129,"dataGaName":130,"dataGaLocation":24},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[132,136,140],{"text":133,"config":134},"Visibility & Measurement",{"href":129,"dataGaLocation":24,"dataGaName":135},"Visibility and Measurement",{"text":137,"config":138},"Value Stream Management",{"href":139,"dataGaLocation":24,"dataGaName":137},"/solutions/value-stream-management/",{"text":141,"config":142},"Analytics & Insights",{"href":143,"dataGaLocation":24,"dataGaName":144},"/solutions/analytics-and-insights/","Analytics and insights",{"title":146,"items":147},"GitLab for",[148,153,158],{"text":149,"config":150},"Enterprise",{"href":151,"dataGaLocation":24,"dataGaName":152},"/enterprise/","enterprise",{"text":154,"config":155},"Small Business",{"href":156,"dataGaLocation":24,"dataGaName":157},"/small-business/","small business",{"text":159,"config":160},"Public Sector",{"href":161,"dataGaLocation":24,"dataGaName":162},"/solutions/public-sector/","public sector",{"text":164,"config":165},"Pricing",{"href":166,"dataGaName":167,"dataGaLocation":24,"dataNavLevelOne":167},"/pricing/","pricing",{"text":169,"config":170,"link":172,"lists":176,"feature":256},"Resources",{"dataNavLevelOne":171},"resources",{"text":173,"config":174},"View all resources",{"href":175,"dataGaName":171,"dataGaLocation":24},"/resources/",[177,210,228],{"title":178,"items":179},"Getting started",[180,185,190,195,200,205],{"text":181,"config":182},"Install",{"href":183,"dataGaName":184,"dataGaLocation":24},"/install/","install",{"text":186,"config":187},"Quick start guides",{"href":188,"dataGaName":189,"dataGaLocation":24},"/get-started/","quick setup checklists",{"text":191,"config":192},"Learn",{"href":193,"dataGaLocation":24,"dataGaName":194},"https://university.gitlab.com/","learn",{"text":196,"config":197},"Product documentation",{"href":198,"dataGaName":199,"dataGaLocation":24},"https://docs.gitlab.com/","product documentation",{"text":201,"config":202},"Best practice videos",{"href":203,"dataGaName":204,"dataGaLocation":24},"/getting-started-videos/","best practice videos",{"text":206,"config":207},"Integrations",{"href":208,"dataGaName":209,"dataGaLocation":24},"/integrations/","integrations",{"title":211,"items":212},"Discover",[213,218,223],{"text":214,"config":215},"Customer success stories",{"href":216,"dataGaName":217,"dataGaLocation":24},"/customers/","customer success stories",{"text":219,"config":220},"Blog",{"href":221,"dataGaName":222,"dataGaLocation":24},"/blog/","blog",{"text":224,"config":225},"Remote",{"href":226,"dataGaName":227,"dataGaLocation":24},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":229,"items":230},"Connect",[231,236,241,246,251],{"text":232,"config":233},"GitLab Services",{"href":234,"dataGaName":235,"dataGaLocation":24},"/services/","services",{"text":237,"config":238},"Community",{"href":239,"dataGaName":240,"dataGaLocation":24},"/community/","community",{"text":242,"config":243},"Forum",{"href":244,"dataGaName":245,"dataGaLocation":24},"https://forum.gitlab.com/","forum",{"text":247,"config":248},"Events",{"href":249,"dataGaName":250,"dataGaLocation":24},"/events/","events",{"text":252,"config":253},"Partners",{"href":254,"dataGaName":255,"dataGaLocation":24},"/partners/","partners",{"backgroundColor":257,"textColor":258,"text":259,"image":260,"link":264},"#2f2a6b","#fff","Insights for the future of software development",{"altText":261,"config":262},"the source promo card",{"src":263},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758208064/dzl0dbift9xdizyelkk4.svg",{"text":265,"config":266},"Read the latest",{"href":267,"dataGaName":268,"dataGaLocation":24},"/the-source/","the source",{"text":270,"config":271,"lists":273},"Company",{"dataNavLevelOne":272},"company",[274],{"items":275},[276,281,287,289,294,299,304,309,314,319,324],{"text":277,"config":278},"About",{"href":279,"dataGaName":280,"dataGaLocation":24},"/company/","about",{"text":282,"config":283,"footerGa":286},"Jobs",{"href":284,"dataGaName":285,"dataGaLocation":24},"/jobs/","jobs",{"dataGaName":285},{"text":247,"config":288},{"href":249,"dataGaName":250,"dataGaLocation":24},{"text":290,"config":291},"Leadership",{"href":292,"dataGaName":293,"dataGaLocation":24},"/company/team/e-group/","leadership",{"text":295,"config":296},"Team",{"href":297,"dataGaName":298,"dataGaLocation":24},"/company/team/","team",{"text":300,"config":301},"Handbook",{"href":302,"dataGaName":303,"dataGaLocation":24},"https://handbook.gitlab.com/","handbook",{"text":305,"config":306},"Investor relations",{"href":307,"dataGaName":308,"dataGaLocation":24},"https://ir.gitlab.com/","investor relations",{"text":310,"config":311},"Trust Center",{"href":312,"dataGaName":313,"dataGaLocation":24},"/security/","trust center",{"text":315,"config":316},"AI Transparency Center",{"href":317,"dataGaName":318,"dataGaLocation":24},"/ai-transparency-center/","ai transparency center",{"text":320,"config":321},"Newsletter",{"href":322,"dataGaName":323,"dataGaLocation":24},"/company/contact/#contact-forms","newsletter",{"text":325,"config":326},"Press",{"href":327,"dataGaName":328,"dataGaLocation":24},"/press/","press",{"text":330,"config":331,"lists":332},"Contact us",{"dataNavLevelOne":272},[333],{"items":334},[335,338,343],{"text":31,"config":336},{"href":33,"dataGaName":337,"dataGaLocation":24},"talk to sales",{"text":339,"config":340},"Support portal",{"href":341,"dataGaName":342,"dataGaLocation":24},"https://support.gitlab.com","support portal",{"text":344,"config":345},"Customer portal",{"href":346,"dataGaName":347,"dataGaLocation":24},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":349,"login":350,"suggestions":357},"Close",{"text":351,"link":352},"To search repositories and projects, login to",{"text":353,"config":354},"gitlab.com",{"href":38,"dataGaName":355,"dataGaLocation":356},"search login","search",{"text":358,"default":359},"Suggestions",[360,362,366,368,372,376],{"text":53,"config":361},{"href":58,"dataGaName":53,"dataGaLocation":356},{"text":363,"config":364},"Code Suggestions (AI)",{"href":365,"dataGaName":363,"dataGaLocation":356},"/solutions/code-suggestions/",{"text":87,"config":367},{"href":89,"dataGaName":87,"dataGaLocation":356},{"text":369,"config":370},"GitLab on AWS",{"href":371,"dataGaName":369,"dataGaLocation":356},"/partners/technology-partners/aws/",{"text":373,"config":374},"GitLab on Google Cloud",{"href":375,"dataGaName":373,"dataGaLocation":356},"/partners/technology-partners/google-cloud-platform/",{"text":377,"config":378},"Why GitLab?",{"href":66,"dataGaName":377,"dataGaLocation":356},{"freeTrial":380,"mobileIcon":385,"desktopIcon":390,"secondaryButton":393},{"text":381,"config":382},"Start free trial",{"href":383,"dataGaName":29,"dataGaLocation":384},"https://gitlab.com/-/trials/new/","nav",{"altText":386,"config":387},"Gitlab Icon",{"src":388,"dataGaName":389,"dataGaLocation":384},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":386,"config":391},{"src":392,"dataGaName":389,"dataGaLocation":384},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":394,"config":395},"Get Started",{"href":396,"dataGaName":397,"dataGaLocation":384},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/compare/gitlab-vs-github/","get started",{"freeTrial":399,"mobileIcon":404,"desktopIcon":406},{"text":400,"config":401},"Learn more about GitLab Duo",{"href":402,"dataGaName":403,"dataGaLocation":384},"/gitlab-duo/","gitlab duo",{"altText":386,"config":405},{"src":388,"dataGaName":389,"dataGaLocation":384},{"altText":386,"config":407},{"src":392,"dataGaName":389,"dataGaLocation":384},{"freeTrial":409,"mobileIcon":414,"desktopIcon":416},{"text":410,"config":411},"Back to pricing",{"href":166,"dataGaName":412,"dataGaLocation":384,"icon":413},"back to pricing","GoBack",{"altText":386,"config":415},{"src":388,"dataGaName":389,"dataGaLocation":384},{"altText":386,"config":417},{"src":392,"dataGaName":389,"dataGaLocation":384},{"title":419,"button":420,"config":425},"See how agentic AI transforms software delivery",{"text":421,"config":422},"Watch GitLab Transcend now",{"href":423,"dataGaName":424,"dataGaLocation":24},"/events/transcend/virtual/","transcend event",{"layout":426,"icon":427},"release","AiStar",{"data":429},{"text":430,"source":431,"edit":437,"contribute":442,"config":447,"items":452,"minimal":659},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":432,"config":433},"View page source",{"href":434,"dataGaName":435,"dataGaLocation":436},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":438,"config":439},"Edit this page",{"href":440,"dataGaName":441,"dataGaLocation":436},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":443,"config":444},"Please contribute",{"href":445,"dataGaName":446,"dataGaLocation":436},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":448,"facebook":449,"youtube":450,"linkedin":451},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[453,500,554,598,625],{"title":164,"links":454,"subMenu":469},[455,459,464],{"text":456,"config":457},"View plans",{"href":166,"dataGaName":458,"dataGaLocation":436},"view plans",{"text":460,"config":461},"Why Premium?",{"href":462,"dataGaName":463,"dataGaLocation":436},"/pricing/premium/","why premium",{"text":465,"config":466},"Why Ultimate?",{"href":467,"dataGaName":468,"dataGaLocation":436},"/pricing/ultimate/","why ultimate",[470],{"title":471,"links":472},"Contact Us",[473,476,478,480,485,490,495],{"text":474,"config":475},"Contact sales",{"href":33,"dataGaName":34,"dataGaLocation":436},{"text":339,"config":477},{"href":341,"dataGaName":342,"dataGaLocation":436},{"text":344,"config":479},{"href":346,"dataGaName":347,"dataGaLocation":436},{"text":481,"config":482},"Status",{"href":483,"dataGaName":484,"dataGaLocation":436},"https://status.gitlab.com/","status",{"text":486,"config":487},"Terms of use",{"href":488,"dataGaName":489,"dataGaLocation":436},"/terms/","terms of use",{"text":491,"config":492},"Privacy statement",{"href":493,"dataGaName":494,"dataGaLocation":436},"/privacy/","privacy statement",{"text":496,"config":497},"Cookie preferences",{"dataGaName":498,"dataGaLocation":436,"id":499,"isOneTrustButton":13},"cookie preferences","ot-sdk-btn",{"title":69,"links":501,"subMenu":510},[502,506],{"text":503,"config":504},"DevSecOps platform",{"href":51,"dataGaName":505,"dataGaLocation":436},"devsecops platform",{"text":507,"config":508},"AI-Assisted Development",{"href":402,"dataGaName":509,"dataGaLocation":436},"ai-assisted development",[511],{"title":512,"links":513},"Topics",[514,519,524,529,534,539,544,549],{"text":515,"config":516},"CICD",{"href":517,"dataGaName":518,"dataGaLocation":436},"/topics/ci-cd/","cicd",{"text":520,"config":521},"GitOps",{"href":522,"dataGaName":523,"dataGaLocation":436},"/topics/gitops/","gitops",{"text":525,"config":526},"DevOps",{"href":527,"dataGaName":528,"dataGaLocation":436},"/topics/devops/","devops",{"text":530,"config":531},"Version Control",{"href":532,"dataGaName":533,"dataGaLocation":436},"/topics/version-control/","version control",{"text":535,"config":536},"DevSecOps",{"href":537,"dataGaName":538,"dataGaLocation":436},"/topics/devsecops/","devsecops",{"text":540,"config":541},"Cloud Native",{"href":542,"dataGaName":543,"dataGaLocation":436},"/topics/cloud-native/","cloud native",{"text":545,"config":546},"AI for Coding",{"href":547,"dataGaName":548,"dataGaLocation":436},"/topics/devops/ai-for-coding/","ai for coding",{"text":550,"config":551},"Agentic AI",{"href":552,"dataGaName":553,"dataGaLocation":436},"/topics/agentic-ai/","agentic ai",{"title":555,"links":556},"Solutions",[557,559,561,566,570,573,577,580,582,585,588,593],{"text":111,"config":558},{"href":106,"dataGaName":111,"dataGaLocation":436},{"text":100,"config":560},{"href":83,"dataGaName":84,"dataGaLocation":436},{"text":562,"config":563},"Agile development",{"href":564,"dataGaName":565,"dataGaLocation":436},"/solutions/agile-delivery/","agile delivery",{"text":567,"config":568},"SCM",{"href":96,"dataGaName":569,"dataGaLocation":436},"source code management",{"text":515,"config":571},{"href":89,"dataGaName":572,"dataGaLocation":436},"continuous integration & delivery",{"text":574,"config":575},"Value stream management",{"href":139,"dataGaName":576,"dataGaLocation":436},"value stream management",{"text":520,"config":578},{"href":579,"dataGaName":523,"dataGaLocation":436},"/solutions/gitops/",{"text":149,"config":581},{"href":151,"dataGaName":152,"dataGaLocation":436},{"text":583,"config":584},"Small business",{"href":156,"dataGaName":157,"dataGaLocation":436},{"text":586,"config":587},"Public sector",{"href":161,"dataGaName":162,"dataGaLocation":436},{"text":589,"config":590},"Education",{"href":591,"dataGaName":592,"dataGaLocation":436},"/solutions/education/","education",{"text":594,"config":595},"Financial services",{"href":596,"dataGaName":597,"dataGaLocation":436},"/solutions/finance/","financial services",{"title":169,"links":599},[600,602,604,606,609,611,613,615,617,619,621,623],{"text":181,"config":601},{"href":183,"dataGaName":184,"dataGaLocation":436},{"text":186,"config":603},{"href":188,"dataGaName":189,"dataGaLocation":436},{"text":191,"config":605},{"href":193,"dataGaName":194,"dataGaLocation":436},{"text":196,"config":607},{"href":198,"dataGaName":608,"dataGaLocation":436},"docs",{"text":219,"config":610},{"href":221,"dataGaName":222,"dataGaLocation":436},{"text":214,"config":612},{"href":216,"dataGaName":217,"dataGaLocation":436},{"text":224,"config":614},{"href":226,"dataGaName":227,"dataGaLocation":436},{"text":232,"config":616},{"href":234,"dataGaName":235,"dataGaLocation":436},{"text":237,"config":618},{"href":239,"dataGaName":240,"dataGaLocation":436},{"text":242,"config":620},{"href":244,"dataGaName":245,"dataGaLocation":436},{"text":247,"config":622},{"href":249,"dataGaName":250,"dataGaLocation":436},{"text":252,"config":624},{"href":254,"dataGaName":255,"dataGaLocation":436},{"title":270,"links":626},[627,629,631,633,635,637,639,643,648,650,652,654],{"text":277,"config":628},{"href":279,"dataGaName":272,"dataGaLocation":436},{"text":282,"config":630},{"href":284,"dataGaName":285,"dataGaLocation":436},{"text":290,"config":632},{"href":292,"dataGaName":293,"dataGaLocation":436},{"text":295,"config":634},{"href":297,"dataGaName":298,"dataGaLocation":436},{"text":300,"config":636},{"href":302,"dataGaName":303,"dataGaLocation":436},{"text":305,"config":638},{"href":307,"dataGaName":308,"dataGaLocation":436},{"text":640,"config":641},"Sustainability",{"href":642,"dataGaName":640,"dataGaLocation":436},"/sustainability/",{"text":644,"config":645},"Diversity, inclusion and belonging (DIB)",{"href":646,"dataGaName":647,"dataGaLocation":436},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":310,"config":649},{"href":312,"dataGaName":313,"dataGaLocation":436},{"text":320,"config":651},{"href":322,"dataGaName":323,"dataGaLocation":436},{"text":325,"config":653},{"href":327,"dataGaName":328,"dataGaLocation":436},{"text":655,"config":656},"Modern Slavery Transparency Statement",{"href":657,"dataGaName":658,"dataGaLocation":436},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":660},[661,664,667],{"text":662,"config":663},"Terms",{"href":488,"dataGaName":489,"dataGaLocation":436},{"text":665,"config":666},"Cookies",{"dataGaName":498,"dataGaLocation":436,"id":499,"isOneTrustButton":13},{"text":668,"config":669},"Privacy",{"href":493,"dataGaName":494,"dataGaLocation":436},[671,682,692,703,710,717,724,731,738,745,752,762,774,786,796,805,815,826,836,846,856,863,871,881,890,899,908,918,927,937,945,953,963,971,981,990,1000,1010,1020,1029,1038,1047,1055,1064,1075,1084,1093,1101,1109,1120,1128,1137,1147,1156,1166,1176,1186,1194,1203,1212,1223,1232,1241,1251,1259,1269,1279,1288,1298,1307,1316,1324,1334,1343,1353,1363,1372,1381,1391,1398,1409,1417,1427,1436,1446,1454,1463,1473,1482,1491,1500,1510,1520,1530,1541,1551,1562,1572,1581,1590,1600,1608,1617,1626,1635,1644,1653,1662,1672,1680,1691,1701,1710,1720,1730,1740,1748,1757,1765,1774,1783,1792,1801,1810,1819,1828,1838,1847,1856,1866,1875,1885,1894,1904,1913,1922,1932,1942,1951,1959,1967,1976,1985,1995,2004,2013,2023,2030,2039,2048,2057,2064,2073,2082,2091,2101,2111,2120,2131,2140,2149,2159,2169,2178,2187,2197,2207,2216,2225,2234,2243,2252,2262,2270,2279,2289,2299,2309,2318,2327,2336,2346,2355,2365,2375,2384,2394,2404,2413,2424,2434,2442,2450,2460,2470,2479,2487,2495,2504,2513,2521,2529,2539,2547,2556,2566,2574,2583,2591,2600,2610,2620,2628,2639,2649,2658,2668,2676,2686,2696,2705,2714,2723,2732,2742,2751,2760,2770,2779,2789,2799],{"content":672,"config":680},{"title":673,"heroImage":674,"category":675,"description":676,"authors":677,"date":679},"How GitLab built a security control framework from scratch","https://res.cloudinary.com/about-gitlab-com/image/upload/v1772630163/akp8ly2mrsfrhsb0liyb.png","security","GitLab's Security Compliance team created a custom control framework to scale across multiple certifications and products — here's why and how you can, too.\n",[678],"Davoud Tu","2026-03-04",{"slug":681,"externalUrl":-1},"how-gitlab-built-a-security-control-framework-from-scratch",{"content":683,"config":690},{"title":684,"heroImage":685,"category":675,"description":686,"authors":687,"date":689},"How to set up GitLab SAML SSO with Google Workspace","https://res.cloudinary.com/about-gitlab-com/image/upload/v1759320418/xjmqcozxzt4frx0hori3.png","Learn how to automate user provisioning and sync permissions with Google groups with this step-by-step guide.",[688],"Omid Khan","2026-01-27",{"slug":691,"externalUrl":-1},"how-to-set-up-gitlab-saml-sso-with-google-workspace",{"content":693,"config":701},{"title":694,"heroImage":695,"category":696,"description":697,"authors":698,"date":700},"AI Catalog: Discover, create, and share agents and flows","https://res.cloudinary.com/about-gitlab-com/image/upload/v1765809212/noh0mdfn9o94ry9ykura.png","ai-ml","Explore the GitLab AI Catalog to discover and enable foundational agents and flows, create custom ones tailored to your needs, and share them with your team for seamless collaboration.",[699],"Itzik Gan Baruch","2026-01-14",{"slug":702,"externalUrl":-1},"ai-catalog-discover-and-share-agents",{"content":704,"config":708},{"title":705,"heroImage":695,"category":696,"description":706,"authors":707,"date":700},"Customizing GitLab Duo Agent Platform: Chat rules, prompts, and workflows","Learn how to customize GitLab Duo Agent Platform to match your team's workflow. Configure chat rules, craft system prompts, set up agent tools, and tailor flows for your specific needs.",[699],{"slug":709,"externalUrl":-1},"customizing-gitlab-duo-chat-rules-prompts-workflows",{"content":711,"config":715},{"title":712,"heroImage":695,"category":696,"description":713,"authors":714,"date":700},"Getting started with GitLab Duo Agentic Chat","Learn the chat interface, model and agent selection, and best practices for effective AI collaboration across Web UI and IDEs.",[699],{"slug":716,"externalUrl":-1},"getting-started-with-gitlab-duo-agentic-chat",{"content":718,"config":722},{"title":719,"heroImage":695,"category":696,"description":720,"authors":721,"date":700},"Get started with GitLab Duo Agent Platform: The complete guide","Learn GitLab Duo Agent Platform with this comprehensive series covering everything from first interactions to advanced MCP integration, customization, and production workflows.",[699],{"slug":723,"externalUrl":-1},"gitlab-duo-agent-platform-complete-getting-started-guide",{"content":725,"config":729},{"title":726,"heroImage":695,"category":696,"description":727,"authors":728,"date":700},"Introduction to GitLab Duo Agent Platform","Learn the basics of GitLab Duo Agent Platform and complete your first agent interaction.",[699],{"slug":730,"externalUrl":-1},"introduction-to-gitlab-duo-agent-platform",{"content":732,"config":736},{"title":733,"heroImage":695,"category":696,"description":734,"authors":735,"date":700},"Monitor, manage, and automate AI workflows","Explore the GitLab Duo Agent Platform Automate capabilities. Monitor activity through sessions, automate workflows with event-driven triggers, and manage your AI-powered development processes.",[699],{"slug":737,"externalUrl":-1},"monitor-manage-automate-ai-workflows",{"content":739,"config":743},{"title":740,"heroImage":695,"category":696,"description":741,"authors":742,"date":700},"Understanding agents: Foundational, custom, and external","Deep dive into GitLab Duo Agent Platform agent types. Learn about foundational agents, create custom agents for team workflows, and integrate external agents like Claude Code and OpenAI Codex.",[699],{"slug":744,"externalUrl":-1},"understanding-agents-foundational-custom-external",{"content":746,"config":750},{"title":747,"heroImage":695,"category":696,"description":748,"authors":749,"date":700},"Understanding flows: Multi-agent workflows","Deep dive into GitLab Duo Agent Platform flows. Learn about foundational flows, create custom user-defined workflows, and learn flow orchestration patterns.",[699],{"slug":751,"externalUrl":-1},"understanding-flows-multi-agent-workflows",{"content":753,"config":760},{"title":754,"heroImage":755,"category":675,"description":756,"authors":757,"date":759},"AI-powered vulnerability triaging with GitLab Duo Security Agent","https://res.cloudinary.com/about-gitlab-com/image/upload/v1756122536/akivvcnafog9c4dhhzkp.png","Learn how this GitLab Duo Agent Platform capability uses AI to prioritize vulnerabilities, reduce alert fatigue, and help teams focus on critical security risks.",[758],"Fernando Diaz","2026-01-06",{"slug":761,"externalUrl":-1},"vulnerability-triage-made-simple-with-gitlab-security-analyst-agent",{"content":763,"config":772},{"title":764,"heroImage":765,"category":766,"description":767,"authors":768,"date":771},"Guide: Migrate from Azure DevOps to GitLab","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749658924/Blog/Hero%20Images/securitylifecycle-light.png","engineering","Learn how to carry out the full migration from Azure DevOps to GitLab using GitLab Professional Services migration tools — from planning and execution to post-migration follow-up tasks.",[769,770],"Evgeny Rudinsky","Michael Leopard","2025-12-03",{"slug":773,"externalUrl":-1},"migration-from-azure-devops-to-gitlab",{"content":775,"config":784},{"title":776,"heroImage":777,"category":778,"description":779,"authors":780,"date":783},"Automate embedded systems compliance with GitLab and CodeSonar","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659978/Blog/Hero%20Images/automation.png","product","Continuous compliance verification for ISO 26262, DO-178C, MISRA, and other code quality and functional safety standards.",[781,782],"Mark Hermeling","Darwin Sanoy","2025-12-02",{"slug":785,"externalUrl":-1},"automate-embedded-systems-compliance-with-gitlab-and-codesonar",{"content":787,"config":794},{"title":788,"heroImage":789,"category":696,"description":790,"authors":791,"date":793},"Secure AI agent deployment to GKE","https://res.cloudinary.com/about-gitlab-com/image/upload/f_auto,q_auto,c_lfill/v1749670563/Blog/Hero%20Images/cloudcomputing.jpg","This guide explains how to deploy an ADK-based AI agent to Google Kubernetes Engine using GitLab's AI-powered DevSecOps platform, with ease and security.",[792],"Regnard Raquedan","2025-11-10",{"slug":795,"externalUrl":-1},"secure-ai-agent-deployment-to-gke",{"content":797,"config":803},{"title":798,"heroImage":685,"category":675,"description":799,"authors":800,"date":802},"Migrate from pipeline variables to pipeline inputs for better security","Follow this guide to learn about stronger controls around pipeline customization, including how to implement explicit declarations, type safety, and validation.",[801],"Fabio Pitino","2025-11-04",{"slug":804,"externalUrl":-1},"migrate-from-pipeline-variables-to-pipeline-inputs-for-better-security",{"content":806,"config":813},{"title":807,"heroImage":808,"category":696,"description":809,"authors":810,"date":812},"Modernize Java applications quickly with GitLab Duo with Amazon Q","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659604/Blog/Hero%20Images/Screenshot_2024-11-27_at_4.55.28_PM.png","Transform legacy Java 8 applications to Java 17 in minutes instead of weeks using AI-powered automation.",[811],"Cesar Saavedra","2025-10-22",{"slug":814,"externalUrl":-1},"modernize-java-applications-quickly-with-gitlab-duo-with-amazon-q",{"content":816,"config":824},{"title":817,"heroImage":818,"category":766,"description":819,"authors":820,"date":823},"Variable and artifact sharing in GitLab parent-child pipelines","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749664198/Blog/Hero%20Images/Self-Hosted_1800x945.png","Learn how to simplify complex CI/CD pipelines with these best practices for sharing data in more modular pipeline setups. ",[821,822],"William Arias","Daniel Helfand","2025-10-16",{"slug":825,"externalUrl":-1},"variable-and-artifact-sharing-in-gitlab-parent-child-pipelines",{"content":827,"config":834},{"title":828,"heroImage":829,"category":766,"description":830,"authors":831,"date":833},"How we built a structured Streamlit Application Framework in Snowflake","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","Want to transform development from chaos to compliance? Learn how we implemented governance early on rather than retrofitting when maintenance costs climb exponentially.",[832],"Radovan Bacovic","2025-10-10",{"slug":835,"externalUrl":-1},"how-we-built-a-structured-streamlit-application-framework-in-snowflake",{"content":837,"config":844},{"title":838,"heroImage":839,"category":778,"description":840,"authors":841,"date":843},"Optimize GitLab object storage for scale and performance","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749665151/Blog/Hero%20Images/blog-image-template-1800x945__27_.png","Configure GitLab object storage for maximum performance and cost savings. Learn consolidated forms, direct downloads, and identity-based authentication.",[842],"Tim Rizzi","2025-10-08",{"slug":845,"externalUrl":-1},"optimize-gitlab-object-storage-for-scale-and-performance",{"content":847,"config":854},{"title":848,"heroImage":849,"category":696,"description":850,"authors":851,"date":853},"Agentic AI guides and resources","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749658912/Blog/Hero%20Images/blog-image-template-1800x945__20_.png","Learn everything you need to know about agentic AI, including what it is, how it works, why it levels up your DevSecOps environment, and best practices for implementation.",[852],"GitLab","2025-09-26",{"slug":855,"externalUrl":-1},"agentic-ai-guides-and-resources",{"content":857,"config":861},{"title":858,"heroImage":695,"category":696,"description":859,"authors":860,"date":853},"Model Context Protocol integration","Extend GitLab Duo with external Services using MCP. Connect to Jira, Slack, AWS, and more as an MCP client, or enable external AI tools to access your GitLab data as an MCP server.",[699],{"slug":862,"externalUrl":-1},"duo-agent-platform-with-mcp",{"content":864,"config":869},{"title":865,"heroImage":685,"category":675,"description":866,"authors":867,"date":868},"A comprehensive guide to GitLab DAST","DevSecOps teams can learn how to implement and configure dynamic application security testing, perform passive/active scans, and set security policies.",[758],"2025-09-17",{"slug":870,"externalUrl":-1},"comprehensive-guide-to-gitlab-dast",{"content":872,"config":879},{"title":873,"heroImage":874,"category":696,"description":875,"authors":876,"date":878},"How GitLab Duo Agent Platform transforms DataOps","blog/hero%20images/workflow_1800x945.png","Explore how to turn hours of manual coding into minutes of automated generation with this comprehensive dbt model creation walkthrough.",[877],"Dennis van Rooijen","2025-09-16",{"slug":880,"externalUrl":-1},"how-gitlab-duo-agent-platform-transforms-dataops",{"content":882,"config":888},{"title":883,"heroImage":884,"category":766,"description":885,"authors":886,"date":887},"Supercharge your Git workflows","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098264/Blog/Hero%20Images/Blog/Hero%20Images/AdobeStock_519147119_2RafH61mqosMZv8HGAlsUj_1750098264407.jpg","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.",[782],"2025-09-10",{"slug":889,"externalUrl":-1},"supercharge-your-git-workflows",{"content":891,"config":897},{"title":892,"heroImage":893,"category":696,"description":894,"authors":895,"date":896},"Vibe coding with GitLab Duo Agent Platform: Issue to MR Flow","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749662465/Blog/Hero%20Images/GitLab_Duo_Workflow_Unified_Data_Store__1_.png","Learn how to update your application in minutes with our newest agent Flow that takes developers from idea to code.",[811],"2025-09-03",{"slug":898,"externalUrl":-1},"vibe-coding-with-gitlab-duo-agent-platform-issue-to-mr-flow",{"content":900,"config":906},{"title":901,"heroImage":902,"category":766,"description":903,"authors":904,"date":905},"Secure Rust development with GitLab","https://res.cloudinary.com/about-gitlab-com/image/upload/v1756314674/tct6zf6evw0xgddd2vo3.png","Learn how GitLab supports Rust development through its CI/CD capabilities, security scanning, dedicated Rust integrations, AI features, and more.",[758],"2025-09-02",{"slug":907,"externalUrl":-1},"secure-rust-development-with-gitlab",{"content":909,"config":916},{"title":910,"heroImage":911,"category":696,"description":912,"authors":913,"date":915},"Measuring AI ROI at scale: A practical guide to GitLab Duo Analytics","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749662840/Blog/Hero%20Images/ai-experiment-stars.png","Learn how to transform raw usage data into actionable business insights and ROI calculations with this in-depth tutorial.",[914],"Paul Meresanu","2025-08-06",{"slug":917,"externalUrl":-1},"measuring-ai-roi-at-scale-a-practical-guide-to-gitlab-duo-analytics",{"content":919,"config":925},{"title":920,"heroImage":921,"category":675,"description":922,"authors":923,"date":924},"Software supply chain security guide: Why organizations struggle","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097701/Blog/Hero%20Images/Blog/Hero%20Images/blog-image-template-1800x945%20%285%29_1iy516k40hwBDChKcUJ2zb_1750097700983.png","Part 1 of this new series explores fundamental challenges, practical solutions, and emerging trends, including AI, that every development team needs to understand.",[699],"2025-07-24",{"slug":926,"externalUrl":-1},"software-supply-chain-security-guide-why-organizations-struggle",{"content":928,"config":935},{"title":929,"heroImage":930,"category":696,"description":931,"authors":932,"date":934},"Accelerate learning with GitLab Duo Agent Platform","Blog/Hero%20Images/Workflow_1800x945.png","Learn how agentic AI helped generate comprehensive gRPC documentation in minutes, not hours.",[933],"Halil Coban","2025-07-07",{"slug":936,"externalUrl":-1},"accelerate-learning-with-gitlab-duo-agent-platform",{"content":938,"config":943},{"title":939,"heroImage":940,"category":696,"description":941,"authors":942,"date":934},"Fast and secure AI agent deployment to Google Cloud with GitLab","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749670563/Blog/Hero%20Images/cloudcomputing.jpg","Follow this step-by-step guide, complete with a demo application, to learn how to use agentic AI, along with GitLab's native integrations and CI/CD components.",[792],{"slug":944,"externalUrl":-1},"fast-and-secure-ai-agent-deployment-to-google-cloud-with-gitlab",{"content":946,"config":951},{"title":947,"heroImage":808,"category":696,"description":948,"authors":949,"date":950},"Enhance application quality with AI-powered test generation","Learn how GitLab Duo with Amazon Q improves the QA process by automatically generating comprehensive unit tests.",[811],"2025-07-03",{"slug":952,"externalUrl":-1},"enhance-application-quality-with-ai-powered-test-generation",{"content":954,"config":961},{"title":955,"heroImage":956,"category":778,"description":957,"authors":958,"date":960},"Exact Code Search: Find code faster across repositories","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749675154/Blog/Hero%20Images/blog-image-template-1800x945__8_.png","Discover how this new GitLab feature can find exact matches, use regex patterns, and see contextual results across terabytes of codebases.",[959],"Dmitry Gruzd","2025-06-25",{"slug":962,"externalUrl":-1},"exact-code-search-find-code-faster-across-repositories",{"content":964,"config":969},{"title":965,"heroImage":808,"category":696,"description":966,"authors":967,"date":968},"Speed up code reviews: Let AI handle the feedback implementation","Discover how GitLab Duo with Amazon Q automates the implementation of code review feedback through AI, transforming a time-consuming manual process into a streamlined workflow.",[811],"2025-06-10",{"slug":970,"externalUrl":-1},"speed-up-code-reviews-let-ai-handle-the-feedback-implementation",{"content":972,"config":979},{"title":973,"heroImage":974,"category":778,"description":975,"authors":976,"date":978},"4 ways to accelerate embedded development with GitLab","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659756/Blog/Hero%20Images/REFERENCE_-_display_preview_for_blog_images.png","Learn how automated hardware testing, standard builds, collaborative workflows, and integrated compliance eliminate bottlenecks in firmware development.",[977,782],"Matt DeLaney","2025-06-05",{"slug":980,"externalUrl":-1},"4-ways-to-accelerate-embedded-development-with-gitlab",{"content":982,"config":988},{"title":983,"heroImage":984,"category":696,"description":985,"authors":986,"date":987},"Accelerate code reviews with GitLab Duo and Amazon Q","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750096976/Blog/Hero%20Images/Blog/Hero%20Images/Screenshot%202024-11-27%20at%204.55.28%E2%80%AFPM_4VVz6DgGBOvbGY8BUmd068_1750096975734.png","Use AI-powered agents to optimize code reviews by automatically analyzing merge requests and providing comprehensive feedback on bugs, readability, and coding standards.",[811],"2025-06-02",{"slug":989,"externalUrl":-1},"accelerate-code-reviews-with-gitlab-duo-and-amazon-q",{"content":991,"config":998},{"title":992,"heroImage":993,"category":696,"description":994,"authors":995,"date":997},"GitLab Duo Chat gets agentic AI makeover  ","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","Our new Duo Chat experience, currently an experimental release, helps developers onboard to projects, understand assignments, implement changes, and more.",[996],"Torsten Linz","2025-05-29",{"slug":999,"externalUrl":-1},"gitlab-duo-chat-gets-agentic-ai-makeover",{"content":1001,"config":1008},{"title":1002,"heroImage":1003,"category":778,"description":1004,"authors":1005,"date":1007},"Getting started with GitLab: Working with CI/CD variables","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659525/Blog/Hero%20Images/blog-getting-started-with-gitlab-banner-0497-option4-fy25.png","Learn what CI/CD variables are, why they are important in DevSecOps, and best practices for utilizing them.",[1006],"GitLab Team","2025-05-27",{"slug":1009,"externalUrl":-1},"getting-started-with-gitlab-working-with-ci-cd-variables",{"content":1011,"config":1018},{"title":1012,"heroImage":1013,"category":696,"description":1014,"authors":1015,"date":1017},"Refactoring JavaScript to TypeScript with GitLab Duo Workflow","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749660174/Blog/Hero%20Images/Workflow_1800x945.png","Learn how we used our autonomous AI agent, which sits in your development environment, to convert a real-world JavaScript application to TypeScript.",[1016],"Frédéric Caplette","2025-05-22",{"slug":1019,"externalUrl":-1},"refactoring-javascript-to-typescript-with-gitlab-duo-workflow",{"content":1021,"config":1027},{"title":1022,"heroImage":893,"category":696,"description":1023,"authors":1024,"date":1026},"Automate tedious coding tasks with GitLab Duo Workflow","See how agentic AI can reduce time spent on repetitive tasks, freeing you up to focus on developing innovative solutions and shipping the next big thing.",[1025],"Jeff Park","2025-05-06",{"slug":1028,"externalUrl":-1},"automate-tedious-coding-tasks-with-gitlab-duo-workflow",{"content":1030,"config":1036},{"title":1031,"heroImage":1032,"category":675,"description":1033,"authors":1034,"date":1035},"How to use GitLab's Custom Compliance Frameworks in your DevSecOps environment","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097104/Blog/Hero%20Images/Blog/Hero%20Images/blog-image-template-1800x945%20%284%29_3LZkiDjHLjhqEkvOvBsVKp_1750097104092.png","Explore how new frameworks, along with more than 50 out-of-the-box controls, transform regulatory requirements from burdensome checkboxes to integrated, automated workflow components.",[758],"2025-04-30",{"slug":1037,"externalUrl":-1},"how-to-use-gitlabs-custom-compliance-frameworks-in-your-devsecops",{"content":1039,"config":1045},{"title":1040,"heroImage":1041,"category":696,"description":1042,"authors":1043,"date":1044},"GitLab Duo + Amazon Q: Transform ideas into code in minutes","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097127/Blog/Hero%20Images/Blog/Hero%20Images/Screenshot%202024-11-27%20at%204.55.28%E2%80%AFPM_4VVz6DgGBOvbGY8BUmd068_1750097126673.png","The new GitLab Duo with Amazon Q integration analyzes your issue descriptions and automatically generates complete working code solutions, accelerating development workflows.",[811],"2025-04-28",{"slug":1046,"externalUrl":-1},"gitlab-duo-amazon-q-transform-ideas-into-code-in-minutes",{"content":1048,"config":1053},{"title":1049,"heroImage":1003,"category":778,"description":1050,"authors":1051,"date":1052},"Getting started with GitLab: Understanding CI/CD","Learn the basics of continuous integration/continuous delivery in this beginner's guide, including what CI/CD components are and how to create them.",[852],"2025-04-25",{"slug":1054,"externalUrl":-1},"getting-started-with-gitlab-understanding-ci-cd",{"content":1056,"config":1062},{"title":1057,"heroImage":1058,"category":696,"description":1059,"authors":1060,"date":1061},"Use GitLab Duo Workflow to improve application quality assurance","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097617/Blog/Hero%20Images/Blog/Hero%20Images/Workflow%201800x945_2gQoQIbY9NvjLFpXtsxtXy_1750097616649.png","Learn step-by-step how to add unit tests to a Java application using agentic AI (includes a video tutorial).",[811],"2025-04-10",{"slug":1063,"externalUrl":-1},"use-gitlab-duo-workflow-to-improve-application-quality-assurance",{"content":1065,"config":1073},{"title":1066,"heroImage":1067,"category":1068,"description":1069,"authors":1070,"date":1072},"SAFe without silos in GitLab","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097569/Blog/Hero%20Images/Blog/Hero%20Images/blog-image-template-1800x945%20%2811%29_2hcwWx49wQ7CHfvhhkVH6S_1750097569126.png","agile-planning","Learn how to map the Scaled Agile Framework to the native capabilities of the DevSecOps platform and the advantages that come from doing so.",[1071],"Amanda Rueda","2025-04-08",{"slug":1074,"externalUrl":-1},"safe-without-silos-in-gitlab",{"content":1076,"config":1082},{"title":1077,"heroImage":1078,"category":675,"description":1079,"authors":1080,"date":1081},"Enhance application security with GitLab + HackerOne","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097503/Blog/Hero%20Images/Blog/Hero%20Images/blog-image-template-1800x945%20%2810%29_5ET24Q6i8ihqrAOkge7a1R_1750097503214.png","Learn about the GitLab + HackerOne partnership and how to easily implement an integration that improves your organization’s application security posture.",[758],"2025-04-03",{"slug":1083,"externalUrl":-1},"enhance-application-security-with-gitlab-hackerone",{"content":1085,"config":1091},{"title":1086,"heroImage":1087,"category":675,"description":1088,"authors":1089,"date":1090},"Secure and safe login and commits with GitLab + Yubico","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749663259/Blog/Hero%20Images/REFERENCE_-_display_preview_for_blog_images__3_.png","Learn how GitLab and Yubico have partnered to strengthen software development security through robust authentication measures.",[758],"2025-04-02",{"slug":1092,"externalUrl":-1},"secure-and-safe-login-and-commits-with-gitlab-yubico",{"content":1094,"config":1099},{"title":1095,"heroImage":921,"category":675,"description":1096,"authors":1097,"date":1098},"Strengthen data security with custom PII detection rulesets","This tutorial explains how GitLab's customizable Secret Detection rulesets enhance data security by identifying PII patterns in code repositories. Learn how AI can help.",[758],"2025-04-01",{"slug":1100,"externalUrl":-1},"enhance-data-security-with-custom-pii-detection-rulesets",{"content":1102,"config":1107},{"title":1103,"heroImage":974,"category":766,"description":1104,"authors":1105,"date":1106},"Tutorial: Secure BigQuery data publishing with GitLab ","Learn how to create repeatable, auditable, and efficient processes for automating and securing BigQuery data exports.",[792],"2025-03-25",{"slug":1108,"externalUrl":-1},"tutorial-secure-bigquery-data-publishing-with-gitlab",{"content":1110,"config":1118},{"title":1111,"heroImage":1112,"category":675,"description":1113,"authors":1114,"date":1117},"Self-service security alert handling with GitLab's UAM","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749662080/Blog/Hero%20Images/AdobeStock_1097303277.jpg","The User Attestation Module automates security alerts by routing them directly to team members for verification, reducing manual SecOps work and enhancing audit trails.",[1115,1116],"Bala Allam","Matt Coons","2025-03-18",{"slug":1119,"externalUrl":-1},"self-service-security-alert-handling-with-gitlabs-uam",{"content":1121,"config":1126},{"title":1122,"heroImage":1003,"category":778,"description":1123,"authors":1124,"date":1125},"Automating Agile workflows with the gitlab-triage gem","Learn how to automate repetitive tasks like triaging issues and merge requests to free up valuable developer time in our \"Getting Started with GitLab\" series.",[852],"2025-03-13",{"slug":1127,"externalUrl":-1},"automating-agile-workflows-with-the-gitlab-triage-gem",{"content":1129,"config":1135},{"title":1130,"heroImage":1131,"category":675,"description":1132,"authors":1133,"date":1134},"Vulnerability risk prioritization made simple with GitLab","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749674528/Blog/Hero%20Images/blog-image-template-1800x945__5_.png","GitLab provides detailed vulnerability risk data to assess the potential impact of detected vulnerabilities. Learn how this enables teams to effectively prioritize remediation efforts.",[758],"2025-03-12",{"slug":1136,"externalUrl":-1},"vulnerability-risk-prioritization-made-simple-with-gitlab",{"content":1138,"config":1145},{"title":1139,"heroImage":1140,"category":778,"description":1141,"authors":1142,"date":1144},"Build a new website in a few easy steps with GitLab Pages ","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097716/Blog/Hero%20Images/Blog/Hero%20Images/blog-image-template-1800x945%20%281%29_7c3TDgNgct9xQbmTJSw0de_1750097716096.png","This tutorial shows you how to create and host your personal website using GitLab Pages with a ready-to-use template that you can customize in minutes.",[1143],"Alex Fracazo","2025-03-03",{"slug":1146,"externalUrl":-1},"build-a-new-website-in-a-few-easy-steps-with-gitlab-pages",{"content":1148,"config":1154},{"title":1149,"heroImage":1150,"category":778,"description":1151,"authors":1152,"date":1144},"Build and run containers in Remote Development workspaces","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749663857/Blog/Hero%20Images/blog-image-template-1800x945__12_.png","Use this easy-to-follow tutorial to create a secure, ephemeral, reproducible development environment in GitLab that can replace your local environments.",[1153],"Vishal Tak",{"slug":1155,"externalUrl":-1},"build-and-run-containers-in-remote-development-workspaces",{"content":1157,"config":1164},{"title":1158,"heroImage":1159,"category":778,"description":1160,"authors":1161,"date":1163},"Create a workspace quickly with the GitLab default devfile","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097860/Blog/Hero%20Images/Blog/Hero%20Images/REFERENCE%20-%20display%20preview%20for%20blog%20images%20%281%29_2XDPsbkjQ3o6tcdom6IGxI_1750097859914.png","The GitLab default devfile makes it easier than ever to try out workspaces for new projects. Learn how to share developer environment configurations effortlessly with this tutorial.",[1162],"Zhaochen Li","2025-02-27",{"slug":1165,"externalUrl":-1},"create-a-workspace-quickly-with-the-gitlab-default-devfile",{"content":1167,"config":1174},{"title":1168,"heroImage":1169,"category":675,"description":1170,"authors":1171,"date":1173},"The ultimate guide to token management at GitLab","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097408/Blog/Hero%20Images/Blog/Hero%20Images/AdobeStock_1097303277_6gTk7M1DNx0tFuovupVFB1_1750097407860.jpg","Learn all the steps in the end-to-end process of identifying, managing, and securing tokens for improved security across the software development lifecycle.",[1172],"Hakeem Abdul-Razak","2025-02-25",{"slug":1175,"externalUrl":-1},"the-ultimate-guide-to-token-management-at-gitlab",{"content":1177,"config":1184},{"title":1178,"heroImage":1179,"category":1180,"description":1181,"authors":1182,"date":1183},"How to use OCI images as the source of truth for continuous delivery","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097601/Blog/Hero%20Images/Blog/Hero%20Images/REFERENCE%20-%20Use%20this%20page%20as%20a%20reference%20for%20thumbnail%20sizes_76Tn5jFmEHY5LFj8RdDjNY_1750097600692.png","open-source","Discover the benefits of using Open Container Initiative images as part of GitOps workflows and the many features GitLab offers to simplify deployments to Kubernetes.",[822],"2025-02-19",{"slug":1185,"externalUrl":-1},"how-to-use-oci-images-as-the-source-of-truth-for-continuous-delivery",{"content":1187,"config":1192},{"title":1188,"heroImage":1189,"category":778,"description":1190,"authors":1191,"date":1183},"Structuring the GitLab Package Registry for enterprise scale","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749662332/Blog/Hero%20Images/blog-image-template-1800x945__23_.png","Learn how to leverage GitLab's unique project-based publishing model alongside root-group-level consumption to create a secure, flexible package management strategy.",[842],{"slug":1193,"externalUrl":-1},"structuring-the-gitlab-package-registry-for-enterprise-scale",{"content":1195,"config":1201},{"title":1196,"heroImage":1197,"category":766,"description":1198,"authors":1199,"date":1200},"Automating container image migration from Amazon ECR to GitLab","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749663129/Blog/Hero%20Images/blog-image-template-1800x945__28_.png","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.",[842],"2025-02-13",{"slug":1202,"externalUrl":-1},"automating-container-image-migration-from-amazon-ecr-to-gitlab",{"content":1204,"config":1210},{"title":1205,"heroImage":1206,"category":778,"description":1207,"authors":1208,"date":1209},"Getting started with GitLab: Mastering project management","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097294/Blog/Hero%20Images/Blog/Hero%20Images/blog-getting-started-with-gitlab-banner-0497-option4-fy25_cFwd8DYFLekdnOLmbbChp_1750097293924.png","Discover the key components of project management and how to put them to use for better organization and tracking.",[852],"2025-02-11",{"slug":1211,"externalUrl":-1},"getting-started-with-gitlab-mastering-project-management",{"content":1213,"config":1221},{"title":1214,"heroImage":1215,"category":675,"description":1216,"authors":1217,"date":1220},"How to scan a full commit history to detect sensitive secrets","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097948/Blog/Hero%20Images/Blog/Hero%20Images/REFERENCE%20-%20display%20preview%20for%20blog%20images%20%281%29_2XDPsbkjQ3o6tcdom6IGxI_1750097948673.png","Use GitLab Secret Detection to scan a repository's commit history, including branches. View results within the GitLab UI with just a few lines of code added to a pipeline file.",[1218,1219],"Noah Ing","Jerez Solis","2025-02-06",{"slug":1222,"externalUrl":-1},"how-to-scan-a-full-commit-history-to-detect-sensitive-secrets",{"content":1224,"config":1230},{"title":1225,"heroImage":1226,"category":675,"description":1227,"authors":1228,"date":1229},"Tutorial: Security scanning in air-gapped environments","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099301/Blog/Hero%20Images/Blog/Hero%20Images/AdobeStock_1097303277_6gTk7M1DNx0tFuovupVFB1_1750099300786.jpg","Security scanning remains crucial even in air-gapped environments to detect internal threats, prevent data exfiltration, and maintain operational integrity. Learn how GitLab can help get air-gapped environments secure.",[758],"2025-02-05",{"slug":1231,"externalUrl":-1},"tutorial-security-scanning-in-air-gapped-environments",{"content":1233,"config":1239},{"title":1234,"heroImage":1235,"category":1068,"description":1236,"authors":1237,"date":1238},"How to harmonize Agile sprints with product roadmaps","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097231/Blog/Hero%20Images/Blog/Hero%20Images/blog-image-template-1800x945%20%2821%29_2pdp2MNB7SoP4MhhiI1WIa_1750097230664.png","Apply best practices and GitLab features to your product journey, including creating centralized roadmaps, conducting review sessions, and tracking sprint lifecycles.",[1071],"2025-02-04",{"slug":1240,"externalUrl":-1},"how-to-harmonize-agile-sprints-with-product-roadmaps",{"content":1242,"config":1249},{"title":1243,"heroImage":1244,"category":675,"description":1245,"authors":1246,"date":1248},"Automating cybersecurity threat detections with GitLab CI/CD","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749663239/Blog/Hero%20Images/AdobeStock_1023776629.jpg","Discover how GUARD automates cybersecurity threat detections through the use\nof GitLab CI/CD and how it ensures high-quality detections.",[1247],"Mitra Jozenazemian","2025-01-29",{"slug":1250,"externalUrl":-1},"automating-cybersecurity-threat-detections-with-gitlab-ci-cd",{"content":1252,"config":1257},{"title":1253,"heroImage":1254,"category":675,"description":1255,"authors":1256,"date":1248},"Improve security auditing with GitLab Operational Container Scanning","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749664654/Blog/Hero%20Images/AdobeStock_1172300481.jpg","Learn how to conduct container vulnerability scans post-deployment to raise awareness of existing threats and to track resolution of vulnerabilities.",[822],{"slug":1258,"externalUrl":-1},"improve-security-auditing-with-gitlab-operational-container-scanning",{"content":1260,"config":1267},{"title":1261,"heroImage":1262,"category":778,"description":1263,"authors":1264,"date":1266},"Deploy a server using Go with GitLab + Google Cloud","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098028/Blog/Hero%20Images/Blog/Hero%20Images/blog-image-template-1800x945_fJKX41PJHKCfSOWw4xQxm_1750098028126.png","This tutorial shows how to use GitLab’s Google Cloud integration to deploy a Golang server in less than 10 minutes, helping developers become more independent and efficient.",[1265,1218],"Claire Champernowne","2025-01-28",{"slug":1268,"externalUrl":-1},"deploy-a-server-using-go-with-gitlab-google-cloud",{"content":1270,"config":1277},{"title":1271,"heroImage":1272,"category":778,"description":1273,"authors":1274,"date":1266},"From code to production: A guide to continuous deployment with GitLab","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659478/Blog/Hero%20Images/REFERENCE_-_Use_this_page_as_a_reference_for_thumbnail_sizes.png","Learn how to get started building a robust continuous deployment pipeline in GitLab. Follow these step-by-step instructions, practical examples, and best practices.",[1275,1276],"Benjamin Skierlak","James Wormwell",{"slug":1278,"externalUrl":-1},"from-code-to-production-a-guide-to-continuous-deployment-with-gitlab",{"content":1280,"config":1286},{"title":1281,"heroImage":1282,"category":778,"description":1283,"authors":1284,"date":1266},"Getting started with GitLab: How to import your projects to GitLab","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097248/Blog/Hero%20Images/Blog/Hero%20Images/blog-getting-started-with-gitlab-banner-0497-option4-fy25_cFwd8DYFLekdnOLmbbChp_1750097247785.png","Learn how to import your projects from various sources, including Bitbucket, Gitea, GitHub, and GitLab Self-Managed.",[1285],"Abubakar Siddiq Ango",{"slug":1287,"externalUrl":-1},"getting-started-with-gitlab-how-to-import-your-projects-to-gitlab",{"content":1289,"config":1296},{"title":1290,"heroImage":1291,"category":675,"description":1292,"authors":1293,"date":1295},"How-to: GitLab Single Sign-on with SAML, SCIM, and Azure’s Entra ID","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098047/Blog/Hero%20Images/Blog/Hero%20Images/AdobeStock_1097303277_6gTk7M1DNx0tFuovupVFB1_1750098046895.jpg","Follow this detailed walk-through of the configuration steps required to configure GitLab Single Sign-on, using Microsoft Azure’s Entra ID as the identity provider.",[1294],"Rob Jackson","2025-01-23",{"slug":1297,"externalUrl":-1},"how-to-gitlab-single-sign-on-with-saml-scim-and-azures-entra-id",{"content":1299,"config":1305},{"title":1300,"heroImage":1301,"category":675,"description":1302,"authors":1303,"date":1304},"Guide to fulfilling SOC 2 security requirements with GitLab","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099576/Blog/Hero%20Images/Blog/Hero%20Images/AdobeStock_1172300481_IGPi3TS4VzFgcqhvEdBlR_1750099575518.jpg","Understand the application security features in the GitLab DevSecOps platform that map to System and Organization Controls 2 requirements.",[758],"2025-01-22",{"slug":1306,"externalUrl":-1},"guide-to-fulfilling-soc-2-security-requirements-with-gitlab",{"content":1308,"config":1314},{"title":1309,"heroImage":1310,"category":675,"description":1311,"authors":1312,"date":1304},"Tutorial: Advanced use case for GitLab Pipeline Execution Policies","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098083/Blog/Hero%20Images/Blog/Hero%20Images/AdobeStock_397632156_3Ldy1urjMStQCl4qnOBvE0_1750098083312.jpg","Learn how new GitLab Ultimate functionality can enforce a standardized pipeline across an organization for improved compliance.",[1313],"Dan Rabinovitz",{"slug":1315,"externalUrl":-1},"tutorial-advanced-use-case-for-gitlab-pipeline-execution-policies",{"content":1317,"config":1322},{"title":1318,"heroImage":1112,"category":675,"description":1319,"authors":1320,"date":1321},"Secure and publish Python packages: A guide to CI integration","Learn how to implement a secure CI/CD pipeline across five stages with the GitLab DevSecOps platform.",[842],"2025-01-21",{"slug":1323,"externalUrl":-1},"secure-and-publish-python-packages-a-guide-to-ci-integration",{"content":1325,"config":1332},{"title":1326,"heroImage":1327,"category":778,"description":1328,"authors":1329,"date":1331},"Google Cloud integrations for secure Cloud Run deployments at GitLab","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099336/Blog/Hero%20Images/Blog/Hero%20Images/blog-image-template-1800x945_fJKX41PJHKCfSOWw4xQxm_1750099336757.png","This tutorial demonstrates how to use GitLab’s Google Artifact Management integration to deploy to Google Cloud Run, a serverless runtime for containers application.\n",[792,1330],"Matt Genelin","2025-01-15",{"slug":1333,"externalUrl":-1},"google-cloud-integrations-for-secure-cloud-run-deployments-at-gitlab",{"content":1335,"config":1341},{"title":1336,"heroImage":1337,"category":778,"description":1338,"authors":1339,"date":1340},"Getting started with GitLab: How to manage users","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097273/Blog/Hero%20Images/Blog/Hero%20Images/blog-getting-started-with-gitlab-banner-0497-option4-fy25_cFwd8DYFLekdnOLmbbChp_1750097273817.png","Learn how to manage users using groups, roles, and permissions. Walk through the setup of secure collaboration with proper project access.",[1285],"2025-01-14",{"slug":1342,"externalUrl":-1},"getting-started-with-gitlab-how-to-manage-users",{"content":1344,"config":1351},{"title":1345,"heroImage":1346,"category":766,"description":1347,"authors":1348,"date":1350},"Deploy a NodeJS Express app with GitLab's Cloud Run integration","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097892/Blog/Hero%20Images/Blog/Hero%20Images/speedlights_speedlights.png_1750097891963.png","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.",[1349,1218],"Sarah Matthies","2025-01-13",{"slug":1352,"externalUrl":-1},"deploy-a-nodejs-express-app-with-gitlabs-cloud-run-integration",{"content":1354,"config":1361},{"title":1355,"heroImage":1356,"category":538,"description":1357,"authors":1358,"date":1360},"Ultimate guide to CI/CD: Fundamentals to advanced implementation","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749660151/Blog/Hero%20Images/blog-image-template-1800x945__26_.png","Learn how to modernize continuous integration/continuous deployment, including automating the development, delivery, and security of pipelines.",[1359],"Sandra Gittlen","2025-01-06",{"slug":1362,"externalUrl":-1},"ultimate-guide-to-ci-cd-fundamentals-to-advanced-implementation",{"content":1364,"config":1370},{"title":1365,"heroImage":1366,"category":696,"description":1367,"authors":1368,"date":1369},"Modernizing a simple C++ application to Java with GitLab Duo","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659507/Blog/Hero%20Images/AdobeStock_623844718.jpg","Learn how to refactor code from memory unsafe languages to memory safe languages with the help of GitLab's AI capabilities, saving time and effort on application modernization.",[811],"2024-12-11",{"slug":1371,"externalUrl":-1},"modernizing-a-simple-c-application-to-java-with-gitlab-duo",{"content":1373,"config":1379},{"title":1374,"heroImage":884,"category":766,"description":1375,"authors":1376,"date":1378},"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.",[1377,1218],"Christian Nnachi","2024-12-10",{"slug":1380,"externalUrl":-1},"how-to-deploy-a-php-app-using-gitlabs-cloud-run-integration",{"content":1382,"config":1389},{"title":1383,"heroImage":1384,"category":538,"description":1385,"authors":1386,"date":1388},"ICYMI: Key AI and security insights from our developer community","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098331/Blog/Hero%20Images/Blog/Hero%20Images/blog-image-template-1800x945%20%286%29_55zMmdJIUpfh5qaPW9dtVA_1750098331584.png","Our latest LinkedIn Live highlights the hottest trends in AI, security, DevSecOps, and more. Also get a taste of the GitLab community contributions that are making an impact.",[1387],"Fatima Sarah Khalid","2024-12-05",{"slug":1390,"externalUrl":-1},"icymi-key-ai-and-security-insights-from-our-developer-community",{"content":1392,"config":1396},{"title":1393,"heroImage":849,"category":696,"description":1394,"authors":1395,"date":1388},"Streamline DevSecOps engineering workflows with GitLab Duo","Learn all the ways GitLab Duo's AI capabilities can improve the efficiency of development workflows. Includes in-depth tutorials and demos.",[1285],{"slug":1397,"externalUrl":-1},"streamline-devsecops-engineering-workflows-with-gitlab-duo",{"content":1399,"config":1407},{"title":1400,"heroImage":1401,"category":696,"description":1402,"authors":1403,"date":1406},"How to leverage GitLab Duo for enhanced security reporting","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098339/Blog/Hero%20Images/Blog/Hero%20Images/blog-image-template-1800x945%20%285%29_1iy516k40hwBDChKcUJ2zb_1750098339103.png","Learn how GitLab Duo enables efficient, real-world security reporting for development, operations, and security teams.",[1404,1405],"Valentine Mairet","David O'Regan","2024-12-03",{"slug":1408,"externalUrl":-1},"how-to-leverage-gitlab-duo-for-enhanced-security-reporting",{"content":1410,"config":1415},{"title":1411,"heroImage":1412,"category":696,"description":1413,"authors":1414,"date":1406},"Quickly resolve broken CI/CD pipelines with AI","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097355/Blog/Hero%20Images/Blog/Hero%20Images/blog-image-template-1800x945%20%2811%29_78Dav6FR9EGjhebHWuBVan_1750097355230.png","When your CI/CD pipeline fails, it leads to delays, decreased productivity, and stress. AI-powered Root Cause Analysis makes problem-solving faster and smarter.",[699],{"slug":1416,"externalUrl":-1},"quickly-resolve-broken-ci-cd-pipelines-with-ai",{"content":1418,"config":1425},{"title":1419,"heroImage":1420,"category":696,"description":1421,"authors":1422,"date":1424},"Automating with GitLab Duo, Part 1: Generating tests","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097480/Blog/Hero%20Images/Blog/Hero%20Images/blog-image-template-1800x945%20%284%29_3LZkiDjHLjhqEkvOvBsVKp_1750097480784.png","Learn how we used the AI-driven DevSecOps platform to generate automated tests and improve our development speed and quality.",[1423],"Byron Boots","2024-12-02",{"slug":1426,"externalUrl":-1},"automating-with-gitlab-duo-part-1-generating-tests",{"content":1428,"config":1434},{"title":1429,"heroImage":1430,"category":696,"description":1431,"authors":1432,"date":1433},"Chat about your merge request with GitLab Duo","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749675536/Blog/Hero%20Images/blog-image-template-1800x945__2_.png","Learn how to use AI-powered Chat to quickly understand complex merge requests by asking about implementation choices, potential risks, and architectural decisions.",[996],"2024-11-22",{"slug":1435,"externalUrl":-1},"chat-about-your-merge-request-with-gitlab-duo",{"content":1437,"config":1444},{"title":1438,"heroImage":1439,"category":778,"description":1440,"authors":1441,"date":1443},"Data-driven DevSecOps: Exploring GitLab Insights Dashboards","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097210/Blog/Hero%20Images/Blog/Hero%20Images/blog-image-template-1800x945%20%2811%29_78Dav6FR9EGjhebHWuBVan_1750097210214.png","Learn how to leverage GitLab Insights Dashboards to visualize key metrics, track project progress, and boost team productivity with customizable, data-driven views.",[1442],"Ricardo Amarilla Villalba","2024-11-20",{"slug":1445,"externalUrl":-1},"data-driven-devsecops-exploring-gitlab-insights-dashboards",{"content":1447,"config":1452},{"title":1448,"heroImage":1449,"category":675,"description":1450,"authors":1451,"date":1443},"Enable secure sudo access for GitLab Remote Development workspaces","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749675033/Blog/Hero%20Images/blog-image-template-1800x945.png","Learn how to allow support for sudo commands using Sysbox, Kata Containers, and user namespaces in this easy-to-follow tutorial.",[1153],{"slug":1453,"externalUrl":-1},"enable-secure-sudo-access-for-gitlab-remote-development-workspaces",{"content":1455,"config":1461},{"title":1456,"heroImage":1457,"category":766,"description":1458,"authors":1459,"date":1460},"Provision group runners with Google Cloud Platform and GitLab CI","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098300/Blog/Hero%20Images/Blog/Hero%20Images/AdobeStock_623844718_4E5Fx1Q0DHikigzCsQWhOG_1750098300048.jpg","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.",[1349,1218],"2024-11-19",{"slug":1462,"externalUrl":-1},"provision-group-runners-with-google-cloud-platform-and-gitlab-ci",{"content":1464,"config":1471},{"title":1465,"heroImage":1466,"category":766,"description":1467,"authors":1468,"date":1470},"Tutorial: How to set up your first GitLab 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","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.",[1469,1218],"Sophia Manicor","2024-11-12",{"slug":1472,"externalUrl":-1},"tutorial-how-to-set-up-your-first-gitlab-ci-cd-component",{"content":1474,"config":1480},{"title":1475,"heroImage":1476,"category":766,"description":1477,"authors":1478,"date":1479},"Fast Python Flask server deployment with GitLab + Google Cloud","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098427/Blog/Hero%20Images/Blog/Hero%20Images/blog-image-template-1800x945_fJKX41PJHKCfSOWw4xQxm_1750098427691.png","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.",[1218,1219],"2024-11-04",{"slug":1481,"externalUrl":-1},"fast-python-flask-server-deployment-with-gitlab-google-cloud",{"content":1483,"config":1489},{"title":1484,"heroImage":1485,"category":696,"description":1486,"authors":1487,"date":1488},"Quick vulnerability remediation with GitLab Advanced SAST + Duo AI ","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098458/Blog/Hero%20Images/Blog/Hero%20Images/blog-image-template-1800x945_24mPf16vAPHORs3d9y62q_1750098458538.png","Shorten your mean time to remediation by pairing Advanced SAST and artificial intelligence. This detailed demo shows you how.",[758],"2024-10-22",{"slug":1490,"externalUrl":-1},"quick-vulnerability-remediation-with-gitlab-advanced-sast-duo-ai",{"content":1492,"config":1498},{"title":1493,"heroImage":1494,"category":696,"description":1495,"authors":1496,"date":1497},"Use GitLab Duo to build and deploy a simple Quarkus-native project","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749666069/Blog/Hero%20Images/AdobeStock_639935439.jpg","This tutorial shows how a Java application is compiled to machine code and deployed to a Kubernetes cluster using a CI/CD pipeline. See how AI makes the process faster and more efficient.",[811],"2024-10-17",{"slug":1499,"externalUrl":-1},"use-gitlab-duo-to-build-and-deploy-a-simple-quarkus-native-project",{"content":1501,"config":1508},{"title":1502,"heroImage":1503,"category":778,"description":1504,"authors":1505,"date":1507},"Tutorial: Integrate GitLab Merge Request approvals with external systems","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749676011/Blog/Hero%20Images/blog-image-template-1800x945.svg","Learn how to improve GitLab extensibility and integration with external applications in this demo. The result: a seamless integration that provides more control over merge requests.",[1506],"Samer Akkoub","2024-10-08",{"slug":1509,"externalUrl":-1},"tutorial-integrate-gitlab-merge-request-approvals-with-external-systems",{"content":1511,"config":1518},{"title":1512,"heroImage":1513,"category":675,"description":1514,"authors":1515,"date":1517},"Why GitLab is deprecating compliance pipelines in favor of security policies","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098128/Blog/Hero%20Images/Blog/Hero%20Images/security-checklist_security-checklist.png_1750098128272.png","Learn about our decision to deprecate compliance pipelines and how to migrate to pipeline execution policies. The process is detailed in this tutorial.",[1516],"Ian Khor","2024-10-01",{"slug":1519,"externalUrl":-1},"why-gitlab-is-deprecating-compliance-pipelines-in-favor-of-security-policies",{"content":1521,"config":1528},{"title":1522,"heroImage":1523,"category":766,"description":1524,"authors":1525,"date":1527},"Using child pipelines to continuously deploy to five environments","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097012/Blog/Hero%20Images/Blog/Hero%20Images/AdobeStock_397632156_3Ldy1urjMStQCl4qnOBvE0_1750097011626.jpg","Learn how to manage continuous deployment to multiple environments, including temporary, on-the-fly sandboxes, with a minimalist GitLab workflow.",[1526],"Olivier Dupré","2024-09-26",{"slug":1529,"externalUrl":-1},"using-child-pipelines-to-continuously-deploy-to-five-environments",{"content":1531,"config":1539},{"title":1532,"heroImage":1533,"category":778,"description":1534,"authors":1535,"date":1538},"GitLab Pages features review apps and multiple website deployment","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749674550/Blog/Hero%20Images/blog-image-template-1800x945__1_.png","GitLab Pages helps organizations reap the rewards of knowledge management, including better collaboration and accessibility. Learn how to use a new feature, Parallel Deployments.",[1536,1537],"Matthew Macfarlane","Janis Altherr","2024-09-23",{"slug":1540,"externalUrl":-1},"gitlab-pages-features-review-apps-and-multiple-website-deployment",{"content":1542,"config":1549},{"title":1543,"heroImage":1356,"category":696,"description":1544,"authors":1545,"date":1548},"Build an ML app pipeline with GitLab Model Registry using MLflow","Learn how to manage your ML apps entirely through GitLab with this tutorial. Also discover the role machine learning operations, or MLOps, plays in automating the DevSecOps lifecycle.",[1546,1547],"Gufran Yeşilyurt, OBSS","Péter Bozsó","2024-09-17",{"slug":1550,"externalUrl":-1},"build-an-ml-app-pipeline-with-gitlab-model-registry-using-mlflow",{"content":1552,"config":1560},{"title":1553,"heroImage":1554,"category":766,"description":1555,"authors":1556,"date":1559},"Building GitLab with GitLab: A multi-region service to deliver AI features","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","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.",[1557,1558],"Chance Feick","Sam Wiskow","2024-09-12",{"slug":1561,"externalUrl":-1},"building-gitlab-with-gitlab-a-multi-region-service-to-deliver-ai-features",{"content":1563,"config":1570},{"title":1564,"heroImage":1565,"category":675,"description":1566,"authors":1567,"date":1569},"Annotate container images with build provenance using Cosign in GitLab CI/CD","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098395/Blog/Hero%20Images/Blog/Hero%20Images/blog-image-template-1800x945%20%2823%29_2w6waL76KROjhJHM2vXet6_1750098395162.png","Use GitLab pipelines to automate building, signing, and annotating Docker images. This tutorial shares code to show you how. Try it out in your own organization.",[1568,842],"João Pereira","2024-09-04",{"slug":1571,"externalUrl":-1},"annotate-container-images-with-build-provenance-using-cosign-in-gitlab-ci-cd",{"content":1573,"config":1579},{"title":1574,"heroImage":1575,"category":696,"description":1576,"authors":1577,"date":1578},"5 videos and interactive tours to learn GitLab Duo fast","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659856/Blog/Hero%20Images/blog-hero-banner-1-0178-820x470-fy25.png","Get to know GitLab Duo's capabilities and benefits, and use these visual learning tools to understand how to incorporate AI throughout your software development lifecycle.\n",[811],"2024-08-28",{"slug":1580,"externalUrl":-1},"5-videos-and-interactive-tours-to-learn-gitlab-duo-fast",{"content":1582,"config":1588},{"title":1583,"heroImage":1584,"category":778,"description":1585,"authors":1586,"date":1578},"Tutorial: Migrate from Google Cloud Source Repositories to GitLab","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097739/Blog/Hero%20Images/Blog/Hero%20Images/blog-image-template-1800x945%20%2813%29_1zdtbfPDHZVe6JC2AbdHmb_1750097738370.png","Google Cloud is deprecating Cloud Source Repositories. Learn how to migrate a CSR source code repository to GitLab, along with best practices.",[1587,792],"Tsukasa Komatsubara",{"slug":1589,"externalUrl":-1},"tutorial-migrate-from-google-cloud-source-repositories-to-gitlab",{"content":1591,"config":1598},{"title":1592,"heroImage":1593,"category":675,"description":1594,"authors":1595,"date":1597},"How to choose the right security scanning approach","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097969/Blog/Hero%20Images/Blog/Hero%20Images/AdobeStock_282096522_securitycompliance.jpeg_1750097968823.jpg","GitLab offers multiple scanning methods for CI/CD pipelines, including compliance frameworks and scan and pipeline execution policies. Learn the basics, configurations, and advantages/disadvantages.",[1330,1596],"Mathias Ewald","2024-08-26",{"slug":1599,"externalUrl":-1},"how-to-choose-the-right-security-scanning-approach",{"content":1601,"config":1606},{"title":1602,"heroImage":893,"category":696,"description":1603,"authors":1604,"date":1597},"Refactor code into modern languages with AI-powered GitLab Duo ","This detailed tutorial helps developers use AI to modernize code by switching to a new programming language and gain knowledge about new features in the same language.",[1605],"Michael Friedrich",{"slug":1607,"externalUrl":-1},"refactor-code-into-modern-languages-with-ai-powered-gitlab-duo",{"content":1609,"config":1615},{"title":1610,"heroImage":1611,"category":778,"description":1612,"authors":1613,"date":1597},"Ultimate guide to migrating from AWS CodeCommit to GitLab","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097810/Blog/Hero%20Images/Blog/Hero%20Images/blog-image-template-1800x945%20%2828%29_4mi0l4wzUa5VI4wtf8gInx_1750097810027.png","Learn how to migrate from AWS Services to GitLab and seamlessly integrate with the DevSecOps platform in this comprehensive tutorial.",[1587,782,1506,1614],"Bart Zhang",{"slug":1616,"externalUrl":-1},"ultimate-guide-to-migrating-from-aws-codecommit-to-gitlab",{"content":1618,"config":1624},{"title":1619,"heroImage":1620,"category":766,"description":1621,"authors":1622,"date":1623},"How to stream logs through the GitLab Dashboard for Kubernetes","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749662245/Blog/Hero%20Images/blog-image-template-1800x945__16_.png","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.",[822],"2024-08-19",{"slug":1625,"externalUrl":-1},"how-to-stream-logs-through-the-gitlab-dashboard-for-kubernetes",{"content":1627,"config":1633},{"title":1628,"heroImage":1629,"category":696,"description":1630,"authors":1631,"date":1632},"Mastering GitLab admin tasks with GitLab Duo Chat","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749666405/Blog/Hero%20Images/GitLab_Duo_Blog_Hero_1800x945_r2_B__1_.png","Learn how to use Chat to streamline administrative tasks on self-managed instances, improving efficiency and problem-solving capabilities.",[1405],"2024-08-09",{"slug":1634,"externalUrl":-1},"mastering-gitlab-admin-tasks-with-gitlab-duo-chat",{"content":1636,"config":1642},{"title":1637,"heroImage":1638,"category":675,"description":1639,"authors":1640,"date":1641},"How GitLab supports the FedRAMP authorization journey","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659684/Blog/Hero%20Images/AdobeStock_479904468__1_.jpg","This comprehensive guide dives into the FedRAMP certification process, explaining how GitLab offers guidance and best practices for configuration and compliance.",[1377],"2024-08-07",{"slug":1643,"externalUrl":-1},"how-gitlab-supports-the-fedramp-authorization-journey",{"content":1645,"config":1651},{"title":1646,"heroImage":1356,"category":766,"description":1647,"authors":1648,"date":1650},"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.",[1649],"Sam Morris","2024-07-30",{"slug":1652,"externalUrl":-1},"building-a-gitlab-ci-cd-pipeline-for-a-monorepo-the-easy-way",{"content":1654,"config":1660},{"title":1655,"heroImage":1656,"category":675,"description":1657,"authors":1658,"date":1659},"Get to know the security and governance updates in GitLab 17, 17.1","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098858/Blog/Hero%20Images/Blog/Hero%20Images/AdobeStock_282096522_securitycompliance.jpeg_1750098857843.jpg","Dive deep into the new enhancements that can strengthen your organization's security posture, including how-to videos for SAST, DAST, API security, container registry, and more.",[758],"2024-07-17",{"slug":1661,"externalUrl":-1},"get-to-know-the-security-and-governance-updates-in-gitlab-17-17-1",{"content":1663,"config":1670},{"title":1664,"heroImage":1665,"category":696,"description":1666,"authors":1667,"date":1669},"Developing GitLab Duo: Use AI to remediate security vulnerabilities ","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098106/Blog/Hero%20Images/Blog/Hero%20Images/blog-hero-banner-1-0178-820x470-fy25_7JlF3WlEkswGQbcTe8DOTB_1750098106040.png","This tutorial shows how GitLab Duo Vulnerability Explanation and GitLab Duo Vulnerability Resolution, along with our other AI-powered features, can help to address vulnerabilities quickly.",[1605,1668],"Alana Bellucci","2024-07-15",{"slug":1671,"externalUrl":-1},"developing-gitlab-duo-use-ai-to-remediate-security-vulnerabilities",{"content":1673,"config":1678},{"title":1674,"heroImage":1638,"category":538,"description":1675,"authors":1676,"date":1677},"Develop C++ unit testing with Catch2, JUnit, and GitLab CI","Learn how to set up, write, and automate C++ unit tests using Catch2 with GitLab CI/CD. See examples from a working air quality app project and AI-powered help from GitLab Duo.",[1387],"2024-07-02",{"slug":1679,"externalUrl":-1},"develop-c-unit-testing-with-catch2-junit-and-gitlab-ci",{"content":1681,"config":1689},{"title":1682,"heroImage":1683,"category":675,"description":1684,"authors":1685,"date":1688},"Prevent secret leaks in source code with GitLab Secret Push Protection","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097761/Blog/Hero%20Images/Blog/Hero%20Images/blog-image-template-1800x945%20%286%29_6vL96ttKF8zJLLqfPpvFs_1750097761137.png","Learn how Secret Push Protection, now generally available, adds to a defense-in-depth detection strategy and decreases the resources needed to remediate secret leaks.",[1686,1687],"Amar Patel","Sara Meadzinger","2024-06-24",{"slug":1690,"externalUrl":-1},"prevent-secret-leaks-in-source-code-with-gitlab-secret-push-protection",{"content":1692,"config":1699},{"title":1693,"heroImage":1694,"category":766,"description":1695,"authors":1696,"date":1698},"Kubernetes overview: Operate cluster data on the frontend","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","GitLab offers a built-in solution for monitoring your Kubernetes cluster health. Learn more about the technical design and functionality with this detailed guide.",[1697],"Anna Vovchenko","2024-06-20",{"slug":1700,"externalUrl":-1},"kubernetes-overview-operate-cluster-data-on-the-frontend",{"content":1702,"config":1708},{"title":1703,"heroImage":1704,"category":696,"description":1705,"authors":1706,"date":1707},"Top tips for efficient AI-powered Code Suggestions with GitLab Duo","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749669095/Blog/Hero%20Images/gitlabduo.png","Explore best practices  for using Code Suggestions and how to combine it with our other AI features to greatly improve the developer experience (includes real-world exercises).",[1605],"2024-06-11",{"slug":1709,"externalUrl":-1},"top-tips-for-efficient-ai-powered-code-suggestions-with-gitlab-duo",{"content":1711,"config":1718},{"title":1712,"heroImage":1713,"category":538,"description":1714,"authors":1715,"date":1717},"Combine GitLab webhooks and Twilio for SMS alerts on DevSecOps platform","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099013/Blog/Hero%20Images/Blog/Hero%20Images/blog-image-template-1800x945%20%2814%29_6VTUA8mUhOZNDaRVNPeKwl_1750099012960.png","Configure GitLab webhooks with SMS alerts to instantly get feedback on new and existing issues within a project and enable teams to react quickly to project- and group-level changes.",[1716],"Ted Gieschen","2024-06-10",{"slug":1719,"externalUrl":-1},"combine-gitlab-webhooks-and-twilio-for-sms-alerts-on-devsecops-platform",{"content":1721,"config":1728},{"title":1722,"heroImage":1723,"category":696,"description":1724,"authors":1725,"date":1727},"Developing GitLab Duo: Blending AI and Root Cause Analysis to fix CI/CD pipelines","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097321/Blog/Hero%20Images/Blog/Hero%20Images/blog-hero-banner-1-0178-820x470-fy25_7JlF3WlEkswGQbcTe8DOTB_1750097321081.png","Discover how we've infused Root Cause Analysis with AI to help remedy broken CI/CD pipelines, including example scenarios and take-away exercises.",[1726,1605],"Rutvik Shah","2024-06-06",{"slug":1729,"externalUrl":-1},"developing-gitlab-duo-blending-ai-and-root-cause-analysis-to-fix-ci-cd",{"content":1731,"config":1738},{"title":1732,"heroImage":1733,"category":1180,"description":1734,"authors":1735,"date":1737},"A beginner's guide to the Git reftable format","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749664595/Blog/Hero%20Images/blog-image-template-1800x945__9_.png","In Git 2.45.0, GitLab upstreamed the reftable backend to Git, which completely changes how references are stored. Get an in-depth look at the inner workings of this new format.",[1736],"Patrick Steinhardt","2024-05-30",{"slug":1739,"externalUrl":-1},"a-beginners-guide-to-the-git-reftable-format",{"content":1741,"config":1746},{"title":1742,"heroImage":1743,"category":696,"description":1744,"authors":1745,"date":1737},"Developing GitLab Duo: Secure and thoroughly test AI-generated code","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097183/Blog/Hero%20Images/Blog/Hero%20Images/blog-hero-banner-1-0178-820x470-fy25_7JlF3WlEkswGQbcTe8DOTB_1750097183481.png","Learn step-by-step how to enhance AI-generated code reliability and security using GitLab Duo and GitLab Pages (includes code samples and prompts).",[1405],{"slug":1747,"externalUrl":-1},"how-gitlab-duo-helps-secure-and-thoroughly-test-ai-generated-code",{"content":1749,"config":1755},{"title":1750,"heroImage":1751,"category":696,"description":1752,"authors":1753,"date":1754},"GitLab Duo Chat 101: Get more done on GitLab with our AI assistant","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099126/Blog/Hero%20Images/Blog/Hero%20Images/GitLab_Duo_Blog_Hero_1800x945_r2_B%20%281%29_6a2UB7TOQk3JKxyb5yqYtc_1750099126039.png","In this first article in our series learn how Chat can improve developer productivity – for example, by summarizing issues – and how to improve prompts to get better answers faster.",[1285],"2024-05-29",{"slug":1756,"externalUrl":-1},"gitlab-duo-chat-101-get-more-done-on-gitlab-with-our-ai-assistant",{"content":1758,"config":1763},{"title":1759,"heroImage":940,"category":766,"description":1760,"authors":1761,"date":1762},"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.",[811],"2024-05-06",{"slug":1764,"externalUrl":-1},"tutorial-install-vs-code-on-a-cloud-provider-vm-and-set-up-remote-access",{"content":1766,"config":1772},{"title":1767,"heroImage":1768,"category":675,"description":1769,"authors":1770,"date":1771},"Migration guide: GitHub Advanced Security to GitLab Ultimate","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749666187/Blog/Hero%20Images/blog-image-template-1800x945__6_.png","Understand the similarities and differences between GitLab Ultimate and GitHub Advanced Security. Then follow this in-depth tutorial to make the move to the GitLab DevSecOps platform.",[758],"2024-05-01",{"slug":1773,"externalUrl":-1},"migration-guide-github-advanced-security-to-gitlab-ultimate",{"content":1775,"config":1781},{"title":1776,"heroImage":1777,"category":538,"description":1778,"authors":1779,"date":1780},"Top 10 GitLab workflow hacks you need to know","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099361/Blog/Hero%20Images/Blog/Hero%20Images/lightvisibility_lightvisibility.png_1750099361252.png","A GitLab product manager shares her favorite tricks to navigate quickly and efficiently around the GitLab DevSecOps Platform and to boost team collaboration.",[1071],"2024-04-09",{"slug":1782,"externalUrl":-1},"top-10-gitlab-workflow-hacks-you-need-to-know",{"content":1784,"config":1790},{"title":1785,"heroImage":1786,"category":675,"description":1787,"authors":1788,"date":1789},"Integrate external security scanners into your DevSecOps workflow","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750098768/Blog/Hero%20Images/Blog/Hero%20Images/blog-image-template-1800x945%20%282%29_1khno1AUtxuL6zzmEmjK7v_1750098768560.png","Learn how to bring Snyk scan results into the merge request widget by parsing JSON artifacts and leveraging the SARIF file format.",[1649],"2024-04-08",{"slug":1791,"externalUrl":-1},"integrate-external-security-scanners-into-your-devsecops-workflow",{"content":1793,"config":1799},{"title":1794,"heroImage":1795,"category":696,"description":1796,"authors":1797,"date":1798},"10 best practices for using AI-powered GitLab Duo Chat","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097639/Blog/Hero%20Images/Blog/Hero%20Images/blog-image-template-1800x945%20%281%29_77JeTV9gAmbXM0224acirV_1750097638765.png","Explore tips and tricks for integrating GitLab Duo Chat into your AI-powered DevSecOps workflows. Plus, expert advice on how to refine chat prompts for the best results.",[1605],"2024-04-02",{"slug":1800,"externalUrl":-1},"10-best-practices-for-using-ai-powered-gitlab-duo-chat",{"content":1802,"config":1808},{"title":1803,"heroImage":940,"category":675,"description":1804,"authors":1805,"date":1807},"Simplify your cloud account management for Kubernetes access","In this tutorial, learn how to use the GitLab agent for Kubernetes and its user impersonation features for secure cluster access.\n\n",[1806],"Viktor Nagy","2024-03-19",{"slug":1809,"externalUrl":-1},"simplify-your-cloud-account-management-for-kubernetes-access",{"content":1811,"config":1817},{"title":1812,"heroImage":1813,"category":675,"description":1814,"authors":1815,"date":1816},"The ultimate guide to least privilege access with GitLab","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099438/Blog/Hero%20Images/Blog/Hero%20Images/built-in-security_built-in-security.jpeg_1750099438377.jpg","This tutorial demonstrates how to achieve least privilege access using custom roles, security policies, compliance pipelines, branch protections, and more.",[758],"2024-03-06",{"slug":1818,"externalUrl":-1},"the-ultimate-guide-to-least-privilege-access-with-gitlab",{"content":1820,"config":1826},{"title":1821,"heroImage":1822,"category":766,"description":1823,"authors":1824,"date":1825},"Refactoring a CI/CD template to a CI/CD component","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749665989/Blog/Hero%20Images/AdobeStock_618473457.jpg","CI/CD components are the next generation of CI/CD templates, enhancing pipeline creation and maintenance. Learn how to transition from templates to components.",[699],"2024-03-04",{"slug":1827,"externalUrl":-1},"refactoring-a-ci-cd-template-to-a-ci-cd-component",{"content":1829,"config":1836},{"title":1830,"heroImage":1831,"category":675,"description":1832,"authors":1833,"date":1835},"How-to: Detecting secrets in video content ","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099421/Blog/Hero%20Images/Blog/Hero%20Images/security-checklist_security-checklist.png_1750099421443.png","GitLab’s Security team identifies and mitigates security risks in video content by searching for API keys or other sensitive tokens. Here's how we do it (with an assist from AI) and how you can, too.",[1834],"Dennis Appelt","2024-02-29",{"slug":1837,"externalUrl":-1},"how-to-detecting-secrets-in-video",{"content":1839,"config":1845},{"title":1840,"heroImage":1841,"category":675,"description":1842,"authors":1843,"date":1844},"How to integrate custom security scanners into GitLab","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750097082/Blog/Hero%20Images/Blog/Hero%20Images/securitycheck_securitycheck.png_1750097081856.png","Learn how to extend the DevSecOps platform by adding custom security scanners to your workflows (includes an easy-to-follow tutorial).",[758],"2024-02-27",{"slug":1846,"externalUrl":-1},"how-to-integrate-custom-security-scanners-into-gitlab",{"content":1848,"config":1854},{"title":1849,"heroImage":1850,"category":766,"description":1851,"authors":1852,"date":1853},"How to translate Bamboo agent capabilities to GitLab Runner tags  ","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749663019/Blog/Hero%20Images/AdobeStock_519147119.jpg","This tutorial demonstrates how to use tags to organize GitLab Runners when building complex CI/CD pipelines.",[1285],"2024-02-22",{"slug":1855,"externalUrl":-1},"how-to-translate-bamboo-agent-capabilities-to-gitlab-runner-tags",{"content":1857,"config":1864},{"title":1858,"heroImage":1859,"category":766,"description":1860,"authors":1861,"date":1863},"Compose Readers and Writers in Golang applications","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099464/Blog/Hero%20Images/Blog/Hero%20Images/AdobeStock_639935439_3oqldo5Yt5wPonEJYZOLTM_1750099464124.jpg","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.",[1862],"Igor Drozdov","2024-02-15",{"slug":1865,"externalUrl":-1},"compose-readers-and-writers-in-golang-applications",{"content":1867,"config":1873},{"title":1868,"heroImage":1869,"category":538,"description":1870,"authors":1871,"date":1872},"CI/CD automation: Maximize 'deploy freeze' impact across GitLab groups","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749667913/Blog/Hero%20Images/clocks.jpg","Learn the benefits of managing deploy freezes at the group level and follow step-by-step guidance on implementation.",[1377],"2024-02-08",{"slug":1874,"externalUrl":-1},"ci-cd-automation-maximize-deploy-freeze-impact-across-gitlab-groups",{"content":1876,"config":1883},{"title":1877,"heroImage":1878,"category":766,"description":1879,"authors":1880,"date":1882},"Inside the improved CI logs management experience for multi-line commands","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099499/Blog/Hero%20Images/Blog/Hero%20Images/AdobeStock_639935439_3oqldo5Yt5wPonEJYZOLTM_1750099498739.jpg","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",[1881],"Romuald Atchadé","2024-01-25",{"slug":1884,"externalUrl":-1},"inside-the-improved-ci-logs-management-experience-for-multi-line-commands",{"content":1886,"config":1892},{"title":1887,"heroImage":1888,"category":696,"description":1889,"authors":1890,"date":1891},"Write Terraform plans faster with GitLab Duo Code Suggestions","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749679194/Blog/Hero%20Images/duo-blog-post.png","Follow this tutorial to learn how to use AI-powered code creation to manage your infrastructure with Terraform.",[1285],"2024-01-24",{"slug":1893,"externalUrl":-1},"write-terraform-plans-faster-with-gitlab-duo-code-suggestions",{"content":1895,"config":1902},{"title":1896,"heroImage":1897,"category":1180,"description":1898,"authors":1899,"date":1901},"Pair GitLab and The Good Docs Project template to improve release notes","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099541/Blog/Hero%20Images/Blog/Hero%20Images/AdobeStock_432673748_5xWPNsktdz2QChWhl16jGq_1750099540656.jpg","Creating compelling, detailed, human-readable notes for software releases is important. Using GitLab and this template from The Good Docs Project makes it easier.",[1900],"Aaron Peters, Member, Good Docs Project","2024-01-23",{"slug":1903,"externalUrl":-1},"pair-gitlab-and-the-good-docs-project-template-to-improve-release-notes",{"content":1905,"config":1911},{"title":1906,"heroImage":1907,"category":538,"description":1908,"authors":1909,"date":1910},"Top 10 GitLab technical blogs of 2023","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749663000/Blog/Hero%20Images/tanukilifecycle.png","2023 was a big year! Catch up on expert insights into DevSecOps, AI, CI/CD, and more.",[1359],"2024-01-09",{"slug":1912,"externalUrl":-1},"top-10-gitlab-technical-blogs-of-2023",{"content":1914,"config":1920},{"title":1915,"heroImage":1916,"category":766,"description":1917,"authors":1918,"date":1919},"Introducing the GitLab CI/CD Catalog Beta","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099399/Blog/Hero%20Images/Blog/Hero%20Images/security-pipelines_4UHVIJlePT8rEzjvYkGYvi_1750099398604.jpg","Discover, reuse, and contribute CI/CD components effortlessly, enhancing collaboration and efficiency when creating pipeline configurations.",[699],"2023-12-21",{"slug":1921,"externalUrl":-1},"introducing-the-gitlab-ci-cd-catalog-beta",{"content":1923,"config":1930},{"title":1924,"heroImage":1925,"category":675,"description":1926,"authors":1927,"date":1929},"How GitLab's Red Team automates C2 testing ","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749665667/Blog/Hero%20Images/built-in-security.jpg","Learn how to apply professional development practices to Red Teams using open source command and control tools.",[1928],"Josh Feehs","2023-11-28",{"slug":1931,"externalUrl":-1},"how-gitlabs-red-team-automates-c2-testing",{"content":1933,"config":1940},{"title":1934,"heroImage":1935,"category":675,"description":1936,"authors":1937,"date":1939},"Tips to configure browser-based DAST scans","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659561/Blog/Hero%20Images/securitycheck.png","Learn how to use the browser-based analyzer with common dynamic application security testing settings, based on web application attributes, to ensure successful scans.",[1938,1219],"Julie Byrne","2023-11-14",{"slug":1941,"externalUrl":-1},"tips-to-configure-browser-based-dast-scans",{"content":1943,"config":1949},{"title":1944,"heroImage":1945,"category":696,"description":1946,"authors":1947,"date":1948},"Learning Python with a little help from AI","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749663918/Blog/Hero%20Images/aipower.jpg","Use this guided tutorial, along with GitLab Duo Code Suggestions, to learn a new programming language.",[1605],"2023-11-09",{"slug":1950,"externalUrl":-1},"learning-python-with-a-little-help-from-ai-code-suggestions",{"content":1952,"config":1957},{"title":1953,"heroImage":1907,"category":538,"description":1954,"authors":1955,"date":1956},"Jenkins to GitLab: The ultimate guide to modernizing your CI/CD environment","Learn how to migrate from Jenkins to the integrated CI/CD of the GitLab DevSecOps Platform to deliver high-quality software rapidly.",[699],"2023-11-01",{"slug":1958,"externalUrl":-1},"jenkins-gitlab-ultimate-guide-to-modernizing-cicd-environment",{"content":1960,"config":1965},{"title":1961,"heroImage":777,"category":778,"description":1962,"authors":1963,"date":1956},"Tutorial: Automate releases and release notes with GitLab","With the GitLab Changelog API, you can automate the generation of release artifacts, release notes, and a comprehensive changelog detailing all user-centric software modifications.",[1964],"Ben Ridley",{"slug":1966,"externalUrl":-1},"tutorial-automated-release-and-release-notes-with-gitlab",{"content":1968,"config":1974},{"title":1969,"heroImage":1970,"category":696,"description":1971,"authors":1972,"date":1973},"Learn advanced Rust programming with a little help from AI","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749662439/Blog/Hero%20Images/codewithheart.png","Use this guided tutorial, along with AI-powered GitLab Duo Code Suggestions, to continue learning advanced Rust programming.",[1605],"2023-10-12",{"slug":1975,"externalUrl":-1},"learn-advanced-rust-programming-with-a-little-help-from-ai-code-suggestions",{"content":1977,"config":1983},{"title":1978,"heroImage":1979,"category":696,"description":1980,"authors":1981,"date":1982},"Building GitLab with GitLab: Why there is no MLOps without DevSecOps","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659740/Blog/Hero%20Images/building-gitlab-with-gitlab-no-type.png","Follow along as data scientists adopt DevSecOps practices and enjoy the benefits of automation, repeatable workflows, standardization, and automatic provisioning of infrastructure.",[821],"2023-10-05",{"slug":1984,"externalUrl":-1},"there-is-no-mlops-without-devsecops",{"content":1986,"config":1993},{"title":1987,"heroImage":1988,"category":766,"description":1989,"authors":1990,"date":1992},"How to export vulnerability reports to HTML/PDF and Jira","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749662877/Blog/Hero%20Images/security-cover-new.png","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.",[1991],"Siddharth Mathur","2023-09-14",{"slug":1994,"externalUrl":-1},"exporting-vulnerability-reports-to-html-pdf-jira",{"content":1996,"config":2002},{"title":1997,"heroImage":1998,"category":675,"description":1999,"authors":2000,"date":1992},"The ultimate guide to enabling SAML and SSO on GitLab.com","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749666495/Blog/Hero%20Images/cover-1800x945.png","Learn how to make full use of SAML and SSO security features on the GitLab DevSecOps platform.",[2001],"Bradley Lee",{"slug":2003,"externalUrl":-1},"the-ultimate-guide-to-enabling-saml",{"content":2005,"config":2011},{"title":2006,"heroImage":2007,"category":766,"description":2008,"authors":2009,"date":2010},"How to host VueJS apps using GitLab Pages","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749683489/Blog/Hero%20Images/hosting.png","Follow this tutorial, including detailed configuration guidance, to quickly get your application up and running for free.",[1469,1218],"2023-09-13",{"slug":2012,"externalUrl":-1},"hosting-vuejs-apps-using-gitlab-pages",{"content":2014,"config":2021},{"title":2015,"heroImage":2016,"category":766,"description":2017,"authors":2018,"date":2020},"How to adopt a cascading merge request strategy with GitLab Flow","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749679851/Blog/Hero%20Images/cascade.jpg","This tutorial explains how to consolidate updates in a single branch and propagate them to other branches using ucascade bot.",[2019],"Madou Coulibaly","2023-08-31",{"slug":2022,"externalUrl":-1},"cascading-merge-requests-with-gitlab-flow",{"content":2024,"config":2028},{"title":2025,"heroImage":1988,"category":696,"description":2026,"authors":2027,"date":2020},"Remediating vulnerabilities with GitLab's security insights and AI","Learn how to leverage vulnerability insights and the Explain this Vulnerability AI feature to not only resolve a vulnerability, but also understand it.",[758],{"slug":2029,"externalUrl":-1},"remediating-vulnerabilities-with-insights-and-ai",{"content":2031,"config":2037},{"title":2032,"heroImage":2033,"category":696,"description":2034,"authors":2035,"date":2036},"Explore the Dragon Realm: Build a C++ adventure game with a little help from AI","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749663344/Blog/Hero%20Images/compassinfield.jpg","How to use GitLab Duo Code Suggestions to create a text-based adventure game, including magical locations to visit and items to procure, using C++.",[1387],"2023-08-24",{"slug":2038,"externalUrl":-1},"building-a-text-adventure-using-cplusplus-and-code-suggestions",{"content":2040,"config":2046},{"title":2041,"heroImage":2042,"category":766,"description":2043,"authors":2044,"date":2045},"How to secure Google Cloud Run deployment with GitLab Auto DevOps","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749682898/Blog/Hero%20Images/cloud-security.png","This tutorial will help teams speed development, improve security, and harness the power of serverless technology.",[792],"2023-08-21",{"slug":2047,"externalUrl":-1},"how-to-secure-cloud-run-deployment-with-auto-devops",{"content":2049,"config":2055},{"title":2050,"heroImage":2051,"category":766,"description":2052,"authors":2053,"date":2054},"Behind the scenes of the Remote Development Beta release","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749679888/Blog/Hero%20Images/remotedevelopment.jpg","Discover the epic journey of GitLab's Remote Development team as they navigate last-minute pivots, adapt, and deliver new features for users worldwide.",[1405],"2023-08-16",{"slug":2056,"externalUrl":-1},"remote-development-beta",{"content":2058,"config":2062},{"title":2059,"heroImage":1945,"category":696,"description":1946,"authors":2060,"date":2061},"Learning Rust with a little help from AI",[1605],"2023-08-10",{"slug":2063,"externalUrl":-1},"learning-rust-with-a-little-help-from-ai-code-suggestions-getting-started",{"content":2065,"config":2071},{"title":2066,"heroImage":1925,"category":675,"description":2067,"authors":2068,"date":2070},"Use GitLab and MITRE ATT&CK Navigator to visualize adversary techniques","This tutorial helps build and deploy a customized version of MITRE's ATT&CK Navigator using GitLab CI/CD and GitLab Pages.",[2069],"Chris Moberly","2023-08-09",{"slug":2072,"externalUrl":-1},"gitlab-mitre-attack-navigator",{"content":2074,"config":2080},{"title":2075,"heroImage":940,"category":766,"description":2076,"authors":2077,"date":2079},"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.",[2078],"Raimund Hook","2023-07-31",{"slug":2081,"externalUrl":-1},"gitlab-gdk-remote-development",{"content":2083,"config":2089},{"title":2084,"heroImage":2085,"category":538,"description":2086,"authors":2087,"date":2088},"GitHub to GitLab migration the easy way","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749668776/Blog/Hero%20Images/julia-craice-faCwTallTC0-unsplash.jpg","Learn how easy it is to migrate from GitHub to GitLab using GitLab's project import functionality.",[758],"2023-07-11",{"slug":2090,"externalUrl":-1},"github-to-gitlab-migration-made-easy",{"content":2092,"config":2099},{"title":2093,"heroImage":2094,"category":766,"description":2095,"authors":2096,"date":2098},"Introducing CI/CD components and how to use them in GitLab","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749667676/Blog/Hero%20Images/buildingblocks.jpg","Learn the main benefits for using CI/CD components in your CI/CD pipelines and how to achieve them.",[2097],"Dov Hershkovitch","2023-07-10",{"slug":2100,"externalUrl":-1},"introducing-ci-components",{"content":2102,"config":2109},{"title":2103,"heroImage":2104,"category":766,"description":2105,"authors":2106,"date":2108},"How to automate the creation of GitLab Runners","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749664087/Blog/Hero%20Images/tanukicover.jpg","Follow this step-by-step guide for automating runner setup using new runner creation workflows.",[2107],"Darren Eastman","2023-07-06",{"slug":2110,"externalUrl":-1},"how-to-automate-creation-of-runners",{"content":2112,"config":2118},{"title":2113,"heroImage":2114,"category":766,"description":2115,"authors":2116,"date":2117},"Set up Flux for GitOps to deploy workloads on OpenShift","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749682825/Blog/Hero%20Images/genericworkflow.jpg","Learn how to set up a sample project, complete a bootstrap Flux installation, and authenticate your installation with a project deploy token.",[1614],"2023-07-05",{"slug":2119,"externalUrl":-1},"set-up-flux-for-gitops-on-openshift",{"content":2121,"config":2129},{"title":2122,"heroImage":2123,"category":675,"description":2124,"authors":2125,"date":2128},"How OIDC can simplify authentication of GitLab CI/CD pipelines with Google Cloud","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749669863/Blog/Hero%20Images/security-pipelines.jpg","OpenID Connect can sometimes be complex, but it's the safer and recommended way to authenticate your GitLab pipeline with Google Cloud. This tutorial shows you how.",[2126,2127],"Hiroki Suezawa","Dhruv Jain","2023-06-28",{"slug":2130,"externalUrl":-1},"introduction-of-oidc-modules-for-integration-between-google-cloud-and-gitlab-ci",{"content":2132,"config":2138},{"title":2133,"heroImage":2134,"category":766,"description":2135,"authors":2136,"date":2137},"How to create efficient DevSecOps workflows with rules for conditional CI/CD pipelines","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749669673/Blog/Hero%20Images/engineering.png","CI/CD pipelines can be simple or complex, what makes them efficient are CI rules that define when and how they run.",[1285],"2023-06-27",{"slug":2139,"externalUrl":-1},"efficient-devsecops-workflows-with-rules-for-conditional-pipelines",{"content":2141,"config":2147},{"title":2142,"heroImage":2143,"category":766,"description":2144,"authors":2145,"date":2146},"Quickstart guide for GitLab Remote Development workspaces","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749664219/Blog/Hero%20Images/2023-06-22-quickstart-workspaces-cover-image2.png","Learn how to create a workspace from your GitLab account and work directly from the remote development environment.",[699],"2023-06-26",{"slug":2148,"externalUrl":-1},"quick-start-guide-for-gitlab-workspaces",{"content":2150,"config":2157},{"title":2151,"heroImage":2152,"category":766,"description":2153,"authors":2154,"date":2156},"Tutorial: Android CI/CD with GitLab","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749669316/Blog/Hero%20Images/angela-compagnone-4Iyg6cNU7sI-unsplash.jpg","Learn how to create an automated Android CI/CD pipeline using GitLab and fastlane.",[2155],"Darby Frey","2023-06-13",{"slug":2158,"externalUrl":-1},"android-cicd-with-gitlab",{"content":2160,"config":2167},{"title":2161,"heroImage":2162,"category":766,"description":2163,"authors":2164,"date":2166},"Getting started with the new GitLab Value Streams Dashboard","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749671793/Blog/Hero%20Images/16_0-cover-image.png","Benchmark your value stream lifecycle, DORA, and vulnerabilities metrics to gain valuable insights and uncover patterns for continuous improvements.",[2165],"Haim Snir","2023-06-12",{"slug":2168,"externalUrl":-1},"getting-started-with-value-streams-dashboard",{"content":2170,"config":2176},{"title":2171,"heroImage":2172,"category":766,"description":2173,"authors":2174,"date":2175},"Tutorial: iOS CI/CD with GitLab","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749669340/Blog/Hero%20Images/john-cameron-DgRb7aAGK4k-unsplash.jpg","Learn how to create an automated CI/CD pipeline using GitLab and fastlane.",[2155],"2023-06-07",{"slug":2177,"externalUrl":-1},"ios-cicd-with-gitlab",{"content":2179,"config":2185},{"title":2180,"heroImage":2123,"category":675,"description":2181,"authors":2182,"date":2184},"The ultimate guide to securing your code on GitLab.com","This in-depth tutorial, complete with best practices, will help you secure your development environment.",[2183],"Steve Grossman","2023-05-31",{"slug":2186,"externalUrl":-1},"securing-your-code-on-gitlab",{"content":2188,"config":2195},{"title":2189,"heroImage":2190,"category":766,"description":2191,"authors":2192,"date":2194},"How to harden your self-managed GitLab instance","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749664923/Blog/Hero%20Images/security-checklist.png","Learn seven easy steps to ensure your self-managed GitLab instance is as secure as possible.",[2193],"Ayoub Fandi","2023-05-23",{"slug":2196,"externalUrl":-1},"how-to-harden-your-self-managed-gitlab-instance",{"content":2198,"config":2205},{"title":2199,"heroImage":1979,"category":766,"description":2200,"authors":2201,"date":2204},"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.",[2202,2203],"Mike Eddington","Eugene Lim","2023-05-09",{"slug":2206,"externalUrl":-1},"building-gitlab-with-gitlab-api-fuzzing-workflow",{"content":2208,"config":2214},{"title":2209,"heroImage":2210,"category":766,"description":2211,"authors":2212,"date":2213},"Define input parameters to includable CI/CD configuration files","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749679170/Blog/Hero%20Images/migration-data.jpg","This is the first milestone of the long-term roadmap of the CI/CD Components Catalog roadmap.",[699],"2023-05-08",{"slug":2215,"externalUrl":-1},"use-inputs-in-includable-files",{"content":2217,"config":2223},{"title":2218,"heroImage":2219,"category":766,"description":2220,"authors":2221,"date":2222},"How to automate a Twitter bot using GitLab CI/CD","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749661856/Blog/Hero%20Images/ci-cd-demo.jpg","This tutorial shows how to use the DevSecOps platform to create a set-and-forget Twitter bot.",[1991],"2023-03-21",{"slug":2224,"externalUrl":-1},"automating-a-twitter-bot-using-gitlab-cicd",{"content":2226,"config":2232},{"title":2227,"heroImage":2228,"category":675,"description":2229,"authors":2230,"date":2231},"How to secure memory-safe vs. manually managed languages","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749672878/Blog/Hero%20Images/securityscreen.jpg","Learn how GitLab reduces source code risk using scanning, vulnerability management, and other key features.",[758],"2023-03-14",{"slug":2233,"externalUrl":-1},"memory-safe-vs-unsafe",{"content":2235,"config":2241},{"title":2236,"heroImage":2237,"category":675,"description":2238,"authors":2239,"date":2240},"How to action security vulnerabilities in GitLab Premium","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099637/Blog/Hero%20Images/Blog/Hero%20Images/security-pipelines_security-pipelines.jpg_1750099637178.jpg","Learn step-by-step how to process detected vulnerabilities and spawn merge request approval rules from critical vulnerabilities.",[1649,1218],"2023-03-13",{"slug":2242,"externalUrl":-1},"actioning-security-vulnerabilities-in-gitlab-premium",{"content":2244,"config":2250},{"title":2245,"heroImage":2246,"category":538,"description":2247,"authors":2248,"date":2249},"Secure GitLab CI/CD workflows using OIDC JWT on a DevSecOps platform","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749667094/Blog/Hero%20Images/container-security.jpg","Learn a new method to authenticate using JWT to increase the security of CI/CD workflows.",[2097],"2023-02-28",{"slug":2251,"externalUrl":-1},"oidc",{"content":2253,"config":2260},{"title":2254,"heroImage":2255,"category":766,"description":2256,"authors":2257,"date":2259},"Total Blocking Time - The metric to know for faster website performance","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749682637/Blog/Hero%20Images/tbt_cover_image.jpg","Learn how to identify and fix some root causes for high Total Blocking Time.",[2258],"Jacques Erasmus","2023-02-14",{"slug":2261,"externalUrl":-1},"understanding-and-improving-total-blocking-time",{"content":2263,"config":2268},{"title":2264,"heroImage":2210,"category":766,"description":2265,"authors":2266,"date":2267},"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.",[699],"2023-02-13",{"slug":2269,"externalUrl":-1},"gitlab-importers",{"content":2271,"config":2277},{"title":2272,"heroImage":2273,"category":766,"description":2274,"authors":2275,"date":2276},"Efficient DevSecOps workflows: Hands-on python-gitlab API automation","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659883/Blog/Hero%20Images/post-cover-image.jpg","The python-gitlab library is a useful abstraction layer for the GitLab API. Dive into hands-on examples and best practices in this tutorial.",[1605],"2023-02-01",{"slug":2278,"externalUrl":-1},"efficient-devsecops-workflows-hands-on-python-gitlab-api-automation",{"content":2280,"config":2287},{"title":2281,"heroImage":2282,"category":766,"description":2283,"authors":2284,"date":2286},"Start an open source center of excellence in 10 minutes using GitLab","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749682593/Blog/Hero%20Images/opensign.jpg","Launch your own open source program office using the OSPO Alliance's tools on GitLab",[2285],"Boris Baldassari","2023-01-30",{"slug":2288,"externalUrl":-1},"how-start-ospo-ten-minutes-using-gitlab",{"content":2290,"config":2297},{"title":2291,"heroImage":2292,"category":766,"description":2293,"authors":2294,"date":2296},"Testing ChatGPT: Can it solve a GitLab issue?","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749670171/Blog/Hero%20Images/akshay-nanavati-Zq6HerrBPEs-unsplash.jpg","We put ChatGPT to the test to see if it could contribute to GitLab. Here's what we learned.",[2295,1387],"John Coghlan","2022-12-15",{"slug":2298,"externalUrl":-1},"can-chatgpt-resolve-gitlab-issues",{"content":2300,"config":2307},{"title":2301,"heroImage":2302,"category":766,"description":2303,"authors":2304,"date":2306},"Top 10 technical articles of 2022","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749663736/Blog/Hero%20Images/a-deep-dive-into-the-security-analyst-persona.jpg","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.",[2305],"Valerie Silverthorne","2022-12-08",{"slug":2308,"externalUrl":-1},"top-10-technical-articles-of-2022",{"content":2310,"config":2316},{"title":2311,"heroImage":1869,"category":766,"description":2312,"authors":2313,"date":2315},"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.",[2314],"Matt Smiley","2022-11-28",{"slug":2317,"externalUrl":-1},"how-we-diagnosed-and-resolved-redis-latency-spikes",{"content":2319,"config":2325},{"title":2320,"heroImage":2321,"category":766,"description":2322,"authors":2323,"date":2324},"How to publish a Remix app to the edge with GitLab and Cloudflare","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749682517/Blog/Hero%20Images/ryoji-hayasaka-0UZj73PQVew-unsplash.jpg","Learn how to deploy a Remix app with GitLab and Cloudflare Workers.",[1537],"2022-11-21",{"slug":2326,"externalUrl":-1},"deploy-remix-with-gitlab-and-cloudflare",{"content":2328,"config":2334},{"title":2329,"heroImage":2330,"category":766,"description":2331,"authors":2332,"date":2333},"Simple Kubernetes management with GitLab","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749670037/Blog/Hero%20Images/auto-deploy-google-cloud.jpg","Follow our tutorial to provision a Kubernetes cluster and manage it with IAC using Terraform and Helm in 20 minutes or less.",[1218],"2022-11-15",{"slug":2335,"externalUrl":-1},"simple-kubernetes-management-with-gitlab",{"content":2337,"config":2344},{"title":2338,"heroImage":2339,"category":766,"description":2340,"authors":2341,"date":2343},"How to use Git rebase in real life","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749682486/Blog/Hero%20Images/rebase-in-real-life.jpg","From fixup to autosquash here are real world ways to leverage Git rebase.",[2342],"Toon Claes","2022-11-08",{"slug":2345,"externalUrl":-1},"rebase-in-real-life",{"content":2347,"config":2353},{"title":2348,"heroImage":2349,"category":766,"description":2350,"authors":2351,"date":2352},"How to publish your 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","Learn how to deploy an Astro Site with GitLab Pages.",[1537],"2022-10-24",{"slug":2354,"externalUrl":-1},"publishing-an-astro-site-with-pages",{"content":2356,"config":2363},{"title":2357,"heroImage":2358,"category":766,"description":2359,"authors":2360,"date":2362},"Take advantage of Git rebase","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749665560/Blog/Hero%20Images/speedmonorepo.jpg","Tap into the Git rebase features to improve your workflow.",[2361],"Christian Couder","2022-10-06",{"slug":2364,"externalUrl":-1},"take-advantage-of-git-rebase",{"content":2366,"config":2373},{"title":2367,"heroImage":2368,"category":766,"description":2369,"authors":2370,"date":2372},"A visual guide to GitLab CI/CD caching","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749682443/Blog/Hero%20Images/cover.jpg","Learn cache types, as well as when and how to use them.",[2371],"Matthieu Fronton","2022-09-12",{"slug":2374,"externalUrl":-1},"a-visual-guide-to-gitlab-ci-caching",{"content":2376,"config":2382},{"title":2377,"heroImage":2358,"category":766,"description":2378,"authors":2379,"date":2381},"Speed up your monorepo workflow in Git","Tap into the features that can reap huge savings in the long run for any developer team.",[2380],"John Cai","2022-09-06",{"slug":2383,"externalUrl":-1},"speed-up-your-monorepo-workflow-in-git",{"content":2385,"config":2392},{"title":2386,"heroImage":2387,"category":766,"description":2388,"authors":2389,"date":2391},"How to access GitLab on a private network with Tailscale","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749679348/Blog/Hero%20Images/locks.jpg","If issues around a private network were preventing a permanent GitLab installation, Brendan O'Leary has the solution with Tailscale.",[2390],"Brendan O'Leary","2022-07-21",{"slug":2393,"externalUrl":-1},"how-to-access-gitlab-on-a-private-network-with-tailscale",{"content":2395,"config":2402},{"title":2396,"heroImage":2397,"category":766,"description":2398,"authors":2399,"date":2401},"How to migrate Atlassian's Bamboo server's CI/CD infrastructure to GitLab CI, part two","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749679081/Blog/Hero%20Images/jenkins-migration.jpg","A real-world look at how a migrated CI/CD infrastructure will work in GitLab CI.",[2400],"Ivan Lychev","2022-07-11",{"slug":2403,"externalUrl":-1},"how-to-migrate-atlassians-bamboo-servers-ci-cd-infrastructure-to-gitlab-ci-part-two",{"content":2405,"config":2411},{"title":2406,"heroImage":2407,"category":766,"description":2408,"authors":2409,"date":2410},"How to migrate Atlassian Bamboo Server's CI/CD infrastructure to GitLab CI, part one","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749663397/Blog/Hero%20Images/logoforblogpost.jpg","Theoretical reasoning and practical proposal on migrating an existing CI/CD infrastructure of some multi-component application from Bamboo Server to GitLab CI",[2400],"2022-07-06",{"slug":2412,"externalUrl":-1},"migration-from-atlassian-bamboo-server-to-gitlab-ci",{"content":2414,"config":2422},{"title":2415,"heroImage":2416,"category":2417,"description":2418,"authors":2419,"date":2421},"Learn Python with Pj! Part 5 - Build a hashtag tracker with the Twitter API","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749664962/Blog/Hero%20Images/python.jpg","careers","Our Education Evangelist Pj Metz wraps up his five-part series with this penultimate tutorial.",[2420],"PJ Metz","2022-06-01",{"slug":2423,"externalUrl":-1},"learn-python-with-pj-part-5-building-something-with-the-twitter-api",{"content":2425,"config":2432},{"title":2426,"heroImage":2427,"category":1180,"description":2428,"authors":2429,"date":2431},"Lingo: A Go micro language framework for building Domain Specific Languages","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749682320/Blog/Hero%20Images/typeset.png","Design, build and integrate your own Domain Specific Language with Lingo.",[2430],"Julian Thome","2022-05-26",{"slug":2433,"externalUrl":-1},"a-go-micro-language-framework-for-building-dsls",{"content":2435,"config":2440},{"title":2436,"heroImage":2407,"category":766,"description":2437,"authors":2438,"date":2439},"When the pursuit of simplicity creates complexity in container-based CI pipelines","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.",[782],"2022-05-24",{"slug":2441,"externalUrl":-1},"second-law-of-complexity-dynamics",{"content":2443,"config":2448},{"title":2444,"heroImage":2416,"category":2417,"description":2445,"authors":2446,"date":2447},"Learn Python with Pj! Part 4 - Dictionaries and Files","Our education evangelist Pj Metz continues his journey to learn how to code in Python.",[2420],"2022-05-05",{"slug":2449,"externalUrl":-1},"learn-python-with-pj-part-4-dictionaries-and-files",{"content":2451,"config":2458},{"title":2452,"heroImage":2453,"category":2454,"description":2455,"authors":2456,"date":2457},"Amazon Linux 2 support and distro-specific packages for GitLab","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749682299/Blog/Hero%20Images/gitlab-blog-banner.png","news","Learn how to do early testing as well as how to peg your automation to the EL 7 packages until you are able to properly integrate the changes into your automation.",[782],"2022-05-02",{"slug":2459,"externalUrl":-1},"amazon-linux-2-support-and-distro-specific-packages",{"content":2461,"config":2468},{"title":2462,"heroImage":2463,"category":766,"description":2464,"authors":2465,"date":2467},"How to deploy Shopify themes with GitLab","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749683288/Blog/Hero%20Images/storefront.jpg","Streamline your development workflow by configuring auto deployments for Shopify themes with GitLab pipelines.",[2466],"Austin Regnery","2022-04-14",{"slug":2469,"externalUrl":-1},"deploy-shopify-themes-with-gitlab",{"content":2471,"config":2477},{"title":2472,"heroImage":2473,"category":766,"description":2474,"authors":2475,"date":2476},"The ultimate guide to GitOps with GitLab","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749670178/Blog/Hero%20Images/GitLab-Ops.png","This eight-part tutorial series demonstrates how to use GitLab as a best-in-class GitOps tool.",[1806],"2022-04-07",{"slug":2478,"externalUrl":-1},"the-ultimate-guide-to-gitops-with-gitlab",{"content":2480,"config":2485},{"title":2481,"heroImage":2416,"category":766,"description":2482,"authors":2483,"date":2484},"Learn Python with Pj! Part 3 - Functions and strings","Pj shares his experiences learning how to program functions and strings.",[2420],"2022-04-04",{"slug":2486,"externalUrl":-1},"learn-python-with-pj-part-3",{"content":2488,"config":2493},{"title":2489,"heroImage":2473,"category":766,"description":2490,"authors":2491,"date":2492},"GitOps with GitLab: Turn a GitLab agent for Kubernetes installation to manage itself","This is the eighth and last article in a series of tutorials on how to do GitOps with GitLab.",[1806],"2022-03-30",{"slug":2494,"externalUrl":-1},"gitops-with-gitlab-manage-the-agent",{"content":2496,"config":2502},{"title":2497,"heroImage":2407,"category":766,"description":2498,"authors":2499,"date":2501},"Publishing Obsidian.md notes with GitLab Pages","How to publish your Obsidian.md documents to a GitLab Pages site",[2500],"Scott Hampton","2022-03-15",{"slug":2503,"externalUrl":-1},"publishing-obsidian-notes-with-gitlab-pages",{"content":2505,"config":2511},{"title":2506,"heroImage":2507,"category":766,"description":2508,"authors":2509,"date":2510},"How to protect GitLab-connected SSH key with Yubikey","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749667202/Blog/Hero%20Images/gitlabultimatesecurity.jpg","Add a layer of security to SSH keys by restricting physical access to YubiKey.",[2390],"2022-03-03",{"slug":2512,"externalUrl":-1},"how-to-protect-gitlab-connected-ssh-key-with-yubikey",{"content":2514,"config":2519},{"title":2515,"heroImage":2473,"category":766,"description":2516,"authors":2517,"date":2518},"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.",[2390],"2022-02-10",{"slug":2520,"externalUrl":-1},"how-to-code-build-and-deploy-from-an-ipad-using-gitlab-and-gitpod",{"content":2522,"config":2527},{"title":2523,"heroImage":2407,"category":766,"description":2524,"authors":2525,"date":2526},"GitOps with GitLab: Connecting GitLab with a Kubernetes cluster - Auto DevOps","This is the 6th article in a series of tutorials on how to do GitOps with GitLab",[1806],"2022-02-08",{"slug":2528,"externalUrl":-1},"gitops-with-gitlab-auto-devops",{"content":2530,"config":2537},{"title":2531,"heroImage":2532,"category":538,"description":2533,"authors":2534,"date":2536},"Understand how your teams adopt DevOps with DevOps reports","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749668473/Blog/Hero%20Images/john-schnobrich-FlPc9_VocJ4-unsplash.jpg","Learn about analytics, DevOps reports, DevOps scores, and more.",[2535],"Orit Golowinski","2021-12-15",{"slug":2538,"externalUrl":-1},"devops-adoption",{"content":2540,"config":2545},{"title":2541,"heroImage":2542,"category":272,"description":2543,"authors":2544,"date":2536},"How to use GitLab security features to detect log4j vulnerabilities","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749666816/Blog/Hero%20Images/security-cover.png","Detailed guidance to help customers detect vulnerabilities.",[852],{"slug":2546,"externalUrl":-1},"use-gitlab-to-detect-vulnerabilities",{"content":2548,"config":2554},{"title":2549,"heroImage":2550,"category":766,"description":2551,"authors":2552,"date":2553},"How to automate localization for Flutter apps","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749679465/Blog/Hero%20Images/flutterbanner.png","Follow this tutorial to learn how to simplify the localization process on GitLab with Localizely.",[852],"2021-12-10",{"slug":2555,"externalUrl":-1},"how-to-automate-localization-for-flutter-apps",{"content":2557,"config":2564},{"title":2558,"heroImage":2559,"category":766,"description":2560,"authors":2561,"date":2563},"Four new tools for your Visual Studio Code and GitLab tool belt","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749666775/Blog/Hero%20Images/cover.jpg","Learn about new features that can help you review MRs and interact with GitLab",[2562],"Tomas Vik","2021-11-17",{"slug":2565,"externalUrl":-1},"vscode-workflow-new-features",{"content":2567,"config":2572},{"title":2568,"heroImage":2416,"category":538,"description":2569,"authors":2570,"date":2571},"How to get started with Python programming","Python is increasingly popular, and for good reason. Here's our beginner's guide.",[852],"2021-10-21",{"slug":2573,"externalUrl":-1},"beginner-guide-python-programming",{"content":2575,"config":2581},{"title":2576,"heroImage":2577,"category":538,"description":2578,"authors":2579,"date":2580},"Top ten GitLab hacks for all stages of the DevOps Platform","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749667482/Blog/Hero%20Images/cover-image-unsplash.jpg","Get the most out of the GitLab DevOps Platform with our ten best tips for enhanced productivity.",[1605],"2021-10-19",{"slug":2582,"externalUrl":-1},"top-10-gitlab-hacks",{"content":2584,"config":2589},{"title":2585,"heroImage":2559,"category":766,"description":2586,"authors":2587,"date":2588},"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.",[2562],"2021-05-20",{"slug":2590,"externalUrl":-1},"vscode-workflows-for-working-with-gitlab",{"content":2592,"config":2598},{"title":2593,"heroImage":2594,"category":766,"description":2595,"authors":2596,"date":2597},"Tips for productive DevOps workflows: JSON formatting with jq and CI/CD linting automation","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749681979/Blog/Hero%20Images/gert-boers-unsplash.jpg","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.",[1605],"2021-04-21",{"slug":2599,"externalUrl":-1},"devops-workflows-json-format-jq-ci-cd-lint",{"content":2601,"config":2608},{"title":2602,"heroImage":2603,"category":766,"description":2604,"authors":2605,"date":2607},"GitLab environment variables demystified","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749664679/Blog/Hero%20Images/blog-image-template-1800x945__24_.png","CI/CD variables are useful (and flexible) tools to control jobs and pipelines. We unpack everything you need to know about GitLab environment variables.",[2606],"Veethika Mishra","2021-04-09",{"slug":2609,"externalUrl":-1},"demystifying-ci-cd-variables",{"content":2611,"config":2618},{"title":2612,"heroImage":2613,"category":766,"description":2614,"authors":2615,"date":2617},"How to use GitLab CI to deploy to multiple environments","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749662033/Blog/Hero%20Images/intro.jpg","We walk you through different scenarios to demonstrate the versatility and power of GitLab CI.",[2616,811],"Ivan Nemytchenko","2021-02-05",{"slug":2619,"externalUrl":-1},"ci-deployment-and-environments",{"content":2621,"config":2626},{"title":2622,"heroImage":2559,"category":766,"description":2623,"authors":2624,"date":2625},"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.",[2562],"2021-01-25",{"slug":2627,"externalUrl":-1},"mr-reviews-with-vs-code",{"content":2629,"config":2637},{"title":2630,"heroImage":2631,"category":2632,"description":2633,"authors":2634,"date":2636},"How to Read Open Source: Finding Middleman Callbacks","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749664102/Blog/Hero%20Images/gitlab-values-cover.png","unfiltered","Open source empowers you to learn beyond existing documentation. Getting started can be confusing. This is a demonstration finding unlisted Middleman callbacks.",[2635],"Tyler Williams","2021-01-20",{"slug":2638,"externalUrl":-1},"how-to-read-open-source-finding-middleman-callbacks",{"content":2640,"config":2647},{"title":2641,"heroImage":2642,"category":766,"description":2643,"authors":2644,"date":2646},"GitLab tutorials for secure pipelines, Kubernetes, and more at Learn@GitLab","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749667236/Blog/Hero%20Images/Learn-at-GL.jpg","Learn@GitLab offers videos and self-driven demos so you can get the most out of GitLab at your own pace.",[2645],"Chrissie Buchanan","2021-01-12",{"slug":2648,"externalUrl":-1},"learn-gitlab-devops-version-control",{"content":2650,"config":2656},{"title":2651,"heroImage":2652,"category":766,"description":2653,"authors":2654,"date":2655},"The basics of CI: How to run jobs sequentially, in parallel, or out of order","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749662061/Blog/Hero%20Images/cicdcover.png","New to continuous integration? Learn how to build your first CI pipeline with GitLab.",[699],"2020-12-10",{"slug":2657,"externalUrl":-1},"basics-of-gitlab-ci-updated",{"content":2659,"config":2666},{"title":2660,"heroImage":2661,"category":766,"description":2662,"authors":2663,"date":2665},"How to fuzz Rust code continuously","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749681441/Blog/Hero%20Images/rust.jpg","Learn why you should always fuzz test your Rust code, and the code you'll need to do it.",[2664],"Yevgeny Pats","2020-12-03",{"slug":2667,"externalUrl":-1},"how-to-fuzz-rust-code",{"content":2669,"config":2674},{"title":2670,"heroImage":2559,"category":766,"description":2671,"authors":2672,"date":2673},"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.",[2562],"2020-11-30",{"slug":2675,"externalUrl":-1},"vscode-extension-development-with-gitlab",{"content":2677,"config":2684},{"title":2678,"heroImage":2679,"category":766,"description":2680,"authors":2681,"date":2683},"How to keep your Git history clean with interactive rebase","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749662593/Blog/Hero%20Images/title-image.png","Interactive rebase is one of Git’s most versatile tools. Here's how to use it to correct commit messages, fix mistakes, and more.",[2682],"Tobias Günther","2020-11-23",{"slug":2685,"externalUrl":-1},"keep-git-history-clean-with-interactive-rebase",{"content":2687,"config":2694},{"title":2688,"heroImage":2689,"category":766,"description":2690,"authors":2691,"date":2693},"How to use Bazel with GitLab to speed up your builds","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749667132/Blog/Hero%20Images/build-container-image-runner-fargate-codebuild-cover.jpg","We explain why Bazel and GitLab CI are a great match to speed up your build times.",[2692],"Jason Yavorska","2020-09-01",{"slug":2695,"externalUrl":-1},"using-bazel-to-speed-up-gitlab-ci-builds",{"content":2697,"config":2703},{"title":2698,"heroImage":2689,"category":766,"description":2699,"authors":2700,"date":2702},"How to build containers with the AWS Fargate Custom Executor for GitLab Runner and AWS CodeBuild","Build containers with the AWS Fargate Custom Executor for GitLab Runner and AWS CodeBuild",[2701],"Elliot Rushton","2020-07-31",{"slug":2704,"externalUrl":-1},"aws-fargate-codebuild-build-containers-gitlab-runner",{"content":2706,"config":2712},{"title":2707,"heroImage":2661,"category":2708,"description":2709,"authors":2710,"date":2711},"A guide to Rust programming language","insights","Rust is a well-loved programming language but it is a mindset shift from options like C++. Here's a tutorial and an inside look at Rust code and its capabilities.",[2305],"2020-07-21",{"slug":2713,"externalUrl":-1},"rust-programming-language",{"content":2715,"config":2721},{"title":2716,"heroImage":2717,"category":766,"description":2718,"authors":2719,"date":2720},"How to integrate Azure DevOps repositories with GitLab","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749664363/Blog/Hero%20Images/aleksey-kuprikov.jpg","How to keep your code in an Azure DevOps repository and run CI/CD with GitLab pipelines.",[699],"2020-07-09",{"slug":2722,"externalUrl":-1},"integrating-azure-devops-scm-and-gitlab",{"content":2724,"config":2730},{"title":2725,"heroImage":2726,"category":2708,"description":2727,"authors":2728,"date":2729},"How to make small changes using GitLab’s Web IDE","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749678812/Blog/Hero%20Images/web-ide-cover.jpg","A quick three minute demo shows how teams can deliver better apps faster using GitLab CI/CD.",[2645],"2020-05-28",{"slug":2731,"externalUrl":-1},"using-gitlab-web-ide-gitlab-ci-cd",{"content":2733,"config":2740},{"title":2734,"heroImage":2735,"category":675,"description":2736,"authors":2737,"date":2739},"GitLab instance: security best practices","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749667057/Blog/Hero%20Images/configs_unsplash.jpg","Default settings on products can be massively helpful. However, when it comes to hardening your GitLab instance, we’ve got some helpful configuration recommendations from our security team.",[2738],"Mark Loveless","2020-05-20",{"slug":2741,"externalUrl":-1},"gitlab-instance-security-best-practices",{"content":2743,"config":2749},{"title":2744,"heroImage":2631,"category":2632,"description":2745,"authors":2746,"date":2748},"How to create Review Apps for Android with GitLab, fastlane, and Appetize.io","See how GitLab and Appetize.io can bring Review Apps to your Android project",[2747],"Andrew Fontaine","2020-05-06",{"slug":2750,"externalUrl":-1},"how-to-create-review-apps-for-android-with-gitlab-fastlane-and-appetize-dot-io",{"content":2752,"config":2758},{"title":2753,"heroImage":2754,"category":766,"description":2755,"authors":2756,"date":2757},"How to deploy your application to a GitLab-managed Amazon EKS cluster with Auto DevOps","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749666959/Blog/Hero%20Images/gitlab-aws-cover.png","A Kubernetes tutorial: Use GitLab AutoDevOps to deploy your applications to Amazon EKS.",[1285],"2020-05-05",{"slug":2759,"externalUrl":-1},"deploying-application-eks",{"content":2761,"config":2768},{"title":2762,"heroImage":2763,"category":766,"description":2764,"authors":2765,"date":2767},"How to get started with Parent-child pipelines","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749667040/Blog/Hero%20Images/parent_pipeline_graph.png","We introduced improvements to pipelines to help scale applications and their repo structures more effectively. Here's how they work.",[2766],"Chris Ward","2020-04-24",{"slug":2769,"externalUrl":-1},"parent-child-pipelines",{"content":2771,"config":2777},{"title":2772,"heroImage":2773,"category":766,"description":2774,"authors":2775,"date":2776},"Getting [meta] with GitLab CI/CD: Building build images","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749678567/Blog/Hero%20Images/building-blocks.jpg","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.",[2390],"2019-08-28",{"slug":2778,"externalUrl":-1},"building-build-images",{"content":2780,"config":2787},{"title":2781,"heroImage":2782,"category":766,"description":2783,"authors":2784,"date":2786},"Go tools and GitLab: How to do continuous integration like a boss","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749667978/Blog/Hero%20Images/go-tools-and-gitlab.jpg","How the team at Pantomath makes their lives easier with GitLab CI.",[2785],"Julien Andrieux","2017-11-27",{"slug":2788,"externalUrl":-1},"go-tools-and-gitlab-how-to-do-continuous-integration-like-a-boss",{"content":2790,"config":2797},{"title":2791,"heroImage":2792,"category":766,"description":2793,"authors":2794,"date":2796},"How to create a CI/CD pipeline with Auto Deploy to Kubernetes using GitLab and Helm","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749664472/Blog/Hero%20Images/gitlabflatlogomap.png","One user walks through how he tried GitLab caching and split the job into multiple steps to get better feedback.",[2795],"Sergey Nuzhdin","2017-09-21",{"slug":2798,"externalUrl":-1},"how-to-create-a-ci-cd-pipeline-with-auto-deploy-to-kubernetes-using-gitlab",{"content":2800,"config":2807},{"title":2801,"heroImage":2802,"category":766,"description":2803,"authors":2804,"date":2806},"How to automatically create a new MR on GitLab with GitLab CI","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749679783/Blog/Hero%20Images/whats-next-for-gitlab-ci.jpg","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.",[2805],"Riccardo Padovani","2017-09-05",{"slug":2808,"externalUrl":-1},"how-to-automatically-create-a-new-mr-on-gitlab-with-gitlab-ci",1772652102950]