[{"data":1,"prerenderedAt":2812},["ShallowReactive",2],{"/fr-fr/blog/tutorial-secure-and-optimize-your-maven-repository-in-gitlab":3,"navigation-fr-fr":2031,"banner-fr-fr":2466,"footer-fr-fr":2474,"blog-post-authors-fr-fr-Tim Rizzi":2713,"blog-related-posts-fr-fr-tutorial-secure-and-optimize-your-maven-repository-in-gitlab":2728,"blog-promotions-fr-fr":2750,"next-steps-fr-fr":2803},{"id":4,"title":5,"authors":6,"body":8,"category":2008,"date":2009,"description":2010,"extension":2011,"externalUrl":2012,"faq":2012,"featured":627,"heroImage":2013,"meta":2014,"navigation":627,"path":2015,"seo":2016,"slug":2021,"stem":2022,"tags":2023,"template":2029,"updatedDate":2012,"__hash__":2030},"blogPosts/fr-fr/blog/tutorial-secure-and-optimize-your-maven-repository-in-gitlab.md","Comment sécuriser et optimiser votre dépôt Maven dans GitLab",[7],"Tim Rizzi",{"type":9,"value":10,"toc":1986},"minimark",[11,15,20,23,28,35,38,68,75,256,266,338,345,512,515,537,543,586,590,598,646,652,694,700,722,726,777,781,945,949,957,961,964,968,1100,1104,1135,1139,1163,1167,1252,1256,1414,1418,1421,1425,1446,1450,1460,1598,1601,1645,1648,1719,1725,1819,1827,1912,1917,1931,1935,1938,1952,1969,1973,1976,1979,1982],[12,13,14],"p",{},"En tant que Product Manager chez GitLab, j'ai le plaisir de vous présenter nos solutions pour sécuriser et optimiser votre dépôt Maven. GitLab s'engage à offrir une plateforme DevSecOps complète, où la gestion des packages et la sécurisation des dépôts Maven jouent un rôle clé. Découvrez dans ce tutoriel les bonnes pratiques, les techniques avancées et les fonctionnalités à venir qui vont transformer votre workflow Maven.",[16,17,19],"h2",{"id":18},"sécurisation-de-votre-dépôt-maven-une-approche-globale","Sécurisation de votre dépôt Maven : une approche globale",[12,21,22],{},"La sécurisation de votre chaîne d'approvisionnement logicielle est une priorité absolue. Voici les stratégies essentielles pour renforcer la sécurité de vos paquets Maven dans GitLab.",[24,25,27],"h3",{"id":26},"mettre-en-œuvre-un-système-dauthentification-forte","Mettre en œuvre un système d'authentification forte",[12,29,30,34],{},[31,32,33],"strong",{},"Jetons d'accès personnels (PAT) :"," privilégiez les PAT pour un contrôle d'accès affiné.",[12,36,37],{},"Par exemple :",[39,40,45],"pre",{"className":41,"code":42,"language":43,"meta":44,"style":44},"language-bash shiki shiki-themes github-light","mvn deploy -s settings.xml\n","bash","",[46,47,48],"code",{"__ignoreMap":44},[49,50,53,57,61,65],"span",{"class":51,"line":52},"line",1,[49,54,56],{"class":55},"s7eDp","mvn",[49,58,60],{"class":59},"sYBdl"," deploy",[49,62,64],{"class":63},"sYu0t"," -s",[49,66,67],{"class":59}," settings.xml\n",[12,69,70,71,74],{},"Avec la configuration suivante dans ",[46,72,73],{},"settings.xml"," :",[39,76,80],{"className":77,"code":78,"language":79,"meta":44,"style":44},"language-xml shiki shiki-themes github-light","\u003Csettings>\n  \u003Cservers>\n    \u003Cserver>\n      \u003Cid>gitlab-maven\u003C/id>\n      \u003Cconfiguration>\n        \u003ChttpHeaders>\n          \u003Cproperty>\n            \u003Cname>Private-Token\u003C/name>\n            \u003Cvalue>${env.GITLAB_PERSONAL_TOKEN}\u003C/value>\n          \u003C/property>\n        \u003C/httpHeaders>\n      \u003C/configuration>\n    \u003C/server>\n  \u003C/servers>\n\u003C/settings>\n","xml",[46,81,82,95,106,117,133,143,154,165,181,196,206,216,226,236,246],{"__ignoreMap":44},[49,83,84,88,92],{"class":51,"line":52},[49,85,87],{"class":86},"sgsFI","\u003C",[49,89,91],{"class":90},"shJU0","settings",[49,93,94],{"class":86},">\n",[49,96,98,101,104],{"class":51,"line":97},2,[49,99,100],{"class":86},"  \u003C",[49,102,103],{"class":90},"servers",[49,105,94],{"class":86},[49,107,109,112,115],{"class":51,"line":108},3,[49,110,111],{"class":86},"    \u003C",[49,113,114],{"class":90},"server",[49,116,94],{"class":86},[49,118,120,123,126,129,131],{"class":51,"line":119},4,[49,121,122],{"class":86},"      \u003C",[49,124,125],{"class":90},"id",[49,127,128],{"class":86},">gitlab-maven\u003C/",[49,130,125],{"class":90},[49,132,94],{"class":86},[49,134,136,138,141],{"class":51,"line":135},5,[49,137,122],{"class":86},[49,139,140],{"class":90},"configuration",[49,142,94],{"class":86},[49,144,146,149,152],{"class":51,"line":145},6,[49,147,148],{"class":86},"        \u003C",[49,150,151],{"class":90},"httpHeaders",[49,153,94],{"class":86},[49,155,157,160,163],{"class":51,"line":156},7,[49,158,159],{"class":86},"          \u003C",[49,161,162],{"class":90},"property",[49,164,94],{"class":86},[49,166,168,171,174,177,179],{"class":51,"line":167},8,[49,169,170],{"class":86},"            \u003C",[49,172,173],{"class":90},"name",[49,175,176],{"class":86},">Private-Token\u003C/",[49,178,173],{"class":90},[49,180,94],{"class":86},[49,182,184,186,189,192,194],{"class":51,"line":183},9,[49,185,170],{"class":86},[49,187,188],{"class":90},"value",[49,190,191],{"class":86},">${env.GITLAB_PERSONAL_TOKEN}\u003C/",[49,193,188],{"class":90},[49,195,94],{"class":86},[49,197,199,202,204],{"class":51,"line":198},10,[49,200,201],{"class":86},"          \u003C/",[49,203,162],{"class":90},[49,205,94],{"class":86},[49,207,209,212,214],{"class":51,"line":208},11,[49,210,211],{"class":86},"        \u003C/",[49,213,151],{"class":90},[49,215,94],{"class":86},[49,217,219,222,224],{"class":51,"line":218},12,[49,220,221],{"class":86},"      \u003C/",[49,223,140],{"class":90},[49,225,94],{"class":86},[49,227,229,232,234],{"class":51,"line":228},13,[49,230,231],{"class":86},"    \u003C/",[49,233,114],{"class":90},[49,235,94],{"class":86},[49,237,239,242,244],{"class":51,"line":238},14,[49,240,241],{"class":86},"  \u003C/",[49,243,103],{"class":90},[49,245,94],{"class":86},[49,247,249,252,254],{"class":51,"line":248},15,[49,250,251],{"class":86},"\u003C/",[49,253,91],{"class":90},[49,255,94],{"class":86},[12,257,258,261,262,265],{},[31,259,260],{},"Tokens de déploiement :"," adaptés pour les pipelines CI/CD. Générez-les dans les paramètres de votre projet GitLab et intégrez-les dans votre fichier ",[46,263,264],{},".gitlab-ci.yml",".",[39,267,271],{"className":268,"code":269,"language":270,"meta":44,"style":44},"language-yaml shiki shiki-themes github-light","deploy:\n  script:\n    - 'mvn deploy -s ci_settings.xml'\n  variables:\n    MAVEN_CLI_OPTS: \"-s ci_settings.xml --batch-mode\"\n    MAVEN_OPTS: \"-Dmaven.repo.local=.m2/repository\"\n  only:\n    - main\n","yaml",[46,272,273,281,288,296,303,314,324,331],{"__ignoreMap":44},[49,274,275,278],{"class":51,"line":52},[49,276,277],{"class":90},"deploy",[49,279,280],{"class":86},":\n",[49,282,283,286],{"class":51,"line":97},[49,284,285],{"class":90},"  script",[49,287,280],{"class":86},[49,289,290,293],{"class":51,"line":108},[49,291,292],{"class":86},"    - ",[49,294,295],{"class":59},"'mvn deploy -s ci_settings.xml'\n",[49,297,298,301],{"class":51,"line":119},[49,299,300],{"class":90},"  variables",[49,302,280],{"class":86},[49,304,305,308,311],{"class":51,"line":135},[49,306,307],{"class":90},"    MAVEN_CLI_OPTS",[49,309,310],{"class":86},": ",[49,312,313],{"class":59},"\"-s ci_settings.xml --batch-mode\"\n",[49,315,316,319,321],{"class":51,"line":145},[49,317,318],{"class":90},"    MAVEN_OPTS",[49,320,310],{"class":86},[49,322,323],{"class":59},"\"-Dmaven.repo.local=.m2/repository\"\n",[49,325,326,329],{"class":51,"line":156},[49,327,328],{"class":90},"  only",[49,330,280],{"class":86},[49,332,333,335],{"class":51,"line":167},[49,334,292],{"class":86},[49,336,337],{"class":59},"main\n",[12,339,340,341,344],{},"Voici le fichier ",[46,342,343],{},"ci_settings.xml"," correspondant :",[39,346,348],{"className":77,"code":347,"language":79,"meta":44,"style":44},"\u003Csettings xmlns=\"http://maven.apache.org/SETTINGS/1.1.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n  xsi:schemaLocation=\"http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd\">\n  \u003Cservers>\n    \u003Cserver>\n      \u003Cid>gitlab-maven\u003C/id>\n      \u003Cconfiguration>\n        \u003ChttpHeaders>\n          \u003Cproperty>\n            \u003Cname>Deploy-Token\u003C/name>\n            \u003Cvalue>${env.CI_DEPLOY_PASSWORD}\u003C/value>\n          \u003C/property>\n        \u003C/httpHeaders>\n      \u003C/configuration>\n    \u003C/server>\n  \u003C/servers>\n\u003C/settings>\n",[46,349,350,373,385,393,401,413,421,429,437,450,463,471,479,487,495,503],{"__ignoreMap":44},[49,351,352,354,356,359,362,365,368,370],{"class":51,"line":52},[49,353,87],{"class":86},[49,355,91],{"class":90},[49,357,358],{"class":55}," xmlns",[49,360,361],{"class":86},"=",[49,363,364],{"class":59},"\"http://maven.apache.org/SETTINGS/1.1.0\"",[49,366,367],{"class":55}," xmlns:xsi",[49,369,361],{"class":86},[49,371,372],{"class":59},"\"http://www.w3.org/2001/XMLSchema-instance\"\n",[49,374,375,378,380,383],{"class":51,"line":97},[49,376,377],{"class":55},"  xsi:schemaLocation",[49,379,361],{"class":86},[49,381,382],{"class":59},"\"http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd\"",[49,384,94],{"class":86},[49,386,387,389,391],{"class":51,"line":108},[49,388,100],{"class":86},[49,390,103],{"class":90},[49,392,94],{"class":86},[49,394,395,397,399],{"class":51,"line":119},[49,396,111],{"class":86},[49,398,114],{"class":90},[49,400,94],{"class":86},[49,402,403,405,407,409,411],{"class":51,"line":135},[49,404,122],{"class":86},[49,406,125],{"class":90},[49,408,128],{"class":86},[49,410,125],{"class":90},[49,412,94],{"class":86},[49,414,415,417,419],{"class":51,"line":145},[49,416,122],{"class":86},[49,418,140],{"class":90},[49,420,94],{"class":86},[49,422,423,425,427],{"class":51,"line":156},[49,424,148],{"class":86},[49,426,151],{"class":90},[49,428,94],{"class":86},[49,430,431,433,435],{"class":51,"line":167},[49,432,159],{"class":86},[49,434,162],{"class":90},[49,436,94],{"class":86},[49,438,439,441,443,446,448],{"class":51,"line":183},[49,440,170],{"class":86},[49,442,173],{"class":90},[49,444,445],{"class":86},">Deploy-Token\u003C/",[49,447,173],{"class":90},[49,449,94],{"class":86},[49,451,452,454,456,459,461],{"class":51,"line":198},[49,453,170],{"class":86},[49,455,188],{"class":90},[49,457,458],{"class":86},">${env.CI_DEPLOY_PASSWORD}\u003C/",[49,460,188],{"class":90},[49,462,94],{"class":86},[49,464,465,467,469],{"class":51,"line":208},[49,466,201],{"class":86},[49,468,162],{"class":90},[49,470,94],{"class":86},[49,472,473,475,477],{"class":51,"line":218},[49,474,211],{"class":86},[49,476,151],{"class":90},[49,478,94],{"class":86},[49,480,481,483,485],{"class":51,"line":228},[49,482,221],{"class":86},[49,484,140],{"class":90},[49,486,94],{"class":86},[49,488,489,491,493],{"class":51,"line":238},[49,490,231],{"class":86},[49,492,114],{"class":90},[49,494,94],{"class":86},[49,496,497,499,501],{"class":51,"line":248},[49,498,241],{"class":86},[49,500,103],{"class":90},[49,502,94],{"class":86},[49,504,506,508,510],{"class":51,"line":505},16,[49,507,251],{"class":86},[49,509,91],{"class":90},[49,511,94],{"class":86},[12,513,514],{},"Remarques :",[516,517,518,526],"ul",{},[519,520,521,522,525],"li",{},"La variable ",[46,523,524],{},"CI_DEPLOY_PASSWORD"," doit être configurée comme une variable CI/CD dans les paramètres de votre projet GitLab et contenir le token de déploiement.",[519,527,528,529,532,533,536],{},"L'élément ",[46,530,531],{},"\u003Cid>"," doit correspondre à l'ID du dépôt tel qu'il est défini dans le fichier ",[46,534,535],{},"pom.xml"," de votre projet.",[12,538,539,542],{},[31,540,541],{},"Rotation des tokens :"," automatisez la stratégie de rotation des tokens à l'aide de l'API GitLab. Par exemple, vous pouvez planifier un pipeline mensuel qui regénère et met à jour vos tokens :",[39,544,546],{"className":268,"code":545,"language":270,"meta":44,"style":44},"rotate_tokens:\n  script:\n    - curl --request POST \"https://gitlab.example.com/api/v4/projects/${CI_PROJECT_ID}/deploy_tokens\" --header \"PRIVATE-TOKEN: ${ADMIN_TOKEN}\" --form \"name=maven-deploy-${CI_PIPELINE_ID}\" --form \"scopes[]=read_registry\" --form \"scopes[]=write_registry\"\n  only:\n    - schedules\n",[46,547,548,555,561,573,579],{"__ignoreMap":44},[49,549,550,553],{"class":51,"line":52},[49,551,552],{"class":90},"rotate_tokens",[49,554,280],{"class":86},[49,556,557,559],{"class":51,"line":97},[49,558,285],{"class":90},[49,560,280],{"class":86},[49,562,563,565,568,570],{"class":51,"line":108},[49,564,292],{"class":86},[49,566,567],{"class":90},"curl --request POST \"https://gitlab.example.com/api/v4/projects/${CI_PROJECT_ID}/deploy_tokens\" --header \"PRIVATE-TOKEN",[49,569,310],{"class":86},[49,571,572],{"class":59},"${ADMIN_TOKEN}\" --form \"name=maven-deploy-${CI_PIPELINE_ID}\" --form \"scopes[]=read_registry\" --form \"scopes[]=write_registry\"\n",[49,574,575,577],{"class":51,"line":119},[49,576,328],{"class":90},[49,578,280],{"class":86},[49,580,581,583],{"class":51,"line":135},[49,582,292],{"class":86},[49,584,585],{"class":59},"schedules\n",[24,587,589],{"id":588},"tirer-parti-des-fonctionnalités-de-sécurité-intégrées-de-gitlab","Tirer parti des fonctionnalités de sécurité intégrées de GitLab",[12,591,592,595,596,265],{},[31,593,594],{},"Analyse des dépendances :"," activez-la dans votre fichier ",[46,597,264],{},[39,599,601],{"className":268,"code":600,"language":270,"meta":44,"style":44},"include:\n  - template: Security/Dependency-Scanning.gitlab-ci.yml\n\nvariables:\n  DS_JAVA_VERSION: 11\n",[46,602,603,610,623,629,636],{"__ignoreMap":44},[49,604,605,608],{"class":51,"line":52},[49,606,607],{"class":90},"include",[49,609,280],{"class":86},[49,611,612,615,618,620],{"class":51,"line":97},[49,613,614],{"class":86},"  - ",[49,616,617],{"class":90},"template",[49,619,310],{"class":86},[49,621,622],{"class":59},"Security/Dependency-Scanning.gitlab-ci.yml\n",[49,624,625],{"class":51,"line":108},[49,626,628],{"emptyLinePlaceholder":627},true,"\n",[49,630,631,634],{"class":51,"line":119},[49,632,633],{"class":90},"variables",[49,635,280],{"class":86},[49,637,638,641,643],{"class":51,"line":135},[49,639,640],{"class":90},"  DS_JAVA_VERSION",[49,642,310],{"class":86},[49,644,645],{"class":63},"11\n",[12,647,648,651],{},[31,649,650],{},"Analyse des conteneurs :"," si vous conteneurisez vos applications Maven.",[39,653,655],{"className":268,"code":654,"language":270,"meta":44,"style":44},"include:\n  - template: Security/Container-Scanning.gitlab-ci.yml\n\nvariables:\n  CS_IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA\n",[46,656,657,663,674,678,684],{"__ignoreMap":44},[49,658,659,661],{"class":51,"line":52},[49,660,607],{"class":90},[49,662,280],{"class":86},[49,664,665,667,669,671],{"class":51,"line":97},[49,666,614],{"class":86},[49,668,617],{"class":90},[49,670,310],{"class":86},[49,672,673],{"class":59},"Security/Container-Scanning.gitlab-ci.yml\n",[49,675,676],{"class":51,"line":108},[49,677,628],{"emptyLinePlaceholder":627},[49,679,680,682],{"class":51,"line":119},[49,681,633],{"class":90},[49,683,280],{"class":86},[49,685,686,689,691],{"class":51,"line":135},[49,687,688],{"class":90},"  CS_IMAGE",[49,690,310],{"class":86},[49,692,693],{"class":59},"$CI_REGISTRY_IMAGE:$CI_COMMIT_SHA\n",[12,695,696,699],{},[31,697,698],{},"Conformité des licences :"," assurez-vous que toutes les dépendances respectent les licences autorisées dans votre projet.",[39,701,703],{"className":268,"code":702,"language":270,"meta":44,"style":44},"include:\n  - template: Security/License-Scanning.gitlab-ci.yml\n",[46,704,705,711],{"__ignoreMap":44},[49,706,707,709],{"class":51,"line":52},[49,708,607],{"class":90},[49,710,280],{"class":86},[49,712,713,715,717,719],{"class":51,"line":97},[49,714,614],{"class":86},[49,716,617],{"class":90},[49,718,310],{"class":86},[49,720,721],{"class":59},"Security/License-Scanning.gitlab-ci.yml\n",[24,723,725],{"id":724},"sécuriser-votre-pipelinecicd","Sécuriser votre pipeline CI/CD",[516,727,728,765,771],{},[519,729,730,733,734],{},[31,731,732],{},"Variables CI/CD :"," stockez toutes les informations contenant des données sensibles en toute sécurité.",[39,735,737],{"className":268,"code":736,"language":270,"meta":44,"style":44},"variables:\n  MAVEN_REPO_USER: ${CI_DEPLOY_USER}\n  MAVEN_REPO_PASS: ${CI_DEPLOY_PASSWORD}\n",[46,738,739,745,755],{"__ignoreMap":44},[49,740,741,743],{"class":51,"line":52},[49,742,633],{"class":90},[49,744,280],{"class":86},[49,746,747,750,752],{"class":51,"line":97},[49,748,749],{"class":90},"  MAVEN_REPO_USER",[49,751,310],{"class":86},[49,753,754],{"class":59},"${CI_DEPLOY_USER}\n",[49,756,757,760,762],{"class":51,"line":108},[49,758,759],{"class":90},"  MAVEN_REPO_PASS",[49,761,310],{"class":86},[49,763,764],{"class":59},"${CI_DEPLOY_PASSWORD}\n",[519,766,767,770],{},[31,768,769],{},"Variables masquées :"," empêchez leur affichage dans les job logs et définissez-les dans vos paramètres GitLab CI/CD.",[519,772,773,776],{},[31,774,775],{},"Branches et tags protégés :"," configurez-les dans les paramètres de votre projet GitLab pour restreindre les droits de publication des packages Maven aux utilisateurs autorisés.",[24,778,780],{"id":779},"mettre-en-œuvre-la-signature-de-vos-paquets","Mettre en œuvre la signature de vos paquets",[516,782,783,942],{},[519,784,785,786],{},"Utilisez le plug-in Maven GPG pour signer vos artefacts.",[39,787,789],{"className":77,"code":788,"language":79,"meta":44,"style":44},"\u003Cplugin>\n  \u003CgroupId>org.apache.maven.plugins\u003C/groupId>\n  \u003CartifactId>maven-gpg-plugin\u003C/artifactId>\n  \u003Cversion>1.6\u003C/version>\n  \u003Cexecutions>\n    \u003Cexecution>\n      \u003Cid>sign-artifacts\u003C/id>\n      \u003Cphase>verify\u003C/phase>\n      \u003Cgoals>\n        \u003Cgoal>sign\u003C/goal>\n      \u003C/goals>\n    \u003C/execution>\n  \u003C/executions>\n\u003C/plugin>\n",[46,790,791,800,814,828,842,851,860,873,887,896,910,918,926,934],{"__ignoreMap":44},[49,792,793,795,798],{"class":51,"line":52},[49,794,87],{"class":86},[49,796,797],{"class":90},"plugin",[49,799,94],{"class":86},[49,801,802,804,807,810,812],{"class":51,"line":97},[49,803,100],{"class":86},[49,805,806],{"class":90},"groupId",[49,808,809],{"class":86},">org.apache.maven.plugins\u003C/",[49,811,806],{"class":90},[49,813,94],{"class":86},[49,815,816,818,821,824,826],{"class":51,"line":108},[49,817,100],{"class":86},[49,819,820],{"class":90},"artifactId",[49,822,823],{"class":86},">maven-gpg-plugin\u003C/",[49,825,820],{"class":90},[49,827,94],{"class":86},[49,829,830,832,835,838,840],{"class":51,"line":119},[49,831,100],{"class":86},[49,833,834],{"class":90},"version",[49,836,837],{"class":86},">1.6\u003C/",[49,839,834],{"class":90},[49,841,94],{"class":86},[49,843,844,846,849],{"class":51,"line":135},[49,845,100],{"class":86},[49,847,848],{"class":90},"executions",[49,850,94],{"class":86},[49,852,853,855,858],{"class":51,"line":145},[49,854,111],{"class":86},[49,856,857],{"class":90},"execution",[49,859,94],{"class":86},[49,861,862,864,866,869,871],{"class":51,"line":156},[49,863,122],{"class":86},[49,865,125],{"class":90},[49,867,868],{"class":86},">sign-artifacts\u003C/",[49,870,125],{"class":90},[49,872,94],{"class":86},[49,874,875,877,880,883,885],{"class":51,"line":167},[49,876,122],{"class":86},[49,878,879],{"class":90},"phase",[49,881,882],{"class":86},">verify\u003C/",[49,884,879],{"class":90},[49,886,94],{"class":86},[49,888,889,891,894],{"class":51,"line":183},[49,890,122],{"class":86},[49,892,893],{"class":90},"goals",[49,895,94],{"class":86},[49,897,898,900,903,906,908],{"class":51,"line":198},[49,899,148],{"class":86},[49,901,902],{"class":90},"goal",[49,904,905],{"class":86},">sign\u003C/",[49,907,902],{"class":90},[49,909,94],{"class":86},[49,911,912,914,916],{"class":51,"line":208},[49,913,221],{"class":86},[49,915,893],{"class":90},[49,917,94],{"class":86},[49,919,920,922,924],{"class":51,"line":218},[49,921,231],{"class":86},[49,923,857],{"class":90},[49,925,94],{"class":86},[49,927,928,930,932],{"class":51,"line":228},[49,929,241],{"class":86},[49,931,848],{"class":90},[49,933,94],{"class":86},[49,935,936,938,940],{"class":51,"line":238},[49,937,251],{"class":86},[49,939,797],{"class":90},[49,941,94],{"class":86},[519,943,944],{},"Stockez votre clé GPG dans des variables GitLab CI/CD sécurisées.",[24,946,948],{"id":947},"contrôler-les-accès-au-registre-de-paquets","Contrôler les accès au registre de paquets",[516,950,951,954],{},[519,952,953],{},"Configurez les paramètres du registre de paquets au niveau du projet et du groupe dans GitLab afin de restreindre les accès aux seuls utilisateurs autorisés.",[519,955,956],{},"Activez les listes d'autorisation d'IP au niveau du réseau dans les paramètres de votre instance GitLab pour restreindre l'accès réseau aux adresses approuvées.",[16,958,960],{"id":959},"optimisation-des-performances-fluidifiez-votre-workflow-maven","Optimisation des performances : fluidifiez votre workflow Maven",[12,962,963],{},"La gestion de projets complexes ou de nombreuses dépendances exige une productivité maximale. Découvrez ci-dessous des techniques avancées pour tirer le meilleur parti de vos paquets Maven dans GitLab et accélérer vos compilations.",[24,965,967],{"id":966},"maîtriser-la-gestion-des-dépendances","Maîtriser la gestion des dépendances",[516,969,970],{},[519,971,972,973,976,977],{},"Centralisez vos versions dans la section ",[46,974,975],{},"\u003CdependencyManagement>"," de votre fichier POM parent.",[39,978,980],{"className":77,"code":979,"language":79,"meta":44,"style":44},"\u003CdependencyManagement>\n  \u003Cdependencies>\n    \u003Cdependency>\n      \u003CgroupId>org.springframework.boot\u003C/groupId>\n      \u003CartifactId>spring-boot-dependencies\u003C/artifactId>\n      \u003Cversion>${spring-boot.version}\u003C/version>\n      \u003Ctype>pom\u003C/type>\n      \u003Cscope>import\u003C/scope>\n    \u003C/dependency>\n  \u003C/dependencies>\n\u003C/dependencyManagement>\n",[46,981,982,991,1000,1009,1022,1035,1048,1062,1076,1084,1092],{"__ignoreMap":44},[49,983,984,986,989],{"class":51,"line":52},[49,985,87],{"class":86},[49,987,988],{"class":90},"dependencyManagement",[49,990,94],{"class":86},[49,992,993,995,998],{"class":51,"line":97},[49,994,100],{"class":86},[49,996,997],{"class":90},"dependencies",[49,999,94],{"class":86},[49,1001,1002,1004,1007],{"class":51,"line":108},[49,1003,111],{"class":86},[49,1005,1006],{"class":90},"dependency",[49,1008,94],{"class":86},[49,1010,1011,1013,1015,1018,1020],{"class":51,"line":119},[49,1012,122],{"class":86},[49,1014,806],{"class":90},[49,1016,1017],{"class":86},">org.springframework.boot\u003C/",[49,1019,806],{"class":90},[49,1021,94],{"class":86},[49,1023,1024,1026,1028,1031,1033],{"class":51,"line":135},[49,1025,122],{"class":86},[49,1027,820],{"class":90},[49,1029,1030],{"class":86},">spring-boot-dependencies\u003C/",[49,1032,820],{"class":90},[49,1034,94],{"class":86},[49,1036,1037,1039,1041,1044,1046],{"class":51,"line":145},[49,1038,122],{"class":86},[49,1040,834],{"class":90},[49,1042,1043],{"class":86},">${spring-boot.version}\u003C/",[49,1045,834],{"class":90},[49,1047,94],{"class":86},[49,1049,1050,1052,1055,1058,1060],{"class":51,"line":156},[49,1051,122],{"class":86},[49,1053,1054],{"class":90},"type",[49,1056,1057],{"class":86},">pom\u003C/",[49,1059,1054],{"class":90},[49,1061,94],{"class":86},[49,1063,1064,1066,1069,1072,1074],{"class":51,"line":167},[49,1065,122],{"class":86},[49,1067,1068],{"class":90},"scope",[49,1070,1071],{"class":86},">import\u003C/",[49,1073,1068],{"class":90},[49,1075,94],{"class":86},[49,1077,1078,1080,1082],{"class":51,"line":183},[49,1079,231],{"class":86},[49,1081,1006],{"class":90},[49,1083,94],{"class":86},[49,1085,1086,1088,1090],{"class":51,"line":198},[49,1087,241],{"class":86},[49,1089,997],{"class":90},[49,1091,94],{"class":86},[49,1093,1094,1096,1098],{"class":51,"line":208},[49,1095,251],{"class":86},[49,1097,988],{"class":90},[49,1099,94],{"class":86},[24,1101,1103],{"id":1102},"tirer-parti-des-projets-multi-modules","Tirer parti des projets multi-modules",[516,1105,1106,1117],{},[519,1107,1108,1109],{},"Structurez votre projet avec un POM parent et plusieurs modules enfants :",[39,1110,1115],{"className":1111,"code":1113,"language":1114},[1112],"language-text","my-project/\n├── pom.xml\n├── module1/\n│   └── pom.xml\n├── module2/\n│   └── pom.xml\n└── module3/\n    └── pom.xml\n","text",[46,1116,1113],{"__ignoreMap":44},[519,1118,1119,1120],{},"Utilisez le réacteur Maven pour compiler les modules dans un ordre optimal :",[39,1121,1123],{"className":41,"code":1122,"language":43,"meta":44,"style":44},"mvn clean install\n",[46,1124,1125],{"__ignoreMap":44},[49,1126,1127,1129,1132],{"class":51,"line":52},[49,1128,56],{"class":55},[49,1130,1131],{"class":59}," clean",[49,1133,1134],{"class":59}," install\n",[24,1136,1138],{"id":1137},"mettre-en-œuvre-les-compilations-parallèles","Mettre en œuvre les compilations parallèles",[516,1140,1141],{},[519,1142,1143,1144],{},"Utilisez la fonctionnalité de compilation parallèle de Maven :",[39,1145,1147],{"className":41,"code":1146,"language":43,"meta":44,"style":44},"mvn -T 4C clean install\n",[46,1148,1149],{"__ignoreMap":44},[49,1150,1151,1153,1156,1159,1161],{"class":51,"line":52},[49,1152,56],{"class":55},[49,1154,1155],{"class":63}," -T",[49,1157,1158],{"class":59}," 4C",[49,1160,1131],{"class":59},[49,1162,1134],{"class":59},[24,1164,1166],{"id":1165},"optimiser-votre-pipelinecicd","Optimiser votre pipeline CI/CD",[516,1168,1169,1225],{},[519,1170,1171,1172,1174,1175],{},"Configurez la mise en cache dans ",[46,1173,264],{}," pour accélérer les compilations :",[39,1176,1178],{"className":268,"code":1177,"language":270,"meta":44,"style":44},"cache:\n  paths:\n    - .m2/repository\n\nbuild:\n  script:\n    - mvn clean package -Dmaven.repo.local=$CI_PROJECT_DIR/.m2/repository\n",[46,1179,1180,1187,1194,1201,1205,1212,1218],{"__ignoreMap":44},[49,1181,1182,1185],{"class":51,"line":52},[49,1183,1184],{"class":90},"cache",[49,1186,280],{"class":86},[49,1188,1189,1192],{"class":51,"line":97},[49,1190,1191],{"class":90},"  paths",[49,1193,280],{"class":86},[49,1195,1196,1198],{"class":51,"line":108},[49,1197,292],{"class":86},[49,1199,1200],{"class":59},".m2/repository\n",[49,1202,1203],{"class":51,"line":119},[49,1204,628],{"emptyLinePlaceholder":627},[49,1206,1207,1210],{"class":51,"line":135},[49,1208,1209],{"class":90},"build",[49,1211,280],{"class":86},[49,1213,1214,1216],{"class":51,"line":145},[49,1215,285],{"class":90},[49,1217,280],{"class":86},[49,1219,1220,1222],{"class":51,"line":156},[49,1221,292],{"class":86},[49,1223,1224],{"class":59},"mvn clean package -Dmaven.repo.local=$CI_PROJECT_DIR/.m2/repository\n",[519,1226,1227,1228],{},"Implémentez des compilations incrémentielles :",[39,1229,1231],{"className":268,"code":1230,"language":270,"meta":44,"style":44},"build:\n  script:\n    - mvn clean install -Dmaven.repo.local=$CI_PROJECT_DIR/.m2/repository -am -amd -fae\n",[46,1232,1233,1239,1245],{"__ignoreMap":44},[49,1234,1235,1237],{"class":51,"line":52},[49,1236,1209],{"class":90},[49,1238,280],{"class":86},[49,1240,1241,1243],{"class":51,"line":97},[49,1242,285],{"class":90},[49,1244,280],{"class":86},[49,1246,1247,1249],{"class":51,"line":108},[49,1248,292],{"class":86},[49,1250,1251],{"class":59},"mvn clean install -Dmaven.repo.local=$CI_PROJECT_DIR/.m2/repository -am -amd -fae\n",[24,1253,1255],{"id":1254},"utiliser-la-mise-en-cache-des-compilations","Utiliser la mise en cache des compilations",[516,1257,1258],{},[519,1259,1260,1261],{},"Intégrez l'extension Gradle Enterprise de Maven pour une gestion avancée de la mise en cache des compilations :",[39,1262,1264],{"className":77,"code":1263,"language":79,"meta":44,"style":44},"\u003Cbuild>\n  \u003Cplugins>\n    \u003Cplugin>\n      \u003CgroupId>com.gradle\u003C/groupId>\n      \u003CartifactId>gradle-enterprise-maven-plugin\u003C/artifactId>\n      \u003Cversion>1.9\u003C/version>\n      \u003Cconfiguration>\n        \u003CgradleEnterprise>\n          \u003Cserver>https://ge.example.com\u003C/server>\n          \u003CallowUntrusted>false\u003C/allowUntrusted>\n        \u003C/gradleEnterprise>\n      \u003C/configuration>\n    \u003C/plugin>\n  \u003C/plugins>\n\u003C/build>\n",[46,1265,1266,1274,1283,1291,1304,1317,1330,1338,1347,1360,1374,1382,1390,1398,1406],{"__ignoreMap":44},[49,1267,1268,1270,1272],{"class":51,"line":52},[49,1269,87],{"class":86},[49,1271,1209],{"class":90},[49,1273,94],{"class":86},[49,1275,1276,1278,1281],{"class":51,"line":97},[49,1277,100],{"class":86},[49,1279,1280],{"class":90},"plugins",[49,1282,94],{"class":86},[49,1284,1285,1287,1289],{"class":51,"line":108},[49,1286,111],{"class":86},[49,1288,797],{"class":90},[49,1290,94],{"class":86},[49,1292,1293,1295,1297,1300,1302],{"class":51,"line":119},[49,1294,122],{"class":86},[49,1296,806],{"class":90},[49,1298,1299],{"class":86},">com.gradle\u003C/",[49,1301,806],{"class":90},[49,1303,94],{"class":86},[49,1305,1306,1308,1310,1313,1315],{"class":51,"line":135},[49,1307,122],{"class":86},[49,1309,820],{"class":90},[49,1311,1312],{"class":86},">gradle-enterprise-maven-plugin\u003C/",[49,1314,820],{"class":90},[49,1316,94],{"class":86},[49,1318,1319,1321,1323,1326,1328],{"class":51,"line":145},[49,1320,122],{"class":86},[49,1322,834],{"class":90},[49,1324,1325],{"class":86},">1.9\u003C/",[49,1327,834],{"class":90},[49,1329,94],{"class":86},[49,1331,1332,1334,1336],{"class":51,"line":156},[49,1333,122],{"class":86},[49,1335,140],{"class":90},[49,1337,94],{"class":86},[49,1339,1340,1342,1345],{"class":51,"line":167},[49,1341,148],{"class":86},[49,1343,1344],{"class":90},"gradleEnterprise",[49,1346,94],{"class":86},[49,1348,1349,1351,1353,1356,1358],{"class":51,"line":183},[49,1350,159],{"class":86},[49,1352,114],{"class":90},[49,1354,1355],{"class":86},">https://ge.example.com\u003C/",[49,1357,114],{"class":90},[49,1359,94],{"class":86},[49,1361,1362,1364,1367,1370,1372],{"class":51,"line":198},[49,1363,159],{"class":86},[49,1365,1366],{"class":90},"allowUntrusted",[49,1368,1369],{"class":86},">false\u003C/",[49,1371,1366],{"class":90},[49,1373,94],{"class":86},[49,1375,1376,1378,1380],{"class":51,"line":208},[49,1377,211],{"class":86},[49,1379,1344],{"class":90},[49,1381,94],{"class":86},[49,1383,1384,1386,1388],{"class":51,"line":218},[49,1385,221],{"class":86},[49,1387,140],{"class":90},[49,1389,94],{"class":86},[49,1391,1392,1394,1396],{"class":51,"line":228},[49,1393,231],{"class":86},[49,1395,797],{"class":90},[49,1397,94],{"class":86},[49,1399,1400,1402,1404],{"class":51,"line":238},[49,1401,241],{"class":86},[49,1403,1280],{"class":90},[49,1405,94],{"class":86},[49,1407,1408,1410,1412],{"class":51,"line":248},[49,1409,251],{"class":86},[49,1411,1209],{"class":90},[49,1413,94],{"class":86},[16,1415,1417],{"id":1416},"présentation-du-programme-bêta-du-registre-virtuel-maven","Présentation du programme bêta du registre virtuel Maven",[12,1419,1420],{},"Nous avons le plaisir d'annoncer le lancement du programme bêta de notre nouvelle fonctionnalité : le registre virtuel Maven. Cet ajout à l'écosystème GitLab transformera la gestion des dépôts Maven au sein de vos projets.",[24,1422,1424],{"id":1423},"fonctionnalités-phares-du-registre-virtuel-maven","Fonctionnalités phares du registre virtuel Maven",[1426,1427,1428,1434,1440],"ol",{},[519,1429,1430,1433],{},[31,1431,1432],{},"Agrégation de dépôts :"," combinez plusieurs dépôts Maven (internes et externes) en un seul dépôt virtuel.",[519,1435,1436,1439],{},[31,1437,1438],{},"Proxy intelligent et mise en cache :"," accélérez les compilations grâce à la mise en cache des artefacts et au routage intelligent des requêtes.",[519,1441,1442,1445],{},[31,1443,1444],{},"Contrôle d'accès centralisé :"," améliorez la sécurité en gérant l'accès à tous vos dépôts Maven depuis un seul et même endroit.",[24,1447,1449],{"id":1448},"utilisation-du-registre-virtuel-maven","Utilisation du registre virtuel Maven",[1426,1451,1452],{},[519,1453,1454,1457,1458,74],{},[31,1455,1456],{},"Configuration :"," configurez l'authentification Maven dans votre fichier ",[46,1459,73],{},[39,1461,1463],{"className":77,"code":1462,"language":79,"meta":44,"style":44},"\u003Csettings>\n  \u003Cservers>\n    \u003Cserver>\n      \u003Cid>gitlab-maven\u003C/id>\n      \u003Cconfiguration>\n        \u003ChttpHeaders>\n          \u003Cproperty>\n            \u003Cname>Private-Token\u003C/name>\n            \u003Cvalue>${env.GITLAB_TOKEN}\u003C/value>\n          \u003C/property>\n        \u003C/httpHeaders>\n      \u003C/configuration>\n    \u003C/server>\n  \u003C/servers>\n\u003C/settings>\n",[46,1464,1465,1473,1481,1489,1501,1509,1517,1525,1537,1550,1558,1566,1574,1582,1590],{"__ignoreMap":44},[49,1466,1467,1469,1471],{"class":51,"line":52},[49,1468,87],{"class":86},[49,1470,91],{"class":90},[49,1472,94],{"class":86},[49,1474,1475,1477,1479],{"class":51,"line":97},[49,1476,100],{"class":86},[49,1478,103],{"class":90},[49,1480,94],{"class":86},[49,1482,1483,1485,1487],{"class":51,"line":108},[49,1484,111],{"class":86},[49,1486,114],{"class":90},[49,1488,94],{"class":86},[49,1490,1491,1493,1495,1497,1499],{"class":51,"line":119},[49,1492,122],{"class":86},[49,1494,125],{"class":90},[49,1496,128],{"class":86},[49,1498,125],{"class":90},[49,1500,94],{"class":86},[49,1502,1503,1505,1507],{"class":51,"line":135},[49,1504,122],{"class":86},[49,1506,140],{"class":90},[49,1508,94],{"class":86},[49,1510,1511,1513,1515],{"class":51,"line":145},[49,1512,148],{"class":86},[49,1514,151],{"class":90},[49,1516,94],{"class":86},[49,1518,1519,1521,1523],{"class":51,"line":156},[49,1520,159],{"class":86},[49,1522,162],{"class":90},[49,1524,94],{"class":86},[49,1526,1527,1529,1531,1533,1535],{"class":51,"line":167},[49,1528,170],{"class":86},[49,1530,173],{"class":90},[49,1532,176],{"class":86},[49,1534,173],{"class":90},[49,1536,94],{"class":86},[49,1538,1539,1541,1543,1546,1548],{"class":51,"line":183},[49,1540,170],{"class":86},[49,1542,188],{"class":90},[49,1544,1545],{"class":86},">${env.GITLAB_TOKEN}\u003C/",[49,1547,188],{"class":90},[49,1549,94],{"class":86},[49,1551,1552,1554,1556],{"class":51,"line":198},[49,1553,201],{"class":86},[49,1555,162],{"class":90},[49,1557,94],{"class":86},[49,1559,1560,1562,1564],{"class":51,"line":208},[49,1561,211],{"class":86},[49,1563,151],{"class":90},[49,1565,94],{"class":86},[49,1567,1568,1570,1572],{"class":51,"line":218},[49,1569,221],{"class":86},[49,1571,140],{"class":90},[49,1573,94],{"class":86},[49,1575,1576,1578,1580],{"class":51,"line":228},[49,1577,231],{"class":86},[49,1579,114],{"class":90},[49,1581,94],{"class":86},[49,1583,1584,1586,1588],{"class":51,"line":238},[49,1585,241],{"class":86},[49,1587,103],{"class":90},[49,1589,94],{"class":86},[49,1591,1592,1594,1596],{"class":51,"line":248},[49,1593,251],{"class":86},[49,1595,91],{"class":90},[49,1597,94],{"class":86},[12,1599,1600],{},"Options d'authentification :",[516,1602,1603,1614,1623,1631,1640],{},[519,1604,1605,1606,1609,1610,1613],{},"Jeton d'accès personnel : utilisez ",[46,1607,1608],{},"Private-Token"," comme nom et ",[46,1611,1612],{},"${env.GITLAB_TOKEN}"," comme valeur.",[519,1615,1616,1617,1609,1620,1613],{},"Token de déploiement de groupe : utilisez ",[46,1618,1619],{},"Deploy-Token",[46,1621,1622],{},"${env.GITLAB_DEPLOY_TOKEN}",[519,1624,1625,1626,1609,1628,1613],{},"Token d'accès de groupe : utilisez ",[46,1627,1608],{},[46,1629,1630],{},"${env.GITLAB_ACCESS_TOKEN}",[519,1632,1633,1634,1609,1637,1613],{},"Token de job CI : utilisez ",[46,1635,1636],{},"Job-Token",[46,1638,1639],{},"${CI_JOB_TOKEN}",[519,1641,1642,1643,265],{},"Configurez le registre virtuel dans votre fichier ",[46,1644,535],{},[12,1646,1647],{},"Option 1 : en tant que registre supplémentaire :",[39,1649,1651],{"className":77,"code":1650,"language":79,"meta":44,"style":44},"\u003Crepositories>\n  \u003Crepository>\n    \u003Cid>gitlab-maven\u003C/id>\n    \u003Curl>https://gitlab.example.com/api/v4/virtual_registries/packages/maven/\u003Cvirtual registry id>\u003C/url>\n  \u003C/repository>\n\u003C/repositories>\n",[46,1652,1653,1662,1671,1683,1703,1711],{"__ignoreMap":44},[49,1654,1655,1657,1660],{"class":51,"line":52},[49,1656,87],{"class":86},[49,1658,1659],{"class":90},"repositories",[49,1661,94],{"class":86},[49,1663,1664,1666,1669],{"class":51,"line":97},[49,1665,100],{"class":86},[49,1667,1668],{"class":90},"repository",[49,1670,94],{"class":86},[49,1672,1673,1675,1677,1679,1681],{"class":51,"line":108},[49,1674,111],{"class":86},[49,1676,125],{"class":90},[49,1678,128],{"class":86},[49,1680,125],{"class":90},[49,1682,94],{"class":86},[49,1684,1685,1687,1690,1693,1696,1699,1701],{"class":51,"line":119},[49,1686,111],{"class":86},[49,1688,1689],{"class":90},"url",[49,1691,1692],{"class":86},">https://gitlab.example.com/api/v4/virtual_registries/packages/maven/\u003C",[49,1694,1695],{"class":90},"virtual",[49,1697,1698],{"class":86}," registry id>\u003C/",[49,1700,1689],{"class":90},[49,1702,94],{"class":86},[49,1704,1705,1707,1709],{"class":51,"line":135},[49,1706,241],{"class":86},[49,1708,1668],{"class":90},[49,1710,94],{"class":86},[49,1712,1713,1715,1717],{"class":51,"line":145},[49,1714,251],{"class":86},[49,1716,1659],{"class":90},[49,1718,94],{"class":86},[12,1720,1721,1722,1724],{},"Option 2 : en remplacement de Maven Central (dans votre fichier ",[46,1723,73],{},") :",[39,1726,1728],{"className":77,"code":1727,"language":79,"meta":44,"style":44},"\u003Cmirrors>\n  \u003Cmirror>\n    \u003Cid>gitlab-maven\u003C/id>\n    \u003Cname>GitLab virtual registry for Maven Central\u003C/name>\n    \u003Curl>https://gitlab.example.com/api/v4/virtual_registries/packages/maven/\u003Cvirtual registry id>\u003C/url>\n    \u003CmirrorOf>central\u003C/mirrorOf>\n  \u003C/mirror>\n\u003C/mirrors>\n",[46,1729,1730,1739,1748,1760,1773,1789,1803,1811],{"__ignoreMap":44},[49,1731,1732,1734,1737],{"class":51,"line":52},[49,1733,87],{"class":86},[49,1735,1736],{"class":90},"mirrors",[49,1738,94],{"class":86},[49,1740,1741,1743,1746],{"class":51,"line":97},[49,1742,100],{"class":86},[49,1744,1745],{"class":90},"mirror",[49,1747,94],{"class":86},[49,1749,1750,1752,1754,1756,1758],{"class":51,"line":108},[49,1751,111],{"class":86},[49,1753,125],{"class":90},[49,1755,128],{"class":86},[49,1757,125],{"class":90},[49,1759,94],{"class":86},[49,1761,1762,1764,1766,1769,1771],{"class":51,"line":119},[49,1763,111],{"class":86},[49,1765,173],{"class":90},[49,1767,1768],{"class":86},">GitLab virtual registry for Maven Central\u003C/",[49,1770,173],{"class":90},[49,1772,94],{"class":86},[49,1774,1775,1777,1779,1781,1783,1785,1787],{"class":51,"line":135},[49,1776,111],{"class":86},[49,1778,1689],{"class":90},[49,1780,1692],{"class":86},[49,1782,1695],{"class":90},[49,1784,1698],{"class":86},[49,1786,1689],{"class":90},[49,1788,94],{"class":86},[49,1790,1791,1793,1796,1799,1801],{"class":51,"line":145},[49,1792,111],{"class":86},[49,1794,1795],{"class":90},"mirrorOf",[49,1797,1798],{"class":86},">central\u003C/",[49,1800,1795],{"class":90},[49,1802,94],{"class":86},[49,1804,1805,1807,1809],{"class":51,"line":156},[49,1806,241],{"class":86},[49,1808,1745],{"class":90},[49,1810,94],{"class":86},[49,1812,1813,1815,1817],{"class":51,"line":167},[49,1814,251],{"class":86},[49,1816,1736],{"class":90},[49,1818,94],{"class":86},[1426,1820,1821],{"start":97},[519,1822,1823,1826],{},[31,1824,1825],{},"Utilisation :"," désormais, toutes vos opérations Maven utiliseront ce dépôt virtuel.",[39,1828,1832],{"className":1829,"code":1830,"language":1831,"meta":44,"style":44},"language-shell shiki shiki-themes github-light","# For personal access tokens\nexport GITLAB_TOKEN=your_personal_access_token\n\n# For group deploy tokens\nexport GITLAB_DEPLOY_TOKEN=your_deploy_token\n\n# For group access tokens\nexport GITLAB_ACCESS_TOKEN=your_access_token\n\n# Then run Maven commands normally\nmvn package\n\n","shell",[46,1833,1834,1840,1854,1858,1863,1875,1879,1884,1896,1900,1905],{"__ignoreMap":44},[49,1835,1836],{"class":51,"line":52},[49,1837,1839],{"class":1838},"sAwPA","# For personal access tokens\n",[49,1841,1842,1846,1849,1851],{"class":51,"line":97},[49,1843,1845],{"class":1844},"sD7c4","export",[49,1847,1848],{"class":86}," GITLAB_TOKEN",[49,1850,361],{"class":1844},[49,1852,1853],{"class":86},"your_personal_access_token\n",[49,1855,1856],{"class":51,"line":108},[49,1857,628],{"emptyLinePlaceholder":627},[49,1859,1860],{"class":51,"line":119},[49,1861,1862],{"class":1838},"# For group deploy tokens\n",[49,1864,1865,1867,1870,1872],{"class":51,"line":135},[49,1866,1845],{"class":1844},[49,1868,1869],{"class":86}," GITLAB_DEPLOY_TOKEN",[49,1871,361],{"class":1844},[49,1873,1874],{"class":86},"your_deploy_token\n",[49,1876,1877],{"class":51,"line":145},[49,1878,628],{"emptyLinePlaceholder":627},[49,1880,1881],{"class":51,"line":156},[49,1882,1883],{"class":1838},"# For group access tokens\n",[49,1885,1886,1888,1891,1893],{"class":51,"line":167},[49,1887,1845],{"class":1844},[49,1889,1890],{"class":86}," GITLAB_ACCESS_TOKEN",[49,1892,361],{"class":1844},[49,1894,1895],{"class":86},"your_access_token\n",[49,1897,1898],{"class":51,"line":183},[49,1899,628],{"emptyLinePlaceholder":627},[49,1901,1902],{"class":51,"line":198},[49,1903,1904],{"class":1838},"# Then run Maven commands normally\n",[49,1906,1907,1909],{"class":51,"line":208},[49,1908,56],{"class":55},[49,1910,1911],{"class":59}," package\n",[1426,1913,1914],{"start":108},[519,1915,1916],{},"Avantages",[516,1918,1919,1922,1925,1928],{},[519,1920,1921],{},"Gestion simplifiée des dépendances",[519,1923,1924],{},"Temps de compilation réduits",[519,1926,1927],{},"Sécurité et conformité renforcées",[519,1929,1930],{},"Contrôle amélioré des dépendances tierces",[24,1932,1934],{"id":1933},"rejoignez-le-programme-bêta","Rejoignez le programme bêta",[12,1936,1937],{},"Nous recherchons activement des participants souhaitant tester notre version bêta :",[516,1939,1940,1943,1946,1949],{},[519,1941,1942],{},"Accédez en avant-première à la fonctionnalité de registre virtuel Maven.",[519,1944,1945],{},"Transmettez directement vos retours à notre équipe de développement.",[519,1947,1948],{},"Contribuez activement à façonner l'avenir de la gestion des paquets Maven dans GitLab.",[519,1950,1951],{},"Participez à des webinaires et sessions de questions-réponses exclusifs animés par notre équipe produit.",[1953,1954,1955],"blockquote",{},[12,1956,1957,1958,1964,1965,1968],{},"Pour rejoindre le programme bêta ou en savoir plus sur le registre virtuel Maven, consultez notre page dédiée au ",[1959,1960,1963],"a",{"href":1961,"rel":1962},"https://gitlab.com/gitlab-org/gitlab/-/issues/498139",[],"programme bêta du registre virtuel Maven de GitLab"," (",[31,1966,1967],{},"Remarque :"," lien provisoire).",[16,1970,1972],{"id":1971},"résumé","Résumé",[12,1974,1975],{},"Chez GitLab, nous avons à cœur de proposer des outils à la fois sécurisés, performants et évolutifs pour accompagner votre développement logiciel. Le registre virtuel Maven illustre notre volonté constante d'innover pour répondre aux besoins croissants des développeurs et ingénieurs de plateforme.",[12,1977,1978],{},"En appliquant les mesures de sécurité et les techniques d'optimisation abordées dans cet article, et en tirant parti des futures fonctionnalités telles que le registre virtuel Maven, vous renforcerez l'efficacité de votre workflow Maven dans GitLab.",[12,1980,1981],{},"Nous sommes impatients de voir comment ces nouvelles fonctionnalités de gestion des paquets dans GitLab contribueront à perfectionner vos processus de développement. Restez à l'écoute et bon codage !",[1983,1984,1985],"style",{},"html pre.shiki code .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}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 .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html pre.shiki code .shJU0, html code.shiki .shJU0{--shiki-default:#22863A}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}html pre.shiki code .sD7c4, html code.shiki .sD7c4{--shiki-default:#D73A49}",{"title":44,"searchDepth":97,"depth":97,"links":1987},[1988,1995,2002,2007],{"id":18,"depth":97,"text":19,"children":1989},[1990,1991,1992,1993,1994],{"id":26,"depth":108,"text":27},{"id":588,"depth":108,"text":589},{"id":724,"depth":108,"text":725},{"id":779,"depth":108,"text":780},{"id":947,"depth":108,"text":948},{"id":959,"depth":97,"text":960,"children":1996},[1997,1998,1999,2000,2001],{"id":966,"depth":108,"text":967},{"id":1102,"depth":108,"text":1103},{"id":1137,"depth":108,"text":1138},{"id":1165,"depth":108,"text":1166},{"id":1254,"depth":108,"text":1255},{"id":1416,"depth":97,"text":1417,"children":2003},[2004,2005,2006],{"id":1423,"depth":108,"text":1424},{"id":1448,"depth":108,"text":1449},{"id":1933,"depth":108,"text":1934},{"id":1971,"depth":97,"text":1972},"security","2025-07-30","Optimisez votre workflow DevSecOps en adoptant des bonnes pratiques, en maîtrisant des techniques avancées et en découvrant nos prochaines fonctionnalités.","md",null,"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749666187/Blog/Hero%20Images/blog-image-template-1800x945__6_.png",{},"/fr-fr/blog/tutorial-secure-and-optimize-your-maven-repository-in-gitlab",{"title":5,"description":2010,"ogTitle":5,"ogDescription":2010,"noIndex":2017,"ogImage":2013,"ogUrl":2018,"ogSiteName":2019,"ogType":2020,"canonicalUrls":2018},false,"https://about.gitlab.com/blog/tutorial-secure-and-optimize-your-maven-repository-in-gitlab","https://about.gitlab.com","article","tutorial-secure-and-optimize-your-maven-repository-in-gitlab","fr-fr/blog/tutorial-secure-and-optimize-your-maven-repository-in-gitlab",[2024,2025,2026,2027,2028],"Security","DevSecOps platform","Features","Product","workflow","BlogPost","7O3CKsr5rISo9kbp-2-lsOV4TAnd0SAzO06f7brI2hk",{"logo":2032,"freeTrial":2037,"sales":2042,"login":2047,"items":2052,"search":2381,"minimal":2417,"duo":2436,"switchNav":2445,"pricingDeployment":2456},{"config":2033},{"href":2034,"dataGaName":2035,"dataGaLocation":2036},"/fr-fr/","gitlab logo","header",{"text":2038,"config":2039},"Commencer un essai gratuit",{"href":2040,"dataGaName":2041,"dataGaLocation":2036},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/fr-fr&glm_content=default-saas-trial/","free trial",{"text":2043,"config":2044},"Demander une démo",{"href":2045,"dataGaName":2046,"dataGaLocation":2036},"/fr-fr/sales/?contact-topic=request-demo","sales",{"text":2048,"config":2049},"Connexion",{"href":2050,"dataGaName":2051,"dataGaLocation":2036},"https://gitlab.com/users/sign_in/","sign in",[2053,2082,2184,2189,2303,2359],{"text":2054,"config":2055,"menu":2057},"Plateforme",{"dataNavLevelOne":2056},"platform",{"type":2058,"columns":2059},"cards",[2060,2066,2074],{"title":2054,"description":2061,"link":2062},"La plateforme d'orchestration intelligente pour le DevSecOps",{"text":2063,"config":2064},"Explorer notre plateforme",{"href":2065,"dataGaName":2056,"dataGaLocation":2036},"/fr-fr/platform/",{"title":2067,"description":2068,"link":2069},"GitLab Duo Agent Platform","L'IA agentique pour l'ensemble du cycle de développement logiciel",{"text":2070,"config":2071},"Découvrir GitLab Duo",{"href":2072,"dataGaName":2073,"dataGaLocation":2036},"/fr-fr/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":2075,"description":2076,"link":2077},"Pourquoi GitLab ?","Découvrez les principales raisons pour lesquelles les entreprises choisissent GitLab",{"text":2078,"config":2079},"En savoir plus",{"href":2080,"dataGaName":2081,"dataGaLocation":2036},"/fr-fr/why-gitlab/","why gitlab",{"text":2083,"left":627,"config":2084,"menu":2086},"Produit",{"dataNavLevelOne":2085},"solutions",{"type":2087,"link":2088,"columns":2092,"feature":2163},"lists",{"text":2089,"config":2090},"Voir toutes les solutions",{"href":2091,"dataGaName":2085,"dataGaLocation":2036},"/fr-fr/solutions/",[2093,2118,2141],{"title":2094,"description":2095,"link":2096,"items":2101},"Automatisation","CI/CD et automatisation pour accélérer le déploiement",{"config":2097},{"icon":2098,"href":2099,"dataGaName":2100,"dataGaLocation":2036},"AutomatedCodeAlt","/fr-fr/solutions/delivery-automation/","automated software delivery",[2102,2106,2109,2114],{"text":2103,"config":2104},"CI/CD",{"href":2105,"dataGaLocation":2036,"dataGaName":2103},"/fr-fr/solutions/continuous-integration/",{"text":2067,"config":2107},{"href":2072,"dataGaLocation":2036,"dataGaName":2108},"gitlab duo agent platform - product menu",{"text":2110,"config":2111},"Gestion du code source",{"href":2112,"dataGaLocation":2036,"dataGaName":2113},"/fr-fr/solutions/source-code-management/","Source Code Management",{"text":2115,"config":2116},"Livraison de logiciels automatisée",{"href":2099,"dataGaLocation":2036,"dataGaName":2117},"Automated software delivery",{"title":2119,"description":2120,"link":2121,"items":2126},"Sécurité","Livrez du code plus rapidement sans compromettre la sécurité",{"config":2122},{"href":2123,"dataGaName":2124,"dataGaLocation":2036,"icon":2125},"/fr-fr/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[2127,2131,2136],{"text":2128,"config":2129},"Tests de sécurité des applications",{"href":2123,"dataGaName":2130,"dataGaLocation":2036},"Application security testing",{"text":2132,"config":2133},"Sécurité de la chaîne d'approvisionnement logicielle",{"href":2134,"dataGaLocation":2036,"dataGaName":2135},"/fr-fr/solutions/supply-chain/","Software supply chain security",{"text":2137,"config":2138},"Conformité logicielle",{"href":2139,"dataGaName":2140,"dataGaLocation":2036},"/fr-fr/solutions/software-compliance/","software compliance",{"title":2142,"link":2143,"items":2148},"Mesures",{"config":2144},{"icon":2145,"href":2146,"dataGaName":2147,"dataGaLocation":2036},"DigitalTransformation","/fr-fr/solutions/visibility-measurement/","visibility and measurement",[2149,2153,2158],{"text":2150,"config":2151},"Visibilité et mesures",{"href":2146,"dataGaLocation":2036,"dataGaName":2152},"Visibility and Measurement",{"text":2154,"config":2155},"Gestion de la chaîne de valeur",{"href":2156,"dataGaLocation":2036,"dataGaName":2157},"/fr-fr/solutions/value-stream-management/","Value Stream Management",{"text":2159,"config":2160},"Analyses et informations",{"href":2161,"dataGaLocation":2036,"dataGaName":2162},"/fr-fr/solutions/analytics-and-insights/","Analytics and insights",{"title":2164,"type":2087,"items":2165},"GitLab",[2166,2172,2178],{"text":2167,"config":2168},"Entreprises",{"icon":2169,"href":2170,"dataGaLocation":2036,"dataGaName":2171},"Building","/fr-fr/enterprise/","enterprise",{"text":2173,"config":2174},"Pour les PME",{"icon":2175,"href":2176,"dataGaLocation":2036,"dataGaName":2177},"Work","/fr-fr/small-business/","small business",{"text":2179,"config":2180},"Pour le secteur public",{"icon":2181,"href":2182,"dataGaLocation":2036,"dataGaName":2183},"Organization","/fr-fr/solutions/public-sector/","public sector",{"text":2185,"config":2186},"Tarifs",{"href":2187,"dataGaName":2188,"dataGaLocation":2036,"dataNavLevelOne":2188},"/fr-fr/pricing/","pricing",{"text":2190,"config":2191,"menu":2193},"Ressources",{"dataNavLevelOne":2192},"resources",{"type":2087,"link":2194,"columns":2198,"feature":2292},{"text":2195,"config":2196},"Afficher toutes les ressources",{"href":2197,"dataGaName":2192,"dataGaLocation":2036},"/fr-fr/resources/",[2199,2232,2259],{"title":2200,"items":2201},"Premiers pas",[2202,2207,2212,2217,2222,2227],{"text":2203,"config":2204},"Installation",{"href":2205,"dataGaName":2206,"dataGaLocation":2036},"/fr-fr/install/","install",{"text":2208,"config":2209},"Guides de démarrage",{"href":2210,"dataGaName":2211,"dataGaLocation":2036},"/fr-fr/get-started/","quick setup checklists",{"text":2213,"config":2214},"Apprentissage",{"href":2215,"dataGaLocation":2036,"dataGaName":2216},"https://university.gitlab.com/","learn",{"text":2218,"config":2219},"Documentation",{"href":2220,"dataGaName":2221,"dataGaLocation":2036},"https://docs.gitlab.com/","product documentation",{"text":2223,"config":2224},"Vidéos sur les bonnes pratiques",{"href":2225,"dataGaName":2226,"dataGaLocation":2036},"/fr-fr/getting-started-videos/","best practice videos",{"text":2228,"config":2229},"Intégrations",{"href":2230,"dataGaName":2231,"dataGaLocation":2036},"/fr-fr/integrations/","integrations",{"title":2233,"items":2234},"Découvrir",[2235,2240,2245,2250,2254],{"text":2236,"config":2237},"Témoignages clients",{"href":2238,"dataGaName":2239,"dataGaLocation":2036},"/fr-fr/customers/","customer success stories",{"text":2241,"config":2242},"Blog",{"href":2243,"dataGaName":2244,"dataGaLocation":2036},"/fr-fr/blog/","blog",{"text":2246,"config":2247},"Demo Hub",{"href":2248,"dataGaName":2249,"dataGaLocation":2036},"/fr-fr/demo-hub/","demo hub",{"text":2251,"config":2252},"The Source",{"href":2253,"dataGaName":2244,"dataGaLocation":2036},"/fr-fr/the-source/",{"text":2255,"config":2256},"Travail à distance",{"href":2257,"dataGaName":2258,"dataGaLocation":2036},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":2260,"items":2261},"Connecter",[2262,2267,2272,2277,2282,2287],{"text":2263,"config":2264},"Services GitLab",{"href":2265,"dataGaName":2266,"dataGaLocation":2036},"/fr-fr/services/","services",{"text":2268,"config":2269},"Contribuer",{"href":2270,"dataGaName":2271,"dataGaLocation":2036},"https://contributors.gitlab.com","contribute",{"text":2273,"config":2274},"Communauté",{"href":2275,"dataGaName":2276,"dataGaLocation":2036},"/community/","community",{"text":2278,"config":2279},"Forum",{"href":2280,"dataGaName":2281,"dataGaLocation":2036},"https://forum.gitlab.com/","forum",{"text":2283,"config":2284},"Événements",{"href":2285,"dataGaName":2286,"dataGaLocation":2036},"/events/","events",{"text":2288,"config":2289},"Partenaires",{"href":2290,"dataGaName":2291,"dataGaLocation":2036},"/fr-fr/partners/","partners",{"config":2293,"title":2296,"text":2297,"link":2298},{"background":2294,"textColor":2295},"url('https://res.cloudinary.com/about-gitlab-com/image/upload/v1777322348/qpq8yrgn8knii57omj0c.png')","#000","Nouveautés de GitLab","Découvrez les dernières fonctionnalités et améliorations.",{"text":2299,"config":2300},"Lire les articles les plus récents",{"href":2301,"dataGaName":2302,"dataGaLocation":2036},"/fr-fr/whats-new/","whats new",{"text":2304,"config":2305,"menu":2307},"Société",{"dataNavLevelOne":2306},"company",{"type":2087,"columns":2308},[2309],{"items":2310},[2311,2316,2322,2324,2329,2334,2339,2344,2349,2354],{"text":2312,"config":2313},"À propos",{"href":2314,"dataGaName":2315,"dataGaLocation":2036},"/fr-fr/company/","about",{"text":2317,"config":2318,"footerGa":2321},"Carrières",{"href":2319,"dataGaName":2320,"dataGaLocation":2036},"/jobs/","jobs",{"dataGaName":2320},{"text":2283,"config":2323},{"href":2285,"dataGaName":2286,"dataGaLocation":2036},{"text":2325,"config":2326},"Leadership",{"href":2327,"dataGaName":2328,"dataGaLocation":2036},"/company/team/e-group/","leadership",{"text":2330,"config":2331},"Manuel",{"href":2332,"dataGaName":2333,"dataGaLocation":2036},"https://handbook.gitlab.com/","handbook",{"text":2335,"config":2336},"Relations avec les investisseurs",{"href":2337,"dataGaName":2338,"dataGaLocation":2036},"https://ir.gitlab.com/overview/default.aspx","investor relations",{"text":2340,"config":2341},"Trust Center",{"href":2342,"dataGaName":2343,"dataGaLocation":2036},"/fr-fr/security/","trust center",{"text":2345,"config":2346},"Centre pour la transparence de l'IA",{"href":2347,"dataGaName":2348,"dataGaLocation":2036},"/fr-fr/ai-transparency-center/","ai transparency center",{"text":2350,"config":2351},"Newsletter",{"href":2352,"dataGaName":2353,"dataGaLocation":2036},"/company/contact/#contact-forms","newsletter",{"text":2355,"config":2356},"Presse",{"href":2357,"dataGaName":2358,"dataGaLocation":2036},"/press/","press",{"text":2360,"config":2361,"menu":2362},"Nous contacter",{"dataNavLevelOne":2306},{"type":2087,"columns":2363},[2364],{"items":2365},[2366,2371,2376],{"text":2367,"config":2368},"Contacter l'équipe commerciale",{"href":2369,"dataGaName":2370,"dataGaLocation":2036},"/fr-fr/sales/","talk to sales",{"text":2372,"config":2373},"Assistance GitLab",{"href":2374,"dataGaName":2375,"dataGaLocation":2036},"https://support.gitlab.com/hc/en-us","support portal",{"text":2377,"config":2378},"Portail clients GitLab",{"href":2379,"dataGaName":2380,"dataGaLocation":2036},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":2382,"login":2383,"suggestions":2390},"Fermer",{"text":2384,"link":2385},"Pour rechercher des dépôts et des projets, connectez-vous à",{"text":2386,"config":2387},"GitLab.com",{"href":2050,"dataGaName":2388,"dataGaLocation":2389},"search login","search",{"text":2391,"default":2392},"Suggestions",[2393,2396,2401,2403,2408,2413],{"text":2067,"config":2394},{"href":2072,"dataGaName":2395,"dataGaLocation":2389},"GitLab Duo Agent Platform",{"text":2397,"config":2398},"Suggestions de code (IA)",{"href":2399,"dataGaName":2400,"dataGaLocation":2389},"/fr-fr/solutions/code-suggestions/","Code Suggestions (AI)",{"text":2103,"config":2402},{"href":2105,"dataGaName":2103,"dataGaLocation":2389},{"text":2404,"config":2405},"GitLab sur AWS",{"href":2406,"dataGaName":2407,"dataGaLocation":2389},"/fr-fr/partners/technology-partners/aws/","GitLab on AWS",{"text":2409,"config":2410},"GitLab sur Google Cloud",{"href":2411,"dataGaName":2412,"dataGaLocation":2389},"/fr-fr/partners/technology-partners/google-cloud-platform/","GitLab on Google Cloud",{"text":2414,"config":2415},"Pourquoi utiliser GitLab ?",{"href":2080,"dataGaName":2416,"dataGaLocation":2389},"Why GitLab?",{"freeTrial":2418,"mobileIcon":2423,"desktopIcon":2428,"secondaryButton":2431},{"text":2419,"config":2420},"Commencer votre essai gratuit",{"href":2421,"dataGaName":2041,"dataGaLocation":2422},"https://gitlab.com/-/trials/new/","nav",{"altText":2424,"config":2425},"Icône GitLab",{"src":2426,"dataGaName":2427,"dataGaLocation":2422},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":2424,"config":2429},{"src":2430,"dataGaName":2427,"dataGaLocation":2422},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":2432,"config":2433},"Commencer",{"href":2434,"dataGaName":2435,"dataGaLocation":2422},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/fr-fr/get-started/","get started",{"freeTrial":2437,"mobileIcon":2441,"desktopIcon":2443},{"text":2438,"config":2439},"En savoir plus sur GitLab Duo",{"href":2072,"dataGaName":2440,"dataGaLocation":2422},"gitlab duo",{"altText":2424,"config":2442},{"src":2426,"dataGaName":2427,"dataGaLocation":2422},{"altText":2424,"config":2444},{"src":2430,"dataGaName":2427,"dataGaLocation":2422},{"button":2446,"mobileIcon":2451,"desktopIcon":2453},{"text":2447,"config":2448},"/switch",{"href":2449,"dataGaName":2450,"dataGaLocation":2422},"#contact","switch",{"altText":2424,"config":2452},{"src":2426,"dataGaName":2427,"dataGaLocation":2422},{"altText":2424,"config":2454},{"src":2455,"dataGaName":2427,"dataGaLocation":2422},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1773335277/ohhpiuoxoldryzrnhfrh.png",{"freeTrial":2457,"mobileIcon":2462,"desktopIcon":2464},{"text":2458,"config":2459},"Retour aux tarifs",{"href":2187,"dataGaName":2460,"dataGaLocation":2422,"icon":2461},"back to pricing","GoBack",{"altText":2424,"config":2463},{"src":2426,"dataGaName":2427,"dataGaLocation":2422},{"altText":2424,"config":2465},{"src":2430,"dataGaName":2427,"dataGaLocation":2422},{"title":2467,"button":2468,"config":2472},"GitLab Orbit est arrivé : la couche de contexte pour les agents d'IA.",{"text":2078,"config":2469},{"href":2470,"dataGaName":2471,"dataGaLocation":2036},"/fr-fr/gitlab-orbit/","orbit",{"layout":2473,"disabled":2017},"release",{"data":2475},{"text":2476,"source":2477,"edit":2483,"contribute":2488,"config":2492,"items":2497,"minimal":2705},"Git est une marque déposée de Software Freedom Conservancy et notre utilisation de « GitLab » est sous licence.",{"text":2478,"config":2479},"Afficher le code source de la page",{"href":2480,"dataGaName":2481,"dataGaLocation":2482},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":2484,"config":2485},"Modifier cette page",{"href":2486,"dataGaName":2487,"dataGaLocation":2482},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":2268,"config":2489},{"href":2490,"dataGaName":2491,"dataGaLocation":2482},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":2493,"facebook":2494,"youtube":2495,"linkedin":2496},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[2498,2544,2597,2640,2672],{"title":2185,"links":2499,"subMenu":2514},[2500,2504,2509],{"text":2501,"config":2502},"Voir les forfaits",{"href":2187,"dataGaName":2503,"dataGaLocation":2482},"view plans",{"text":2505,"config":2506},"GitLab Premium",{"href":2507,"dataGaName":2508,"dataGaLocation":2482},"/fr-fr/pricing/premium/","why premium",{"text":2510,"config":2511},"GitLab Ultimate",{"href":2512,"dataGaName":2513,"dataGaLocation":2482},"/fr-fr/pricing/ultimate/","why ultimate",[2515],{"title":2360,"links":2516},[2517,2519,2521,2524,2529,2534,2539],{"text":2367,"config":2518},{"href":2369,"dataGaName":2046,"dataGaLocation":2482},{"text":2372,"config":2520},{"href":2374,"dataGaName":2375,"dataGaLocation":2482},{"text":2522,"config":2523},"Portail clients",{"href":2379,"dataGaName":2380,"dataGaLocation":2482},{"text":2525,"config":2526},"Statut",{"href":2527,"dataGaName":2528,"dataGaLocation":2482},"https://status.gitlab.com/","status",{"text":2530,"config":2531},"Conditions d'utilisation",{"href":2532,"dataGaName":2533,"dataGaLocation":2482},"/terms/","terms of use",{"text":2535,"config":2536},"Politique de confidentialité",{"href":2537,"dataGaName":2538,"dataGaLocation":2482},"/fr-fr/privacy/","privacy statement",{"text":2540,"config":2541},"Gestion des cookies",{"dataGaName":2542,"dataGaLocation":2482,"id":2543,"isOneTrustButton":627},"cookie preferences","ot-sdk-btn",{"title":2083,"links":2545,"subMenu":2554},[2546,2550],{"text":2547,"config":2548},"Plateforme DevSecOps",{"href":2065,"dataGaName":2549,"dataGaLocation":2482},"devsecops platform",{"text":2551,"config":2552},"Développement assisté par l'IA",{"href":2072,"dataGaName":2553,"dataGaLocation":2482},"ai-assisted development",[2555],{"title":2556,"links":2557},"Thèmes",[2558,2562,2567,2572,2577,2582,2587,2592],{"text":2103,"config":2559},{"href":2560,"dataGaName":2561,"dataGaLocation":2482},"/fr-fr/topics/ci-cd/","cicd",{"text":2563,"config":2564},"GitOps",{"href":2565,"dataGaName":2566,"dataGaLocation":2482},"/fr-fr/topics/gitops/","gitops",{"text":2568,"config":2569},"DevOps",{"href":2570,"dataGaName":2571,"dataGaLocation":2482},"/fr-fr/topics/devops/","devops",{"text":2573,"config":2574},"Contrôle de version",{"href":2575,"dataGaName":2576,"dataGaLocation":2482},"/fr-fr/topics/version-control/","version control",{"text":2578,"config":2579},"DevSecOps",{"href":2580,"dataGaName":2581,"dataGaLocation":2482},"/fr-fr/topics/devsecops/","devsecops",{"text":2583,"config":2584},"Cloud-native",{"href":2585,"dataGaName":2586,"dataGaLocation":2482},"/fr-fr/topics/cloud-native/","cloud native",{"text":2588,"config":2589},"IA pour la programmation",{"href":2590,"dataGaName":2591,"dataGaLocation":2482},"/fr-fr/topics/devops/ai-for-coding/","ai for coding",{"text":2593,"config":2594},"IA agentique",{"href":2595,"dataGaName":2596,"dataGaLocation":2482},"/fr-fr/topics/agentic-ai/","agentic ai",{"title":2598,"links":2599},"Solutions",[2600,2603,2605,2610,2613,2616,2619,2622,2624,2627,2630,2635],{"text":2128,"config":2601},{"href":2123,"dataGaName":2602,"dataGaLocation":2482},"Application Security Testing",{"text":2115,"config":2604},{"href":2099,"dataGaName":2100,"dataGaLocation":2482},{"text":2606,"config":2607},"Développement Agile",{"href":2608,"dataGaName":2609,"dataGaLocation":2482},"/fr-fr/solutions/agile-delivery/","agile delivery",{"text":2110,"config":2611},{"href":2112,"dataGaName":2612,"dataGaLocation":2482},"source code management",{"text":2103,"config":2614},{"href":2105,"dataGaName":2615,"dataGaLocation":2482},"continuous integration & delivery",{"text":2154,"config":2617},{"href":2156,"dataGaName":2618,"dataGaLocation":2482},"value stream management",{"text":2563,"config":2620},{"href":2621,"dataGaName":2566,"dataGaLocation":2482},"/fr-fr/solutions/gitops/",{"text":2167,"config":2623},{"href":2170,"dataGaName":2171,"dataGaLocation":2482},{"text":2625,"config":2626},"PME",{"href":2176,"dataGaName":2177,"dataGaLocation":2482},{"text":2628,"config":2629},"Secteur public",{"href":2182,"dataGaName":2183,"dataGaLocation":2482},{"text":2631,"config":2632},"Éducation",{"href":2633,"dataGaName":2634,"dataGaLocation":2482},"/fr-fr/solutions/education/","education",{"text":2636,"config":2637},"Services financiers",{"href":2638,"dataGaName":2639,"dataGaLocation":2482},"/fr-fr/solutions/finance/","financial services",{"title":2190,"links":2641},[2642,2644,2646,2648,2651,2653,2656,2658,2660,2662,2664,2666,2668,2670],{"text":2203,"config":2643},{"href":2205,"dataGaName":2206,"dataGaLocation":2482},{"text":2208,"config":2645},{"href":2210,"dataGaName":2211,"dataGaLocation":2482},{"text":2213,"config":2647},{"href":2215,"dataGaName":2216,"dataGaLocation":2482},{"text":2218,"config":2649},{"href":2220,"dataGaName":2650,"dataGaLocation":2482},"docs",{"text":2241,"config":2652},{"href":2243,"dataGaName":2244,"dataGaLocation":2482},{"text":2654,"config":2655},"Nouveautés",{"href":2301,"dataGaName":2302,"dataGaLocation":2482},{"text":2236,"config":2657},{"href":2238,"dataGaName":2239,"dataGaLocation":2482},{"text":2255,"config":2659},{"href":2257,"dataGaName":2258,"dataGaLocation":2482},{"text":2263,"config":2661},{"href":2265,"dataGaName":2266,"dataGaLocation":2482},{"text":2268,"config":2663},{"href":2270,"dataGaName":2271,"dataGaLocation":2482},{"text":2273,"config":2665},{"href":2275,"dataGaName":2276,"dataGaLocation":2482},{"text":2278,"config":2667},{"href":2280,"dataGaName":2281,"dataGaLocation":2482},{"text":2283,"config":2669},{"href":2285,"dataGaName":2286,"dataGaLocation":2482},{"text":2288,"config":2671},{"href":2290,"dataGaName":2291,"dataGaLocation":2482},{"title":2304,"links":2673},[2674,2676,2678,2680,2682,2684,2689,2694,2696,2698,2700],{"text":2312,"config":2675},{"href":2314,"dataGaName":2306,"dataGaLocation":2482},{"text":2317,"config":2677},{"href":2319,"dataGaName":2320,"dataGaLocation":2482},{"text":2325,"config":2679},{"href":2327,"dataGaName":2328,"dataGaLocation":2482},{"text":2330,"config":2681},{"href":2332,"dataGaName":2333,"dataGaLocation":2482},{"text":2335,"config":2683},{"href":2337,"dataGaName":2338,"dataGaLocation":2482},{"text":2685,"config":2686},"Développement durable",{"href":2687,"dataGaName":2688,"dataGaLocation":2482},"/sustainability/","Sustainability",{"text":2690,"config":2691},"Diversité, inclusion et appartenance (DIB)",{"href":2692,"dataGaName":2693,"dataGaLocation":2482},"/fr-fr/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":2340,"config":2695},{"href":2342,"dataGaName":2343,"dataGaLocation":2482},{"text":2350,"config":2697},{"href":2352,"dataGaName":2353,"dataGaLocation":2482},{"text":2355,"config":2699},{"href":2357,"dataGaName":2358,"dataGaLocation":2482},{"text":2701,"config":2702},"Déclaration de transparence sur l'esclavage moderne",{"href":2703,"dataGaName":2704,"dataGaLocation":2482},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"items":2706},[2707,2709,2711],{"text":2530,"config":2708},{"href":2532,"dataGaName":2533,"dataGaLocation":2482},{"text":2540,"config":2710},{"dataGaName":2542,"dataGaLocation":2482,"id":2543,"isOneTrustButton":627},{"text":2535,"config":2712},{"href":2537,"dataGaName":2538,"dataGaLocation":2482},[2714],{"id":2715,"title":7,"body":2012,"config":2716,"content":2718,"description":2012,"extension":2722,"meta":2723,"navigation":627,"path":2724,"seo":2725,"stem":2726,"__hash__":2727},"blogAuthors/en-us/blog/authors/tim-rizzi.yml",{"template":2717},"BlogAuthor",{"name":7,"config":2719},{"headshot":2720,"ctfId":2721},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749661866/Blog/Author%20Headshots/trizzi-headshot.jpg","trizzi","yml",{},"/en-us/blog/authors/tim-rizzi",{},"en-us/blog/authors/tim-rizzi","ADPqrpcnKveFJS0m_zFV0VLtb_h_txu59QVgz_YwKMc",[2729,2737,2742],{"title":2730,"description":2731,"heroImage":2732,"category":2008,"date":2733,"authors":2734,"slug":2736,"externalUrl":2012},"Le flow GitLab Duo Security Review détecte les failles logiques que les scanners n'identifient pas","Utilisez le raisonnement de sécurité piloté par l'IA pour détecter les failles d'autorisation, les erreurs de logique métier et les conditions de concurrence pendant la revue de code.","https://res.cloudinary.com/about-gitlab-com/image/upload/v1783980535/t3gez0gpayfndrhncunf.png","2026-07-17",[2735],"Mark Settle","gitlab-duo-security-review-flow",{"title":2738,"description":2739,"heroImage":2732,"category":2008,"date":2733,"authors":2740,"slug":2741,"externalUrl":2012},"Une mise à jour de version fait échouer votre build ? GitLab le corrige !","Mettez à niveau vos dépendances automatiquement, adaptez le code en cas de changements cassants et transférez les modifications pour approbation : découvrez ces fonctionnalités natives uniquement proposées par GitLab, avec un contexte complet.",[2735],"dependency-scanning-auto-remediation",{"title":2743,"description":2744,"heroImage":2745,"category":2008,"date":2746,"authors":2747,"slug":2749,"externalUrl":2012},"GitLab : 5 façons de corriger les niveaux de gravité trompeurs des vulnérabilités","Les scores CVSS par défaut ne reflètent pas vos risques réels. Utilisez les politiques de remplacement de la gravité GitLab pour automatiser les ajustements en fonction des CVE, des CWE, du chemin de fichier et du répertoire.","https://res.cloudinary.com/about-gitlab-com/image/upload/f_auto,q_auto,c_lfill/v1772630163/akp8ly2mrsfrhsb0liyb.png","2026-07-07",[2748],"Grant Hickman","severity-override-vulnerability-management-policy",{"promotions":2751},[2752,2766,2778,2789],{"id":2753,"categories":2754,"header":2756,"text":2757,"button":2758,"image":2763},"ai-modernization",[2755],"ai","L'IA tient-elle ses promesses à grande échelle ?","Le questionnaire ne prendra pas plus de 5 minutes.",{"text":2759,"config":2760},"Obtenez votre score de maturité IA",{"href":2761,"dataGaName":2762,"dataGaLocation":2244},"/fr-fr/assessments/ai-modernization-assessment/","modernization assessment",{"config":2764},{"src":2765},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/qix0m7kwnd8x2fh1zq49.png",{"id":2767,"categories":2768,"header":2770,"text":2757,"button":2771,"image":2775},"devops-modernization",[2769,2581],"product","Vous contentez-vous de gérer des outils ou de livrer des innovations ?",{"text":2772,"config":2773},"Obtenez votre score de maturité DevOps",{"href":2774,"dataGaName":2762,"dataGaLocation":2244},"/fr-fr/assessments/devops-modernization-assessment/",{"config":2776},{"src":2777},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138785/eg818fmakweyuznttgid.png",{"id":2779,"categories":2780,"header":2781,"text":2757,"button":2782,"image":2786},"security-modernization",[2008],"Faut-il sacrifier la rapidité pour garantir la sécurité ?",{"text":2783,"config":2784},"Obtenez votre score de maturité en matière de sécurité",{"href":2785,"dataGaName":2762,"dataGaLocation":2244},"/fr-fr/assessments/security-modernization-assessment/",{"config":2787},{"src":2788},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1772138786/p4pbqd9nnjejg5ds6mdk.png",{"id":2790,"paths":2791,"header":2794,"text":2795,"button":2796,"image":2801},"github-azure-migration",[2792,2793],"migration-from-azure-devops-to-gitlab","integrating-azure-devops-scm-and-gitlab","Votre équipe est-elle prête pour la migration de GitHub vers Azure ?","GitHub a déjà commencé sa migration vers Azure. Découvrez ce que cela signifie pour vous.",{"text":2797,"config":2798},"Découvrez les différences entre GitLab et GitHub",{"href":2799,"dataGaName":2800,"dataGaLocation":2244},"/fr-fr/compare/gitlab-vs-github/github-azure-migration/","github azure migration",{"config":2802},{"src":2777},{"header":2804,"blurb":2805,"button":2806,"secondaryButton":2810},"Commencez à développer plus rapidement dès aujourd'hui","Découvrez ce que votre équipe peut accomplir avec la plateforme d'orchestration intelligente pour le DevSecOps.\n",{"text":2038,"config":2807},{"href":2808,"dataGaName":2041,"dataGaLocation":2809},"https://gitlab.com/-/trial_registrations/new?glm_content=default-saas-trial&glm_source=about.gitlab.com/fr-fr/","feature",{"text":2367,"config":2811},{"href":2369,"dataGaName":2046,"dataGaLocation":2809},1786803747335]