[{"data":1,"prerenderedAt":1525},["ShallowReactive",2],{"/blog/use-waypoint-to-deploy-with-gitlab-cicd":3,"navigation-en-us":746,"banner-en-us":1174,"footer-en-us":1183,"blog-post-authors-en-us-Brendan O'Leary":1425,"blog-related-posts-en-us-use-waypoint-to-deploy-with-gitlab-cicd":1439,"blog-promotions-en-us":1461,"next-steps-en-us":1515},{"id":4,"title":5,"authors":6,"body":8,"category":726,"date":727,"description":728,"extension":729,"externalUrl":730,"faq":730,"featured":731,"heroImage":732,"meta":733,"navigation":141,"path":734,"seo":735,"slug":739,"stem":740,"tags":741,"template":744,"updatedDate":730,"__hash__":745},"blogPosts/en-us/blog/use-waypoint-to-deploy-with-gitlab-cicd.md","How to use HashiCorp Waypoint to deploy with GitLab CI/CD",[7],"Brendan O'Leary",{"type":9,"value":10,"toc":718},"minimark",[11,28,33,36,39,43,46,62,66,92,95,102,110,349,364,373,376,380,387,404,419,447,451,457,625,650,653,658,672,675,679,714],[12,13,14,15,21,22,27],"p",{},"HashiCorp announced a new project at ",[16,17,20],"a",{"href":18,"rel":19},"https://hashiconf.com/",[],"HashiConf Digital"," called ",[16,23,26],{"href":24,"rel":25},"https://www.waypointproject.io/",[],"Waypoint",".",[29,30,32],"h2",{"id":31},"hashicorp-waypoint","Hashicorp Waypoint",[12,34,35],{},"Hashicorp Waypoint uses an HCL based configuration file to describe how to build, deploy, and release applications to various cloud platforms, ranging from Kubernetes to AWS to Google Cloud Run. Think of Waypoint as if Terraform and Vagrant came together to describe how to build, deploy, and release your applications.",[12,37,38],{},"True to form, Hashicorp released Waypoint as open source and with a lot of examples. The orchestration layer is up to you – Waypoint ships as a binary you can run right on your laptop or from whatever CI/CD orchestration tool you choose. Where you deploy is up to you as well since Waypoint shipped with support for Kubernetes, Docker, Google Cloud Run, AWS ECS, and a few others.",[29,40,42],{"id":41},"benefits-of-hashicorp-waypoint","Benefits of Hashicorp Waypoint",[12,44,45],{},"Hashicorp Waypoint is an open-source developer workflow that can run from any laptop or CI/CD tool. Deployment is also easier because Hashicorp ships to several platforms like Kubernetes, AWS, and more.\nWhen using Hashicorp to build, deploy, and release applications, there are several features to keep in mind:",[47,48,49,53,56,59],"ul",{},[50,51,52],"li",{},"Waypoint provides a number of workflow examples as guides.",[50,54,55],{},"Build, deploy, and release your application with the single command of “waypoint up.”",[50,57,58],{},"Execute commands in a deployed application just as easily using “waypoint exec.”",[50,60,61],{},"Get a real-time look at application logs to help to debug quickly when necessary.",[29,63,65],{"id":64},"orchestrating-waypoint-using-gitlab-cicd","Orchestrating Waypoint using GitLab CI/CD",[12,67,68,69,74,75,80,81,85,86,91],{},"Using the fantastic ",[16,70,73],{"href":71,"rel":72},"https://www.waypointproject.io/docs",[],"Waypoint documentation"," and the excellent ",[16,76,79],{"href":77,"rel":78},"https://github.com/hashicorp/waypoint-examples",[],"example applications"," that HashiCorp provided, we decided to take a look at orchestrating Waypoint using ",[16,82,84],{"href":83},"/topics/ci-cd/","GitLab CI/CD",". To do this, we’ll start from the simple ",[16,87,90],{"href":88,"rel":89},"https://github.com/hashicorp/waypoint-examples/tree/main/aws-ecs/nodejs",[],"AWS ECS Node.js app"," from the example repository.",[12,93,94],{},"After cloning, we can see the structure of a Node.js application that displays a single page.",[12,96,97],{},[98,99],"img",{"alt":100,"src":101},"Folder structure of the Waypoint example and the page it produces","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782399305/blog/Content%20Images/waypoint-example.png",[12,103,104,105,109],{},"You’ll see that Dockerfile is missing from that project. There isn’t one included in the example, and we actually won’t need one because Waypoint is going to take care of that for us. Take a closer look at the ",[106,107,108],"code",{},"waypoint.hcl"," file to see what it will do.",[111,112,117],"pre",{"className":113,"code":114,"language":115,"meta":116,"style":116},"language-hcl shiki shiki-themes github-light","project = \"example-nodejs\"\n\napp \"example-nodejs\" {\n  labels = {\n    \"service\" = \"example-nodejs\",\n    \"env\" = \"dev\"\n  }\n\n  build {\n    use \"pack\" {}\n    registry {\n    use \"aws-ecr\" {\n        region = \"us-east-1\"\n        repository = \"waypoint-gitlab\"\n        tag = \"latest\"\n    }\n    }\n  }\n\n  deploy {\n    use \"aws-ecs\" {\n    region = \"us-east-1\"\n    memory = \"512\"\n    }\n  }\n}\n","hcl","",[106,118,119,136,143,157,167,180,191,197,202,210,222,230,240,251,262,273,279,284,289,294,302,312,322,333,338,343],{"__ignoreMap":116},[120,121,124,128,132],"span",{"class":122,"line":123},"line",1,[120,125,127],{"class":126},"sgsFI","project",[120,129,131],{"class":130},"sD7c4"," =",[120,133,135],{"class":134},"sYBdl"," \"example-nodejs\"\n",[120,137,139],{"class":122,"line":138},2,[120,140,142],{"emptyLinePlaceholder":141},true,"\n",[120,144,146,150,154],{"class":122,"line":145},3,[120,147,149],{"class":148},"s7eDp","app",[120,151,153],{"class":152},"sYu0t"," \"example-nodejs\"",[120,155,156],{"class":126}," {\n",[120,158,160,163,165],{"class":122,"line":159},4,[120,161,162],{"class":126},"  labels",[120,164,131],{"class":130},[120,166,156],{"class":126},[120,168,170,173,175,177],{"class":122,"line":169},5,[120,171,172],{"class":134},"    \"service\"",[120,174,131],{"class":130},[120,176,153],{"class":134},[120,178,179],{"class":126},",\n",[120,181,183,186,188],{"class":122,"line":182},6,[120,184,185],{"class":134},"    \"env\"",[120,187,131],{"class":130},[120,189,190],{"class":134}," \"dev\"\n",[120,192,194],{"class":122,"line":193},7,[120,195,196],{"class":126},"  }\n",[120,198,200],{"class":122,"line":199},8,[120,201,142],{"emptyLinePlaceholder":141},[120,203,205,208],{"class":122,"line":204},9,[120,206,207],{"class":148},"  build",[120,209,156],{"class":126},[120,211,213,216,219],{"class":122,"line":212},10,[120,214,215],{"class":148},"    use",[120,217,218],{"class":152}," \"pack\"",[120,220,221],{"class":126}," {}\n",[120,223,225,228],{"class":122,"line":224},11,[120,226,227],{"class":148},"    registry",[120,229,156],{"class":126},[120,231,233,235,238],{"class":122,"line":232},12,[120,234,215],{"class":148},[120,236,237],{"class":152}," \"aws-ecr\"",[120,239,156],{"class":126},[120,241,243,246,248],{"class":122,"line":242},13,[120,244,245],{"class":126},"        region",[120,247,131],{"class":130},[120,249,250],{"class":134}," \"us-east-1\"\n",[120,252,254,257,259],{"class":122,"line":253},14,[120,255,256],{"class":126},"        repository",[120,258,131],{"class":130},[120,260,261],{"class":134}," \"waypoint-gitlab\"\n",[120,263,265,268,270],{"class":122,"line":264},15,[120,266,267],{"class":126},"        tag",[120,269,131],{"class":130},[120,271,272],{"class":134}," \"latest\"\n",[120,274,276],{"class":122,"line":275},16,[120,277,278],{"class":126},"    }\n",[120,280,282],{"class":122,"line":281},17,[120,283,278],{"class":126},[120,285,287],{"class":122,"line":286},18,[120,288,196],{"class":126},[120,290,292],{"class":122,"line":291},19,[120,293,142],{"emptyLinePlaceholder":141},[120,295,297,300],{"class":122,"line":296},20,[120,298,299],{"class":148},"  deploy",[120,301,156],{"class":126},[120,303,305,307,310],{"class":122,"line":304},21,[120,306,215],{"class":148},[120,308,309],{"class":152}," \"aws-ecs\"",[120,311,156],{"class":126},[120,313,315,318,320],{"class":122,"line":314},22,[120,316,317],{"class":126},"    region",[120,319,131],{"class":130},[120,321,250],{"class":134},[120,323,325,328,330],{"class":122,"line":324},23,[120,326,327],{"class":126},"    memory",[120,329,131],{"class":130},[120,331,332],{"class":134}," \"512\"\n",[120,334,336],{"class":122,"line":335},24,[120,337,278],{"class":126},[120,339,341],{"class":122,"line":340},25,[120,342,196],{"class":126},[120,344,346],{"class":122,"line":345},26,[120,347,348],{"class":126},"}\n",[12,350,351,352,357,358,363],{},"In the build step, Waypoint uses ",[16,353,356],{"href":354,"rel":355},"https://buildpacks.io/",[],"Cloud Native Buildpacks (CNB)"," to detect the language of the project and create a Docker image without any Dockerfile. This is actually the same technology that GitLab uses as part of ",[16,359,362],{"href":360,"rel":361},"https://docs.gitlab.com/topics/autodevops/",[],"Auto DevOps"," in the Auto Build step. We’re excited to see CNB from the CNCF get more adoption by users in the industry.",[12,365,366,367,372],{},"Once that image is built, Waypoint will automatically push the image to our AWS ECR registry to get it ready for the deploy. Once the build has completed, the deploy step uses the ",[16,368,371],{"href":369,"rel":370},"https://www.waypointproject.io/plugins/aws-ecs",[],"AWS ECS plugin"," to deploy our application to our AWS account.",[12,374,375],{},"From my laptop, that’s easy. I can have Waypoint installed, be already authenticated to my AWS account, and it \"just works\". But what if I want to expand this beyond my laptop? And what if I want to automate this deployment as part of my overall CI/CD pipeline where all of my current unit, security, and other tests run today? That’s where GitLab CI/CD comes in!",[29,377,379],{"id":378},"waypoint-in-gitlab-cicd","Waypoint in GitLab CI/CD",[12,381,382,383,386],{},"To orchestrate all of this in GitLab CI/CD, let’s take a look at what we’ll need for our ",[106,384,385],{},".gitlab-ci.yml"," file:",[388,389,390,393,401],"ol",{},[50,391,392],{},"First, we’ll need a base image to run inside of. Waypoint works on any Linux distribution and just needs Docker to run, so we can start from a generic Docker image.",[50,394,395,396,400],{},"Next, we’ll install Waypoint to that image. In the future, we could build a ",[16,397,399],{"href":398},"/blog/building-build-images/","meta build image"," to containerize this process for us.",[50,402,403],{},"Finally, we’ll run the Waypoint commands.",[12,405,406,407,412,413,418],{},"Above is all we’ll need for our pipeline to run the scripts required to get the deploy done, but we will need one more thing in order to deploy to AWS: We’ll have to authenticate to our AWS account. On ",[16,408,411],{"href":409,"rel":410},"https://www.waypointproject.io/docs/roadmap",[],"Waypoint’s roadmap",", there are some mentions of plans around authentication and authorization. HashiCorp also released an exciting project in this space this week, ",[16,414,417],{"href":415,"rel":416},"https://www.boundaryproject.io/",[],"Boundary",". But for now, we can handle authentication and authorization ourselves relatively simply.",[12,420,421,422,427,428,433,434,439,440,443,444,27],{},"To authenticate GitLab CI/CD with AWS, there are a few options. The first option is to use GitLab’s integration with ",[16,423,426],{"href":424,"rel":425},"https://www.vaultproject.io/",[],"HashiCorp Vault"," if your team is already using Vault for credential management. Alternatively, if your team manages authorization through AWS IAM, you can ensure that the deploy job runs on a ",[16,429,432],{"href":430,"rel":431},"https://docs.gitlab.com/runner/",[],"GitLab runner"," that is authorized to run the deployment with IAM. But if you’re just getting started with Waypoint and want to get going quickly, the final option is to add your AWS API Key and Secret Key as a ",[16,435,438],{"href":436,"rel":437},"https://docs.gitlab.com/ci/variables/",[],"GitLab CI/CD variable"," named ",[106,441,442],{},"AWS_ACCESS_KEY_ID"," and ",[106,445,446],{},"AWS_SECRET_ACCESS_KEY",[29,448,450],{"id":449},"putting-it-all-together-with-waypoint","Putting it all together with Waypoint",[12,452,453,454,456],{},"Once the authentication is handled, we’re ready to go! Our final ",[106,455,385],{}," looks like this:",[111,458,462],{"className":459,"code":460,"language":461,"meta":116,"style":116},"language-yml shiki shiki-themes github-light","waypoint:\n  image: docker:latest\n  stage: build\n  services:\n    - docker:dind\n  # Define environment variables, e.g. `WAYPOINT_VERSION: '0.1.1'`\n  variables:\n    WAYPOINT_VERSION: ''\n    WAYPOINT_SERVER_ADDR: ''\n    WAYPOINT_SERVER_TOKEN: ''\n    WAYPOINT_SERVER_TLS: '1'\n    WAYPOINT_SERVER_TLS_SKIP_VERIFY: '1'\n  script:\n    - wget -q -O /tmp/waypoint.zip https://releases.hashicorp.com/waypoint/${WAYPOINT_VERSION}/waypoint_${WAYPOINT_VERSION}_linux_amd64.zip\n    - unzip -d /usr/local/bin /tmp/waypoint.zip\n    - rm -rf /tmp/waypoint*\n    - waypoint init\n    - waypoint build\n    - waypoint deploy\n    - waypoint release\n","yml",[106,463,464,473,484,494,501,509,515,522,532,541,550,560,569,576,583,590,597,604,611,618],{"__ignoreMap":116},[120,465,466,470],{"class":122,"line":123},[120,467,469],{"class":468},"shJU0","waypoint",[120,471,472],{"class":126},":\n",[120,474,475,478,481],{"class":122,"line":138},[120,476,477],{"class":468},"  image",[120,479,480],{"class":126},": ",[120,482,483],{"class":134},"docker:latest\n",[120,485,486,489,491],{"class":122,"line":145},[120,487,488],{"class":468},"  stage",[120,490,480],{"class":126},[120,492,493],{"class":134},"build\n",[120,495,496,499],{"class":122,"line":159},[120,497,498],{"class":468},"  services",[120,500,472],{"class":126},[120,502,503,506],{"class":122,"line":169},[120,504,505],{"class":126},"    - ",[120,507,508],{"class":134},"docker:dind\n",[120,510,511],{"class":122,"line":182},[120,512,514],{"class":513},"sAwPA","  # Define environment variables, e.g. `WAYPOINT_VERSION: '0.1.1'`\n",[120,516,517,520],{"class":122,"line":193},[120,518,519],{"class":468},"  variables",[120,521,472],{"class":126},[120,523,524,527,529],{"class":122,"line":199},[120,525,526],{"class":468},"    WAYPOINT_VERSION",[120,528,480],{"class":126},[120,530,531],{"class":134},"''\n",[120,533,534,537,539],{"class":122,"line":204},[120,535,536],{"class":468},"    WAYPOINT_SERVER_ADDR",[120,538,480],{"class":126},[120,540,531],{"class":134},[120,542,543,546,548],{"class":122,"line":212},[120,544,545],{"class":468},"    WAYPOINT_SERVER_TOKEN",[120,547,480],{"class":126},[120,549,531],{"class":134},[120,551,552,555,557],{"class":122,"line":224},[120,553,554],{"class":468},"    WAYPOINT_SERVER_TLS",[120,556,480],{"class":126},[120,558,559],{"class":134},"'1'\n",[120,561,562,565,567],{"class":122,"line":232},[120,563,564],{"class":468},"    WAYPOINT_SERVER_TLS_SKIP_VERIFY",[120,566,480],{"class":126},[120,568,559],{"class":134},[120,570,571,574],{"class":122,"line":242},[120,572,573],{"class":468},"  script",[120,575,472],{"class":126},[120,577,578,580],{"class":122,"line":253},[120,579,505],{"class":126},[120,581,582],{"class":134},"wget -q -O /tmp/waypoint.zip https://releases.hashicorp.com/waypoint/${WAYPOINT_VERSION}/waypoint_${WAYPOINT_VERSION}_linux_amd64.zip\n",[120,584,585,587],{"class":122,"line":264},[120,586,505],{"class":126},[120,588,589],{"class":134},"unzip -d /usr/local/bin /tmp/waypoint.zip\n",[120,591,592,594],{"class":122,"line":275},[120,593,505],{"class":126},[120,595,596],{"class":134},"rm -rf /tmp/waypoint*\n",[120,598,599,601],{"class":122,"line":281},[120,600,505],{"class":126},[120,602,603],{"class":134},"waypoint init\n",[120,605,606,608],{"class":122,"line":286},[120,607,505],{"class":126},[120,609,610],{"class":134},"waypoint build\n",[120,612,613,615],{"class":122,"line":291},[120,614,505],{"class":126},[120,616,617],{"class":134},"waypoint deploy\n",[120,619,620,622],{"class":122,"line":296},[120,621,505],{"class":126},[120,623,624],{"class":134},"waypoint release\n",[12,626,627,628,631,632,635,636,639,640,639,643,646,647,27],{},"You can see that we start from the generic ",[106,629,630],{},"docker:latest"," image and set up some variables required by Waypoint. In the ",[106,633,634],{},"script"," section, we grab the latest Waypoint binary and install it to our local bin. Since our runner is already authorized with AWS, it’s as simple as running ",[106,637,638],{},"waypoint init",", ",[106,641,642],{},"build",[106,644,645],{},"deploy",", and ",[106,648,649],{},"release",[12,651,652],{},"The output of the build job shows us the endpoint we’re deploying to:",[12,654,655],{},[98,656],{"alt":100,"src":657},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1782399305/blog/Content%20Images/waypoint-job-output.png",[12,659,660,661,665,666,671],{},"Waypoint is one of multiple ",[16,662,664],{"href":663},"/partners/technology-partners/hashicorp/","HashiCorp solutions that GitLab works great with",". For example, in addition to application delivery, we could orchestrate the underlying infrastructure with ",[16,667,670],{"href":668,"rel":669},"https://docs.gitlab.com/user/infrastructure/",[],"Terraform through GiLab"," as well. To standardize security in the SDLC, we could also integrate GitLab with Vault to manage secrets and tokens within CI/CD pipelines that provides consistency for developers and operators relying on secrets management during development testing as well as in production use.",[12,673,674],{},"The joint solutions developed by HashiCorp and GitLab are helping organizations find a better way for application development, and keeping delivery, and infrastructure management workflows in lock step. Waypoint is just another step in the right direction and we’re excited to see where the project goes from here.",[29,676,678],{"id":677},"getting-started-with-hashicorp-waypoint","Getting started with Hashicorp Waypoint",[12,680,681,682,686,687,443,691,695,696,701,702,707,708,713],{},"You can learn more about Waypoint at ",[16,683,685],{"href":24,"rel":684},[],"waypointproject.io",". Also check out their ",[16,688,690],{"href":71,"rel":689},[],"documentation",[16,692,694],{"href":409,"rel":693},[],"roadmap"," for the project. We have ",[16,697,700],{"href":698,"rel":699},"https://github.com/hashicorp/waypoint/pull/492",[],"contributed"," everything we learned to the ",[16,703,706],{"href":704,"rel":705},"https://www.waypointproject.io/docs/automating-execution/gitlab-cicd",[],"GitLab CI/CD integration docs",". You can also find a full working GitLab example in ",[16,709,712],{"href":710,"rel":711},"https://gitlab.com/brendan-demo/waypoint",[],"this repository"," if you want to try it for yourself!",[715,716,717],"style",{},"html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html pre.shiki code .sD7c4, html code.shiki .sD7c4{--shiki-default:#D73A49}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html pre.shiki code .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}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 .shJU0, html code.shiki .shJU0{--shiki-default:#22863A}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}",{"title":116,"searchDepth":138,"depth":138,"links":719},[720,721,722,723,724,725],{"id":31,"depth":138,"text":32},{"id":41,"depth":138,"text":42},{"id":64,"depth":138,"text":65},{"id":378,"depth":138,"text":379},{"id":449,"depth":138,"text":450},{"id":677,"depth":138,"text":678},"news","2020-10-15","Learn how to use Waypoint using GitLab CI/CD by following this step-by-step demo.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749679260/Blog/Hero%20Images/using-hashicorp-waypoint-deploy-gitlab-cicd.jpg",{},"/en-us/blog/use-waypoint-to-deploy-with-gitlab-cicd",{"title":5,"description":728,"ogTitle":5,"ogDescription":728,"noIndex":731,"ogImage":732,"ogUrl":736,"ogSiteName":737,"ogType":738,"canonicalUrls":736},"https://about.gitlab.com/blog/use-waypoint-to-deploy-with-gitlab-cicd","https://about.gitlab.com","article","use-waypoint-to-deploy-with-gitlab-cicd","en-us/blog/use-waypoint-to-deploy-with-gitlab-cicd",[742,743],"cloud native","DevOps","BlogPost","j-5mjEYs8JceuCftJmJXpZe_eE-XtnoYVH2urlWB9HI",{"logo":747,"freeTrial":752,"sales":757,"login":762,"items":767,"search":1094,"minimal":1125,"duo":1144,"switchNav":1153,"pricingDeployment":1164},{"config":748},{"href":749,"dataGaName":750,"dataGaLocation":751},"/","gitlab logo","header",{"text":753,"config":754},"Get free trial",{"href":755,"dataGaName":756,"dataGaLocation":751},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":758,"config":759},"Request a demo",{"href":760,"dataGaName":761,"dataGaLocation":751},"/sales/?contact-topic=request-demo","sales",{"text":763,"config":764},"Sign in",{"href":765,"dataGaName":766,"dataGaLocation":751},"https://gitlab.com/users/sign_in/","sign in",[768,797,897,902,1016,1072],{"text":769,"config":770,"menu":772},"Platform",{"dataNavLevelOne":771},"platform",{"type":773,"columns":774},"cards",[775,781,789],{"title":769,"description":776,"link":777},"The intelligent orchestration platform for DevSecOps",{"text":778,"config":779},"Explore our Platform",{"href":780,"dataGaName":771,"dataGaLocation":751},"/platform/",{"title":782,"description":783,"link":784},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":785,"config":786},"Meet GitLab Duo",{"href":787,"dataGaName":788,"dataGaLocation":751},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":790,"description":791,"link":792},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":793,"config":794},"Learn more",{"href":795,"dataGaName":796,"dataGaLocation":751},"/why-gitlab/","why gitlab",{"text":798,"left":141,"config":799,"menu":801},"Product",{"dataNavLevelOne":800},"solutions",{"type":802,"link":803,"columns":807,"feature":876},"lists",{"text":804,"config":805},"View all Solutions",{"href":806,"dataGaName":800,"dataGaLocation":751},"/solutions/",[808,832,855],{"title":809,"description":810,"link":811,"items":816},"Automation","CI/CD and automation to accelerate deployment",{"config":812},{"icon":813,"href":814,"dataGaName":815,"dataGaLocation":751},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[817,821,824,828],{"text":818,"config":819},"CI/CD",{"href":820,"dataGaLocation":751,"dataGaName":818},"/solutions/continuous-integration/",{"text":782,"config":822},{"href":787,"dataGaLocation":751,"dataGaName":823},"gitlab duo agent platform - product menu",{"text":825,"config":826},"Source Code Management",{"href":827,"dataGaLocation":751,"dataGaName":825},"/solutions/source-code-management/",{"text":829,"config":830},"Automated Software Delivery",{"href":814,"dataGaLocation":751,"dataGaName":831},"Automated software delivery",{"title":833,"description":834,"link":835,"items":840},"Security","Deliver code faster without compromising security",{"config":836},{"href":837,"dataGaName":838,"dataGaLocation":751,"icon":839},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[841,845,850],{"text":842,"config":843},"Application Security Testing",{"href":837,"dataGaName":844,"dataGaLocation":751},"Application security testing",{"text":846,"config":847},"Software Supply Chain Security",{"href":848,"dataGaLocation":751,"dataGaName":849},"/solutions/supply-chain/","Software supply chain security",{"text":851,"config":852},"Software Compliance",{"href":853,"dataGaName":854,"dataGaLocation":751},"/solutions/software-compliance/","software compliance",{"title":856,"link":857,"items":862},"Measurement",{"config":858},{"icon":859,"href":860,"dataGaName":861,"dataGaLocation":751},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[863,867,871],{"text":864,"config":865},"Visibility & Measurement",{"href":860,"dataGaLocation":751,"dataGaName":866},"Visibility and Measurement",{"text":868,"config":869},"Value Stream Management",{"href":870,"dataGaLocation":751,"dataGaName":868},"/solutions/value-stream-management/",{"text":872,"config":873},"Analytics & Insights",{"href":874,"dataGaLocation":751,"dataGaName":875},"/solutions/analytics-and-insights/","Analytics and insights",{"title":877,"type":802,"items":878},"GitLab for",[879,885,891],{"text":880,"config":881},"Enterprise",{"icon":882,"href":883,"dataGaLocation":751,"dataGaName":884},"Building","/enterprise/","enterprise",{"text":886,"config":887},"Small Business",{"icon":888,"href":889,"dataGaLocation":751,"dataGaName":890},"Work","/small-business/","small business",{"text":892,"config":893},"Public Sector",{"icon":894,"href":895,"dataGaLocation":751,"dataGaName":896},"Organization","/solutions/public-sector/","public sector",{"text":898,"config":899},"Pricing",{"href":900,"dataGaName":901,"dataGaLocation":751,"dataNavLevelOne":901},"/pricing/","pricing",{"text":903,"config":904,"menu":906},"Resources",{"dataNavLevelOne":905},"resources",{"type":802,"link":907,"columns":911,"feature":1005},{"text":908,"config":909},"View all resources",{"href":910,"dataGaName":905,"dataGaLocation":751},"/resources/",[912,945,972],{"title":913,"items":914},"Getting started",[915,920,925,930,935,940],{"text":916,"config":917},"Install",{"href":918,"dataGaName":919,"dataGaLocation":751},"/install/","install",{"text":921,"config":922},"Quick start guides",{"href":923,"dataGaName":924,"dataGaLocation":751},"/get-started/","quick setup checklists",{"text":926,"config":927},"Learn",{"href":928,"dataGaLocation":751,"dataGaName":929},"https://university.gitlab.com/","learn",{"text":931,"config":932},"Product documentation",{"href":933,"dataGaName":934,"dataGaLocation":751},"https://docs.gitlab.com/","product documentation",{"text":936,"config":937},"Best practice videos",{"href":938,"dataGaName":939,"dataGaLocation":751},"/getting-started-videos/","best practice videos",{"text":941,"config":942},"Integrations",{"href":943,"dataGaName":944,"dataGaLocation":751},"/integrations/","integrations",{"title":946,"items":947},"Discover",[948,953,958,963,967],{"text":949,"config":950},"Customer success stories",{"href":951,"dataGaName":952,"dataGaLocation":751},"/customers/","customer success stories",{"text":954,"config":955},"Blog",{"href":956,"dataGaName":957,"dataGaLocation":751},"/blog/","blog",{"text":959,"config":960},"Demo Hub",{"href":961,"dataGaName":962,"dataGaLocation":751},"/demo-hub/","demo hub",{"text":964,"config":965},"The Source",{"href":966,"dataGaName":957,"dataGaLocation":751},"/the-source/",{"text":968,"config":969},"Remote",{"href":970,"dataGaName":971,"dataGaLocation":751},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":973,"items":974},"Connect",[975,980,985,990,995,1000],{"text":976,"config":977},"GitLab Services",{"href":978,"dataGaName":979,"dataGaLocation":751},"/services/","services",{"text":981,"config":982},"Contribute",{"href":983,"dataGaName":984,"dataGaLocation":751},"https://contributors.gitlab.com","contribute",{"text":986,"config":987},"Community",{"href":988,"dataGaName":989,"dataGaLocation":751},"/community/","community",{"text":991,"config":992},"Forum",{"href":993,"dataGaName":994,"dataGaLocation":751},"https://forum.gitlab.com/","forum",{"text":996,"config":997},"Events",{"href":998,"dataGaName":999,"dataGaLocation":751},"/events/","events",{"text":1001,"config":1002},"Partners",{"href":1003,"dataGaName":1004,"dataGaLocation":751},"/partners/","partners",{"config":1006,"title":1009,"text":1010,"link":1011},{"background":1007,"textColor":1008},"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":1012,"config":1013},"Read the latest",{"href":1014,"dataGaName":1015,"dataGaLocation":751},"/whats-new/","whats new",{"text":1017,"config":1018,"menu":1020},"Company",{"dataNavLevelOne":1019},"company",{"type":802,"columns":1021},[1022],{"items":1023},[1024,1029,1035,1037,1042,1047,1052,1057,1062,1067],{"text":1025,"config":1026},"About",{"href":1027,"dataGaName":1028,"dataGaLocation":751},"/company/","about",{"text":1030,"config":1031,"footerGa":1034},"Jobs",{"href":1032,"dataGaName":1033,"dataGaLocation":751},"/jobs/","jobs",{"dataGaName":1033},{"text":996,"config":1036},{"href":998,"dataGaName":999,"dataGaLocation":751},{"text":1038,"config":1039},"Leadership",{"href":1040,"dataGaName":1041,"dataGaLocation":751},"/company/team/e-group/","leadership",{"text":1043,"config":1044},"Handbook",{"href":1045,"dataGaName":1046,"dataGaLocation":751},"https://handbook.gitlab.com/","handbook",{"text":1048,"config":1049},"Investor relations",{"href":1050,"dataGaName":1051,"dataGaLocation":751},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":1053,"config":1054},"Trust Center",{"href":1055,"dataGaName":1056,"dataGaLocation":751},"/security/","trust center",{"text":1058,"config":1059},"AI Transparency Center",{"href":1060,"dataGaName":1061,"dataGaLocation":751},"/ai-transparency-center/","ai transparency center",{"text":1063,"config":1064},"Newsletter",{"href":1065,"dataGaName":1066,"dataGaLocation":751},"/company/contact/#contact-forms","newsletter",{"text":1068,"config":1069},"Press",{"href":1070,"dataGaName":1071,"dataGaLocation":751},"/press/","press",{"text":1073,"config":1074,"menu":1075},"Contact us",{"dataNavLevelOne":1019},{"type":802,"columns":1076},[1077],{"items":1078},[1079,1084,1089],{"text":1080,"config":1081},"Talk to sales",{"href":1082,"dataGaName":1083,"dataGaLocation":751},"/sales/","talk to sales",{"text":1085,"config":1086},"Support portal",{"href":1087,"dataGaName":1088,"dataGaLocation":751},"https://support.gitlab.com/hc/en-us","support portal",{"text":1090,"config":1091},"Customer portal",{"href":1092,"dataGaName":1093,"dataGaLocation":751},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":1095,"login":1096,"suggestions":1103},"Close",{"text":1097,"link":1098},"To search repositories and projects, login to",{"text":1099,"config":1100},"gitlab.com",{"href":765,"dataGaName":1101,"dataGaLocation":1102},"search login","search",{"text":1104,"default":1105},"Suggestions",[1106,1108,1112,1114,1118,1122],{"text":782,"config":1107},{"href":787,"dataGaName":782,"dataGaLocation":1102},{"text":1109,"config":1110},"Code Suggestions (AI)",{"href":1111,"dataGaName":1109,"dataGaLocation":1102},"/solutions/code-suggestions/",{"text":818,"config":1113},{"href":820,"dataGaName":818,"dataGaLocation":1102},{"text":1115,"config":1116},"GitLab on AWS",{"href":1117,"dataGaName":1115,"dataGaLocation":1102},"/partners/technology-partners/aws/",{"text":1119,"config":1120},"GitLab on Google Cloud",{"href":1121,"dataGaName":1119,"dataGaLocation":1102},"/partners/technology-partners/google-cloud-platform/",{"text":1123,"config":1124},"Why GitLab?",{"href":795,"dataGaName":1123,"dataGaLocation":1102},{"freeTrial":1126,"mobileIcon":1131,"desktopIcon":1136,"secondaryButton":1139},{"text":1127,"config":1128},"Start free trial",{"href":1129,"dataGaName":756,"dataGaLocation":1130},"https://gitlab.com/-/trials/new/","nav",{"altText":1132,"config":1133},"Gitlab Icon",{"src":1134,"dataGaName":1135,"dataGaLocation":1130},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":1132,"config":1137},{"src":1138,"dataGaName":1135,"dataGaLocation":1130},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":1140,"config":1141},"Get Started",{"href":1142,"dataGaName":1143,"dataGaLocation":1130},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":1145,"mobileIcon":1149,"desktopIcon":1151},{"text":1146,"config":1147},"Learn more about GitLab Duo",{"href":787,"dataGaName":1148,"dataGaLocation":1130},"gitlab duo",{"altText":1132,"config":1150},{"src":1134,"dataGaName":1135,"dataGaLocation":1130},{"altText":1132,"config":1152},{"src":1138,"dataGaName":1135,"dataGaLocation":1130},{"button":1154,"mobileIcon":1159,"desktopIcon":1161},{"text":1155,"config":1156},"/switch",{"href":1157,"dataGaName":1158,"dataGaLocation":1130},"#contact","switch",{"altText":1132,"config":1160},{"src":1134,"dataGaName":1135,"dataGaLocation":1130},{"altText":1132,"config":1162},{"src":1163,"dataGaName":1135,"dataGaLocation":1130},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":1165,"mobileIcon":1170,"desktopIcon":1172},{"text":1166,"config":1167},"Back to pricing",{"href":900,"dataGaName":1168,"dataGaLocation":1130,"icon":1169},"back to pricing","GoBack",{"altText":1132,"config":1171},{"src":1134,"dataGaName":1135,"dataGaLocation":1130},{"altText":1132,"config":1173},{"src":1138,"dataGaName":1135,"dataGaLocation":1130},{"title":1175,"titleMobile":1176,"button":1177,"config":1182},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":793,"config":1178},{"href":1179,"dataGaName":1180,"dataGaLocation":1181},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":649,"disabled":731},{"data":1184},{"text":1185,"source":1186,"edit":1192,"contribute":1197,"config":1202,"items":1207,"minimal":1414},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":1187,"config":1188},"View page source",{"href":1189,"dataGaName":1190,"dataGaLocation":1191},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":1193,"config":1194},"Edit this page",{"href":1195,"dataGaName":1196,"dataGaLocation":1191},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":1198,"config":1199},"Please contribute",{"href":1200,"dataGaName":1201,"dataGaLocation":1191},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":1203,"facebook":1204,"youtube":1205,"linkedin":1206},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[1208,1255,1306,1350,1382],{"title":898,"links":1209,"subMenu":1224},[1210,1214,1219],{"text":1211,"config":1212},"View plans",{"href":900,"dataGaName":1213,"dataGaLocation":1191},"view plans",{"text":1215,"config":1216},"Why Premium?",{"href":1217,"dataGaName":1218,"dataGaLocation":1191},"/pricing/premium/","why premium",{"text":1220,"config":1221},"Why Ultimate?",{"href":1222,"dataGaName":1223,"dataGaLocation":1191},"/pricing/ultimate/","why ultimate",[1225],{"title":1226,"links":1227},"Contact Us",[1228,1231,1233,1235,1240,1245,1250],{"text":1229,"config":1230},"Contact sales",{"href":1082,"dataGaName":761,"dataGaLocation":1191},{"text":1085,"config":1232},{"href":1087,"dataGaName":1088,"dataGaLocation":1191},{"text":1090,"config":1234},{"href":1092,"dataGaName":1093,"dataGaLocation":1191},{"text":1236,"config":1237},"Status",{"href":1238,"dataGaName":1239,"dataGaLocation":1191},"https://status.gitlab.com/","status",{"text":1241,"config":1242},"Terms of use",{"href":1243,"dataGaName":1244,"dataGaLocation":1191},"/terms/","terms of use",{"text":1246,"config":1247},"Privacy statement",{"href":1248,"dataGaName":1249,"dataGaLocation":1191},"/privacy/","privacy statement",{"text":1251,"config":1252},"Cookie preferences",{"dataGaName":1253,"dataGaLocation":1191,"id":1254,"isOneTrustButton":141},"cookie preferences","ot-sdk-btn",{"title":798,"links":1256,"subMenu":1265},[1257,1261],{"text":1258,"config":1259},"DevSecOps platform",{"href":780,"dataGaName":1260,"dataGaLocation":1191},"devsecops platform",{"text":1262,"config":1263},"AI-Assisted Development",{"href":787,"dataGaName":1264,"dataGaLocation":1191},"ai-assisted development",[1266],{"title":1267,"links":1268},"Topics",[1269,1273,1278,1282,1287,1292,1296,1301],{"text":1270,"config":1271},"CICD",{"href":83,"dataGaName":1272,"dataGaLocation":1191},"cicd",{"text":1274,"config":1275},"GitOps",{"href":1276,"dataGaName":1277,"dataGaLocation":1191},"/topics/gitops/","gitops",{"text":743,"config":1279},{"href":1280,"dataGaName":1281,"dataGaLocation":1191},"/topics/devops/","devops",{"text":1283,"config":1284},"Version Control",{"href":1285,"dataGaName":1286,"dataGaLocation":1191},"/topics/version-control/","version control",{"text":1288,"config":1289},"DevSecOps",{"href":1290,"dataGaName":1291,"dataGaLocation":1191},"/topics/devsecops/","devsecops",{"text":1293,"config":1294},"Cloud Native",{"href":1295,"dataGaName":742,"dataGaLocation":1191},"/topics/cloud-native/",{"text":1297,"config":1298},"AI for Coding",{"href":1299,"dataGaName":1300,"dataGaLocation":1191},"/topics/devops/ai-for-coding/","ai for coding",{"text":1302,"config":1303},"Agentic AI",{"href":1304,"dataGaName":1305,"dataGaLocation":1191},"/topics/agentic-ai/","agentic ai",{"title":1307,"links":1308},"Solutions",[1309,1311,1313,1318,1322,1325,1329,1332,1334,1337,1340,1345],{"text":842,"config":1310},{"href":837,"dataGaName":842,"dataGaLocation":1191},{"text":831,"config":1312},{"href":814,"dataGaName":815,"dataGaLocation":1191},{"text":1314,"config":1315},"Agile development",{"href":1316,"dataGaName":1317,"dataGaLocation":1191},"/solutions/agile-delivery/","agile delivery",{"text":1319,"config":1320},"SCM",{"href":827,"dataGaName":1321,"dataGaLocation":1191},"source code management",{"text":1270,"config":1323},{"href":820,"dataGaName":1324,"dataGaLocation":1191},"continuous integration & delivery",{"text":1326,"config":1327},"Value stream management",{"href":870,"dataGaName":1328,"dataGaLocation":1191},"value stream management",{"text":1274,"config":1330},{"href":1331,"dataGaName":1277,"dataGaLocation":1191},"/solutions/gitops/",{"text":880,"config":1333},{"href":883,"dataGaName":884,"dataGaLocation":1191},{"text":1335,"config":1336},"Small business",{"href":889,"dataGaName":890,"dataGaLocation":1191},{"text":1338,"config":1339},"Public sector",{"href":895,"dataGaName":896,"dataGaLocation":1191},{"text":1341,"config":1342},"Education",{"href":1343,"dataGaName":1344,"dataGaLocation":1191},"/solutions/education/","education",{"text":1346,"config":1347},"Financial services",{"href":1348,"dataGaName":1349,"dataGaLocation":1191},"/solutions/finance/","financial services",{"title":903,"links":1351},[1352,1354,1356,1358,1361,1363,1366,1368,1370,1372,1374,1376,1378,1380],{"text":916,"config":1353},{"href":918,"dataGaName":919,"dataGaLocation":1191},{"text":921,"config":1355},{"href":923,"dataGaName":924,"dataGaLocation":1191},{"text":926,"config":1357},{"href":928,"dataGaName":929,"dataGaLocation":1191},{"text":931,"config":1359},{"href":933,"dataGaName":1360,"dataGaLocation":1191},"docs",{"text":954,"config":1362},{"href":956,"dataGaName":957,"dataGaLocation":1191},{"text":1364,"config":1365},"What's new",{"href":1014,"dataGaName":1015,"dataGaLocation":1191},{"text":949,"config":1367},{"href":951,"dataGaName":952,"dataGaLocation":1191},{"text":968,"config":1369},{"href":970,"dataGaName":971,"dataGaLocation":1191},{"text":976,"config":1371},{"href":978,"dataGaName":979,"dataGaLocation":1191},{"text":981,"config":1373},{"href":983,"dataGaName":984,"dataGaLocation":1191},{"text":986,"config":1375},{"href":988,"dataGaName":989,"dataGaLocation":1191},{"text":991,"config":1377},{"href":993,"dataGaName":994,"dataGaLocation":1191},{"text":996,"config":1379},{"href":998,"dataGaName":999,"dataGaLocation":1191},{"text":1001,"config":1381},{"href":1003,"dataGaName":1004,"dataGaLocation":1191},{"title":1017,"links":1383},[1384,1386,1388,1390,1392,1394,1398,1403,1405,1407,1409],{"text":1025,"config":1385},{"href":1027,"dataGaName":1019,"dataGaLocation":1191},{"text":1030,"config":1387},{"href":1032,"dataGaName":1033,"dataGaLocation":1191},{"text":1038,"config":1389},{"href":1040,"dataGaName":1041,"dataGaLocation":1191},{"text":1043,"config":1391},{"href":1045,"dataGaName":1046,"dataGaLocation":1191},{"text":1048,"config":1393},{"href":1050,"dataGaName":1051,"dataGaLocation":1191},{"text":1395,"config":1396},"Sustainability",{"href":1397,"dataGaName":1395,"dataGaLocation":1191},"/sustainability/",{"text":1399,"config":1400},"Diversity, inclusion and belonging (DIB)",{"href":1401,"dataGaName":1402,"dataGaLocation":1191},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":1053,"config":1404},{"href":1055,"dataGaName":1056,"dataGaLocation":1191},{"text":1063,"config":1406},{"href":1065,"dataGaName":1066,"dataGaLocation":1191},{"text":1068,"config":1408},{"href":1070,"dataGaName":1071,"dataGaLocation":1191},{"text":1410,"config":1411},"Modern Slavery Transparency Statement",{"href":1412,"dataGaName":1413,"dataGaLocation":1191},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":1415},[1416,1419,1422],{"text":1417,"config":1418},"Terms",{"href":1243,"dataGaName":1244,"dataGaLocation":1191},{"text":1420,"config":1421},"Cookies",{"dataGaName":1253,"dataGaLocation":1191,"id":1254,"isOneTrustButton":141},{"text":1423,"config":1424},"Privacy",{"href":1248,"dataGaName":1249,"dataGaLocation":1191},[1426],{"id":1427,"title":1428,"body":730,"config":1429,"content":1431,"description":730,"extension":461,"meta":1434,"navigation":141,"path":1435,"seo":1436,"stem":1437,"__hash__":1438},"blogAuthors/en-us/blog/authors/brendan-oleary.yml","Brendan Oleary",{"template":1430},"BlogAuthor",{"name":7,"config":1432},{"headshot":116,"ctfId":1433},"brendan",{},"/en-us/blog/authors/brendan-oleary",{},"en-us/blog/authors/brendan-oleary","IkXVLft77WlFK-Vgo210ZM3Io_PCcrXnYzkBCzx153k",[1440,1448,1455],{"title":1441,"description":1442,"heroImage":1443,"category":726,"date":1444,"authors":1445,"slug":1447,"externalUrl":730},"GitLab named a Leader in the 2026 Gartner® Magic Quadrant™ for DevSecOps Platforms","Agents made coding fast. GitLab is the Intelligent Orchestration Platform for DevSecOps that brings speed with control for the rest of the software lifecycle.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1750099203/Blog/Hero%20Images/Blog/Hero%20Images/blog-image-template-1800x945%20%2820%29_2bJGC5ZP3WheoqzlLT05C5_1750099203484.png","2026-06-17",[1446],"Manav Khurana","gitlab-leader-2026-gartner-mq-devsecops-platforms",{"title":1449,"description":1450,"heroImage":1451,"category":726,"date":1444,"authors":1452,"slug":1454,"externalUrl":730},"GitLab and Capgemini accelerate DevSecOps transformation","The global alliance helps organizations modernize software delivery, secure their supply chain, and bring AI into development workflows.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1781279411/n3pkmddd2eswa8qbu06z.png",[1453],"Alex Picker","gitlab-and-capgemini-global-alliance-partnership",{"title":1456,"description":1457,"heroImage":1458,"category":726,"date":1444,"authors":1459,"slug":1460,"externalUrl":730},"Introducing the 2026 EMEA GitLab Partner Award winners","Learn about the EMEA partners who made an outstanding impact over the past year.\n","https://res.cloudinary.com/about-gitlab-com/image/upload/v1781608381/biycl2ib2kpsbspjlac7.png",[1453],"2026-emea-gitlab-partner-awards",{"promotions":1462},[1463,1477,1489,1501],{"id":1464,"categories":1465,"header":1467,"text":1468,"button":1469,"image":1474},"ai-modernization",[1466],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":1470,"config":1471},"Get your AI maturity score",{"href":1472,"dataGaName":1473,"dataGaLocation":957},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":1475},{"src":1476},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":1478,"categories":1479,"header":1481,"text":1468,"button":1482,"image":1486},"devops-modernization",[1480,1291],"product","Are you just managing tools or shipping innovation?",{"text":1483,"config":1484},"Get your DevOps maturity score",{"href":1485,"dataGaName":1473,"dataGaLocation":957},"/assessments/devops-modernization-assessment/",{"config":1487},{"src":1488},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":1490,"categories":1491,"header":1493,"text":1468,"button":1494,"image":1498},"security-modernization",[1492],"security","Are you trading speed for security?",{"text":1495,"config":1496},"Get your security maturity score",{"href":1497,"dataGaName":1473,"dataGaLocation":957},"/assessments/security-modernization-assessment/",{"config":1499},{"src":1500},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1502,"paths":1503,"header":1506,"text":1507,"button":1508,"image":1513},"github-azure-migration",[1504,1505],"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":1509,"config":1510},"See how GitLab compares to GitHub",{"href":1511,"dataGaName":1512,"dataGaLocation":957},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1514},{"src":1488},{"header":1516,"blurb":1517,"button":1518,"secondaryButton":1523},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":1519,"config":1520},"Get your free trial",{"href":1521,"dataGaName":756,"dataGaLocation":1522},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":1229,"config":1524},{"href":1082,"dataGaName":761,"dataGaLocation":1522},1786803766852]