[{"data":1,"prerenderedAt":1755},["ShallowReactive",2],{"/blog/gitlab-heroes-unmasked-elevating-my-company-using-gitlab":3,"navigation-en-us":970,"banner-en-us":1397,"footer-en-us":1407,"blog-post-authors-en-us-Lee Tickett":1651,"blog-related-posts-en-us-gitlab-heroes-unmasked-elevating-my-company-using-gitlab":1666,"blog-promotions-en-us":1691,"next-steps-en-us":1745},{"id":4,"title":5,"authors":6,"body":8,"category":949,"date":950,"description":951,"extension":952,"externalUrl":953,"faq":953,"featured":954,"heroImage":955,"meta":956,"navigation":444,"path":957,"seo":958,"slug":962,"stem":963,"tags":964,"template":968,"updatedDate":953,"__hash__":969},"blogPosts/en-us/blog/gitlab-heroes-unmasked-elevating-my-company-using-gitlab.md","GitLab Heroes Unmasked: How I am elevating my company using GitLab",[7],"Lee Tickett",{"type":9,"value":10,"toc":938},"minimark",[11,25,33,36,55,58,63,72,75,100,105,108,115,118,124,139,150,153,157,166,175,178,182,185,188,194,197,201,204,208,211,234,241,244,248,251,254,265,268,277,280,290,293,299,728,734,756,934],[12,13,14],"p",{},[15,16,17,18,24],"em",{},"A key to GitLab’s success is our vast community of advocates. Here at GitLab, we call these active contributors ",[19,20,23],"a",{"href":21,"rel":22},"https://contributors.gitlab.com/docs/previous-heroes",[],"\"GitLab Heroes\"",". Each hero contributes to GitLab in numerous ways, including elevating releases, sharing best practices, speaking at events, and more. The \"GitLab Heroes Unmasked\" series is dedicated to sharing their stories.",[12,26,27,28,32],{},"Lee Tickett, director at IT development and support consultancy Tickett Enterprises Limited, is a GitLab hero and Core team member who continuously contributes to GitLab and provides exceptional feedback. In late 2020, he ",[19,29,31],{"href":30},"/blog/lee-tickett-my-gitlab-journey/","wrote a blog"," about how he came upon GitLab and began to use it as his company's platform.",[12,34,35],{},"At that point, his company was using GitLab in the following ways:",[37,38,39,43,46,49,52],"ul",{},[40,41,42],"li",{},"for version control",[40,44,45],{},"with a custom merge request approval process",[40,47,48],{},"as a custom UI for streamlined/standardized project creation",[40,50,51],{},"as an integration with our bespoke helpdesk platform",[40,53,54],{},"as a Windows runner with fairly basic CI",[12,56,57],{},"This blog picks up where that blog left off and gives insight into how Tickett Enterprises is making the most of GitLab's One DevOps Platform for its helpdesk, CRM integration, CI/CD, and more.",[59,60,62],"h2",{"id":61},"migrating-the-helpdesk","Migrating the helpdesk",[12,64,65,66,71],{},"Quite some time ago, I decided to migrate from the bespoke helpdesk platform and use GitLab for issue tracking. Here's ",[19,67,70],{"href":68,"rel":69},"https://gitlab.com/groups/gitlab-org/-/epics/5323",[],"an epic"," I created just over two years ago to start discussing my plans.",[12,73,74],{},"I built a bespoke migration tool using C#, which connects directly to the existing\nhelpdesk database and pushes the data into GitLab using the API. This includes:",[37,76,77,85,88,91,94,97],{},[40,78,79,80,84],{},"groups (each company in our helpdesk will become a group in GitLab with a single ",[81,82,83],"code",{},"Helpdesk"," project)",[40,86,87],{},"issues (every ticket in our helpdesk will become an issue in GitLab, estimates will be included and quotes converted to weights)",[40,89,90],{},"notes",[40,92,93],{},"attachments",[40,95,96],{},"time logs",[40,98,99],{},"labels (type, class, department, and \"status\" will be migrated to labels)",[101,102,104],"h3",{"id":103},"helpdesk-workflow","Helpdesk workflow",[12,106,107],{},"After discussing different approaches with the GitLab team and the community, we came up with the first iteration of our workflow process. The status of tickets in our helpdesk system becomes scoped labels in GitLab. It looks similar to the following:",[12,109,110],{},[111,112],"img",{"alt":113,"src":114},"Workflow Issue Board","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782399329/blog/Content%20Images/workflow-issue-board.png",[12,116,117],{},"We have two relatively small teams so we can also leverage boards to distribute and manage\nwork within the team:",[12,119,120],{},[111,121],{"alt":122,"src":123},"Department Issue Board","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398162/blog/Content%20Images/department-issue-board.png",[12,125,126,127,132,133,138],{},"We will be leveraging the ",[19,128,131],{"href":129,"rel":130},"https://gitlab.com/gitlab-org/ruby/gems/gitlab-triage",[],"GitLab Triage","\nRubyGem and ",[19,134,137],{"href":135,"rel":136},"https://gitlab.com/gitlab-org/quality/triage-ops",[],"Triage Ops"," project to handle\nreactive and scheduled automation, such as:",[37,140,141,144,147],{},[40,142,143],{},"opening pending issues once they reach their due date (this field has been slightly repurposed)",[40,145,146],{},"nudging users when issues have been pended, but no due date has been assigned",[40,148,149],{},"nudging the team when issues have not been triaged (labeled, estimates/quotes attached, etc.)",[12,151,152],{},"GitLab triage will run as a scheduled pipeline from inside of GitLab, and Triage Ops (formerly known as Triage Serverless) will run as webhooks in AWS Lambda (triggered by webhooks). We may potentially transition some of our existing customizations from C# to GitLab Triage/Triage Ops, too.",[59,154,156],{"id":155},"building-out-crm","Building out CRM",[12,158,159,160,165],{},"One of the biggest challenges moving our helpdesk over to GitLab was the inability to tie issues to Customers. So, roughly a year ago, I decided to start building out a ",[19,161,164],{"href":162,"rel":163},"https://docs.gitlab.com/user/crm/",[],"Customer Relations Management"," (CRM) feature.",[12,167,168,169,174],{},"You can see some of the work that has gone into the CRM so far: ",[19,170,173],{"href":171,"rel":172},"https://gitlab.com/gitlab-org/gitlab/-/merge_requests?scope=all&state=merged&label_name%5B%5D=CRM",[],"CRM Merged MRs",".",[12,176,177],{},"It’s surprising how much work is needed for what seems like a mostly simple feature. Despite careful planning, there were many surprises that caused significant headaches. I was hoping to formally release this in December 2021, but it looks like June 2022 is more feasible now.",[101,179,181],{"id":180},"reporting","Reporting",[12,183,184],{},"Compared to our previous bespoke SQL Server Reporting Services (SSRS) report suite pulling directly from our helpdesk, reporting is very limited. We tried using SSRS with a SQL Server linked to our GitLab Postgres server, but kept hitting walls. We are now moving forward using Google Data Studio (with a direct database connection).",[12,186,187],{},"Although we still have a way to go, we've managed to achieve some really great results.",[12,189,190],{},[111,191],{"alt":192,"src":193},"Scheduled Pipelines Report","https://res.cloudinary.com/about-gitlab-com/image/upload/v1782398976/blog/Content%20Images/scheduled-pipelines-report.png",[12,195,196],{},"Here's an example of a report we've started to build to increase the visibility of our scheduled interfaces now that we're leveraging CI/CD more.",[101,198,200],{"id":199},"challenges","Challenges",[12,202,203],{},"One obstacle we were faced with was the inability to achieve a lot of our goals at the instance level. Some GitLab functionality is at the project level, some at the group, and some at an instance. As a result, we had to create a temporary single root group and create all groups beneath it.",[59,205,207],{"id":206},"moving-to-linuxdocker-for-cicd-pipelines","Moving to Linux/Docker for CI/CD pipelines",[12,209,210],{},"We have almost moved completely to Linux/Docker for our CI/CD pipelines, using several custom images:",[37,212,213,226],{},[40,214,215,216,221,222,225],{},"our ",[19,217,220],{"href":218,"rel":219},"https://gitlab.com/tickett/dotnet.core.selenium",[],"custom .NET image"," simply adds chromedriver to the default ",[81,223,224],{},"mcr.microsoft.com/dotnet/core/sdk:latest"," image to add Selenium support for UI testing",[40,227,215,228,233],{},[19,229,232],{"href":230,"rel":231},"https://gitlab.com/tickett/docker-android-gradle",[],"custom Android/Gradle image"," provides a stable build environment for our Clover apps (which require v1 APK signing no longer supported in Android Studio).",[12,235,236,237,240],{},"You can see sample ",[81,238,239],{},".gitlab-ci.yml"," templates in the relevant projects.",[12,242,243],{},"We now have our test summary and coverage visualization displayed in merge requests, which is a total game changer!",[59,245,247],{"id":246},"gitlab-for-intranet","GitLab for intranet",[12,249,250],{},"We've been using SharePoint for as long as I can remember, and I'm not a fan.",[12,252,253],{},"As great as a WYSIWYG interface is, I believe it brings with it:",[37,255,256,259,262],{},[40,257,258],{},"a lack of consistency",[40,260,261],{},"a pretty awful audit trail",[40,263,264],{},"no review/approval process",[12,266,267],{},"So let's try and learn from the best. Can we use GitLab pages? Absolutely!",[12,269,270,271,276],{},"We picked Hugo purely as it seems the most popular (most forked GitLab pages project template). Similarly, the ",[19,272,275],{"href":273,"rel":274},"https://themes.gohugo.io/themes/hugo-theme-relearn/",[],"Relearn theme"," seems to be the most popular for docs.",[12,278,279],{},"It's still a work in progress, but we’re exploring a structure similar to:",[281,282,288],"pre",{"className":283,"code":285,"language":286,"meta":287},[284],"language-text","Clients\n-Client A\n--System A\n--System B\n-Client B\n--System C\n--System D\nInternal\n-Process A\n-Process B\n","text","",[81,289,285],{"__ignoreMap":287},[12,291,292],{},"Not too dissimilar to GitLab, but hugely amplified, we want to pull multiple projects, not just our Hugo repo.",[12,294,295,296,298],{},"The following  is our ",[81,297,239],{},":",[281,300,304],{"className":301,"code":302,"language":303,"meta":287,"style":287},"language-yaml shiki shiki-themes github-light","image: registry.gitlab.com/pages/hugo:latest\nvariables:\n GIT_SUBMODULE_STRATEGY: recursive\ngrab-docs:\n tags:\n   - docker\n image:\n   name: ruby:2.7.5-slim\n script:\n   - cd ${CI_PROJECT_DIR}\n   - gem install gitlab\n   - ruby grab_docs.rb\n artifacts:\n   untracked: true\n\ntest:lint:\n tags:\n   - docker\n image:\n   entrypoint: [\"\"]\n   name: davidanson/markdownlint-cli2\n script:\n   - cp $MARKDOWN_LINT_CONFIG ./.markdownlint-cli2.jsonc\n   - markdownlint-cli2 \"content/**/*.md\"\n needs:\n   - grab-docs\n\ntest:\n tags:\n   - docker\n script:\n   - apk add --update --no-cache git\n   - hugo\n except:\n   - master\n needs:\n   - test:lint\n\npages:\n tags:\n   - docker\n script:\n   - apk add --update --no-cache git\n   - hugo\n artifacts:\n   paths:\n     - public\n only:\n   - master\n needs:\n   - grab-docs\n   - test:lint\n\n","yaml",[81,305,306,323,332,343,351,359,368,376,387,395,403,411,419,427,439,446,454,461,468,475,490,500,507,515,523,531,539,544,552,559,566,573,581,589,597,605,612,620,625,633,640,647,654,661,668,675,683,692,700,707,714,721],{"__ignoreMap":287},[307,308,311,315,319],"span",{"class":309,"line":310},"line",1,[307,312,314],{"class":313},"shJU0","image",[307,316,318],{"class":317},"sgsFI",": ",[307,320,322],{"class":321},"sYBdl","registry.gitlab.com/pages/hugo:latest\n",[307,324,326,329],{"class":309,"line":325},2,[307,327,328],{"class":313},"variables",[307,330,331],{"class":317},":\n",[307,333,335,338,340],{"class":309,"line":334},3,[307,336,337],{"class":313}," GIT_SUBMODULE_STRATEGY",[307,339,318],{"class":317},[307,341,342],{"class":321},"recursive\n",[307,344,346,349],{"class":309,"line":345},4,[307,347,348],{"class":313},"grab-docs",[307,350,331],{"class":317},[307,352,354,357],{"class":309,"line":353},5,[307,355,356],{"class":313}," tags",[307,358,331],{"class":317},[307,360,362,365],{"class":309,"line":361},6,[307,363,364],{"class":317},"   - ",[307,366,367],{"class":321},"docker\n",[307,369,371,374],{"class":309,"line":370},7,[307,372,373],{"class":313}," image",[307,375,331],{"class":317},[307,377,379,382,384],{"class":309,"line":378},8,[307,380,381],{"class":313},"   name",[307,383,318],{"class":317},[307,385,386],{"class":321},"ruby:2.7.5-slim\n",[307,388,390,393],{"class":309,"line":389},9,[307,391,392],{"class":313}," script",[307,394,331],{"class":317},[307,396,398,400],{"class":309,"line":397},10,[307,399,364],{"class":317},[307,401,402],{"class":321},"cd ${CI_PROJECT_DIR}\n",[307,404,406,408],{"class":309,"line":405},11,[307,407,364],{"class":317},[307,409,410],{"class":321},"gem install gitlab\n",[307,412,414,416],{"class":309,"line":413},12,[307,415,364],{"class":317},[307,417,418],{"class":321},"ruby grab_docs.rb\n",[307,420,422,425],{"class":309,"line":421},13,[307,423,424],{"class":313}," artifacts",[307,426,331],{"class":317},[307,428,430,433,435],{"class":309,"line":429},14,[307,431,432],{"class":313},"   untracked",[307,434,318],{"class":317},[307,436,438],{"class":437},"sYu0t","true\n",[307,440,442],{"class":309,"line":441},15,[307,443,445],{"emptyLinePlaceholder":444},true,"\n",[307,447,449,452],{"class":309,"line":448},16,[307,450,451],{"class":313},"test:lint",[307,453,331],{"class":317},[307,455,457,459],{"class":309,"line":456},17,[307,458,356],{"class":313},[307,460,331],{"class":317},[307,462,464,466],{"class":309,"line":463},18,[307,465,364],{"class":317},[307,467,367],{"class":321},[307,469,471,473],{"class":309,"line":470},19,[307,472,373],{"class":313},[307,474,331],{"class":317},[307,476,478,481,484,487],{"class":309,"line":477},20,[307,479,480],{"class":313},"   entrypoint",[307,482,483],{"class":317},": [",[307,485,486],{"class":321},"\"\"",[307,488,489],{"class":317},"]\n",[307,491,493,495,497],{"class":309,"line":492},21,[307,494,381],{"class":313},[307,496,318],{"class":317},[307,498,499],{"class":321},"davidanson/markdownlint-cli2\n",[307,501,503,505],{"class":309,"line":502},22,[307,504,392],{"class":313},[307,506,331],{"class":317},[307,508,510,512],{"class":309,"line":509},23,[307,511,364],{"class":317},[307,513,514],{"class":321},"cp $MARKDOWN_LINT_CONFIG ./.markdownlint-cli2.jsonc\n",[307,516,518,520],{"class":309,"line":517},24,[307,519,364],{"class":317},[307,521,522],{"class":321},"markdownlint-cli2 \"content/**/*.md\"\n",[307,524,526,529],{"class":309,"line":525},25,[307,527,528],{"class":313}," needs",[307,530,331],{"class":317},[307,532,534,536],{"class":309,"line":533},26,[307,535,364],{"class":317},[307,537,538],{"class":321},"grab-docs\n",[307,540,542],{"class":309,"line":541},27,[307,543,445],{"emptyLinePlaceholder":444},[307,545,547,550],{"class":309,"line":546},28,[307,548,549],{"class":313},"test",[307,551,331],{"class":317},[307,553,555,557],{"class":309,"line":554},29,[307,556,356],{"class":313},[307,558,331],{"class":317},[307,560,562,564],{"class":309,"line":561},30,[307,563,364],{"class":317},[307,565,367],{"class":321},[307,567,569,571],{"class":309,"line":568},31,[307,570,392],{"class":313},[307,572,331],{"class":317},[307,574,576,578],{"class":309,"line":575},32,[307,577,364],{"class":317},[307,579,580],{"class":321},"apk add --update --no-cache git\n",[307,582,584,586],{"class":309,"line":583},33,[307,585,364],{"class":317},[307,587,588],{"class":321},"hugo\n",[307,590,592,595],{"class":309,"line":591},34,[307,593,594],{"class":313}," except",[307,596,331],{"class":317},[307,598,600,602],{"class":309,"line":599},35,[307,601,364],{"class":317},[307,603,604],{"class":321},"master\n",[307,606,608,610],{"class":309,"line":607},36,[307,609,528],{"class":313},[307,611,331],{"class":317},[307,613,615,617],{"class":309,"line":614},37,[307,616,364],{"class":317},[307,618,619],{"class":321},"test:lint\n",[307,621,623],{"class":309,"line":622},38,[307,624,445],{"emptyLinePlaceholder":444},[307,626,628,631],{"class":309,"line":627},39,[307,629,630],{"class":313},"pages",[307,632,331],{"class":317},[307,634,636,638],{"class":309,"line":635},40,[307,637,356],{"class":313},[307,639,331],{"class":317},[307,641,643,645],{"class":309,"line":642},41,[307,644,364],{"class":317},[307,646,367],{"class":321},[307,648,650,652],{"class":309,"line":649},42,[307,651,392],{"class":313},[307,653,331],{"class":317},[307,655,657,659],{"class":309,"line":656},43,[307,658,364],{"class":317},[307,660,580],{"class":321},[307,662,664,666],{"class":309,"line":663},44,[307,665,364],{"class":317},[307,667,588],{"class":321},[307,669,671,673],{"class":309,"line":670},45,[307,672,424],{"class":313},[307,674,331],{"class":317},[307,676,678,681],{"class":309,"line":677},46,[307,679,680],{"class":313},"   paths",[307,682,331],{"class":317},[307,684,686,689],{"class":309,"line":685},47,[307,687,688],{"class":317},"     - ",[307,690,691],{"class":321},"public\n",[307,693,695,698],{"class":309,"line":694},48,[307,696,697],{"class":313}," only",[307,699,331],{"class":317},[307,701,703,705],{"class":309,"line":702},49,[307,704,364],{"class":317},[307,706,604],{"class":321},[307,708,710,712],{"class":309,"line":709},50,[307,711,528],{"class":313},[307,713,331],{"class":317},[307,715,717,719],{"class":309,"line":716},51,[307,718,364],{"class":317},[307,720,538],{"class":321},[307,722,724,726],{"class":309,"line":723},52,[307,725,364],{"class":317},[307,727,619],{"class":321},[12,729,730,731,733],{},"The first ",[81,732,348],{}," step runs a custom Ruby script to:",[37,735,736,739,750,753],{},[40,737,738],{},"interrogate our GitLab instance, looping through all groups and projects",[40,740,741,742,745,746,749],{},"grab the ",[81,743,744],{},"README.md"," and ",[81,747,748],{},"/doc"," folder",[40,751,752],{},"add frontmatter for last update date and link to the repo",[40,754,755],{},"update and fix all markdown paths",[281,757,761],{"className":758,"code":759,"language":760,"meta":287,"style":287},"language-ruby shiki shiki-themes github-light","#!/usr/bin/env ruby\n\nrequire 'fileutils'\nrequire 'gitlab'\n\n$api = Gitlab.client(endpoint: ENV['PRODUCTION_API_ENDPOINT'], private_token: ENV['GITLAB_API_TOKEN'].to_s)\n$projects = $api.projects(per_page: 50)\n\ndef grab_files(project)\n file = $api.file_contents(project.id, 'README.md')\n return unless file&.start_with?('\n","ruby",[81,762,763,769,773,782,789,793,847,870,874,885,913],{"__ignoreMap":287},[307,764,765],{"class":309,"line":310},[307,766,768],{"class":767},"sAwPA","#!/usr/bin/env ruby\n",[307,770,771],{"class":309,"line":325},[307,772,445],{"emptyLinePlaceholder":444},[307,774,775,779],{"class":309,"line":334},[307,776,778],{"class":777},"sD7c4","require",[307,780,781],{"class":321}," 'fileutils'\n",[307,783,784,786],{"class":309,"line":345},[307,785,778],{"class":777},[307,787,788],{"class":321}," 'gitlab'\n",[307,790,791],{"class":309,"line":353},[307,792,445],{"emptyLinePlaceholder":444},[307,794,795,798,801,804,806,810,813,816,819,822,825,828,831,833,835,838,841,844],{"class":309,"line":361},[307,796,797],{"class":317},"$api ",[307,799,800],{"class":777},"=",[307,802,803],{"class":437}," Gitlab",[307,805,174],{"class":317},[307,807,809],{"class":808},"s7eDp","client",[307,811,812],{"class":317},"(",[307,814,815],{"class":437},"endpoint:",[307,817,818],{"class":437}," ENV",[307,820,821],{"class":317},"[",[307,823,824],{"class":321},"'PRODUCTION_API_ENDPOINT'",[307,826,827],{"class":317},"], ",[307,829,830],{"class":437},"private_token:",[307,832,818],{"class":437},[307,834,821],{"class":317},[307,836,837],{"class":321},"'GITLAB_API_TOKEN'",[307,839,840],{"class":317},"].",[307,842,843],{"class":808},"to_s",[307,845,846],{"class":317},")\n",[307,848,849,852,854,857,860,862,865,868],{"class":309,"line":370},[307,850,851],{"class":317},"$projects ",[307,853,800],{"class":777},[307,855,856],{"class":317}," $api.",[307,858,859],{"class":808},"projects",[307,861,812],{"class":317},[307,863,864],{"class":437},"per_page:",[307,866,867],{"class":437}," 50",[307,869,846],{"class":317},[307,871,872],{"class":309,"line":378},[307,873,445],{"emptyLinePlaceholder":444},[307,875,876,879,882],{"class":309,"line":389},[307,877,878],{"class":777},"def",[307,880,881],{"class":808}," grab_files",[307,883,884],{"class":317},"(project)\n",[307,886,887,891,894,896,899,902,905,908,911],{"class":309,"line":397},[307,888,890],{"class":889},"sqxcx"," file",[307,892,893],{"class":777}," =",[307,895,856],{"class":317},[307,897,898],{"class":808},"file_contents",[307,900,901],{"class":317},"(project.",[307,903,904],{"class":808},"id",[307,906,907],{"class":317},", ",[307,909,910],{"class":321},"'README.md'",[307,912,846],{"class":317},[307,914,915,918,921,923,926,929,931],{"class":309,"line":405},[307,916,917],{"class":777}," return",[307,919,920],{"class":777}," unless",[307,922,890],{"class":317},[307,924,925],{"class":777},"&.",[307,927,928],{"class":808},"start_with?",[307,930,812],{"class":317},[307,932,933],{"class":321},"'\n",[935,936,937],"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 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 .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}html pre.shiki code .sD7c4, html code.shiki .sD7c4{--shiki-default:#D73A49}html pre.shiki code .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}html pre.shiki code .sqxcx, html code.shiki .sqxcx{--shiki-default:#E36209}",{"title":287,"searchDepth":325,"depth":325,"links":939},[940,943,947,948],{"id":61,"depth":325,"text":62,"children":941},[942],{"id":103,"depth":334,"text":104},{"id":155,"depth":325,"text":156,"children":944},[945,946],{"id":180,"depth":334,"text":181},{"id":199,"depth":334,"text":200},{"id":206,"depth":325,"text":207},{"id":246,"depth":325,"text":247},"devsecops","2022-05-12","Tickett Enterprises Limited Director Lee Tickett shares the details of his ongoing journey to use the DevOps platform to its fullest.","md",null,false,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749667569/Blog/Hero%20Images/heroestickett.jpg",{},"/en-us/blog/gitlab-heroes-unmasked-elevating-my-company-using-gitlab",{"title":5,"description":951,"ogTitle":5,"ogDescription":951,"noIndex":954,"ogImage":955,"ogUrl":959,"ogSiteName":960,"ogType":961,"canonicalUrls":959},"https://about.gitlab.com/blog/gitlab-heroes-unmasked-elevating-my-company-using-gitlab","https://about.gitlab.com","article","gitlab-heroes-unmasked-elevating-my-company-using-gitlab","en-us/blog/gitlab-heroes-unmasked-elevating-my-company-using-gitlab",[965,966,967],"community","contributors","user stories","BlogPost","ZZrQUWtHFfJyG7el89QPdg9SDfNLZRN--BxYPzf7VEU",{"logo":971,"freeTrial":976,"sales":981,"login":986,"items":991,"search":1317,"minimal":1348,"duo":1367,"switchNav":1376,"pricingDeployment":1387},{"config":972},{"href":973,"dataGaName":974,"dataGaLocation":975},"/","gitlab logo","header",{"text":977,"config":978},"Get free trial",{"href":979,"dataGaName":980,"dataGaLocation":975},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com&glm_content=default-saas-trial/","free trial",{"text":982,"config":983},"Request a demo",{"href":984,"dataGaName":985,"dataGaLocation":975},"/sales/?contact-topic=request-demo","sales",{"text":987,"config":988},"Sign in",{"href":989,"dataGaName":990,"dataGaLocation":975},"https://gitlab.com/users/sign_in/","sign in",[992,1021,1121,1126,1239,1295],{"text":993,"config":994,"menu":996},"Platform",{"dataNavLevelOne":995},"platform",{"type":997,"columns":998},"cards",[999,1005,1013],{"title":993,"description":1000,"link":1001},"The intelligent orchestration platform for DevSecOps",{"text":1002,"config":1003},"Explore our Platform",{"href":1004,"dataGaName":995,"dataGaLocation":975},"/platform/",{"title":1006,"description":1007,"link":1008},"GitLab Duo Agent Platform","Agentic AI for the entire software lifecycle",{"text":1009,"config":1010},"Meet GitLab Duo",{"href":1011,"dataGaName":1012,"dataGaLocation":975},"/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":1014,"description":1015,"link":1016},"Why GitLab","See the top reasons enterprises choose GitLab",{"text":1017,"config":1018},"Learn more",{"href":1019,"dataGaName":1020,"dataGaLocation":975},"/why-gitlab/","why gitlab",{"text":1022,"left":444,"config":1023,"menu":1025},"Product",{"dataNavLevelOne":1024},"solutions",{"type":1026,"link":1027,"columns":1031,"feature":1100},"lists",{"text":1028,"config":1029},"View all Solutions",{"href":1030,"dataGaName":1024,"dataGaLocation":975},"/solutions/",[1032,1056,1079],{"title":1033,"description":1034,"link":1035,"items":1040},"Automation","CI/CD and automation to accelerate deployment",{"config":1036},{"icon":1037,"href":1038,"dataGaName":1039,"dataGaLocation":975},"AutomatedCodeAlt","/solutions/delivery-automation/","automated software delivery",[1041,1045,1048,1052],{"text":1042,"config":1043},"CI/CD",{"href":1044,"dataGaLocation":975,"dataGaName":1042},"/solutions/continuous-integration/",{"text":1006,"config":1046},{"href":1011,"dataGaLocation":975,"dataGaName":1047},"gitlab duo agent platform - product menu",{"text":1049,"config":1050},"Source Code Management",{"href":1051,"dataGaLocation":975,"dataGaName":1049},"/solutions/source-code-management/",{"text":1053,"config":1054},"Automated Software Delivery",{"href":1038,"dataGaLocation":975,"dataGaName":1055},"Automated software delivery",{"title":1057,"description":1058,"link":1059,"items":1064},"Security","Deliver code faster without compromising security",{"config":1060},{"href":1061,"dataGaName":1062,"dataGaLocation":975,"icon":1063},"/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[1065,1069,1074],{"text":1066,"config":1067},"Application Security Testing",{"href":1061,"dataGaName":1068,"dataGaLocation":975},"Application security testing",{"text":1070,"config":1071},"Software Supply Chain Security",{"href":1072,"dataGaLocation":975,"dataGaName":1073},"/solutions/supply-chain/","Software supply chain security",{"text":1075,"config":1076},"Software Compliance",{"href":1077,"dataGaName":1078,"dataGaLocation":975},"/solutions/software-compliance/","software compliance",{"title":1080,"link":1081,"items":1086},"Measurement",{"config":1082},{"icon":1083,"href":1084,"dataGaName":1085,"dataGaLocation":975},"DigitalTransformation","/solutions/visibility-measurement/","visibility and measurement",[1087,1091,1095],{"text":1088,"config":1089},"Visibility & Measurement",{"href":1084,"dataGaLocation":975,"dataGaName":1090},"Visibility and Measurement",{"text":1092,"config":1093},"Value Stream Management",{"href":1094,"dataGaLocation":975,"dataGaName":1092},"/solutions/value-stream-management/",{"text":1096,"config":1097},"Analytics & Insights",{"href":1098,"dataGaLocation":975,"dataGaName":1099},"/solutions/analytics-and-insights/","Analytics and insights",{"title":1101,"type":1026,"items":1102},"GitLab for",[1103,1109,1115],{"text":1104,"config":1105},"Enterprise",{"icon":1106,"href":1107,"dataGaLocation":975,"dataGaName":1108},"Building","/enterprise/","enterprise",{"text":1110,"config":1111},"Small Business",{"icon":1112,"href":1113,"dataGaLocation":975,"dataGaName":1114},"Work","/small-business/","small business",{"text":1116,"config":1117},"Public Sector",{"icon":1118,"href":1119,"dataGaLocation":975,"dataGaName":1120},"Organization","/solutions/public-sector/","public sector",{"text":1122,"config":1123},"Pricing",{"href":1124,"dataGaName":1125,"dataGaLocation":975,"dataNavLevelOne":1125},"/pricing/","pricing",{"text":1127,"config":1128,"menu":1130},"Resources",{"dataNavLevelOne":1129},"resources",{"type":1026,"link":1131,"columns":1135,"feature":1228},{"text":1132,"config":1133},"View all resources",{"href":1134,"dataGaName":1129,"dataGaLocation":975},"/resources/",[1136,1169,1196],{"title":1137,"items":1138},"Getting started",[1139,1144,1149,1154,1159,1164],{"text":1140,"config":1141},"Install",{"href":1142,"dataGaName":1143,"dataGaLocation":975},"/install/","install",{"text":1145,"config":1146},"Quick start guides",{"href":1147,"dataGaName":1148,"dataGaLocation":975},"/get-started/","quick setup checklists",{"text":1150,"config":1151},"Learn",{"href":1152,"dataGaLocation":975,"dataGaName":1153},"https://university.gitlab.com/","learn",{"text":1155,"config":1156},"Product documentation",{"href":1157,"dataGaName":1158,"dataGaLocation":975},"https://docs.gitlab.com/","product documentation",{"text":1160,"config":1161},"Best practice videos",{"href":1162,"dataGaName":1163,"dataGaLocation":975},"/getting-started-videos/","best practice videos",{"text":1165,"config":1166},"Integrations",{"href":1167,"dataGaName":1168,"dataGaLocation":975},"/integrations/","integrations",{"title":1170,"items":1171},"Discover",[1172,1177,1182,1187,1191],{"text":1173,"config":1174},"Customer success stories",{"href":1175,"dataGaName":1176,"dataGaLocation":975},"/customers/","customer success stories",{"text":1178,"config":1179},"Blog",{"href":1180,"dataGaName":1181,"dataGaLocation":975},"/blog/","blog",{"text":1183,"config":1184},"Demo Hub",{"href":1185,"dataGaName":1186,"dataGaLocation":975},"/demo-hub/","demo hub",{"text":1188,"config":1189},"The Source",{"href":1190,"dataGaName":1181,"dataGaLocation":975},"/the-source/",{"text":1192,"config":1193},"Remote",{"href":1194,"dataGaName":1195,"dataGaLocation":975},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":1197,"items":1198},"Connect",[1199,1204,1209,1213,1218,1223],{"text":1200,"config":1201},"GitLab Services",{"href":1202,"dataGaName":1203,"dataGaLocation":975},"/services/","services",{"text":1205,"config":1206},"Contribute",{"href":1207,"dataGaName":1208,"dataGaLocation":975},"https://contributors.gitlab.com","contribute",{"text":1210,"config":1211},"Community",{"href":1212,"dataGaName":965,"dataGaLocation":975},"/community/",{"text":1214,"config":1215},"Forum",{"href":1216,"dataGaName":1217,"dataGaLocation":975},"https://forum.gitlab.com/","forum",{"text":1219,"config":1220},"Events",{"href":1221,"dataGaName":1222,"dataGaLocation":975},"/events/","events",{"text":1224,"config":1225},"Partners",{"href":1226,"dataGaName":1227,"dataGaLocation":975},"/partners/","partners",{"config":1229,"title":1232,"text":1233,"link":1234},{"background":1230,"textColor":1231},"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":1235,"config":1236},"Read the latest",{"href":1237,"dataGaName":1238,"dataGaLocation":975},"/whats-new/","whats new",{"text":1240,"config":1241,"menu":1243},"Company",{"dataNavLevelOne":1242},"company",{"type":1026,"columns":1244},[1245],{"items":1246},[1247,1252,1258,1260,1265,1270,1275,1280,1285,1290],{"text":1248,"config":1249},"About",{"href":1250,"dataGaName":1251,"dataGaLocation":975},"/company/","about",{"text":1253,"config":1254,"footerGa":1257},"Jobs",{"href":1255,"dataGaName":1256,"dataGaLocation":975},"/jobs/","jobs",{"dataGaName":1256},{"text":1219,"config":1259},{"href":1221,"dataGaName":1222,"dataGaLocation":975},{"text":1261,"config":1262},"Leadership",{"href":1263,"dataGaName":1264,"dataGaLocation":975},"/company/team/e-group/","leadership",{"text":1266,"config":1267},"Handbook",{"href":1268,"dataGaName":1269,"dataGaLocation":975},"https://handbook.gitlab.com/","handbook",{"text":1271,"config":1272},"Investor relations",{"href":1273,"dataGaName":1274,"dataGaLocation":975},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":1276,"config":1277},"Trust Center",{"href":1278,"dataGaName":1279,"dataGaLocation":975},"/security/","trust center",{"text":1281,"config":1282},"AI Transparency Center",{"href":1283,"dataGaName":1284,"dataGaLocation":975},"/ai-transparency-center/","ai transparency center",{"text":1286,"config":1287},"Newsletter",{"href":1288,"dataGaName":1289,"dataGaLocation":975},"/company/contact/#contact-forms","newsletter",{"text":1291,"config":1292},"Press",{"href":1293,"dataGaName":1294,"dataGaLocation":975},"/press/","press",{"text":1296,"config":1297,"menu":1298},"Contact us",{"dataNavLevelOne":1242},{"type":1026,"columns":1299},[1300],{"items":1301},[1302,1307,1312],{"text":1303,"config":1304},"Talk to sales",{"href":1305,"dataGaName":1306,"dataGaLocation":975},"/sales/","talk to sales",{"text":1308,"config":1309},"Support portal",{"href":1310,"dataGaName":1311,"dataGaLocation":975},"https://support.gitlab.com/hc/en-us","support portal",{"text":1313,"config":1314},"Customer portal",{"href":1315,"dataGaName":1316,"dataGaLocation":975},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":1318,"login":1319,"suggestions":1326},"Close",{"text":1320,"link":1321},"To search repositories and projects, login to",{"text":1322,"config":1323},"gitlab.com",{"href":989,"dataGaName":1324,"dataGaLocation":1325},"search login","search",{"text":1327,"default":1328},"Suggestions",[1329,1331,1335,1337,1341,1345],{"text":1006,"config":1330},{"href":1011,"dataGaName":1006,"dataGaLocation":1325},{"text":1332,"config":1333},"Code Suggestions (AI)",{"href":1334,"dataGaName":1332,"dataGaLocation":1325},"/solutions/code-suggestions/",{"text":1042,"config":1336},{"href":1044,"dataGaName":1042,"dataGaLocation":1325},{"text":1338,"config":1339},"GitLab on AWS",{"href":1340,"dataGaName":1338,"dataGaLocation":1325},"/partners/technology-partners/aws/",{"text":1342,"config":1343},"GitLab on Google Cloud",{"href":1344,"dataGaName":1342,"dataGaLocation":1325},"/partners/technology-partners/google-cloud-platform/",{"text":1346,"config":1347},"Why GitLab?",{"href":1019,"dataGaName":1346,"dataGaLocation":1325},{"freeTrial":1349,"mobileIcon":1354,"desktopIcon":1359,"secondaryButton":1362},{"text":1350,"config":1351},"Start free trial",{"href":1352,"dataGaName":980,"dataGaLocation":1353},"https://gitlab.com/-/trials/new/","nav",{"altText":1355,"config":1356},"Gitlab Icon",{"src":1357,"dataGaName":1358,"dataGaLocation":1353},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":1355,"config":1360},{"src":1361,"dataGaName":1358,"dataGaLocation":1353},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":1363,"config":1364},"Get Started",{"href":1365,"dataGaName":1366,"dataGaLocation":1353},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/get-started/","get started",{"freeTrial":1368,"mobileIcon":1372,"desktopIcon":1374},{"text":1369,"config":1370},"Learn more about GitLab Duo",{"href":1011,"dataGaName":1371,"dataGaLocation":1353},"gitlab duo",{"altText":1355,"config":1373},{"src":1357,"dataGaName":1358,"dataGaLocation":1353},{"altText":1355,"config":1375},{"src":1361,"dataGaName":1358,"dataGaLocation":1353},{"button":1377,"mobileIcon":1382,"desktopIcon":1384},{"text":1378,"config":1379},"/switch",{"href":1380,"dataGaName":1381,"dataGaLocation":1353},"#contact","switch",{"altText":1355,"config":1383},{"src":1357,"dataGaName":1358,"dataGaLocation":1353},{"altText":1355,"config":1385},{"src":1386,"dataGaName":1358,"dataGaLocation":1353},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":1388,"mobileIcon":1393,"desktopIcon":1395},{"text":1389,"config":1390},"Back to pricing",{"href":1124,"dataGaName":1391,"dataGaLocation":1353,"icon":1392},"back to pricing","GoBack",{"altText":1355,"config":1394},{"src":1357,"dataGaName":1358,"dataGaLocation":1353},{"altText":1355,"config":1396},{"src":1361,"dataGaName":1358,"dataGaLocation":1353},{"title":1398,"titleMobile":1399,"button":1400,"config":1405},"Duo Agent Platform delivers 400% ROI, per new Forrester Consulting study.","400% ROI: Forrester TEI for GitLab Duo",{"text":1017,"config":1401},{"href":1402,"dataGaName":1403,"dataGaLocation":1404},"https://about.gitlab.com/blog/gitlab-duo-agent-platform-delivers-400-percent-roi/","forrester-tei-dap-banner","global-banner",{"layout":1406,"disabled":954},"release",{"data":1408},{"text":1409,"source":1410,"edit":1416,"contribute":1421,"config":1426,"items":1431,"minimal":1640},"Git is a trademark of Software Freedom Conservancy and our use of 'GitLab' is under license",{"text":1411,"config":1412},"View page source",{"href":1413,"dataGaName":1414,"dataGaLocation":1415},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":1417,"config":1418},"Edit this page",{"href":1419,"dataGaName":1420,"dataGaLocation":1415},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":1422,"config":1423},"Please contribute",{"href":1424,"dataGaName":1425,"dataGaLocation":1415},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":1427,"facebook":1428,"youtube":1429,"linkedin":1430},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[1432,1479,1532,1576,1608],{"title":1122,"links":1433,"subMenu":1448},[1434,1438,1443],{"text":1435,"config":1436},"View plans",{"href":1124,"dataGaName":1437,"dataGaLocation":1415},"view plans",{"text":1439,"config":1440},"Why Premium?",{"href":1441,"dataGaName":1442,"dataGaLocation":1415},"/pricing/premium/","why premium",{"text":1444,"config":1445},"Why Ultimate?",{"href":1446,"dataGaName":1447,"dataGaLocation":1415},"/pricing/ultimate/","why ultimate",[1449],{"title":1450,"links":1451},"Contact Us",[1452,1455,1457,1459,1464,1469,1474],{"text":1453,"config":1454},"Contact sales",{"href":1305,"dataGaName":985,"dataGaLocation":1415},{"text":1308,"config":1456},{"href":1310,"dataGaName":1311,"dataGaLocation":1415},{"text":1313,"config":1458},{"href":1315,"dataGaName":1316,"dataGaLocation":1415},{"text":1460,"config":1461},"Status",{"href":1462,"dataGaName":1463,"dataGaLocation":1415},"https://status.gitlab.com/","status",{"text":1465,"config":1466},"Terms of use",{"href":1467,"dataGaName":1468,"dataGaLocation":1415},"/terms/","terms of use",{"text":1470,"config":1471},"Privacy statement",{"href":1472,"dataGaName":1473,"dataGaLocation":1415},"/privacy/","privacy statement",{"text":1475,"config":1476},"Cookie preferences",{"dataGaName":1477,"dataGaLocation":1415,"id":1478,"isOneTrustButton":444},"cookie preferences","ot-sdk-btn",{"title":1022,"links":1480,"subMenu":1489},[1481,1485],{"text":1482,"config":1483},"DevSecOps platform",{"href":1004,"dataGaName":1484,"dataGaLocation":1415},"devsecops platform",{"text":1486,"config":1487},"AI-Assisted Development",{"href":1011,"dataGaName":1488,"dataGaLocation":1415},"ai-assisted development",[1490],{"title":1491,"links":1492},"Topics",[1493,1498,1503,1508,1513,1517,1522,1527],{"text":1494,"config":1495},"CICD",{"href":1496,"dataGaName":1497,"dataGaLocation":1415},"/topics/ci-cd/","cicd",{"text":1499,"config":1500},"GitOps",{"href":1501,"dataGaName":1502,"dataGaLocation":1415},"/topics/gitops/","gitops",{"text":1504,"config":1505},"DevOps",{"href":1506,"dataGaName":1507,"dataGaLocation":1415},"/topics/devops/","devops",{"text":1509,"config":1510},"Version Control",{"href":1511,"dataGaName":1512,"dataGaLocation":1415},"/topics/version-control/","version control",{"text":1514,"config":1515},"DevSecOps",{"href":1516,"dataGaName":949,"dataGaLocation":1415},"/topics/devsecops/",{"text":1518,"config":1519},"Cloud Native",{"href":1520,"dataGaName":1521,"dataGaLocation":1415},"/topics/cloud-native/","cloud native",{"text":1523,"config":1524},"AI for Coding",{"href":1525,"dataGaName":1526,"dataGaLocation":1415},"/topics/devops/ai-for-coding/","ai for coding",{"text":1528,"config":1529},"Agentic AI",{"href":1530,"dataGaName":1531,"dataGaLocation":1415},"/topics/agentic-ai/","agentic ai",{"title":1533,"links":1534},"Solutions",[1535,1537,1539,1544,1548,1551,1555,1558,1560,1563,1566,1571],{"text":1066,"config":1536},{"href":1061,"dataGaName":1066,"dataGaLocation":1415},{"text":1055,"config":1538},{"href":1038,"dataGaName":1039,"dataGaLocation":1415},{"text":1540,"config":1541},"Agile development",{"href":1542,"dataGaName":1543,"dataGaLocation":1415},"/solutions/agile-delivery/","agile delivery",{"text":1545,"config":1546},"SCM",{"href":1051,"dataGaName":1547,"dataGaLocation":1415},"source code management",{"text":1494,"config":1549},{"href":1044,"dataGaName":1550,"dataGaLocation":1415},"continuous integration & delivery",{"text":1552,"config":1553},"Value stream management",{"href":1094,"dataGaName":1554,"dataGaLocation":1415},"value stream management",{"text":1499,"config":1556},{"href":1557,"dataGaName":1502,"dataGaLocation":1415},"/solutions/gitops/",{"text":1104,"config":1559},{"href":1107,"dataGaName":1108,"dataGaLocation":1415},{"text":1561,"config":1562},"Small business",{"href":1113,"dataGaName":1114,"dataGaLocation":1415},{"text":1564,"config":1565},"Public sector",{"href":1119,"dataGaName":1120,"dataGaLocation":1415},{"text":1567,"config":1568},"Education",{"href":1569,"dataGaName":1570,"dataGaLocation":1415},"/solutions/education/","education",{"text":1572,"config":1573},"Financial services",{"href":1574,"dataGaName":1575,"dataGaLocation":1415},"/solutions/finance/","financial services",{"title":1127,"links":1577},[1578,1580,1582,1584,1587,1589,1592,1594,1596,1598,1600,1602,1604,1606],{"text":1140,"config":1579},{"href":1142,"dataGaName":1143,"dataGaLocation":1415},{"text":1145,"config":1581},{"href":1147,"dataGaName":1148,"dataGaLocation":1415},{"text":1150,"config":1583},{"href":1152,"dataGaName":1153,"dataGaLocation":1415},{"text":1155,"config":1585},{"href":1157,"dataGaName":1586,"dataGaLocation":1415},"docs",{"text":1178,"config":1588},{"href":1180,"dataGaName":1181,"dataGaLocation":1415},{"text":1590,"config":1591},"What's new",{"href":1237,"dataGaName":1238,"dataGaLocation":1415},{"text":1173,"config":1593},{"href":1175,"dataGaName":1176,"dataGaLocation":1415},{"text":1192,"config":1595},{"href":1194,"dataGaName":1195,"dataGaLocation":1415},{"text":1200,"config":1597},{"href":1202,"dataGaName":1203,"dataGaLocation":1415},{"text":1205,"config":1599},{"href":1207,"dataGaName":1208,"dataGaLocation":1415},{"text":1210,"config":1601},{"href":1212,"dataGaName":965,"dataGaLocation":1415},{"text":1214,"config":1603},{"href":1216,"dataGaName":1217,"dataGaLocation":1415},{"text":1219,"config":1605},{"href":1221,"dataGaName":1222,"dataGaLocation":1415},{"text":1224,"config":1607},{"href":1226,"dataGaName":1227,"dataGaLocation":1415},{"title":1240,"links":1609},[1610,1612,1614,1616,1618,1620,1624,1629,1631,1633,1635],{"text":1248,"config":1611},{"href":1250,"dataGaName":1242,"dataGaLocation":1415},{"text":1253,"config":1613},{"href":1255,"dataGaName":1256,"dataGaLocation":1415},{"text":1261,"config":1615},{"href":1263,"dataGaName":1264,"dataGaLocation":1415},{"text":1266,"config":1617},{"href":1268,"dataGaName":1269,"dataGaLocation":1415},{"text":1271,"config":1619},{"href":1273,"dataGaName":1274,"dataGaLocation":1415},{"text":1621,"config":1622},"Sustainability",{"href":1623,"dataGaName":1621,"dataGaLocation":1415},"/sustainability/",{"text":1625,"config":1626},"Diversity, inclusion and belonging (DIB)",{"href":1627,"dataGaName":1628,"dataGaLocation":1415},"/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":1276,"config":1630},{"href":1278,"dataGaName":1279,"dataGaLocation":1415},{"text":1286,"config":1632},{"href":1288,"dataGaName":1289,"dataGaLocation":1415},{"text":1291,"config":1634},{"href":1293,"dataGaName":1294,"dataGaLocation":1415},{"text":1636,"config":1637},"Modern Slavery Transparency Statement",{"href":1638,"dataGaName":1639,"dataGaLocation":1415},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":1641},[1642,1645,1648],{"text":1643,"config":1644},"Terms",{"href":1467,"dataGaName":1468,"dataGaLocation":1415},{"text":1646,"config":1647},"Cookies",{"dataGaName":1477,"dataGaLocation":1415,"id":1478,"isOneTrustButton":444},{"text":1649,"config":1650},"Privacy",{"href":1472,"dataGaName":1473,"dataGaLocation":1415},[1652],{"id":1653,"title":7,"body":953,"config":1654,"content":1656,"description":953,"extension":1660,"meta":1661,"navigation":444,"path":1662,"seo":1663,"stem":1664,"__hash__":1665},"blogAuthors/en-us/blog/authors/lee-tickett.yml",{"template":1655},"BlogAuthor",{"name":7,"config":1657},{"headshot":1658,"ctfId":1659},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1752592356/ibeixykxeiey9aiebylt.png","leetickett","yml",{},"/en-us/blog/authors/lee-tickett",{},"en-us/blog/authors/lee-tickett","pjnpw0lMQmdffRTIj30HBAHqTEvadkz2cw3rJyXrG5I",[1667,1675,1683],{"title":1668,"description":1669,"heroImage":1670,"category":949,"date":1671,"authors":1672,"slug":1674,"externalUrl":953},"Consolidate your GitLab stack with Gitaly on Kubernetes","Discover how to install Gitaly on Kubernetes, which is now generally available.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1756500636/wmey6kqzzuhirk88w2de.png","2026-05-07",[1673],"Olivier Campeau","gitaly-on-kubernetes-generally-available",{"title":1676,"description":1677,"heroImage":1678,"category":949,"date":1679,"authors":1680,"slug":1682,"externalUrl":953},"Teaching software development the easy way using GitLab","Learn how University of Washington lecturer Stephen G. Dame uses GitLab for Education to manage student assignments, distribute course materials, and provide inline code feedback at scale.\n","https://res.cloudinary.com/about-gitlab-com/image/upload/v1749659537/Blog/Hero%20Images/display-article-image-0679-1800x945-fy26.png","2026-04-29",[1681],"Rod Burns","teaching-software-development-the-easy-way-using-gitlab",{"title":1684,"description":1685,"heroImage":1686,"category":949,"date":1687,"authors":1688,"slug":1690,"externalUrl":953},"AI is reshaping DevSecOps: Attend GitLab Transcend to see what’s next","AI-generated code is 34% of development work. Discover how to balance productivity gains with quality, reliability, and security.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1767982271/e9ogyosmuummq7j65zqg.png","2026-01-08",[1689],"Manav Khurana","ai-is-reshaping-devsecops-attend-gitlab-transcend-to-see-whats-next",{"promotions":1692},[1693,1707,1719,1731],{"id":1694,"categories":1695,"header":1697,"text":1698,"button":1699,"image":1704},"ai-modernization",[1696],"ai","Is AI achieving its promise at scale?","Quiz will take 5 minutes or less",{"text":1700,"config":1701},"Get your AI maturity score",{"href":1702,"dataGaName":1703,"dataGaLocation":1181},"/assessments/ai-modernization-assessment/","modernization assessment",{"config":1705},{"src":1706},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":1708,"categories":1709,"header":1711,"text":1698,"button":1712,"image":1716},"devops-modernization",[1710,949],"product","Are you just managing tools or shipping innovation?",{"text":1713,"config":1714},"Get your DevOps maturity score",{"href":1715,"dataGaName":1703,"dataGaLocation":1181},"/assessments/devops-modernization-assessment/",{"config":1717},{"src":1718},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":1720,"categories":1721,"header":1723,"text":1698,"button":1724,"image":1728},"security-modernization",[1722],"security","Are you trading speed for security?",{"text":1725,"config":1726},"Get your security maturity score",{"href":1727,"dataGaName":1703,"dataGaLocation":1181},"/assessments/security-modernization-assessment/",{"config":1729},{"src":1730},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":1732,"paths":1733,"header":1736,"text":1737,"button":1738,"image":1743},"github-azure-migration",[1734,1735],"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":1739,"config":1740},"See how GitLab compares to GitHub",{"href":1741,"dataGaName":1742,"dataGaLocation":1181},"/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":1744},{"src":1718},{"header":1746,"blurb":1747,"button":1748,"secondaryButton":1753},"Start building faster today","See what your team can do with the intelligent orchestration platform for DevSecOps.\n",{"text":1749,"config":1750},"Get your free trial",{"href":1751,"dataGaName":980,"dataGaLocation":1752},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/","feature",{"text":1453,"config":1754},{"href":1305,"dataGaName":985,"dataGaLocation":1752},1786803750541]