[{"data":1,"prerenderedAt":1741},["ShallowReactive",2],{"/blog/getting-started-with-gitlab-understanding-ci-cd":3,"navigation-en-us":965,"banner-en-us":1390,"footer-en-us":1400,"blog-post-authors-en-us-GitLab":1644,"blog-related-posts-en-us-getting-started-with-gitlab-understanding-ci-cd":1659,"blog-promotions-en-us":1678,"next-steps-en-us":1731},{"id":4,"title":5,"authors":6,"body":8,"category":942,"date":943,"description":944,"extension":945,"externalUrl":946,"faq":946,"featured":230,"heroImage":947,"meta":948,"navigation":230,"path":949,"seo":950,"slug":955,"stem":956,"tags":957,"template":963,"updatedDate":946,"__hash__":964},"blogPosts/en-us/blog/getting-started-with-gitlab-understanding-ci-cd.md","Getting started with GitLab: Understanding CI/CD",[7],"GitLab",{"type":9,"value":10,"toc":930},"minimark",[11,18,28,33,64,68,71,109,113,167,171,177,361,364,368,371,376,395,564,569,578,752,756,763,766,783,789,793,812,822,826,834,837,858,863,866,882,886,889,926],[12,13,14],"p",{},[15,16,17],"em",{},"Welcome to our \"Getting started with GitLab\" series, where we help newcomers get familiar with the GitLab DevSecOps platform.",[12,19,20,21,27],{},"Imagine a workflow where every code change is automatically built, tested, and deployed to your users. That's the power of ",[22,23,26],"a",{"href":24,"rel":25},"https://about.gitlab.com/topics/ci-cd/",[],"Continuous Integration/Continuous Delivery (CI/CD)","! CI/CD helps you catch bugs early, ensures code quality, and delivers software faster and more frequently.",[29,30,32],"h3",{"id":31},"what-is-cicd","What is CI/CD?",[34,35,36,44,54],"ul",{},[37,38,39,43],"li",{},[40,41,42],"strong",{},"Continuous Integration"," is a development practice where developers integrate code changes into a shared repository frequently, preferably several times a day. Each integration is then verified by an automated build and test process, allowing teams to detect problems early.",[37,45,46,49,50,53],{},[40,47,48],{},"Continuous Delivery"," extends CI by automating the release pipeline, ensuring that your code is ",[15,51,52],{},"always"," in a deployable state. You can deploy your application to various environments (e.g., staging, production) with a single click or automatically.",[37,55,56,59,60,63],{},[40,57,58],{},"Continuous Deployment"," takes it a step further by automatically deploying ",[15,61,62],{},"every successful build"," to production. This requires a high degree of confidence in your automated tests and deployment process.",[29,65,67],{"id":66},"why-gitlab-cicd","Why GitLab CI/CD?",[12,69,70],{},"GitLab CI/CD is a powerful, integrated system that comes built-in with GitLab. It offers a seamless experience for automating your entire software development lifecycle. With GitLab CI/CD, you can:",[34,72,73,79,85,91,97,103],{},[37,74,75,78],{},[40,76,77],{},"Automate everything:"," Build, test, and deploy your applications with ease.",[37,80,81,84],{},[40,82,83],{},"Catch bugs early:"," Detect and fix errors before they reach production.",[37,86,87,90],{},[40,88,89],{},"Get faster feedback:"," Receive immediate feedback on your code changes.",[37,92,93,96],{},[40,94,95],{},"Improve collaboration:"," Work together more effectively with automated workflows.",[37,98,99,102],{},[40,100,101],{},"Accelerate delivery:"," Release software faster and more frequently.",[37,104,105,108],{},[40,106,107],{},"Reduce risk:"," Minimize deployment errors and rollbacks.",[29,110,112],{"id":111},"the-elements-of-gitlab-cicd","The elements of GitLab CI/CD",[34,114,115,131,143,155],{},[37,116,117,121,124,125,130],{},[118,119,120],"code",{},".gitlab-ci.yml",[40,122,123],{},":"," This ",[22,126,129],{"href":127,"rel":128},"https://docs.gitlab.com/ci/yaml/",[],"YAML file",", located in your project's root directory, defines your CI/CD pipeline, including stages, jobs, and runners.",[37,132,133,140,142],{},[22,134,137],{"href":135,"rel":136},"https://docs.gitlab.com/runner/",[],[40,138,139],{},"GitLab Runner",[40,141,123],{}," This agent executes your CI/CD jobs on your infrastructure (e.g. physical machines, virtual machines, Docker containers, or Kubernetes clusters).",[37,144,145,152,154],{},[22,146,149],{"href":147,"rel":148},"https://docs.gitlab.com/ci/yaml/#stages",[],[40,150,151],{},"Stages",[40,153,123],{}," Stages define the order of execution for your jobs (e.g. build, test, and deploy).",[37,156,157,164,166],{},[22,158,161],{"href":159,"rel":160},"https://docs.gitlab.com/ci/yaml/#job-keywords",[],[40,162,163],{},"Jobs",[40,165,123],{}," Jobs are individual units of work within a stage (e.g. compile code, run tests, and deploy to staging).",[29,168,170],{"id":169},"setting-up-gitlab-ci","Setting up GitLab CI",[12,172,173,174,176],{},"Getting started with GitLab CI is simple. Here's a basic example of a ",[118,175,120],{}," file:",[178,179,184],"pre",{"className":180,"code":181,"language":182,"meta":183,"style":183},"language-yaml shiki shiki-themes github-light","stages:\n  - build\n  - test\n  - deploy\n\nbuild_job:\n  stage: build\n  script:\n    - echo \"Building the application...\"\n\ntest_job:\n  stage: test\n  script:\n    - echo \"Running tests...\"\n\ndeploy_job:\n  stage: deploy\n  script:\n    - echo \"Deploying to production...\"\n  environment:\n    name: production\n\n","yaml","",[118,185,186,199,209,217,225,232,240,251,259,268,273,281,290,297,305,310,318,327,334,342,350],{"__ignoreMap":183},[187,188,191,195],"span",{"class":189,"line":190},"line",1,[187,192,194],{"class":193},"shJU0","stages",[187,196,198],{"class":197},"sgsFI",":\n",[187,200,202,205],{"class":189,"line":201},2,[187,203,204],{"class":197},"  - ",[187,206,208],{"class":207},"sYBdl","build\n",[187,210,212,214],{"class":189,"line":211},3,[187,213,204],{"class":197},[187,215,216],{"class":207},"test\n",[187,218,220,222],{"class":189,"line":219},4,[187,221,204],{"class":197},[187,223,224],{"class":207},"deploy\n",[187,226,228],{"class":189,"line":227},5,[187,229,231],{"emptyLinePlaceholder":230},true,"\n",[187,233,235,238],{"class":189,"line":234},6,[187,236,237],{"class":193},"build_job",[187,239,198],{"class":197},[187,241,243,246,249],{"class":189,"line":242},7,[187,244,245],{"class":193},"  stage",[187,247,248],{"class":197},": ",[187,250,208],{"class":207},[187,252,254,257],{"class":189,"line":253},8,[187,255,256],{"class":193},"  script",[187,258,198],{"class":197},[187,260,262,265],{"class":189,"line":261},9,[187,263,264],{"class":197},"    - ",[187,266,267],{"class":207},"echo \"Building the application...\"\n",[187,269,271],{"class":189,"line":270},10,[187,272,231],{"emptyLinePlaceholder":230},[187,274,276,279],{"class":189,"line":275},11,[187,277,278],{"class":193},"test_job",[187,280,198],{"class":197},[187,282,284,286,288],{"class":189,"line":283},12,[187,285,245],{"class":193},[187,287,248],{"class":197},[187,289,216],{"class":207},[187,291,293,295],{"class":189,"line":292},13,[187,294,256],{"class":193},[187,296,198],{"class":197},[187,298,300,302],{"class":189,"line":299},14,[187,301,264],{"class":197},[187,303,304],{"class":207},"echo \"Running tests...\"\n",[187,306,308],{"class":189,"line":307},15,[187,309,231],{"emptyLinePlaceholder":230},[187,311,313,316],{"class":189,"line":312},16,[187,314,315],{"class":193},"deploy_job",[187,317,198],{"class":197},[187,319,321,323,325],{"class":189,"line":320},17,[187,322,245],{"class":193},[187,324,248],{"class":197},[187,326,224],{"class":207},[187,328,330,332],{"class":189,"line":329},18,[187,331,256],{"class":193},[187,333,198],{"class":197},[187,335,337,339],{"class":189,"line":336},19,[187,338,264],{"class":197},[187,340,341],{"class":207},"echo \"Deploying to production...\"\n",[187,343,345,348],{"class":189,"line":344},20,[187,346,347],{"class":193},"  environment",[187,349,198],{"class":197},[187,351,353,356,358],{"class":189,"line":352},21,[187,354,355],{"class":193},"    name",[187,357,248],{"class":197},[187,359,360],{"class":207},"production\n",[12,362,363],{},"This configuration defines three stages: \"build,\" \"test,\" and \"deploy.\" Each stage contains a job that executes a simple script.",[29,365,367],{"id":366},"cicd-configuration-examples","CI/CD configuration examples",[12,369,370],{},"Let's explore some more realistic examples.",[12,372,373],{},[40,374,375],{},"Building and deploying a Node.js application",[12,377,378,379,384,385,390,391,394],{},"The pipeline definition below outlines using npm to build and test a Node.js application and ",[22,380,383],{"href":381,"rel":382},"https://docs.gitlab.com/ci/examples/deployment/",[],"dpl"," to deploy the application to Heroku. The deploy stage of the pipeline makes use of ",[22,386,389],{"href":387,"rel":388},"https://docs.gitlab.com/ci/variables/",[],"GitLab CI/CD variables",", which allow developers to store sensitive information (e.g. credentials) and securely use them in CI/CD processes. In this example, an API key to deploy to Heroku is stored under the variable key name ",[118,392,393],{},"$HEROKU_API_KEY"," used by the dpl tool.",[178,396,398],{"className":180,"code":397,"language":182,"meta":183,"style":183},"stages:\n  - build\n  - test\n  - deploy\n\nbuild:\n  stage: build\n  image: node:latest\n  script:\n    - npm install\n    - npm run build\n\ntest:\n  stage: test\n  image: node:latest\n  script:\n    - npm run test\n\ndeploy:\n  stage: deploy\n  image: ruby:latest\n  script:\n    - gem install dpl\n    - dpl --provider=heroku --app=$HEROKU_APP_NAME --api-key=$HEROKU_API_KEY\n\n",[118,399,400,406,412,418,424,428,435,443,453,459,466,473,477,484,492,500,506,513,517,524,532,541,548,556],{"__ignoreMap":183},[187,401,402,404],{"class":189,"line":190},[187,403,194],{"class":193},[187,405,198],{"class":197},[187,407,408,410],{"class":189,"line":201},[187,409,204],{"class":197},[187,411,208],{"class":207},[187,413,414,416],{"class":189,"line":211},[187,415,204],{"class":197},[187,417,216],{"class":207},[187,419,420,422],{"class":189,"line":219},[187,421,204],{"class":197},[187,423,224],{"class":207},[187,425,426],{"class":189,"line":227},[187,427,231],{"emptyLinePlaceholder":230},[187,429,430,433],{"class":189,"line":234},[187,431,432],{"class":193},"build",[187,434,198],{"class":197},[187,436,437,439,441],{"class":189,"line":242},[187,438,245],{"class":193},[187,440,248],{"class":197},[187,442,208],{"class":207},[187,444,445,448,450],{"class":189,"line":253},[187,446,447],{"class":193},"  image",[187,449,248],{"class":197},[187,451,452],{"class":207},"node:latest\n",[187,454,455,457],{"class":189,"line":261},[187,456,256],{"class":193},[187,458,198],{"class":197},[187,460,461,463],{"class":189,"line":270},[187,462,264],{"class":197},[187,464,465],{"class":207},"npm install\n",[187,467,468,470],{"class":189,"line":275},[187,469,264],{"class":197},[187,471,472],{"class":207},"npm run build\n",[187,474,475],{"class":189,"line":283},[187,476,231],{"emptyLinePlaceholder":230},[187,478,479,482],{"class":189,"line":292},[187,480,481],{"class":193},"test",[187,483,198],{"class":197},[187,485,486,488,490],{"class":189,"line":299},[187,487,245],{"class":193},[187,489,248],{"class":197},[187,491,216],{"class":207},[187,493,494,496,498],{"class":189,"line":307},[187,495,447],{"class":193},[187,497,248],{"class":197},[187,499,452],{"class":207},[187,501,502,504],{"class":189,"line":312},[187,503,256],{"class":193},[187,505,198],{"class":197},[187,507,508,510],{"class":189,"line":320},[187,509,264],{"class":197},[187,511,512],{"class":207},"npm run test\n",[187,514,515],{"class":189,"line":329},[187,516,231],{"emptyLinePlaceholder":230},[187,518,519,522],{"class":189,"line":336},[187,520,521],{"class":193},"deploy",[187,523,198],{"class":197},[187,525,526,528,530],{"class":189,"line":344},[187,527,245],{"class":193},[187,529,248],{"class":197},[187,531,224],{"class":207},[187,533,534,536,538],{"class":189,"line":352},[187,535,447],{"class":193},[187,537,248],{"class":197},[187,539,540],{"class":207},"ruby:latest\n",[187,542,544,546],{"class":189,"line":543},22,[187,545,256],{"class":193},[187,547,198],{"class":197},[187,549,551,553],{"class":189,"line":550},23,[187,552,264],{"class":197},[187,554,555],{"class":207},"gem install dpl\n",[187,557,559,561],{"class":189,"line":558},24,[187,560,264],{"class":197},[187,562,563],{"class":207},"dpl --provider=heroku --app=$HEROKU_APP_NAME --api-key=$HEROKU_API_KEY\n",[12,565,566],{},[40,567,568],{},"Deploying to different environments (staging and production)",[12,570,571,572,577],{},"GitLab also offers the idea of ",[22,573,576],{"href":574,"rel":575},"https://docs.gitlab.com/ci/environments/",[],"Environments"," with CI/CD. This feature allows users to track deployments from CI/CD to infrastructure targets. In the example below, the pipeline adds stages with an environment property for a staging and production environment. While the deploy_staging stage will always run its script, the deploy_production stage requires manual approval to prevent accidental deployment to production.",[178,579,581],{"className":180,"code":580,"language":182,"meta":183,"style":183},"stages:\n  - build\n  - test\n  - deploy_staging\n  - deploy_production\n\nbuild:\n  # ...\n\ntest:\n  # ...\n\ndeploy_staging:\n  stage: deploy_staging\n  script:\n    - echo \"Deploying to staging...\"\n  environment:\n    name: staging\n\ndeploy_production:\n  stage: deploy_production\n  script:\n    - echo \"Deploying to production...\"\n  environment:\n    name: production\n  when: manual  # Requires manual approval\n\n",[118,582,583,589,595,601,608,615,619,625,631,635,641,645,649,656,664,670,677,683,692,696,703,711,717,723,729,738],{"__ignoreMap":183},[187,584,585,587],{"class":189,"line":190},[187,586,194],{"class":193},[187,588,198],{"class":197},[187,590,591,593],{"class":189,"line":201},[187,592,204],{"class":197},[187,594,208],{"class":207},[187,596,597,599],{"class":189,"line":211},[187,598,204],{"class":197},[187,600,216],{"class":207},[187,602,603,605],{"class":189,"line":219},[187,604,204],{"class":197},[187,606,607],{"class":207},"deploy_staging\n",[187,609,610,612],{"class":189,"line":227},[187,611,204],{"class":197},[187,613,614],{"class":207},"deploy_production\n",[187,616,617],{"class":189,"line":234},[187,618,231],{"emptyLinePlaceholder":230},[187,620,621,623],{"class":189,"line":242},[187,622,432],{"class":193},[187,624,198],{"class":197},[187,626,627],{"class":189,"line":253},[187,628,630],{"class":629},"sAwPA","  # ...\n",[187,632,633],{"class":189,"line":261},[187,634,231],{"emptyLinePlaceholder":230},[187,636,637,639],{"class":189,"line":270},[187,638,481],{"class":193},[187,640,198],{"class":197},[187,642,643],{"class":189,"line":275},[187,644,630],{"class":629},[187,646,647],{"class":189,"line":283},[187,648,231],{"emptyLinePlaceholder":230},[187,650,651,654],{"class":189,"line":292},[187,652,653],{"class":193},"deploy_staging",[187,655,198],{"class":197},[187,657,658,660,662],{"class":189,"line":299},[187,659,245],{"class":193},[187,661,248],{"class":197},[187,663,607],{"class":207},[187,665,666,668],{"class":189,"line":307},[187,667,256],{"class":193},[187,669,198],{"class":197},[187,671,672,674],{"class":189,"line":312},[187,673,264],{"class":197},[187,675,676],{"class":207},"echo \"Deploying to staging...\"\n",[187,678,679,681],{"class":189,"line":320},[187,680,347],{"class":193},[187,682,198],{"class":197},[187,684,685,687,689],{"class":189,"line":329},[187,686,355],{"class":193},[187,688,248],{"class":197},[187,690,691],{"class":207},"staging\n",[187,693,694],{"class":189,"line":336},[187,695,231],{"emptyLinePlaceholder":230},[187,697,698,701],{"class":189,"line":344},[187,699,700],{"class":193},"deploy_production",[187,702,198],{"class":197},[187,704,705,707,709],{"class":189,"line":352},[187,706,245],{"class":193},[187,708,248],{"class":197},[187,710,614],{"class":207},[187,712,713,715],{"class":189,"line":543},[187,714,256],{"class":193},[187,716,198],{"class":197},[187,718,719,721],{"class":189,"line":550},[187,720,264],{"class":197},[187,722,341],{"class":207},[187,724,725,727],{"class":189,"line":558},[187,726,347],{"class":193},[187,728,198],{"class":197},[187,730,732,734,736],{"class":189,"line":731},25,[187,733,355],{"class":193},[187,735,248],{"class":197},[187,737,360],{"class":207},[187,739,741,744,746,749],{"class":189,"line":740},26,[187,742,743],{"class":193},"  when",[187,745,248],{"class":197},[187,747,748],{"class":207},"manual",[187,750,751],{"class":629},"  # Requires manual approval\n",[29,753,755],{"id":754},"gitlab-auto-devops","GitLab Auto DevOps",[12,757,758,762],{},[22,759,755],{"href":760,"rel":761},"https://docs.gitlab.com/topics/autodevops/",[]," simplifies CI/CD by providing a pre-defined configuration that automatically builds, tests, and deploys your applications. It leverages best practices and industry standards to streamline your workflow.",[12,764,765],{},"To enable Auto DevOps:",[767,768,769,776],"ol",{},[37,770,771,772,775],{},"Go to your project's ",[40,773,774],{},"Settings > CI/CD > General pipelines",".",[37,777,778,779,782],{},"Enable the ",[40,780,781],{},"Auto DevOps"," option.",[12,784,785,786,788],{},"Auto DevOps automatically detects your project's language and framework and configures the necessary build, test, and deployment stages. You don’t even need to create a ",[118,787,120],{}," file.",[29,790,792],{"id":791},"cicd-catalog","CI/CD Catalog",[12,794,795,796,800,801,806,807,811],{},"The ",[22,797,792],{"href":798,"rel":799},"https://about.gitlab.com/blog/faq-gitlab-ci-cd-catalog/",[]," is a list of projects with published ",[22,802,805],{"href":803,"rel":804},"https://docs.gitlab.com/ci/components/",[],"CI/CD components"," you can use to extend your CI/CD workflow. Anyone can create a component project and add it to the CI/CD Catalog or contribute to an existing project to improve the available components. You can find published components in the ",[22,808,792],{"href":809,"rel":810},"https://gitlab.com/explore/catalog",[]," on GitLab.com.",[813,814,815],"blockquote",{},[12,816,817],{},[22,818,821],{"href":819,"rel":820},"https://about.gitlab.com/blog/tutorial-how-to-set-up-your-first-gitlab-ci-cd-component/",[],"Tutorial: How to set up your first GitLab CI/CD component",[29,823,825],{"id":824},"ci-templates","CI templates",[12,827,828,829,833],{},"You can also create your own ",[22,830,825],{"href":831,"rel":832},"https://docs.gitlab.com/ci/examples/",[]," to standardize and reuse CI/CD configurations across multiple projects. This promotes consistency and reduces duplication.",[12,835,836],{},"To create a CI template:",[767,838,839,845,848],{},[37,840,841,842,844],{},"Create a ",[118,843,120],{}," file in a dedicated project or repository.",[37,846,847],{},"Define your CI/CD configuration in the template.",[37,849,850,851,853,854,857],{},"In your project's ",[118,852,120],{}," file, use the ",[118,855,856],{},"include"," keyword to include the template.",[859,860,862],"h2",{"id":861},"take-your-development-to-the-next-level","Take your development to the next level",[12,864,865],{},"GitLab CI/CD is a powerful tool that can transform your development workflow. By understanding the concepts of CI/CD, configuring your pipelines, and leveraging features like Auto DevOps, the CI/CD Catalog, and CI templates, you can automate your entire software development lifecycle and deliver high-quality software faster and more efficiently.",[813,867,868],{},[12,869,870,871,876,877,775],{},"Want to take your learning to the next level? Sign up for ",[22,872,875],{"href":873,"rel":874},"https://university.gitlab.com/",[],"GitLab University courses",". Or you can get going right away with a ",[22,878,881],{"href":879,"rel":880},"https://about.gitlab.com/free-trial/",[],"free trial of GitLab Ultimate",[859,883,885],{"id":884},"getting-started-with-gitlab-series","\"Getting Started with GitLab\" series",[12,887,888],{},"Check out more articles in our \"Getting Started with GitLab\" series:",[34,890,891,898,905,912,919],{},[37,892,893],{},[22,894,897],{"href":895,"rel":896},"https://about.gitlab.com/blog/getting-started-with-gitlab-how-to-manage-users/",[],"How to manage users",[37,899,900],{},[22,901,904],{"href":902,"rel":903},"https://about.gitlab.com/blog/getting-started-with-gitlab-how-to-import-your-projects-to-gitlab/",[],"How to import your projects to GitLab",[37,906,907],{},[22,908,911],{"href":909,"rel":910},"https://about.gitlab.com/blog/getting-started-with-gitlab-mastering-project-management/",[],"Mastering project management",[37,913,914],{},[22,915,918],{"href":916,"rel":917},"https://about.gitlab.com/blog/automating-agile-workflows-with-the-gitlab-triage-gem/",[],"Automating Agile workflows with the gitlab-triage gem",[37,920,921],{},[22,922,925],{"href":923,"rel":924},"https://about.gitlab.com/blog/getting-started-with-gitlab-working-with-ci-cd-variables/",[],"Working with CI/CD variables",[927,928,929],"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);}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}",{"title":183,"searchDepth":201,"depth":201,"links":931},[932,933,934,935,936,937,938,939,940,941],{"id":31,"depth":211,"text":32},{"id":66,"depth":211,"text":67},{"id":111,"depth":211,"text":112},{"id":169,"depth":211,"text":170},{"id":366,"depth":211,"text":367},{"id":754,"depth":211,"text":755},{"id":791,"depth":211,"text":792},{"id":824,"depth":211,"text":825},{"id":861,"depth":201,"text":862},{"id":884,"depth":201,"text":885},"product","2025-04-25","Learn the basics of continuous integration/continuous delivery in this beginner's guide, including what CI/CD components are and how to create them.","md",null,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659525/Blog/Hero%20Images/blog-getting-started-with-gitlab-banner-0497-option4-fy25.png",{},"/en-us/blog/getting-started-with-gitlab-understanding-ci-cd",{"title":5,"description":944,"ogTitle":5,"ogDescription":944,"noIndex":951,"ogImage":947,"ogUrl":952,"ogSiteName":953,"ogType":954,"canonicalUrls":952},false,"https://about.gitlab.com/blog/getting-started-with-gitlab-understanding-ci-cd","https://about.gitlab.com","article","getting-started-with-gitlab-understanding-ci-cd","en-us/blog/getting-started-with-gitlab-understanding-ci-cd",[958,959,960,961,942,962],"CI/CD","CI","CD","DevSecOps platform","tutorial","BlogPost","0fa2u3czsiBA6pJSHer7HfK7G9NAlucUZqi5t9gUtHI",{"logo":966,"freeTrial":971,"sales":976,"login":981,"items":986,"search":1310,"minimal":1341,"duo":1360,"switchNav":1369,"pricingDeployment":1380},{"config":967},{"href":968,"dataGaName":969,"dataGaLocation":970},"/","gitlab logo","header",{"text":972,"config":973},"Get free trial",{"href":974,"dataGaName":975,"dataGaLocation":970},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":977,"config":978},"Request a demo",{"href":979,"dataGaName":980,"dataGaLocation":970},"/sales/?contact-topic=request-demo","sales",{"text":982,"config":983},"Sign in",{"href":984,"dataGaName":985,"dataGaLocation":970},"https://gitlab.com/users/sign_in/","sign in",[987,1016,1115,1120,1233,1288],{"text":988,"config":989,"menu":991},"Platform",{"dataNavLevelOne":990},"platform",{"type":992,"columns":993},"cards",[994,1000,1008],{"title":988,"description":995,"link":996},"The intelligent orchestration platform for DevSecOps",{"text":997,"config":998},"Explore our Platform",{"href":999,"dataGaName":990,"dataGaLocation":970},"/platform/",{"title":1001,"description":1002,"link":1003},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":1004,"config":1005},"Meet GitLab Duo",{"href":1006,"dataGaName":1007,"dataGaLocation":970},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":1009,"description":1010,"link":1011},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":1012,"config":1013},"Learn more",{"href":1014,"dataGaName":1015,"dataGaLocation":970},"/why-gitlab/","why gitlab",{"text":1017,"left":230,"config":1018,"menu":1020},"Product",{"dataNavLevelOne":1019},"solutions",{"type":1021,"link":1022,"columns":1026,"feature":1094},"lists",{"text":1023,"config":1024},"View all Solutions",{"href":1025,"dataGaName":1019,"dataGaLocation":970},"/solutions/",[1027,1050,1073],{"title":1028,"description":1029,"link":1030,"items":1035},"Automation","CI/CD and automation to accelerate deployment",{"config":1031},{"icon":1032,"href":1033,"dataGaName":1034,"dataGaLocation":970},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[1036,1039,1042,1046],{"text":958,"config":1037},{"href":1038,"dataGaLocation":970,"dataGaName":958},"/solutions/continuous-integration/",{"text":1001,"config":1040},{"href":1006,"dataGaLocation":970,"dataGaName":1041},"gitlab duo agent platform - product menu",{"text":1043,"config":1044},"Source Code Management",{"href":1045,"dataGaLocation":970,"dataGaName":1043},"/solutions/source-code-management/",{"text":1047,"config":1048},"Automated Software Delivery",{"href":1033,"dataGaLocation":970,"dataGaName":1049},"Automated software delivery",{"title":1051,"description":1052,"link":1053,"items":1058},"Security","Deliver code faster without compromising security",{"config":1054},{"href":1055,"dataGaName":1056,"dataGaLocation":970,"icon":1057},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[1059,1063,1068],{"text":1060,"config":1061},"Application Security Testing",{"href":1055,"dataGaName":1062,"dataGaLocation":970},"Application security testing",{"text":1064,"config":1065},"Software Supply Chain Security",{"href":1066,"dataGaLocation":970,"dataGaName":1067},"/solutions/supply-chain/","Software supply chain security",{"text":1069,"config":1070},"Software Compliance",{"href":1071,"dataGaName":1072,"dataGaLocation":970},"/solutions/software-compliance/","software compliance",{"title":1074,"link":1075,"items":1080},"Measurement",{"config":1076},{"icon":1077,"href":1078,"dataGaName":1079,"dataGaLocation":970},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[1081,1085,1089],{"text":1082,"config":1083},"Visibility & Measurement",{"href":1078,"dataGaLocation":970,"dataGaName":1084},"Visibility and Measurement",{"text":1086,"config":1087},"Value Stream Management",{"href":1088,"dataGaLocation":970,"dataGaName":1086},"/solutions/value-stream-management/",{"text":1090,"config":1091},"Analytics & Insights",{"href":1092,"dataGaLocation":970,"dataGaName":1093},"/solutions/analytics-and-insights/","Analytics and insights",{"title":1095,"type":1021,"items":1096},"GitLab for",[1097,1103,1109],{"text":1098,"config":1099},"Enterprise",{"icon":1100,"href":1101,"dataGaLocation":970,"dataGaName":1102},"Building","/enterprise/","enterprise",{"text":1104,"config":1105},"Small Business",{"icon":1106,"href":1107,"dataGaLocation":970,"dataGaName":1108},"Work","/small-business/","small business",{"text":1110,"config":1111},"Public Sector",{"icon":1112,"href":1113,"dataGaLocation":970,"dataGaName":1114},"Organization","/solutions/public-sector/","public sector",{"text":1116,"config":1117},"Pricing",{"href":1118,"dataGaName":1119,"dataGaLocation":970,"dataNavLevelOne":1119},"/pricing/","pricing",{"text":1121,"config":1122,"menu":1124},"Resources",{"dataNavLevelOne":1123},"resources",{"type":1021,"link":1125,"columns":1129,"feature":1222},{"text":1126,"config":1127},"View all resources",{"href":1128,"dataGaName":1123,"dataGaLocation":970},"/resources/",[1130,1162,1189],{"title":1131,"items":1132},"Getting started",[1133,1138,1143,1147,1152,1157],{"text":1134,"config":1135},"Install",{"href":1136,"dataGaName":1137,"dataGaLocation":970},"/install/","install",{"text":1139,"config":1140},"Quick start guides",{"href":1141,"dataGaName":1142,"dataGaLocation":970},"/get-started/","quick setup checklists",{"text":1144,"config":1145},"Learn",{"href":873,"dataGaLocation":970,"dataGaName":1146},"learn",{"text":1148,"config":1149},"Product documentation",{"href":1150,"dataGaName":1151,"dataGaLocation":970},"https://docs.gitlab.com/","product documentation",{"text":1153,"config":1154},"Best practice videos",{"href":1155,"dataGaName":1156,"dataGaLocation":970},"/getting-started-videos/","best practice videos",{"text":1158,"config":1159},"Integrations",{"href":1160,"dataGaName":1161,"dataGaLocation":970},"/integrations/","integrations",{"title":1163,"items":1164},"Discover",[1165,1170,1175,1180,1184],{"text":1166,"config":1167},"Customer success stories",{"href":1168,"dataGaName":1169,"dataGaLocation":970},"/customers/","customer success stories",{"text":1171,"config":1172},"Blog",{"href":1173,"dataGaName":1174,"dataGaLocation":970},"/blog/","blog",{"text":1176,"config":1177},"Demo Hub",{"href":1178,"dataGaName":1179,"dataGaLocation":970},"/demo-hub/","demo hub",{"text":1181,"config":1182},"The Source",{"href":1183,"dataGaName":1174,"dataGaLocation":970},"/the-source/",{"text":1185,"config":1186},"Remote",{"href":1187,"dataGaName":1188,"dataGaLocation":970},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":1190,"items":1191},"Connect",[1192,1197,1202,1207,1212,1217],{"text":1193,"config":1194},"GitLab Services",{"href":1195,"dataGaName":1196,"dataGaLocation":970},"/services/","services",{"text":1198,"config":1199},"Contribute",{"href":1200,"dataGaName":1201,"dataGaLocation":970},"https://contributors.gitlab.com","contribute",{"text":1203,"config":1204},"Community",{"href":1205,"dataGaName":1206,"dataGaLocation":970},"/community/","community",{"text":1208,"config":1209},"Forum",{"href":1210,"dataGaName":1211,"dataGaLocation":970},"https://forum.gitlab.com/","forum",{"text":1213,"config":1214},"Events",{"href":1215,"dataGaName":1216,"dataGaLocation":970},"/events/","events",{"text":1218,"config":1219},"Partners",{"href":1220,"dataGaName":1221,"dataGaLocation":970},"/partners/","partners",{"config":1223,"title":1226,"text":1227,"link":1228},{"background":1224,"textColor":1225},"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":1229,"config":1230},"Read the latest",{"href":1231,"dataGaName":1232,"dataGaLocation":970},"/whats-new/","whats new",{"text":1234,"config":1235,"menu":1237},"Company",{"dataNavLevelOne":1236},"company",{"type":1021,"columns":1238},[1239],{"items":1240},[1241,1246,1251,1253,1258,1263,1268,1273,1278,1283],{"text":1242,"config":1243},"About",{"href":1244,"dataGaName":1245,"dataGaLocation":970},"/company/","about",{"text":163,"config":1247,"footerGa":1250},{"href":1248,"dataGaName":1249,"dataGaLocation":970},"/jobs/","jobs",{"dataGaName":1249},{"text":1213,"config":1252},{"href":1215,"dataGaName":1216,"dataGaLocation":970},{"text":1254,"config":1255},"Leadership",{"href":1256,"dataGaName":1257,"dataGaLocation":970},"/company/team/e-group/","leadership",{"text":1259,"config":1260},"Handbook",{"href":1261,"dataGaName":1262,"dataGaLocation":970},"https://handbook.gitlab.com/","handbook",{"text":1264,"config":1265},"Investor relations",{"href":1266,"dataGaName":1267,"dataGaLocation":970},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":1269,"config":1270},"Trust Center",{"href":1271,"dataGaName":1272,"dataGaLocation":970},"/security/","trust center",{"text":1274,"config":1275},"AI Transparency Center",{"href":1276,"dataGaName":1277,"dataGaLocation":970},"/ai-transparency-center/","ai transparency center",{"text":1279,"config":1280},"Newsletter",{"href":1281,"dataGaName":1282,"dataGaLocation":970},"/company/contact/#contact-forms","newsletter",{"text":1284,"config":1285},"Press",{"href":1286,"dataGaName":1287,"dataGaLocation":970},"/press/","press",{"text":1289,"config":1290,"menu":1291},"Contact us",{"dataNavLevelOne":1236},{"type":1021,"columns":1292},[1293],{"items":1294},[1295,1300,1305],{"text":1296,"config":1297},"Talk to sales",{"href":1298,"dataGaName":1299,"dataGaLocation":970},"/sales/","talk to sales",{"text":1301,"config":1302},"Support portal",{"href":1303,"dataGaName":1304,"dataGaLocation":970},"https://support.gitlab.com/hc/en-us","support portal",{"text":1306,"config":1307},"Customer portal",{"href":1308,"dataGaName":1309,"dataGaLocation":970},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":1311,"login":1312,"suggestions":1319},"Close",{"text":1313,"link":1314},"To search repositories and projects, login to",{"text":1315,"config":1316},"gitlab.com",{"href":984,"dataGaName":1317,"dataGaLocation":1318},"search login","search",{"text":1320,"default":1321},"Suggestions",[1322,1324,1328,1330,1334,1338],{"text":1001,"config":1323},{"href":1006,"dataGaName":1001,"dataGaLocation":1318},{"text":1325,"config":1326},"Code Suggestions (AI)",{"href":1327,"dataGaName":1325,"dataGaLocation":1318},"/solutions/code-suggestions/",{"text":958,"config":1329},{"href":1038,"dataGaName":958,"dataGaLocation":1318},{"text":1331,"config":1332},"GitLab on AWS",{"href":1333,"dataGaName":1331,"dataGaLocation":1318},"/partners/technology-partners/aws/",{"text":1335,"config":1336},"GitLab on Google Cloud",{"href":1337,"dataGaName":1335,"dataGaLocation":1318},"/partners/technology-partners/google-cloud-platform/",{"text":1339,"config":1340},"Why GitLab?",{"href":1014,"dataGaName":1339,"dataGaLocation":1318},{"freeTrial":1342,"mobileIcon":1347,"desktopIcon":1352,"secondaryButton":1355},{"text":1343,"config":1344},"Start free trial",{"href":1345,"dataGaName":975,"dataGaLocation":1346},"https://gitlab.com/-/trials/new/","nav",{"altText":1348,"config":1349},"Gitlab Icon",{"src":1350,"dataGaName":1351,"dataGaLocation":1346},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":1348,"config":1353},{"src":1354,"dataGaName":1351,"dataGaLocation":1346},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":1356,"config":1357},"Get Started",{"href":1358,"dataGaName":1359,"dataGaLocation":1346},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":1361,"mobileIcon":1365,"desktopIcon":1367},{"text":1362,"config":1363},"Learn more about GitLab Duo",{"href":1006,"dataGaName":1364,"dataGaLocation":1346},"gitlab duo",{"altText":1348,"config":1366},{"src":1350,"dataGaName":1351,"dataGaLocation":1346},{"altText":1348,"config":1368},{"src":1354,"dataGaName":1351,"dataGaLocation":1346},{"button":1370,"mobileIcon":1375,"desktopIcon":1377},{"text":1371,"config":1372},"/switch",{"href":1373,"dataGaName":1374,"dataGaLocation":1346},"#contact","switch",{"altText":1348,"config":1376},{"src":1350,"dataGaName":1351,"dataGaLocation":1346},{"altText":1348,"config":1378},{"src":1379,"dataGaName":1351,"dataGaLocation":1346},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":1381,"mobileIcon":1386,"desktopIcon":1388},{"text":1382,"config":1383},"Back to pricing",{"href":1118,"dataGaName":1384,"dataGaLocation":1346,"icon":1385},"back to pricing","GoBack",{"altText":1348,"config":1387},{"src":1350,"dataGaName":1351,"dataGaLocation":1346},{"altText":1348,"config":1389},{"src":1354,"dataGaName":1351,"dataGaLocation":1346},{"title":1391,"titleMobile":1392,"button":1393,"config":1398},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":1012,"config":1394},{"href":1395,"dataGaName":1396,"dataGaLocation":1397},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":1399,"disabled":951},"release",{"data":1401},{"text":1402,"source":1403,"edit":1409,"contribute":1414,"config":1419,"items":1424,"minimal":1633},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":1404,"config":1405},"View page source",{"href":1406,"dataGaName":1407,"dataGaLocation":1408},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":1410,"config":1411},"Edit this page",{"href":1412,"dataGaName":1413,"dataGaLocation":1408},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":1415,"config":1416},"Please contribute",{"href":1417,"dataGaName":1418,"dataGaLocation":1408},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":1420,"facebook":1421,"youtube":1422,"linkedin":1423},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[1425,1472,1525,1569,1601],{"title":1116,"links":1426,"subMenu":1441},[1427,1431,1436],{"text":1428,"config":1429},"View plans",{"href":1118,"dataGaName":1430,"dataGaLocation":1408},"view plans",{"text":1432,"config":1433},"Why Premium?",{"href":1434,"dataGaName":1435,"dataGaLocation":1408},"/pricing/premium/","why premium",{"text":1437,"config":1438},"Why Ultimate?",{"href":1439,"dataGaName":1440,"dataGaLocation":1408},"/pricing/ultimate/","why ultimate",[1442],{"title":1443,"links":1444},"Contact Us",[1445,1448,1450,1452,1457,1462,1467],{"text":1446,"config":1447},"Contact sales",{"href":1298,"dataGaName":980,"dataGaLocation":1408},{"text":1301,"config":1449},{"href":1303,"dataGaName":1304,"dataGaLocation":1408},{"text":1306,"config":1451},{"href":1308,"dataGaName":1309,"dataGaLocation":1408},{"text":1453,"config":1454},"Status",{"href":1455,"dataGaName":1456,"dataGaLocation":1408},"https://status.gitlab.com/","status",{"text":1458,"config":1459},"Terms of use",{"href":1460,"dataGaName":1461,"dataGaLocation":1408},"/terms/","terms of use",{"text":1463,"config":1464},"Privacy statement",{"href":1465,"dataGaName":1466,"dataGaLocation":1408},"/privacy/","privacy statement",{"text":1468,"config":1469},"Cookie preferences",{"dataGaName":1470,"dataGaLocation":1408,"id":1471,"isOneTrustButton":230},"cookie preferences","ot-sdk-btn",{"title":1017,"links":1473,"subMenu":1481},[1474,1477],{"text":961,"config":1475},{"href":999,"dataGaName":1476,"dataGaLocation":1408},"devsecops platform",{"text":1478,"config":1479},"AI-Assisted Development",{"href":1006,"dataGaName":1480,"dataGaLocation":1408},"ai-assisted development",[1482],{"title":1483,"links":1484},"Topics",[1485,1490,1495,1500,1505,1510,1515,1520],{"text":1486,"config":1487},"CICD",{"href":1488,"dataGaName":1489,"dataGaLocation":1408},"/topics/ci-cd/","cicd",{"text":1491,"config":1492},"GitOps",{"href":1493,"dataGaName":1494,"dataGaLocation":1408},"/topics/gitops/","gitops",{"text":1496,"config":1497},"DevOps",{"href":1498,"dataGaName":1499,"dataGaLocation":1408},"/topics/devops/","devops",{"text":1501,"config":1502},"Version Control",{"href":1503,"dataGaName":1504,"dataGaLocation":1408},"/topics/version-control/","version control",{"text":1506,"config":1507},"DevSecOps",{"href":1508,"dataGaName":1509,"dataGaLocation":1408},"/topics/devsecops/","devsecops",{"text":1511,"config":1512},"Cloud Native",{"href":1513,"dataGaName":1514,"dataGaLocation":1408},"/topics/cloud-native/","cloud native",{"text":1516,"config":1517},"AI for Coding",{"href":1518,"dataGaName":1519,"dataGaLocation":1408},"/topics/devops/ai-for-coding/","ai for coding",{"text":1521,"config":1522},"Agentic AI",{"href":1523,"dataGaName":1524,"dataGaLocation":1408},"/topics/agentic-ai/","agentic ai",{"title":1526,"links":1527},"Solutions",[1528,1530,1532,1537,1541,1544,1548,1551,1553,1556,1559,1564],{"text":1060,"config":1529},{"href":1055,"dataGaName":1060,"dataGaLocation":1408},{"text":1049,"config":1531},{"href":1033,"dataGaName":1034,"dataGaLocation":1408},{"text":1533,"config":1534},"Agile development",{"href":1535,"dataGaName":1536,"dataGaLocation":1408},"/solutions/agile-delivery/","agile delivery",{"text":1538,"config":1539},"SCM",{"href":1045,"dataGaName":1540,"dataGaLocation":1408},"source code management",{"text":1486,"config":1542},{"href":1038,"dataGaName":1543,"dataGaLocation":1408},"continuous integration & delivery",{"text":1545,"config":1546},"Value stream management",{"href":1088,"dataGaName":1547,"dataGaLocation":1408},"value stream management",{"text":1491,"config":1549},{"href":1550,"dataGaName":1494,"dataGaLocation":1408},"/solutions/gitops/",{"text":1098,"config":1552},{"href":1101,"dataGaName":1102,"dataGaLocation":1408},{"text":1554,"config":1555},"Small business",{"href":1107,"dataGaName":1108,"dataGaLocation":1408},{"text":1557,"config":1558},"Public sector",{"href":1113,"dataGaName":1114,"dataGaLocation":1408},{"text":1560,"config":1561},"Education",{"href":1562,"dataGaName":1563,"dataGaLocation":1408},"/solutions/education/","education",{"text":1565,"config":1566},"Financial services",{"href":1567,"dataGaName":1568,"dataGaLocation":1408},"/solutions/finance/","financial services",{"title":1121,"links":1570},[1571,1573,1575,1577,1580,1582,1585,1587,1589,1591,1593,1595,1597,1599],{"text":1134,"config":1572},{"href":1136,"dataGaName":1137,"dataGaLocation":1408},{"text":1139,"config":1574},{"href":1141,"dataGaName":1142,"dataGaLocation":1408},{"text":1144,"config":1576},{"href":873,"dataGaName":1146,"dataGaLocation":1408},{"text":1148,"config":1578},{"href":1150,"dataGaName":1579,"dataGaLocation":1408},"docs",{"text":1171,"config":1581},{"href":1173,"dataGaName":1174,"dataGaLocation":1408},{"text":1583,"config":1584},"What's new",{"href":1231,"dataGaName":1232,"dataGaLocation":1408},{"text":1166,"config":1586},{"href":1168,"dataGaName":1169,"dataGaLocation":1408},{"text":1185,"config":1588},{"href":1187,"dataGaName":1188,"dataGaLocation":1408},{"text":1193,"config":1590},{"href":1195,"dataGaName":1196,"dataGaLocation":1408},{"text":1198,"config":1592},{"href":1200,"dataGaName":1201,"dataGaLocation":1408},{"text":1203,"config":1594},{"href":1205,"dataGaName":1206,"dataGaLocation":1408},{"text":1208,"config":1596},{"href":1210,"dataGaName":1211,"dataGaLocation":1408},{"text":1213,"config":1598},{"href":1215,"dataGaName":1216,"dataGaLocation":1408},{"text":1218,"config":1600},{"href":1220,"dataGaName":1221,"dataGaLocation":1408},{"title":1234,"links":1602},[1603,1605,1607,1609,1611,1613,1617,1622,1624,1626,1628],{"text":1242,"config":1604},{"href":1244,"dataGaName":1236,"dataGaLocation":1408},{"text":163,"config":1606},{"href":1248,"dataGaName":1249,"dataGaLocation":1408},{"text":1254,"config":1608},{"href":1256,"dataGaName":1257,"dataGaLocation":1408},{"text":1259,"config":1610},{"href":1261,"dataGaName":1262,"dataGaLocation":1408},{"text":1264,"config":1612},{"href":1266,"dataGaName":1267,"dataGaLocation":1408},{"text":1614,"config":1615},"Sustainability",{"href":1616,"dataGaName":1614,"dataGaLocation":1408},"/sustainability/",{"text":1618,"config":1619},"Diversity, inclusion and belonging (DIB)",{"href":1620,"dataGaName":1621,"dataGaLocation":1408},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":1269,"config":1623},{"href":1271,"dataGaName":1272,"dataGaLocation":1408},{"text":1279,"config":1625},{"href":1281,"dataGaName":1282,"dataGaLocation":1408},{"text":1284,"config":1627},{"href":1286,"dataGaName":1287,"dataGaLocation":1408},{"text":1629,"config":1630},"Modern Slavery Transparency Statement",{"href":1631,"dataGaName":1632,"dataGaLocation":1408},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":1634},[1635,1638,1641],{"text":1636,"config":1637},"Terms",{"href":1460,"dataGaName":1461,"dataGaLocation":1408},{"text":1639,"config":1640},"Cookies",{"dataGaName":1470,"dataGaLocation":1408,"id":1471,"isOneTrustButton":230},{"text":1642,"config":1643},"Privacy",{"href":1465,"dataGaName":1466,"dataGaLocation":1408},[1645],{"id":1646,"title":1647,"body":946,"config":1648,"content":1650,"description":946,"extension":1653,"meta":1654,"navigation":230,"path":1655,"seo":1656,"stem":1657,"__hash__":1658},"blogAuthors/en-us/blog/authors/gitlab.yml","Gitlab",{"template":1649},"BlogAuthor",{"name":7,"config":1651},{"headshot":1652,"ctfId":7},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659488/Blog/Author%20Headshots/gitlab-logo-extra-whitespace.png","yml",{},"/en-us/blog/authors/gitlab",{},"en-us/blog/authors/gitlab","XCBKIcPoCs6zi2oHG7o-bAp52Jhaw8_zGhIJ2jNrEjU",[1660,1666,1670],{"title":1661,"description":1662,"heroImage":1663,"category":942,"date":1664,"authors":946,"slug":946,"externalUrl":1665},"GitLab Patch Release: 19.2.2, 19.1.4, 19.0.6","Learn about this latest patch release for Community Edition and Enterprise Edition.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749661926/Blog/Hero%20Images/security-patch-blog-image-r2-0506-700x400-fy25_2x.jpg","2026-08-12","https://docs.gitlab.com/releases/patches/patch-release-gitlab-19-2-2-released/",{"title":1667,"description":1662,"heroImage":1663,"category":942,"date":1668,"authors":946,"slug":946,"externalUrl":1669}," GitLab Patch Release: 19.2.1, 19.1.3, 19.0.5","2026-07-29","https://docs.gitlab.com/releases/patches/patch-release-gitlab-19-2-1-released/",{"title":1671,"description":1672,"heroImage":1673,"category":942,"date":1674,"authors":1675,"slug":1677,"externalUrl":946},"Automate work item assignment with a \"Work item created\" trigger","Our step-by-step guide walks through this AI capability, which enables instant, scalable triage without manual intervention.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1773866173/vte9qh8rriznvyclhkes.png","2026-07-20",[1676],"Cesar Saavedra","how-to-use-a-work-item-created-trigger",{"promotions":1679},[1680,1694,1705,1717],{"id":1681,"categories":1682,"header":1684,"text":1685,"button":1686,"image":1691},"ai-modernization",[1683],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":1687,"config":1688},"Get your AI maturity score",{"href":1689,"dataGaName":1690,"dataGaLocation":1174},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":1692},{"src":1693},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":1695,"categories":1696,"header":1697,"text":1685,"button":1698,"image":1702},"devops-modernization",[942,1509],"Are you just managing tools or shipping innovation?",{"text":1699,"config":1700},"Get your DevOps maturity score",{"href":1701,"dataGaName":1690,"dataGaLocation":1174},"/assessments/devops-modernization-assessment/",{"config":1703},{"src":1704},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":1706,"categories":1707,"header":1709,"text":1685,"button":1710,"image":1714},"security-modernization",[1708],"security","Are you trading speed for security?",{"text":1711,"config":1712},"Get your security maturity score",{"href":1713,"dataGaName":1690,"dataGaLocation":1174},"/assessments/security-modernization-assessment/",{"config":1715},{"src":1716},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1718,"paths":1719,"header":1722,"text":1723,"button":1724,"image":1729},"github-azure-migration",[1720,1721],"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":1725,"config":1726},"See how GitLab compares to GitHub",{"href":1727,"dataGaName":1728,"dataGaLocation":1174},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1730},{"src":1704},{"header":1732,"blurb":1733,"button":1734,"secondaryButton":1739},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":1735,"config":1736},"Get your free trial",{"href":1737,"dataGaName":975,"dataGaLocation":1738},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":1446,"config":1740},{"href":1298,"dataGaName":980,"dataGaLocation":1738},1786803759738]