[{"data":1,"prerenderedAt":992},["ShallowReactive",2],{"/en-us/get-started/continuous-integration":3,"navigation-en-us":204,"banner-en-us":630,"footer-en-us":647,"footer-source-/en-us/get-started/continuous-integration/":892},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"seo":8,"content":11,"_id":197,"_type":198,"title":199,"_source":200,"_file":201,"_stem":202,"_extension":203},"/en-us/get-started/continuous-integration","get-started",false,"",{"title":9,"ogTitle":9,"description":10,"ogDescription":10},"Quickstart for GitLab Continuous Integration","You will be guided through the process of setting up a project in GitLab and creating a simple CI configuration in code.",[12,21,28,157],{"type":13,"componentName":13,"componentContent":14},"CommonBreadcrumbs",{"crumbs":15},[16,20],{"title":17,"config":18},"Get Started",{"href":19},"/get-started/",{"title":9},{"type":22,"componentName":22,"componentContent":23},"CommonArticleHero",{"title":9,"readTime":24,"text":25,"config":26},"20 min to complete","Welcome to the GitLab CI quickstart guide, where you will be guided through the process of setting up a project in GitLab and creating a simple CI configuration in code. This guide will enable you to swiftly initiate your journey with GitLab CI.\n\nThe following tasks will be outlined in this quick start guide:\n\n- Establishing a new project.\n- Crafting your initial CI/CD configuration and executing the pipeline.\n- Accessing and reviewing the results of the run.\n- Introducing conditions based on rules to determine job executions.\n- Harnessing the power of Pipeline Templates for seamless integration of beneficial configurations.",{"bodyText":27},true,{"type":29,"componentName":29,"componentContent":30},"CommonSideNavigationWithTree",{"anchors":31,"components":62},{"text":32,"data":33},"On this page",[34,38,42,46,50,54,58],{"text":35,"config":36},"Step 1: Create a new Project/Repository",{"href":37},"#step-1",{"text":39,"config":40},"Step 2: Setting the CI Configuration",{"href":41},"#step-2",{"text":43,"config":44},"Step 3 - Committing the change and run the pipeline",{"href":45},"#step-3",{"text":47,"config":48},"Step 4 - View Pipeline run and test results",{"href":49},"#step-4",{"text":51,"config":52},"Step 5 - Fail the pipeline",{"href":53},"#step-5",{"text":55,"config":56},"Step 6 - Implement pipeline-wide failure conditions",{"href":57},"#step-6",{"text":59,"config":60},"Step 7 - Enhance your configuration with built-in pipeline templates",{"href":61},"#step-7",[63,73],{"type":64,"componentName":64,"componentContent":65},"CommonCopy",{"config":66,"cards":67},{"noDecoration":27},[68],{"config":69,"title":71,"description":72},{"icon":70},"InfoTip","Before you start","Ensure you have a GitLab account. If you don't have, [sign up here](https://gitlab.com/users/sign_up).",{"type":74,"componentName":74,"componentContent":75},"GetStartedAccordion",{"groups":76},[77,89,116,124,133,141,149],{"config":78,"header":35,"show":80,"hide":81,"items":82},{"id":79},"step-1","Show All","Hide All",[83,86],{"header":84,"content":85},"Step overview","Within a project, various components such as your codebase, CI configuration, planning, analytics, and team members are managed. In this guide, we will create a new project with a blank slate, containing only a readme file.",{"header":87,"content":88},"How to","* Create a new project by clicking the plus icon at the right side of the top bar, and selecting **New project/repository**\n* Select **Create Blank project**. Under `Project name` type **my-project**.\n* Click **Create project**.\n* Congratulations! you have successfully created your first project.",{"config":90,"header":39,"show":80,"hide":81,"items":92},{"id":91},"step-2",[93,95,98,101,104,107,110,113],{"header":84,"content":94},"In GitLab, the CI configuration is defined in code using YAML syntax. This configuration specifies instructions to the runner machine regarding job execution, job order, job conditions, and more. To define the CI configuration, you need to create a file called **.gitlab-ci.yml**, which should be located at the root of your repository. In this guide, we will utilize the Web IDE to create and edit this file.",{"header":96,"content":97},"Creating the configuration file","To access the Web IDE, simply click on the Web IDE quick button located in your project. Once inside the Web IDE, navigate to the file explorer on the left side. Right-click within the file explorer and choose the **New File** option. Name the newly created file **.gitlab-ci.yml**.",{"header":99,"content":100},"Defining the Pipeline stages","The order of job executions is determined by the stages defined in the configuration. In this guide, we will define three stages: **build, test, and package,** in that specific order. Copy and paste the following code into the **.gitlab-ci.yml** file:\n\n```\n  stages:\n    - build\n    - test\n    - package\n```",{"header":102,"content":103},"Defining the pipeline jobs","Envision a scenario where you are tasked with creating two text files. It is of utmost importance that the concatenation of these files includes the phrase \"Hello world.\" Our objective is to build, **test**, and **package** this requirement utilizing pipeline jobs.",{"header":105,"content":106},"Define a Build-Job","We will specify a build job that accomplishes the following tasks: creating a text file with the word \"Hello,\" creating another text file with the word \"World,\" and generating a third file that stores the combined content of the two files. We will save the third file as an artifact, so subsequent jobs in test and package stages will be able to access it. Please insert the provided code below the stages block:\n\n```\n  build-job:\n    stage: build\n    script:\n      - echo \"Hello \" | tr -d \"\\n\" > file1.txt\n      - echo \"world\" > file2.txt\n      - cat file1.txt file2.txt > compiled.txt\n    artifacts:\n    paths:\n      - compiled.txt\n```",{"header":108,"content":109},"Define a test job","To validate the integrity of our build, we will incorporate a test job. This job will examine whether the **compiled.txt** file indeed contains the expected phrase \"Hello world\". Please insert the following code below the build job:\n\n```\n  test:\n    stage: test\n    script: cat compiled.txt | grep -q 'Hello world '\n```",{"header":111,"content":112},"Define a package job","Upon successful completion of the test, our next objective is to generate a package for our code. To accomplish this, we will include a package job. It is important to note that if the test fails, the entire pipeline will be deemed unsuccessful and will not proceed. Please insert the provided code below the test job:\n\n```\n  package:\n    stage: package\n    script: cat compiled.txt | gzip > packaged.gz\n    artifacts:\n      paths:\n        - packaged.gz\n```",{"header":114,"content":115},"Your complete pipeline should look like this","```\n  stages:          # List of stages for jobs, and their order of execution\n    - build\n    - test\n    - package\n\n  build-job:\n    stage: build\n    script:\n      - echo \"Hello \" | tr -d \"\\n\" > file1.txt\n      - echo \"world\" > file2.txt\n      - cat file1.txt file2.txt > compiled.txt\n    artifacts:\n      paths:\n        - compiled.txt\n\n  test:\n    stage: test\n    script: cat compiled.txt | grep -q 'Hello world'\n\n  package:\n    stage: package\n    script: cat compiled.txt | gzip > packaged.gz\n    artifacts:\n      paths:\n        - packaged.gz\n```\n\nHere is a link to the [configuration file](https://gitlab.com/tech-marketing/ci-quickstart/-/blob/main/.gitlab-ci.yml) in our example project.\n\nCongratulations!! you built your first CI pipeline.",{"config":117,"header":43,"show":80,"hide":81,"items":119},{"id":118},"step-3",[120,122],{"header":84,"content":121},"To activate continuous integration (CI) within our project, we must push the **.gitlab-ci.yml** file to the repository. Once this file is located at the root of the repository, each commit made to the project will automatically initiate a CI pipeline. The initial pipeline will commence immediately after pushing this file to the server.",{"header":87,"content":123},"* Click on the Merge icon located to the left of the file explorer.\n* Provide a commit message such as \"Adding CI configuration.\"\n* Click on **Commit & Push**.\n* When prompted with \"Commit to a new branch?\" select \"No, Use the current branch main\".\n* To return to your project, click the **Go to project** button situated on the bottom left side.\n\n**Congratulations! Your project is now successfully configured to automatically initiate a CI pipeline for every code commit.**",{"config":125,"header":47,"show":80,"hide":81,"items":127},{"id":126},"step-4",[128,131],{"header":129,"content":130},"Step Overview","While the pipeline is running, you can monitor the status of it in the **CI/CD** tab. This feature allows you to easily track the progress of your jobs, including their execution status (such as whether they have started, passed, failed, etc), as well as any output generated by your job scripts.",{"header":87,"content":132},"* Navigate to the GitLab project and locate the left menu.\n* Click on **CI/CD** in the menu, click **Pipelines**.\n* On the **Pipelines** page, locate the pipeline button in the **Status** column. Click on it to open the pipeline graph.\n* Now, you can observe the jobs and their respective statuses within the pipeline graph.\n* To explore a specific job, click on it to open the job console. This console displays all the steps executed on the Runner machine.\n* Open the package job console to view the steps that were processed by the runner.\n* The package job generates an artifact, you can download it by clicking the **download** button located on the right side.\n* By following these steps, you can effectively track the pipeline status, inspect job details, and retrieve any relevant artifacts or packages produced during the pipeline execution.\n\n**Congratulations on successfully running your first pipeline. The pipeline succeeded! You have now viewed the results and downloaded the job artifact.**",{"config":134,"header":51,"show":80,"hide":81,"items":136},{"id":135},"step-5",[137,139],{"header":84,"content":138},"We will change the expected value in the test job, the test job will fail as well as the entire pipeline will fail.",{"header":87,"content":140},"* Edit the **test** job by modifying the phrase \"Hello World\" to \"hello world\" (with lowercase letters).\n* Commit the code changes and proceed to view the pipeline, similar to Step 4.\n* Upon inspecting the pipeline, you will observe that the test job has failed. Additionally, the subsequent **package** job did not start, and the pipeline itself failed as expected.",{"config":142,"header":55,"show":80,"hide":81,"items":144},{"id":143},"step-6",[145,147],{"header":84,"content":146},"In step 5 we saw that job failure failed the entire pipeline. You can introduce logic into your pipeline that determines when a job failure will cause the entire pipeline to fail with the following steps:\n\n* Assess the conditions under which you want a job failure to result in pipeline failure. For example, you may want to enforce pipeline failure if a job fails on the main or default branch, while allowing job failures on other branches to proceed with the pipeline.\n* Define rules that govern the failure behavior. You can leverage variables such as $CI_COMMIT_BRANCH to check the current branch and make decisions based on it.\n* Set the appropriate conditions and specify whether the job should be marked as **allow_failure: false** or **allow_failure: true**.",{"header":87,"content":148},"* Add rules/if conditions to your test job.\n* Use the **allow_failure** keyword set to **true** or **false** based on the branch.\n\n```\n  test:\n    stage: test\n    script: cat compiled.txt | grep -q 'Hello world'\n    rules:\n      - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH\n        allow_failure: false\n      - if: $CI_COMMIT_BRANCH\n        allow_failure: true\n```",{"config":150,"header":59,"show":80,"hide":81,"items":152},{"id":151},"step-7",[153,155],{"header":84,"content":154},"To streamline the pipeline configuration setup, you can leverage the built-in pipeline templates provided by GitLab. These templates offer pre-defined configurations for common use cases, such as security scans, aws deployments, etc.\n\nFollow these steps to utilize the built-in pipeline templates:\n\n* Explore the available pipeline templates offered by GitLab for various scenarios such as building, testing, deploying, and more. These templates can be found [here](https://gitlab.com/gitlab-org/gitlab-foss/tree/master/lib/gitlab/ci/templates).\n* Select the template that aligns with your requirements.\n* Incorporate the template into your pipeline configuration by referencing it in your **.gitlab-ci.yml** file. You can typically do this by importing the template using the **include** keyword and specifying the path or URL to the template file.\n\nIn this guide we will add Code Quality scan to our configuration using the Code-Quality template.",{"header":87,"content":156},"Include the code quality template to your **.gitlab-ci.yml** by adding this code below the stages block.\n\n```\n  include:\n    - template: Jobs/Code-Quality.gitlab-ci.yml\n```\n\nCommit and push this change.\n\nYou will notice that a Code quality job was added to your pipeline. The Code Quality scanner will thoroughly analyze any code changes committed to this repository, and provide valuable feedback, highlighting any code quality issues that require attention and improvement. This valuable insight allows you to enhance the overall quality of your codebase and optimize its performance.\n\nThat's it! With these steps, you should be able to get started with GitLab CI and automate your project's build and testing processes.",{"type":158,"componentName":158,"componentContent":159},"CommonCardGrid",{"config":160,"title":163,"cards":164},{"columns":161,"theme":162},3,"purple","Next steps",[165,176,187],{"image":166,"title":169,"description":170,"button":171},{"altText":7,"config":167},{"src":168},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1751663568/tcmwpweaxyr0hsh4m2bf.png?","Want to learn more about GitLab CI?","Get a quick introduction to GitLab CI in this informative video. Perfect for beginners and those looking to enhance their understanding of GitLab CI.",{"text":172,"config":173},"CI overview demo",{"href":174,"dataGaName":172,"dataGaLocation":175},"https://youtu.be/WKR-7clknsA","body",{"image":177,"title":180,"description":181,"button":182},{"altText":7,"config":178},{"src":179},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1751663863/zgovjo3vv2ik0nbim6db.png?","Utilize Issues","GitLab Issues are used to track and manage tasks, bugs, or feature requests within a project. They provide a centralized place for collaboration to discuss, assign, and track the progress of work items.",{"text":183,"config":184},"Issues",{"href":185,"dataGaName":186,"dataGaLocation":175},"https://docs.gitlab.com/ee/user/project/issues/","issues",{"image":188,"title":191,"description":192,"button":193},{"altText":7,"config":189},{"src":190},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1751663742/ggf3qelfxf5bjjopwagh.png?","Add security scans to your pipeline","With GitLab's integrated security scans, you can easily incorporate them into your CI configuration. This ensures that developers receive instant feedback regarding any potential risks in their code changes.",{"text":194,"config":195},"Application security",{"href":196,"dataGaName":194,"dataGaLocation":175},"/blog/getting-started-with-gitlab-application-security/","content:en-us:get-started:continuous-integration.yml","yaml","Continuous Integration","content","en-us/get-started/continuous-integration.yml","en-us/get-started/continuous-integration","yml",{"_path":205,"_dir":206,"_draft":6,"_partial":6,"_locale":7,"data":207,"_id":626,"_type":198,"title":627,"_source":200,"_file":628,"_stem":629,"_extension":203},"/shared/en-us/main-navigation","en-us",{"logo":208,"freeTrial":213,"sales":218,"login":223,"items":228,"search":558,"minimal":589,"duo":607,"pricingDeployment":616},{"config":209},{"href":210,"dataGaName":211,"dataGaLocation":212},"/","gitlab logo","header",{"text":214,"config":215},"Get free trial",{"href":216,"dataGaName":217,"dataGaLocation":212},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":219,"config":220},"Talk to sales",{"href":221,"dataGaName":222,"dataGaLocation":212},"/sales/","sales",{"text":224,"config":225},"Sign in",{"href":226,"dataGaName":227,"dataGaLocation":212},"https://gitlab.com/users/sign_in/","sign in",[229,273,369,374,479,539],{"text":230,"config":231,"cards":233,"footer":256},"Platform",{"dataNavLevelOne":232},"platform",[234,240,248],{"title":230,"description":235,"link":236},"The most comprehensive AI-powered DevSecOps Platform",{"text":237,"config":238},"Explore our Platform",{"href":239,"dataGaName":232,"dataGaLocation":212},"/platform/",{"title":241,"description":242,"link":243},"GitLab Duo (AI)","Build software faster with AI at every stage of development",{"text":244,"config":245},"Meet GitLab Duo",{"href":246,"dataGaName":247,"dataGaLocation":212},"/gitlab-duo/","gitlab duo ai",{"title":249,"description":250,"link":251},"Why GitLab","10 reasons why Enterprises choose GitLab",{"text":252,"config":253},"Learn more",{"href":254,"dataGaName":255,"dataGaLocation":212},"/why-gitlab/","why gitlab",{"title":257,"items":258},"Get started with",[259,264,269],{"text":260,"config":261},"Platform Engineering",{"href":262,"dataGaName":263,"dataGaLocation":212},"/solutions/platform-engineering/","platform engineering",{"text":265,"config":266},"Developer Experience",{"href":267,"dataGaName":268,"dataGaLocation":212},"/developer-experience/","Developer experience",{"text":270,"config":271},"MLOps",{"href":272,"dataGaName":270,"dataGaLocation":212},"/topics/devops/the-role-of-ai-in-devops/",{"text":274,"left":27,"config":275,"link":277,"lists":281,"footer":351},"Product",{"dataNavLevelOne":276},"solutions",{"text":278,"config":279},"View all Solutions",{"href":280,"dataGaName":276,"dataGaLocation":212},"/solutions/",[282,307,330],{"title":283,"description":284,"link":285,"items":290},"Automation","CI/CD and automation to accelerate deployment",{"config":286},{"icon":287,"href":288,"dataGaName":289,"dataGaLocation":212},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[291,295,299,303],{"text":292,"config":293},"CI/CD",{"href":294,"dataGaLocation":212,"dataGaName":292},"/solutions/continuous-integration/",{"text":296,"config":297},"AI-Assisted Development",{"href":246,"dataGaLocation":212,"dataGaName":298},"AI assisted development",{"text":300,"config":301},"Source Code Management",{"href":302,"dataGaLocation":212,"dataGaName":300},"/solutions/source-code-management/",{"text":304,"config":305},"Automated Software Delivery",{"href":288,"dataGaLocation":212,"dataGaName":306},"Automated software delivery",{"title":308,"description":309,"link":310,"items":315},"Security","Deliver code faster without compromising security",{"config":311},{"href":312,"dataGaName":313,"dataGaLocation":212,"icon":314},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[316,320,325],{"text":317,"config":318},"Application Security Testing",{"href":312,"dataGaName":319,"dataGaLocation":212},"Application security testing",{"text":321,"config":322},"Software Supply Chain Security",{"href":323,"dataGaLocation":212,"dataGaName":324},"/solutions/supply-chain/","Software supply chain security",{"text":326,"config":327},"Software Compliance",{"href":328,"dataGaName":329,"dataGaLocation":212},"/solutions/software-compliance/","software compliance",{"title":331,"link":332,"items":337},"Measurement",{"config":333},{"icon":334,"href":335,"dataGaName":336,"dataGaLocation":212},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[338,342,346],{"text":339,"config":340},"Visibility & Measurement",{"href":335,"dataGaLocation":212,"dataGaName":341},"Visibility and Measurement",{"text":343,"config":344},"Value Stream Management",{"href":345,"dataGaLocation":212,"dataGaName":343},"/solutions/value-stream-management/",{"text":347,"config":348},"Analytics & Insights",{"href":349,"dataGaLocation":212,"dataGaName":350},"/solutions/analytics-and-insights/","Analytics and insights",{"title":352,"items":353},"GitLab for",[354,359,364],{"text":355,"config":356},"Enterprise",{"href":357,"dataGaLocation":212,"dataGaName":358},"/enterprise/","enterprise",{"text":360,"config":361},"Small Business",{"href":362,"dataGaLocation":212,"dataGaName":363},"/small-business/","small business",{"text":365,"config":366},"Public Sector",{"href":367,"dataGaLocation":212,"dataGaName":368},"/solutions/public-sector/","public sector",{"text":370,"config":371},"Pricing",{"href":372,"dataGaName":373,"dataGaLocation":212,"dataNavLevelOne":373},"/pricing/","pricing",{"text":375,"config":376,"link":378,"lists":382,"feature":466},"Resources",{"dataNavLevelOne":377},"resources",{"text":379,"config":380},"View all resources",{"href":381,"dataGaName":377,"dataGaLocation":212},"/resources/",[383,415,438],{"title":384,"items":385},"Getting started",[386,391,395,400,405,410],{"text":387,"config":388},"Install",{"href":389,"dataGaName":390,"dataGaLocation":212},"/install/","install",{"text":392,"config":393},"Quick start guides",{"href":19,"dataGaName":394,"dataGaLocation":212},"quick setup checklists",{"text":396,"config":397},"Learn",{"href":398,"dataGaLocation":212,"dataGaName":399},"https://university.gitlab.com/","learn",{"text":401,"config":402},"Product documentation",{"href":403,"dataGaName":404,"dataGaLocation":212},"https://docs.gitlab.com/","product documentation",{"text":406,"config":407},"Best practice videos",{"href":408,"dataGaName":409,"dataGaLocation":212},"/getting-started-videos/","best practice videos",{"text":411,"config":412},"Integrations",{"href":413,"dataGaName":414,"dataGaLocation":212},"/integrations/","integrations",{"title":416,"items":417},"Discover",[418,423,428,433],{"text":419,"config":420},"Customer success stories",{"href":421,"dataGaName":422,"dataGaLocation":212},"/customers/","customer success stories",{"text":424,"config":425},"Blog",{"href":426,"dataGaName":427,"dataGaLocation":212},"/blog/","blog",{"text":429,"config":430},"Remote",{"href":431,"dataGaName":432,"dataGaLocation":212},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"text":434,"config":435},"TeamOps",{"href":436,"dataGaName":437,"dataGaLocation":212},"/teamops/","teamops",{"title":439,"items":440},"Connect",[441,446,451,456,461],{"text":442,"config":443},"GitLab Services",{"href":444,"dataGaName":445,"dataGaLocation":212},"/services/","services",{"text":447,"config":448},"Community",{"href":449,"dataGaName":450,"dataGaLocation":212},"/community/","community",{"text":452,"config":453},"Forum",{"href":454,"dataGaName":455,"dataGaLocation":212},"https://forum.gitlab.com/","forum",{"text":457,"config":458},"Events",{"href":459,"dataGaName":460,"dataGaLocation":212},"/events/","events",{"text":462,"config":463},"Partners",{"href":464,"dataGaName":465,"dataGaLocation":212},"/partners/","partners",{"backgroundColor":467,"textColor":468,"text":469,"image":470,"link":474},"#2f2a6b","#fff","Insights for the future of software development",{"altText":471,"config":472},"the source promo card",{"src":473},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758208064/dzl0dbift9xdizyelkk4.svg",{"text":475,"config":476},"Read the latest",{"href":477,"dataGaName":478,"dataGaLocation":212},"/the-source/","the source",{"text":480,"config":481,"lists":483},"Company",{"dataNavLevelOne":482},"company",[484],{"items":485},[486,491,497,499,504,509,514,519,524,529,534],{"text":487,"config":488},"About",{"href":489,"dataGaName":490,"dataGaLocation":212},"/company/","about",{"text":492,"config":493,"footerGa":496},"Jobs",{"href":494,"dataGaName":495,"dataGaLocation":212},"/jobs/","jobs",{"dataGaName":495},{"text":457,"config":498},{"href":459,"dataGaName":460,"dataGaLocation":212},{"text":500,"config":501},"Leadership",{"href":502,"dataGaName":503,"dataGaLocation":212},"/company/team/e-group/","leadership",{"text":505,"config":506},"Team",{"href":507,"dataGaName":508,"dataGaLocation":212},"/company/team/","team",{"text":510,"config":511},"Handbook",{"href":512,"dataGaName":513,"dataGaLocation":212},"https://handbook.gitlab.com/","handbook",{"text":515,"config":516},"Investor relations",{"href":517,"dataGaName":518,"dataGaLocation":212},"https://ir.gitlab.com/","investor relations",{"text":520,"config":521},"Trust Center",{"href":522,"dataGaName":523,"dataGaLocation":212},"/security/","trust center",{"text":525,"config":526},"AI Transparency Center",{"href":527,"dataGaName":528,"dataGaLocation":212},"/ai-transparency-center/","ai transparency center",{"text":530,"config":531},"Newsletter",{"href":532,"dataGaName":533,"dataGaLocation":212},"/company/contact/","newsletter",{"text":535,"config":536},"Press",{"href":537,"dataGaName":538,"dataGaLocation":212},"/press/","press",{"text":540,"config":541,"lists":542},"Contact us",{"dataNavLevelOne":482},[543],{"items":544},[545,548,553],{"text":219,"config":546},{"href":221,"dataGaName":547,"dataGaLocation":212},"talk to sales",{"text":549,"config":550},"Get help",{"href":551,"dataGaName":552,"dataGaLocation":212},"/support/","get help",{"text":554,"config":555},"Customer portal",{"href":556,"dataGaName":557,"dataGaLocation":212},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":559,"login":560,"suggestions":567},"Close",{"text":561,"link":562},"To search repositories and projects, login to",{"text":563,"config":564},"gitlab.com",{"href":226,"dataGaName":565,"dataGaLocation":566},"search login","search",{"text":568,"default":569},"Suggestions",[570,572,576,578,582,586],{"text":241,"config":571},{"href":246,"dataGaName":241,"dataGaLocation":566},{"text":573,"config":574},"Code Suggestions (AI)",{"href":575,"dataGaName":573,"dataGaLocation":566},"/solutions/code-suggestions/",{"text":292,"config":577},{"href":294,"dataGaName":292,"dataGaLocation":566},{"text":579,"config":580},"GitLab on AWS",{"href":581,"dataGaName":579,"dataGaLocation":566},"/partners/technology-partners/aws/",{"text":583,"config":584},"GitLab on Google Cloud",{"href":585,"dataGaName":583,"dataGaLocation":566},"/partners/technology-partners/google-cloud-platform/",{"text":587,"config":588},"Why GitLab?",{"href":254,"dataGaName":587,"dataGaLocation":566},{"freeTrial":590,"mobileIcon":595,"desktopIcon":600,"secondaryButton":603},{"text":591,"config":592},"Start free trial",{"href":593,"dataGaName":217,"dataGaLocation":594},"https://gitlab.com/-/trials/new/","nav",{"altText":596,"config":597},"Gitlab Icon",{"src":598,"dataGaName":599,"dataGaLocation":594},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":596,"config":601},{"src":602,"dataGaName":599,"dataGaLocation":594},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":17,"config":604},{"href":605,"dataGaName":606,"dataGaLocation":594},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/compare/gitlab-vs-github/","get started",{"freeTrial":608,"mobileIcon":612,"desktopIcon":614},{"text":609,"config":610},"Learn more about GitLab Duo",{"href":246,"dataGaName":611,"dataGaLocation":594},"gitlab duo",{"altText":596,"config":613},{"src":598,"dataGaName":599,"dataGaLocation":594},{"altText":596,"config":615},{"src":602,"dataGaName":599,"dataGaLocation":594},{"freeTrial":617,"mobileIcon":622,"desktopIcon":624},{"text":618,"config":619},"Back to pricing",{"href":372,"dataGaName":620,"dataGaLocation":594,"icon":621},"back to pricing","GoBack",{"altText":596,"config":623},{"src":598,"dataGaName":599,"dataGaLocation":594},{"altText":596,"config":625},{"src":602,"dataGaName":599,"dataGaLocation":594},"content:shared:en-us:main-navigation.yml","Main Navigation","shared/en-us/main-navigation.yml","shared/en-us/main-navigation",{"_path":631,"_dir":206,"_draft":6,"_partial":6,"_locale":7,"title":632,"button":633,"image":638,"config":642,"_id":644,"_type":198,"_source":200,"_file":645,"_stem":646,"_extension":203},"/shared/en-us/banner","is now in public beta!",{"text":634,"config":635},"Try the Beta",{"href":636,"dataGaName":637,"dataGaLocation":212},"/gitlab-duo/agent-platform/","duo banner",{"altText":639,"config":640},"GitLab Duo Agent Platform",{"src":641},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1753720689/somrf9zaunk0xlt7ne4x.svg",{"layout":643},"release","content:shared:en-us:banner.yml","shared/en-us/banner.yml","shared/en-us/banner",{"_path":648,"_dir":206,"_draft":6,"_partial":6,"_locale":7,"data":649,"_id":888,"_type":198,"title":889,"_source":200,"_file":890,"_stem":891,"_extension":203},"/shared/en-us/main-footer",{"text":650,"source":651,"edit":657,"contribute":662,"config":667,"items":672,"minimal":880},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":652,"config":653},"View page source",{"href":654,"dataGaName":655,"dataGaLocation":656},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":658,"config":659},"Edit this page",{"href":660,"dataGaName":661,"dataGaLocation":656},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":663,"config":664},"Please contribute",{"href":665,"dataGaName":666,"dataGaLocation":656},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":668,"facebook":669,"youtube":670,"linkedin":671},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[673,720,773,817,846],{"title":370,"links":674,"subMenu":689},[675,679,684],{"text":676,"config":677},"View plans",{"href":372,"dataGaName":678,"dataGaLocation":656},"view plans",{"text":680,"config":681},"Why Premium?",{"href":682,"dataGaName":683,"dataGaLocation":656},"/pricing/premium/","why premium",{"text":685,"config":686},"Why Ultimate?",{"href":687,"dataGaName":688,"dataGaLocation":656},"/pricing/ultimate/","why ultimate",[690],{"title":691,"links":692},"Contact Us",[693,696,698,700,705,710,715],{"text":694,"config":695},"Contact sales",{"href":221,"dataGaName":222,"dataGaLocation":656},{"text":549,"config":697},{"href":551,"dataGaName":552,"dataGaLocation":656},{"text":554,"config":699},{"href":556,"dataGaName":557,"dataGaLocation":656},{"text":701,"config":702},"Status",{"href":703,"dataGaName":704,"dataGaLocation":656},"https://status.gitlab.com/","status",{"text":706,"config":707},"Terms of use",{"href":708,"dataGaName":709,"dataGaLocation":656},"/terms/","terms of use",{"text":711,"config":712},"Privacy statement",{"href":713,"dataGaName":714,"dataGaLocation":656},"/privacy/","privacy statement",{"text":716,"config":717},"Cookie preferences",{"dataGaName":718,"dataGaLocation":656,"id":719,"isOneTrustButton":27},"cookie preferences","ot-sdk-btn",{"title":274,"links":721,"subMenu":729},[722,726],{"text":723,"config":724},"DevSecOps platform",{"href":239,"dataGaName":725,"dataGaLocation":656},"devsecops platform",{"text":296,"config":727},{"href":246,"dataGaName":728,"dataGaLocation":656},"ai-assisted development",[730],{"title":731,"links":732},"Topics",[733,738,743,748,753,758,763,768],{"text":734,"config":735},"CICD",{"href":736,"dataGaName":737,"dataGaLocation":656},"/topics/ci-cd/","cicd",{"text":739,"config":740},"GitOps",{"href":741,"dataGaName":742,"dataGaLocation":656},"/topics/gitops/","gitops",{"text":744,"config":745},"DevOps",{"href":746,"dataGaName":747,"dataGaLocation":656},"/topics/devops/","devops",{"text":749,"config":750},"Version Control",{"href":751,"dataGaName":752,"dataGaLocation":656},"/topics/version-control/","version control",{"text":754,"config":755},"DevSecOps",{"href":756,"dataGaName":757,"dataGaLocation":656},"/topics/devsecops/","devsecops",{"text":759,"config":760},"Cloud Native",{"href":761,"dataGaName":762,"dataGaLocation":656},"/topics/cloud-native/","cloud native",{"text":764,"config":765},"AI for Coding",{"href":766,"dataGaName":767,"dataGaLocation":656},"/topics/devops/ai-for-coding/","ai for coding",{"text":769,"config":770},"Agentic AI",{"href":771,"dataGaName":772,"dataGaLocation":656},"/topics/agentic-ai/","agentic ai",{"title":774,"links":775},"Solutions",[776,778,780,785,789,792,796,799,801,804,807,812],{"text":317,"config":777},{"href":312,"dataGaName":317,"dataGaLocation":656},{"text":306,"config":779},{"href":288,"dataGaName":289,"dataGaLocation":656},{"text":781,"config":782},"Agile development",{"href":783,"dataGaName":784,"dataGaLocation":656},"/solutions/agile-delivery/","agile delivery",{"text":786,"config":787},"SCM",{"href":302,"dataGaName":788,"dataGaLocation":656},"source code management",{"text":734,"config":790},{"href":294,"dataGaName":791,"dataGaLocation":656},"continuous integration & delivery",{"text":793,"config":794},"Value stream management",{"href":345,"dataGaName":795,"dataGaLocation":656},"value stream management",{"text":739,"config":797},{"href":798,"dataGaName":742,"dataGaLocation":656},"/solutions/gitops/",{"text":355,"config":800},{"href":357,"dataGaName":358,"dataGaLocation":656},{"text":802,"config":803},"Small business",{"href":362,"dataGaName":363,"dataGaLocation":656},{"text":805,"config":806},"Public sector",{"href":367,"dataGaName":368,"dataGaLocation":656},{"text":808,"config":809},"Education",{"href":810,"dataGaName":811,"dataGaLocation":656},"/solutions/education/","education",{"text":813,"config":814},"Financial services",{"href":815,"dataGaName":816,"dataGaLocation":656},"/solutions/finance/","financial services",{"title":375,"links":818},[819,821,823,825,828,830,832,834,836,838,840,842,844],{"text":387,"config":820},{"href":389,"dataGaName":390,"dataGaLocation":656},{"text":392,"config":822},{"href":19,"dataGaName":394,"dataGaLocation":656},{"text":396,"config":824},{"href":398,"dataGaName":399,"dataGaLocation":656},{"text":401,"config":826},{"href":403,"dataGaName":827,"dataGaLocation":656},"docs",{"text":424,"config":829},{"href":426,"dataGaName":427,"dataGaLocation":656},{"text":419,"config":831},{"href":421,"dataGaName":422,"dataGaLocation":656},{"text":429,"config":833},{"href":431,"dataGaName":432,"dataGaLocation":656},{"text":442,"config":835},{"href":444,"dataGaName":445,"dataGaLocation":656},{"text":434,"config":837},{"href":436,"dataGaName":437,"dataGaLocation":656},{"text":447,"config":839},{"href":449,"dataGaName":450,"dataGaLocation":656},{"text":452,"config":841},{"href":454,"dataGaName":455,"dataGaLocation":656},{"text":457,"config":843},{"href":459,"dataGaName":460,"dataGaLocation":656},{"text":462,"config":845},{"href":464,"dataGaName":465,"dataGaLocation":656},{"title":480,"links":847},[848,850,852,854,856,858,860,864,869,871,873,875],{"text":487,"config":849},{"href":489,"dataGaName":482,"dataGaLocation":656},{"text":492,"config":851},{"href":494,"dataGaName":495,"dataGaLocation":656},{"text":500,"config":853},{"href":502,"dataGaName":503,"dataGaLocation":656},{"text":505,"config":855},{"href":507,"dataGaName":508,"dataGaLocation":656},{"text":510,"config":857},{"href":512,"dataGaName":513,"dataGaLocation":656},{"text":515,"config":859},{"href":517,"dataGaName":518,"dataGaLocation":656},{"text":861,"config":862},"Sustainability",{"href":863,"dataGaName":861,"dataGaLocation":656},"/sustainability/",{"text":865,"config":866},"Diversity, inclusion and belonging (DIB)",{"href":867,"dataGaName":868,"dataGaLocation":656},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":520,"config":870},{"href":522,"dataGaName":523,"dataGaLocation":656},{"text":530,"config":872},{"href":532,"dataGaName":533,"dataGaLocation":656},{"text":535,"config":874},{"href":537,"dataGaName":538,"dataGaLocation":656},{"text":876,"config":877},"Modern Slavery Transparency Statement",{"href":878,"dataGaName":879,"dataGaLocation":656},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":881},[882,884,886],{"text":706,"config":883},{"href":708,"dataGaName":709,"dataGaLocation":656},{"text":711,"config":885},{"href":713,"dataGaName":714,"dataGaLocation":656},{"text":716,"config":887},{"dataGaName":718,"dataGaLocation":656,"id":719,"isOneTrustButton":27},"content:shared:en-us:main-footer.yml","Main Footer","shared/en-us/main-footer.yml","shared/en-us/main-footer",{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"seo":893,"content":894,"_id":197,"_type":198,"title":199,"_source":200,"_file":201,"_stem":202,"_extension":203},{"title":9,"ogTitle":9,"description":10,"ogDescription":10},[895,901,904,973],{"type":13,"componentName":13,"componentContent":896},{"crumbs":897},[898,900],{"title":17,"config":899},{"href":19},{"title":9},{"type":22,"componentName":22,"componentContent":902},{"title":9,"readTime":24,"text":25,"config":903},{"bodyText":27},{"type":29,"componentName":29,"componentContent":905},{"anchors":906,"components":922},{"text":32,"data":907},[908,910,912,914,916,918,920],{"text":35,"config":909},{"href":37},{"text":39,"config":911},{"href":41},{"text":43,"config":913},{"href":45},{"text":47,"config":915},{"href":49},{"text":51,"config":917},{"href":53},{"text":55,"config":919},{"href":57},{"text":59,"config":921},{"href":61},[923,929],{"type":64,"componentName":64,"componentContent":924},{"config":925,"cards":926},{"noDecoration":27},[927],{"config":928,"title":71,"description":72},{"icon":70},{"type":74,"componentName":74,"componentContent":930},{"groups":931},[932,937,948,953,958,963,968],{"config":933,"header":35,"show":80,"hide":81,"items":934},{"id":79},[935,936],{"header":84,"content":85},{"header":87,"content":88},{"config":938,"header":39,"show":80,"hide":81,"items":939},{"id":91},[940,941,942,943,944,945,946,947],{"header":84,"content":94},{"header":96,"content":97},{"header":99,"content":100},{"header":102,"content":103},{"header":105,"content":106},{"header":108,"content":109},{"header":111,"content":112},{"header":114,"content":115},{"config":949,"header":43,"show":80,"hide":81,"items":950},{"id":118},[951,952],{"header":84,"content":121},{"header":87,"content":123},{"config":954,"header":47,"show":80,"hide":81,"items":955},{"id":126},[956,957],{"header":129,"content":130},{"header":87,"content":132},{"config":959,"header":51,"show":80,"hide":81,"items":960},{"id":135},[961,962],{"header":84,"content":138},{"header":87,"content":140},{"config":964,"header":55,"show":80,"hide":81,"items":965},{"id":143},[966,967],{"header":84,"content":146},{"header":87,"content":148},{"config":969,"header":59,"show":80,"hide":81,"items":970},{"id":151},[971,972],{"header":84,"content":154},{"header":87,"content":156},{"type":158,"componentName":158,"componentContent":974},{"config":975,"title":163,"cards":976},{"columns":161,"theme":162},[977,982,987],{"image":978,"title":169,"description":170,"button":980},{"altText":7,"config":979},{"src":168},{"text":172,"config":981},{"href":174,"dataGaName":172,"dataGaLocation":175},{"image":983,"title":180,"description":181,"button":985},{"altText":7,"config":984},{"src":179},{"text":183,"config":986},{"href":185,"dataGaName":186,"dataGaLocation":175},{"image":988,"title":191,"description":192,"button":990},{"altText":7,"config":989},{"src":190},{"text":194,"config":991},{"href":196,"dataGaName":194,"dataGaLocation":175},1761852437730]