[{"data":1,"prerenderedAt":1355},["ShallowReactive",2],{"/blog/pipeline-editor-overview":3,"navigation-en-us":569,"banner-en-us":996,"footer-en-us":1006,"blog-post-authors-en-us-Dov Hershkovitch":1250,"blog-related-posts-en-us-pipeline-editor-overview":1265,"blog-promotions-en-us":1291,"next-steps-en-us":1345},{"id":4,"title":5,"authors":6,"body":8,"category":547,"date":548,"description":549,"extension":550,"externalUrl":551,"faq":551,"featured":552,"heroImage":553,"meta":554,"navigation":148,"path":555,"seo":556,"slug":560,"stem":561,"tags":562,"template":567,"updatedDate":551,"__hash__":568},"blogPosts/en-us/blog/pipeline-editor-overview.md","Meet Pipeline Editor, your one-stop shop for building a CI/CD pipeline",[7],"Dov Hershkovitch",{"type":9,"value":10,"toc":536},"minimark",[11,15,25,30,33,37,64,69,75,83,87,95,104,107,114,117,354,358,361,364,367,373,376,382,386,389,409,415,448,454,457,463,467,482,488,497,501,513,532],[12,13,14],"p",{},"This blog post was originally published on the GitLab Unfiltered blog. It was reviewed and republished on 2021-03-02.",[12,16,17,18,24],{},"In GitLab 13.8, we introduced the first iteration of the ",[19,20,23],"a",{"href":21,"rel":22},"https://docs.gitlab.com/releases/",[],"Pipeline Editor",": a dedicated editor designed for authoring your CI/CD. It is your one-stop shop for everything you need to configure your CI/CD pipelines.",[26,27,29],"h2",{"id":28},"why-do-we-need-a-dedicated-editor-for-pipelines","Why do we need a dedicated editor for pipelines?",[12,31,32],{},"GitLab's advanced syntax provides a high degree of customization for sophisticated and demanding CI/CD use cases. However, all of this power and flexibility comes with a fair bit of complexity. The Pipeline Editor helps you mitigate this challenge and serves as a single solution that groups all existing CI authoring features in a single location. It is our foundation, and we plan to build on it with enhancements in future iterations.",[26,34,36],{"id":35},"getting-started","Getting started",[12,38,39,40,44,45,47,48,53,54,63],{},"In order for the pipeline editor to work, you'll first need to create a ",[41,42,43],"code",{},".gitlab-ci.yml"," file in your project. The ",[41,46,43],{}," is a ",[19,49,52],{"href":50,"rel":51},"https://en.wikipedia.org/wiki/YAML",[],"YAML file"," where you configure specific GitLab CI/CD instructions. Check out how we are working on ",[19,55,58,59,62],{"href":56,"rel":57},"https://gitlab.com/groups/gitlab-org/-/epics/5276",[],"improving the first-time experience of creating a ",[41,60,61],{},".gilab-ci.yml"," file directly from the Pipeline Editor",".",[65,66,68],"h3",{"id":67},"continuous-validation","Continuous validation",[12,70,71,72,74],{},"Once you have created the ",[41,73,43],{}," file and navigated to it in the Pipeline Editor, you can begin editing your configuration. Writing YAML can be error prone. No matter how technical or skilled you are, programming mistakes happen. Sometimes an indentation will be missed, the incorrect syntax is used, or the wrong keyword is selected, and that's OK! As you start authoring your pipeline, GitLab will inspect the pipeline configuration using our linting APIs and provide you with an indicator of whether your pipeline configuration is valid or not. We will continuously validate your pipeline without making any changes to your pipeline configuration, so you can have confidence in hitting \"merge\" and running your pipeline without any surprises.",[12,76,77,82],{},[78,79],"img",{"alt":80,"src":81},"Continuous validation of pipelines","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782397610/blog/Content%20Images/2020-02-08-Pipeline-editor-overview/image1.png","\nContinuous validation of your pipelines",[65,84,86],{"id":85},"pipeline-visualizer-seeing-is-believing","Pipeline visualizer: Seeing is believing",[12,88,89,90,94],{},"It's practically impossible to envision what a pipeline should look like when you start writing from a blank YAML file. Luckily, GitLab provides you with a full pipeline view for every running pipeline. But, what if you want to visualize your pipeline ",[91,92,93],"em",{},"before"," they begin to run? Well, you can do that now by navigating to the \"Visualize\" tab in the Pipeline Editor. You'll find an illustration that shows how your pipeline should look as you write it, similar to the linter, and GitLab will display the visual before making any commits, before running, or before altering your pipeline in any way.",[12,96,97,98,103],{},"In the visualization, we will group all your defined pipeline jobs by stages and add links between the jobs based on the ",[19,99,102],{"href":100,"rel":101},"https://docs.gitlab.com/ci/yaml/#needs",[],"needs"," relationships you've configured.",[12,105,106],{},"If we take a look at the example below, you can easily see that I've configured a three-stage pipeline, where the build stage has three jobs (step 1-3), and that step 4 needs steps 1 and 3.",[12,108,109,113],{},[78,110],{"alt":111,"src":112},"Pipeline editor overview","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782397614/blog/Content%20Images/2020-02-08-Pipeline-editor-overview/image2.png","\nPipeline visualizer",[12,115,116],{},"Here is what the YAML looks like:",[118,119,124],"pre",{"className":120,"code":121,"language":122,"meta":123,"style":123},"language-yaml shiki shiki-themes github-light","image: alpine:latest\n\nstages:\n  - test\n  - build\n  - deploy\n\nprepare:\n  script: exit 0\n  stage: test\n\nstep1:\n  script: echo testo\n  stage: build\nstep2:\n  script: echo testo\n  stage: build\nstep3:\n  script: echo testo\n  stage: build\n\nstep4:\n  needs: ['step1', 'step3']\n  script: exit 0\n  stage: deploy\n","yaml","",[41,125,126,143,150,159,168,176,184,189,197,208,218,223,231,241,250,258,267,276,284,293,302,307,315,336,345],{"__ignoreMap":123},[127,128,131,135,139],"span",{"class":129,"line":130},"line",1,[127,132,134],{"class":133},"shJU0","image",[127,136,138],{"class":137},"sgsFI",": ",[127,140,142],{"class":141},"sYBdl","alpine:latest\n",[127,144,146],{"class":129,"line":145},2,[127,147,149],{"emptyLinePlaceholder":148},true,"\n",[127,151,153,156],{"class":129,"line":152},3,[127,154,155],{"class":133},"stages",[127,157,158],{"class":137},":\n",[127,160,162,165],{"class":129,"line":161},4,[127,163,164],{"class":137},"  - ",[127,166,167],{"class":141},"test\n",[127,169,171,173],{"class":129,"line":170},5,[127,172,164],{"class":137},[127,174,175],{"class":141},"build\n",[127,177,179,181],{"class":129,"line":178},6,[127,180,164],{"class":137},[127,182,183],{"class":141},"deploy\n",[127,185,187],{"class":129,"line":186},7,[127,188,149],{"emptyLinePlaceholder":148},[127,190,192,195],{"class":129,"line":191},8,[127,193,194],{"class":133},"prepare",[127,196,158],{"class":137},[127,198,200,203,205],{"class":129,"line":199},9,[127,201,202],{"class":133},"  script",[127,204,138],{"class":137},[127,206,207],{"class":141},"exit 0\n",[127,209,211,214,216],{"class":129,"line":210},10,[127,212,213],{"class":133},"  stage",[127,215,138],{"class":137},[127,217,167],{"class":141},[127,219,221],{"class":129,"line":220},11,[127,222,149],{"emptyLinePlaceholder":148},[127,224,226,229],{"class":129,"line":225},12,[127,227,228],{"class":133},"step1",[127,230,158],{"class":137},[127,232,234,236,238],{"class":129,"line":233},13,[127,235,202],{"class":133},[127,237,138],{"class":137},[127,239,240],{"class":141},"echo testo\n",[127,242,244,246,248],{"class":129,"line":243},14,[127,245,213],{"class":133},[127,247,138],{"class":137},[127,249,175],{"class":141},[127,251,253,256],{"class":129,"line":252},15,[127,254,255],{"class":133},"step2",[127,257,158],{"class":137},[127,259,261,263,265],{"class":129,"line":260},16,[127,262,202],{"class":133},[127,264,138],{"class":137},[127,266,240],{"class":141},[127,268,270,272,274],{"class":129,"line":269},17,[127,271,213],{"class":133},[127,273,138],{"class":137},[127,275,175],{"class":141},[127,277,279,282],{"class":129,"line":278},18,[127,280,281],{"class":133},"step3",[127,283,158],{"class":137},[127,285,287,289,291],{"class":129,"line":286},19,[127,288,202],{"class":133},[127,290,138],{"class":137},[127,292,240],{"class":141},[127,294,296,298,300],{"class":129,"line":295},20,[127,297,213],{"class":133},[127,299,138],{"class":137},[127,301,175],{"class":141},[127,303,305],{"class":129,"line":304},21,[127,306,149],{"emptyLinePlaceholder":148},[127,308,310,313],{"class":129,"line":309},22,[127,311,312],{"class":133},"step4",[127,314,158],{"class":137},[127,316,318,321,324,327,330,333],{"class":129,"line":317},23,[127,319,320],{"class":133},"  needs",[127,322,323],{"class":137},": [",[127,325,326],{"class":141},"'step1'",[127,328,329],{"class":137},", ",[127,331,332],{"class":141},"'step3'",[127,334,335],{"class":137},"]\n",[127,337,339,341,343],{"class":129,"line":338},24,[127,340,202],{"class":133},[127,342,138],{"class":137},[127,344,207],{"class":141},[127,346,348,350,352],{"class":129,"line":347},25,[127,349,213],{"class":133},[127,351,138],{"class":137},[127,353,183],{"class":141},[65,355,357],{"id":356},"view-an-expanded-version-of-the-cicd-configuration","View an expanded version of the CI/CD configuration",[12,359,360],{},"When configuring pipelines, you use keywords like 'include' and 'extends' often. These keywords help break down one long pipeline configuration file into multiple files, which increases readability and reduces duplication. Unfortunately, those keywords can make a pipeline configuration hard to follow. In some configurations, a pipeline configuration file can be mostly composed of a list of other included configuration files.",[12,362,363],{},"To make the configuration easier to follow, we've added the ability to view a version of your pipeline configuration with all of the 'includes' and 'extends' configurations merged together as a fourth tab in the Pipeline Editor. Now it's much easier to understand more complex pipeline flows and this simplifies the debugging process.",[12,365,366],{},"Pipeline configuration example:",[12,368,369],{},[78,370],{"alt":371,"src":372},"pipeline configuration","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782397650/blog/Content%20Images/2020-02-08-Pipeline-editor-overview/image6.png",[12,374,375],{},"The expanded version of the pipeline configuration:",[12,377,378],{},[78,379],{"alt":380,"src":381},"expanded pipeline configuration","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782397650/blog/Content%20Images/2020-02-08-Pipeline-editor-overview/image7.png",[65,383,385],{"id":384},"lint","Lint",[12,387,388],{},"The CI lint helps you validate your pipeline configuration and provides you with additional information about it. That's why we've copied the existing CI linter (which was well hidden in our jobs page) to the Pipeline Editor as a third tab.",[12,390,391,392,329,397,402,403,408],{},"The linter provides you with detailed information about every job you've configured in your pipeline. For each job, it provides the ",[19,393,396],{"href":394,"rel":395},"https://docs.gitlab.com/ci/yaml/#before_script",[],"before_script",[19,398,401],{"href":399,"rel":400},"https://docs.gitlab.com/ci/yaml/#after_script",[],"after_script",", and ",[19,404,407],{"href":405,"rel":406},"https://docs.gitlab.com/ci/yaml/#script",[],"script"," fields, tags, environment names, branches it should run, and more…",[12,410,411,412,414],{},"If you look at the following example, just by looking at the linter tab you'll know that the ",[41,413,194],{}," job:",[416,417,418,425,436,439,442,445],"ul",{},[419,420,421,422,424],"li",{},"Runs in the ",[41,423,194],{}," stage",[419,426,427,428,329,430,402,432,435],{},"Contains ",[41,429,396],{},[41,431,407],{},[41,433,434],{},"after_scripts"," fields",[419,437,438],{},"Runs only on master",[419,440,441],{},"Runs upon failure",[419,443,444],{},"Tag as production",[419,446,447],{},"Has the environment set to production",[12,449,450],{},[78,451],{"alt":452,"src":453},"image3","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782397618/blog/Content%20Images/2020-02-08-Pipeline-editor-overview/image3.png",[12,455,456],{},"In this second example, you can see that the build job is a manual job that runs on all branches and is allowed to fail:",[12,458,459],{},[78,460],{"alt":461,"src":462},"Manual build job","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782397622/blog/Content%20Images/2020-02-08-Pipeline-editor-overview/image5.png",[26,464,466],{"id":465},"how-the-pipeline-editor-came-about","How the Pipeline Editor came about",[12,468,469,470,475,476,481],{},"Earlier this year, we decided to split continuous integration into two separate teams: ",[19,471,474],{"href":472,"rel":473},"https://docs.gitlab.com/ci/",[],"Continuous Integration",", which is responsible for improving the experience of running a CI/CD pipeline, and ",[19,477,480],{"href":478,"rel":479},"https://docs.gitlab.com/ci/components/",[],"Pipeline Authoring",", responsible for helping you author your pipeline. We've defined the Pipeline Authoring team goal as, \"Making the authoring experience as easy as possible for both advanced and novice users.\"",[12,483,484],{},[78,485],{"alt":486,"src":487},"Verify Groups","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782404878/site/Content%20Images/handbook/engineering/verify/verify_groups_banner.jpg",[12,489,490,491,496],{},"As a team, we realized that a dedicated authoring area is needed to achieve our ",[19,492,495],{"href":493,"rel":494},"https://youtu.be/hInM7JUEH4Y",[],"ambitious roadmap"," – this is when the Pipeline Editor idea was formed.",[26,498,500],{"id":499},"try-out-pipeline-editor-yourself","Try out Pipeline Editor yourself",[12,502,503,504,508,509,512],{},"That's it! I hope you found this overview useful. To get started with GitLab CI, you can ",[19,505,507],{"href":506},"/free-trial/","try out our hosted GitLab.com solution",", or you can ",[19,510,511],{"href":506},"download GitLab Self-Managed"," and read its documentation for more in-depth coverage of the functionality.",[12,514,515,516,521,522,527,528,531],{},"If you are using our Pipeline Editor, we would love it if you leave us a note on our ",[19,517,520],{"href":518,"rel":519},"https://gitlab.com/gitlab-org/gitlab/-/issues/298928",[],"feedback issue","! If you'd like to learn more about the upcoming features, feel free to read through the ",[19,523,526],{"href":524,"rel":525},"https://gitlab.com/groups/gitlab-org/-/epics/4814",[],"Pipeline Editor second iteration epic",", and tag ",[41,529,530],{},"@dhershkovitch"," if you have any questions.",[533,534,535],"style",{},"html pre.shiki code .shJU0, html code.shiki .shJU0{--shiki-default:#22863A}html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":123,"searchDepth":145,"depth":145,"links":537},[538,539,545,546],{"id":28,"depth":145,"text":29},{"id":35,"depth":145,"text":36,"children":540},[541,542,543,544],{"id":67,"depth":152,"text":68},{"id":85,"depth":152,"text":86},{"id":356,"depth":152,"text":357},{"id":384,"depth":152,"text":385},{"id":465,"depth":145,"text":466},{"id":499,"depth":145,"text":500},"engineering","2021-02-22","The Pipeline Editor reduces the complexity of configuring your CI/CD pipelines.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749665961/Blog/Hero%20Images/image_cover.jpg",{},"/en-us/blog/pipeline-editor-overview",{"title":5,"description":549,"ogTitle":5,"ogDescription":549,"noIndex":552,"ogImage":553,"ogUrl":557,"ogSiteName":558,"ogType":559,"canonicalUrls":557},"https://about.gitlab.com/blog/pipeline-editor-overview","https://about.gitlab.com","article","pipeline-editor-overview","en-us/blog/pipeline-editor-overview",[563,564,565,566],"CI","CD","DevOps","features","BlogPost","9IX0yns-6N4YqnR5-pc0CgxXbbPJUyl5RPDHUgarnB0",{"logo":570,"freeTrial":575,"sales":580,"login":585,"items":590,"search":916,"minimal":947,"duo":966,"switchNav":975,"pricingDeployment":986},{"config":571},{"href":572,"dataGaName":573,"dataGaLocation":574},"/","gitlab logo","header",{"text":576,"config":577},"Get free trial",{"href":578,"dataGaName":579,"dataGaLocation":574},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":581,"config":582},"Request a demo",{"href":583,"dataGaName":584,"dataGaLocation":574},"/sales/?contact-topic=request-demo","sales",{"text":586,"config":587},"Sign in",{"href":588,"dataGaName":589,"dataGaLocation":574},"https://gitlab.com/users/sign_in/","sign in",[591,620,720,725,838,894],{"text":592,"config":593,"menu":595},"Platform",{"dataNavLevelOne":594},"platform",{"type":596,"columns":597},"cards",[598,604,612],{"title":592,"description":599,"link":600},"The intelligent orchestration platform for DevSecOps",{"text":601,"config":602},"Explore our Platform",{"href":603,"dataGaName":594,"dataGaLocation":574},"/platform/",{"title":605,"description":606,"link":607},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":608,"config":609},"Meet GitLab Duo",{"href":610,"dataGaName":611,"dataGaLocation":574},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":613,"description":614,"link":615},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":616,"config":617},"Learn more",{"href":618,"dataGaName":619,"dataGaLocation":574},"/why-gitlab/","why gitlab",{"text":621,"left":148,"config":622,"menu":624},"Product",{"dataNavLevelOne":623},"solutions",{"type":625,"link":626,"columns":630,"feature":699},"lists",{"text":627,"config":628},"View all Solutions",{"href":629,"dataGaName":623,"dataGaLocation":574},"/solutions/",[631,655,678],{"title":632,"description":633,"link":634,"items":639},"Automation","CI/CD and automation to accelerate deployment",{"config":635},{"icon":636,"href":637,"dataGaName":638,"dataGaLocation":574},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[640,644,647,651],{"text":641,"config":642},"CI/CD",{"href":643,"dataGaLocation":574,"dataGaName":641},"/solutions/continuous-integration/",{"text":605,"config":645},{"href":610,"dataGaLocation":574,"dataGaName":646},"gitlab duo agent platform - product menu",{"text":648,"config":649},"Source Code Management",{"href":650,"dataGaLocation":574,"dataGaName":648},"/solutions/source-code-management/",{"text":652,"config":653},"Automated Software Delivery",{"href":637,"dataGaLocation":574,"dataGaName":654},"Automated software delivery",{"title":656,"description":657,"link":658,"items":663},"Security","Deliver code faster without compromising security",{"config":659},{"href":660,"dataGaName":661,"dataGaLocation":574,"icon":662},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[664,668,673],{"text":665,"config":666},"Application Security Testing",{"href":660,"dataGaName":667,"dataGaLocation":574},"Application security testing",{"text":669,"config":670},"Software Supply Chain Security",{"href":671,"dataGaLocation":574,"dataGaName":672},"/solutions/supply-chain/","Software supply chain security",{"text":674,"config":675},"Software Compliance",{"href":676,"dataGaName":677,"dataGaLocation":574},"/solutions/software-compliance/","software compliance",{"title":679,"link":680,"items":685},"Measurement",{"config":681},{"icon":682,"href":683,"dataGaName":684,"dataGaLocation":574},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[686,690,694],{"text":687,"config":688},"Visibility & Measurement",{"href":683,"dataGaLocation":574,"dataGaName":689},"Visibility and Measurement",{"text":691,"config":692},"Value Stream Management",{"href":693,"dataGaLocation":574,"dataGaName":691},"/solutions/value-stream-management/",{"text":695,"config":696},"Analytics & Insights",{"href":697,"dataGaLocation":574,"dataGaName":698},"/solutions/analytics-and-insights/","Analytics and insights",{"title":700,"type":625,"items":701},"GitLab for",[702,708,714],{"text":703,"config":704},"Enterprise",{"icon":705,"href":706,"dataGaLocation":574,"dataGaName":707},"Building","/enterprise/","enterprise",{"text":709,"config":710},"Small Business",{"icon":711,"href":712,"dataGaLocation":574,"dataGaName":713},"Work","/small-business/","small business",{"text":715,"config":716},"Public Sector",{"icon":717,"href":718,"dataGaLocation":574,"dataGaName":719},"Organization","/solutions/public-sector/","public sector",{"text":721,"config":722},"Pricing",{"href":723,"dataGaName":724,"dataGaLocation":574,"dataNavLevelOne":724},"/pricing/","pricing",{"text":726,"config":727,"menu":729},"Resources",{"dataNavLevelOne":728},"resources",{"type":625,"link":730,"columns":734,"feature":827},{"text":731,"config":732},"View all resources",{"href":733,"dataGaName":728,"dataGaLocation":574},"/resources/",[735,767,794],{"title":36,"items":736},[737,742,747,752,757,762],{"text":738,"config":739},"Install",{"href":740,"dataGaName":741,"dataGaLocation":574},"/install/","install",{"text":743,"config":744},"Quick start guides",{"href":745,"dataGaName":746,"dataGaLocation":574},"/get-started/","quick setup checklists",{"text":748,"config":749},"Learn",{"href":750,"dataGaLocation":574,"dataGaName":751},"https://university.gitlab.com/","learn",{"text":753,"config":754},"Product documentation",{"href":755,"dataGaName":756,"dataGaLocation":574},"https://docs.gitlab.com/","product documentation",{"text":758,"config":759},"Best practice videos",{"href":760,"dataGaName":761,"dataGaLocation":574},"/getting-started-videos/","best practice videos",{"text":763,"config":764},"Integrations",{"href":765,"dataGaName":766,"dataGaLocation":574},"/integrations/","integrations",{"title":768,"items":769},"Discover",[770,775,780,785,789],{"text":771,"config":772},"Customer success stories",{"href":773,"dataGaName":774,"dataGaLocation":574},"/customers/","customer success stories",{"text":776,"config":777},"Blog",{"href":778,"dataGaName":779,"dataGaLocation":574},"/blog/","blog",{"text":781,"config":782},"Demo Hub",{"href":783,"dataGaName":784,"dataGaLocation":574},"/demo-hub/","demo hub",{"text":786,"config":787},"The Source",{"href":788,"dataGaName":779,"dataGaLocation":574},"/the-source/",{"text":790,"config":791},"Remote",{"href":792,"dataGaName":793,"dataGaLocation":574},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":795,"items":796},"Connect",[797,802,807,812,817,822],{"text":798,"config":799},"GitLab Services",{"href":800,"dataGaName":801,"dataGaLocation":574},"/services/","services",{"text":803,"config":804},"Contribute",{"href":805,"dataGaName":806,"dataGaLocation":574},"https://contributors.gitlab.com","contribute",{"text":808,"config":809},"Community",{"href":810,"dataGaName":811,"dataGaLocation":574},"/community/","community",{"text":813,"config":814},"Forum",{"href":815,"dataGaName":816,"dataGaLocation":574},"https://forum.gitlab.com/","forum",{"text":818,"config":819},"Events",{"href":820,"dataGaName":821,"dataGaLocation":574},"/events/","events",{"text":823,"config":824},"Partners",{"href":825,"dataGaName":826,"dataGaLocation":574},"/partners/","partners",{"config":828,"title":831,"text":832,"link":833},{"background":829,"textColor":830},"url('https://res.cloudinary.com/about-gitlab-com/image/upload/v1777322348/qpq8yrgn8knii57omj0c.png')","#000","What’s new in GitLab","Stay updated with our latest features and improvements.",{"text":834,"config":835},"Read the latest",{"href":836,"dataGaName":837,"dataGaLocation":574},"/whats-new/","whats new",{"text":839,"config":840,"menu":842},"Company",{"dataNavLevelOne":841},"company",{"type":625,"columns":843},[844],{"items":845},[846,851,857,859,864,869,874,879,884,889],{"text":847,"config":848},"About",{"href":849,"dataGaName":850,"dataGaLocation":574},"/company/","about",{"text":852,"config":853,"footerGa":856},"Jobs",{"href":854,"dataGaName":855,"dataGaLocation":574},"/jobs/","jobs",{"dataGaName":855},{"text":818,"config":858},{"href":820,"dataGaName":821,"dataGaLocation":574},{"text":860,"config":861},"Leadership",{"href":862,"dataGaName":863,"dataGaLocation":574},"/company/team/e-group/","leadership",{"text":865,"config":866},"Handbook",{"href":867,"dataGaName":868,"dataGaLocation":574},"https://handbook.gitlab.com/","handbook",{"text":870,"config":871},"Investor relations",{"href":872,"dataGaName":873,"dataGaLocation":574},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":875,"config":876},"Trust Center",{"href":877,"dataGaName":878,"dataGaLocation":574},"/security/","trust center",{"text":880,"config":881},"AI Transparency Center",{"href":882,"dataGaName":883,"dataGaLocation":574},"/ai-transparency-center/","ai transparency center",{"text":885,"config":886},"Newsletter",{"href":887,"dataGaName":888,"dataGaLocation":574},"/company/contact/#contact-forms","newsletter",{"text":890,"config":891},"Press",{"href":892,"dataGaName":893,"dataGaLocation":574},"/press/","press",{"text":895,"config":896,"menu":897},"Contact us",{"dataNavLevelOne":841},{"type":625,"columns":898},[899],{"items":900},[901,906,911],{"text":902,"config":903},"Talk to sales",{"href":904,"dataGaName":905,"dataGaLocation":574},"/sales/","talk to sales",{"text":907,"config":908},"Support portal",{"href":909,"dataGaName":910,"dataGaLocation":574},"https://support.gitlab.com/hc/en-us","support portal",{"text":912,"config":913},"Customer portal",{"href":914,"dataGaName":915,"dataGaLocation":574},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":917,"login":918,"suggestions":925},"Close",{"text":919,"link":920},"To search repositories and projects, login to",{"text":921,"config":922},"gitlab.com",{"href":588,"dataGaName":923,"dataGaLocation":924},"search login","search",{"text":926,"default":927},"Suggestions",[928,930,934,936,940,944],{"text":605,"config":929},{"href":610,"dataGaName":605,"dataGaLocation":924},{"text":931,"config":932},"Code Suggestions (AI)",{"href":933,"dataGaName":931,"dataGaLocation":924},"/solutions/code-suggestions/",{"text":641,"config":935},{"href":643,"dataGaName":641,"dataGaLocation":924},{"text":937,"config":938},"GitLab on AWS",{"href":939,"dataGaName":937,"dataGaLocation":924},"/partners/technology-partners/aws/",{"text":941,"config":942},"GitLab on Google Cloud",{"href":943,"dataGaName":941,"dataGaLocation":924},"/partners/technology-partners/google-cloud-platform/",{"text":945,"config":946},"Why GitLab?",{"href":618,"dataGaName":945,"dataGaLocation":924},{"freeTrial":948,"mobileIcon":953,"desktopIcon":958,"secondaryButton":961},{"text":949,"config":950},"Start free trial",{"href":951,"dataGaName":579,"dataGaLocation":952},"https://gitlab.com/-/trials/new/","nav",{"altText":954,"config":955},"Gitlab Icon",{"src":956,"dataGaName":957,"dataGaLocation":952},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":954,"config":959},{"src":960,"dataGaName":957,"dataGaLocation":952},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":962,"config":963},"Get Started",{"href":964,"dataGaName":965,"dataGaLocation":952},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":967,"mobileIcon":971,"desktopIcon":973},{"text":968,"config":969},"Learn more about GitLab Duo",{"href":610,"dataGaName":970,"dataGaLocation":952},"gitlab duo",{"altText":954,"config":972},{"src":956,"dataGaName":957,"dataGaLocation":952},{"altText":954,"config":974},{"src":960,"dataGaName":957,"dataGaLocation":952},{"button":976,"mobileIcon":981,"desktopIcon":983},{"text":977,"config":978},"/switch",{"href":979,"dataGaName":980,"dataGaLocation":952},"#contact","switch",{"altText":954,"config":982},{"src":956,"dataGaName":957,"dataGaLocation":952},{"altText":954,"config":984},{"src":985,"dataGaName":957,"dataGaLocation":952},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":987,"mobileIcon":992,"desktopIcon":994},{"text":988,"config":989},"Back to pricing",{"href":723,"dataGaName":990,"dataGaLocation":952,"icon":991},"back to pricing","GoBack",{"altText":954,"config":993},{"src":956,"dataGaName":957,"dataGaLocation":952},{"altText":954,"config":995},{"src":960,"dataGaName":957,"dataGaLocation":952},{"title":997,"titleMobile":998,"button":999,"config":1004},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":616,"config":1000},{"href":1001,"dataGaName":1002,"dataGaLocation":1003},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":1005,"disabled":552},"release",{"data":1007},{"text":1008,"source":1009,"edit":1015,"contribute":1020,"config":1025,"items":1030,"minimal":1239},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":1010,"config":1011},"View page source",{"href":1012,"dataGaName":1013,"dataGaLocation":1014},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":1016,"config":1017},"Edit this page",{"href":1018,"dataGaName":1019,"dataGaLocation":1014},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":1021,"config":1022},"Please contribute",{"href":1023,"dataGaName":1024,"dataGaLocation":1014},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":1026,"facebook":1027,"youtube":1028,"linkedin":1029},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[1031,1078,1131,1175,1207],{"title":721,"links":1032,"subMenu":1047},[1033,1037,1042],{"text":1034,"config":1035},"View plans",{"href":723,"dataGaName":1036,"dataGaLocation":1014},"view plans",{"text":1038,"config":1039},"Why Premium?",{"href":1040,"dataGaName":1041,"dataGaLocation":1014},"/pricing/premium/","why premium",{"text":1043,"config":1044},"Why Ultimate?",{"href":1045,"dataGaName":1046,"dataGaLocation":1014},"/pricing/ultimate/","why ultimate",[1048],{"title":1049,"links":1050},"Contact Us",[1051,1054,1056,1058,1063,1068,1073],{"text":1052,"config":1053},"Contact sales",{"href":904,"dataGaName":584,"dataGaLocation":1014},{"text":907,"config":1055},{"href":909,"dataGaName":910,"dataGaLocation":1014},{"text":912,"config":1057},{"href":914,"dataGaName":915,"dataGaLocation":1014},{"text":1059,"config":1060},"Status",{"href":1061,"dataGaName":1062,"dataGaLocation":1014},"https://status.gitlab.com/","status",{"text":1064,"config":1065},"Terms of use",{"href":1066,"dataGaName":1067,"dataGaLocation":1014},"/terms/","terms of use",{"text":1069,"config":1070},"Privacy statement",{"href":1071,"dataGaName":1072,"dataGaLocation":1014},"/privacy/","privacy statement",{"text":1074,"config":1075},"Cookie preferences",{"dataGaName":1076,"dataGaLocation":1014,"id":1077,"isOneTrustButton":148},"cookie preferences","ot-sdk-btn",{"title":621,"links":1079,"subMenu":1088},[1080,1084],{"text":1081,"config":1082},"DevSecOps platform",{"href":603,"dataGaName":1083,"dataGaLocation":1014},"devsecops platform",{"text":1085,"config":1086},"AI-Assisted Development",{"href":610,"dataGaName":1087,"dataGaLocation":1014},"ai-assisted development",[1089],{"title":1090,"links":1091},"Topics",[1092,1097,1102,1106,1111,1116,1121,1126],{"text":1093,"config":1094},"CICD",{"href":1095,"dataGaName":1096,"dataGaLocation":1014},"/topics/ci-cd/","cicd",{"text":1098,"config":1099},"GitOps",{"href":1100,"dataGaName":1101,"dataGaLocation":1014},"/topics/gitops/","gitops",{"text":565,"config":1103},{"href":1104,"dataGaName":1105,"dataGaLocation":1014},"/topics/devops/","devops",{"text":1107,"config":1108},"Version Control",{"href":1109,"dataGaName":1110,"dataGaLocation":1014},"/topics/version-control/","version control",{"text":1112,"config":1113},"DevSecOps",{"href":1114,"dataGaName":1115,"dataGaLocation":1014},"/topics/devsecops/","devsecops",{"text":1117,"config":1118},"Cloud Native",{"href":1119,"dataGaName":1120,"dataGaLocation":1014},"/topics/cloud-native/","cloud native",{"text":1122,"config":1123},"AI for Coding",{"href":1124,"dataGaName":1125,"dataGaLocation":1014},"/topics/devops/ai-for-coding/","ai for coding",{"text":1127,"config":1128},"Agentic AI",{"href":1129,"dataGaName":1130,"dataGaLocation":1014},"/topics/agentic-ai/","agentic ai",{"title":1132,"links":1133},"Solutions",[1134,1136,1138,1143,1147,1150,1154,1157,1159,1162,1165,1170],{"text":665,"config":1135},{"href":660,"dataGaName":665,"dataGaLocation":1014},{"text":654,"config":1137},{"href":637,"dataGaName":638,"dataGaLocation":1014},{"text":1139,"config":1140},"Agile development",{"href":1141,"dataGaName":1142,"dataGaLocation":1014},"/solutions/agile-delivery/","agile delivery",{"text":1144,"config":1145},"SCM",{"href":650,"dataGaName":1146,"dataGaLocation":1014},"source code management",{"text":1093,"config":1148},{"href":643,"dataGaName":1149,"dataGaLocation":1014},"continuous integration & delivery",{"text":1151,"config":1152},"Value stream management",{"href":693,"dataGaName":1153,"dataGaLocation":1014},"value stream management",{"text":1098,"config":1155},{"href":1156,"dataGaName":1101,"dataGaLocation":1014},"/solutions/gitops/",{"text":703,"config":1158},{"href":706,"dataGaName":707,"dataGaLocation":1014},{"text":1160,"config":1161},"Small business",{"href":712,"dataGaName":713,"dataGaLocation":1014},{"text":1163,"config":1164},"Public sector",{"href":718,"dataGaName":719,"dataGaLocation":1014},{"text":1166,"config":1167},"Education",{"href":1168,"dataGaName":1169,"dataGaLocation":1014},"/solutions/education/","education",{"text":1171,"config":1172},"Financial services",{"href":1173,"dataGaName":1174,"dataGaLocation":1014},"/solutions/finance/","financial services",{"title":726,"links":1176},[1177,1179,1181,1183,1186,1188,1191,1193,1195,1197,1199,1201,1203,1205],{"text":738,"config":1178},{"href":740,"dataGaName":741,"dataGaLocation":1014},{"text":743,"config":1180},{"href":745,"dataGaName":746,"dataGaLocation":1014},{"text":748,"config":1182},{"href":750,"dataGaName":751,"dataGaLocation":1014},{"text":753,"config":1184},{"href":755,"dataGaName":1185,"dataGaLocation":1014},"docs",{"text":776,"config":1187},{"href":778,"dataGaName":779,"dataGaLocation":1014},{"text":1189,"config":1190},"What's new",{"href":836,"dataGaName":837,"dataGaLocation":1014},{"text":771,"config":1192},{"href":773,"dataGaName":774,"dataGaLocation":1014},{"text":790,"config":1194},{"href":792,"dataGaName":793,"dataGaLocation":1014},{"text":798,"config":1196},{"href":800,"dataGaName":801,"dataGaLocation":1014},{"text":803,"config":1198},{"href":805,"dataGaName":806,"dataGaLocation":1014},{"text":808,"config":1200},{"href":810,"dataGaName":811,"dataGaLocation":1014},{"text":813,"config":1202},{"href":815,"dataGaName":816,"dataGaLocation":1014},{"text":818,"config":1204},{"href":820,"dataGaName":821,"dataGaLocation":1014},{"text":823,"config":1206},{"href":825,"dataGaName":826,"dataGaLocation":1014},{"title":839,"links":1208},[1209,1211,1213,1215,1217,1219,1223,1228,1230,1232,1234],{"text":847,"config":1210},{"href":849,"dataGaName":841,"dataGaLocation":1014},{"text":852,"config":1212},{"href":854,"dataGaName":855,"dataGaLocation":1014},{"text":860,"config":1214},{"href":862,"dataGaName":863,"dataGaLocation":1014},{"text":865,"config":1216},{"href":867,"dataGaName":868,"dataGaLocation":1014},{"text":870,"config":1218},{"href":872,"dataGaName":873,"dataGaLocation":1014},{"text":1220,"config":1221},"Sustainability",{"href":1222,"dataGaName":1220,"dataGaLocation":1014},"/sustainability/",{"text":1224,"config":1225},"Diversity, inclusion and belonging (DIB)",{"href":1226,"dataGaName":1227,"dataGaLocation":1014},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":875,"config":1229},{"href":877,"dataGaName":878,"dataGaLocation":1014},{"text":885,"config":1231},{"href":887,"dataGaName":888,"dataGaLocation":1014},{"text":890,"config":1233},{"href":892,"dataGaName":893,"dataGaLocation":1014},{"text":1235,"config":1236},"Modern Slavery Transparency Statement",{"href":1237,"dataGaName":1238,"dataGaLocation":1014},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":1240},[1241,1244,1247],{"text":1242,"config":1243},"Terms",{"href":1066,"dataGaName":1067,"dataGaLocation":1014},{"text":1245,"config":1246},"Cookies",{"dataGaName":1076,"dataGaLocation":1014,"id":1077,"isOneTrustButton":148},{"text":1248,"config":1249},"Privacy",{"href":1071,"dataGaName":1072,"dataGaLocation":1014},[1251],{"id":1252,"title":7,"body":551,"config":1253,"content":1255,"description":551,"extension":1259,"meta":1260,"navigation":148,"path":1261,"seo":1262,"stem":1263,"__hash__":1264},"blogAuthors/en-us/blog/authors/dov-hershkovitch.yml",{"template":1254},"BlogAuthor",{"name":7,"config":1256},{"headshot":1257,"ctfId":1258},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749665628/Blog/Author%20Headshots/dhershkovitch-headshot.png","dhershkovitch","yml",{},"/en-us/blog/authors/dov-hershkovitch",{},"en-us/blog/authors/dov-hershkovitch","Iz4JuWpp9w9MyL2i-FC6CmJS1rnfmg76IL873W1AcMU",[1266,1275,1283],{"title":1267,"description":1268,"heroImage":1269,"category":547,"date":1270,"authors":1271,"slug":1274,"externalUrl":551},"Confidential AI for GitLab Self-Hosted","Give developers AI coding agents in GitLab Duo without source code leaving a hardware-encrypted boundary — no GPUs needed.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1773866173/vte9qh8rriznvyclhkes.png","2026-08-06",[1272,1273],"Mathias Ewald","Martin Paloncy, Edgeless Systems","confidential-ai-for-gitlab-self-hosted",{"title":1276,"description":1277,"heroImage":1278,"category":547,"date":1279,"authors":1280,"slug":1282,"externalUrl":551},"Green DevOps: Why carbon measurement belongs in your CI/CD pipeline","CI/CD pipelines have a hidden carbon cost. Here's why measuring it matters, and how you can get started with Eco CI and Carmen in GitLab.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1765809212/noh0mdfn9o94ry9ykura.png","2026-07-09",[1281],"Lysanne Pinto","green-devops-carbon-measurement-cicd-pipeline",{"title":1284,"description":1285,"heroImage":1286,"category":547,"date":1287,"authors":1288,"slug":1290,"externalUrl":551},"How to build CI/CD observability at scale","This practical guide to GitLab pipeline analytics helps self-managed users gain operational insights using Prometheus and Grafana.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1774465167/n5hlvrsrheadeccyr1oz.png","2026-04-28",[1289],"Paul Meresanu","how-to-build-ci-cd-observability-at-scale",{"promotions":1292},[1293,1307,1319,1331],{"id":1294,"categories":1295,"header":1297,"text":1298,"button":1299,"image":1304},"ai-modernization",[1296],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":1300,"config":1301},"Get your AI maturity score",{"href":1302,"dataGaName":1303,"dataGaLocation":779},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":1305},{"src":1306},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":1308,"categories":1309,"header":1311,"text":1298,"button":1312,"image":1316},"devops-modernization",[1310,1115],"product","Are you just managing tools or shipping innovation?",{"text":1313,"config":1314},"Get your DevOps maturity score",{"href":1315,"dataGaName":1303,"dataGaLocation":779},"/assessments/devops-modernization-assessment/",{"config":1317},{"src":1318},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":1320,"categories":1321,"header":1323,"text":1298,"button":1324,"image":1328},"security-modernization",[1322],"security","Are you trading speed for security?",{"text":1325,"config":1326},"Get your security maturity score",{"href":1327,"dataGaName":1303,"dataGaLocation":779},"/assessments/security-modernization-assessment/",{"config":1329},{"src":1330},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1332,"paths":1333,"header":1336,"text":1337,"button":1338,"image":1343},"github-azure-migration",[1334,1335],"migration-from-azure-devops-to-gitlab","integrating-azure-devops-scm-and-gitlab","Is your team ready for GitHub's Azure move?","GitHub is already rebuilding around Azure. Find out what it means for you.",{"text":1339,"config":1340},"See how GitLab compares to GitHub",{"href":1341,"dataGaName":1342,"dataGaLocation":779},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1344},{"src":1318},{"header":1346,"blurb":1347,"button":1348,"secondaryButton":1353},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":1349,"config":1350},"Get your free trial",{"href":1351,"dataGaName":579,"dataGaLocation":1352},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":1052,"config":1354},{"href":904,"dataGaName":584,"dataGaLocation":1352},1786803773807]