[{"data":1,"prerenderedAt":10907},["ShallowReactive",2],{"plugins":3,"$fHjgHa7JiU-d4Y7-UUOZrPzQNVV1ZtTpFamuCTA6rKQ0":1968,"-docs-build-basic-usage-grammar":2608,"-docs-build-basic-usage-grammar-surround":10902},[4,214,363,504,627,764,902,1041,1145,1284,1422,1564,1700,1835],{"id":5,"title":6,"_id":7,"_partial":8,"_path":7,"body":9,"categories":7,"category":150,"contributors":151,"description":19,"extension":188,"github":131,"icon":189,"learn_more":7,"maintainers":190,"meta":199,"name":200,"navigation":201,"npm":6,"path":202,"repo":203,"seo":204,"sponsor":8,"stats":205,"stem":211,"type":212,"website":131,"__hash__":213},"plugins\u002Fplugins\u002Fa11y.md","@nuxt\u002Fa11y",null,false,{"type":10,"value":11,"toc":145},"minimark",[12,16,20,24,50,53,60,119,122,141],[13,14,6],"h1",{"id":15},"nuxta11y",[17,18,19],"p",{},"在开发期间在浏览器中提供实时可访问性反馈和自动测试。",[21,22,23],"h2",{"id":23},"安装",[25,26,31],"pre",{"className":27,"code":28,"language":29,"meta":30,"style":30},"language-bash shiki shiki-themes material-theme-lighter material-theme-lighter material-theme-palenight","npm install @nuxt\u002Fa11y\n","bash","",[32,33,34],"code",{"__ignoreMap":30},[35,36,39,43,47],"span",{"class":37,"line":38},"line",1,[35,40,42],{"class":41},"s52Pk","npm",[35,44,46],{"class":45},"sGFVr"," install",[35,48,49],{"class":45}," @nuxt\u002Fa11y\n",[21,51,52],{"id":52},"使用",[17,54,55,56,59],{},"将插件添加到您的 ",[32,57,58],{},"nuxt.config.ts",":",[25,61,65],{"className":62,"code":63,"language":64,"meta":30,"style":30},"language-ts shiki shiki-themes material-theme-lighter material-theme-lighter material-theme-palenight","export default defineNuxtConfig({\n  modules: ['@nuxt\u002Fa11y']\n})\n","ts",[32,66,67,88,110],{"__ignoreMap":30},[35,68,69,73,76,80,84],{"class":37,"line":38},[35,70,72],{"class":71},"s8R28","export",[35,74,75],{"class":71}," default",[35,77,79],{"class":78},"s3cPz"," defineNuxtConfig",[35,81,83],{"class":82},"sZSNi","(",[35,85,87],{"class":86},"sDfIl","{\n",[35,89,91,95,97,100,103,105,107],{"class":37,"line":90},2,[35,92,94],{"class":93},"sRlkE","  modules",[35,96,59],{"class":86},[35,98,99],{"class":82}," [",[35,101,102],{"class":86},"'",[35,104,6],{"class":45},[35,106,102],{"class":86},[35,108,109],{"class":82},"]\n",[35,111,113,116],{"class":37,"line":112},3,[35,114,115],{"class":86},"}",[35,117,118],{"class":82},")\n",[21,120,121],{"id":121},"链接",[123,124,125,135],"ul",{},[126,127,128],"li",{},[129,130,134],"a",{"href":131,"rel":132},"https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fa11y",[133],"nofollow","文档",[126,136,137],{},[129,138,140],{"href":131,"rel":139},[133],"GitHub",[142,143,144],"style",{},"html pre.shiki code .s52Pk, html code.shiki .s52Pk{--shiki-light:#E2931D;--shiki-default:#E2931D;--shiki-dark:#FFCB6B}html pre.shiki code .sGFVr, html code.shiki .sGFVr{--shiki-light:#91B859;--shiki-default:#91B859;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}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 .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s8R28, html code.shiki .s8R28{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#39ADB5;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .s3cPz, html code.shiki .s3cPz{--shiki-light:#6182B8;--shiki-default:#6182B8;--shiki-dark:#82AAFF}html pre.shiki code .sZSNi, html code.shiki .sZSNi{--shiki-light:#90A4AE;--shiki-default:#90A4AE;--shiki-dark:#BABED8}html pre.shiki code .sDfIl, html code.shiki .sDfIl{--shiki-light:#39ADB5;--shiki-default:#39ADB5;--shiki-dark:#89DDFF}html pre.shiki code .sRlkE, html code.shiki .sRlkE{--shiki-light:#E53935;--shiki-default:#E53935;--shiki-dark:#F07178}",{"title":30,"searchDepth":90,"depth":90,"links":146},[147,148,149],{"id":23,"depth":90,"text":23},{"id":52,"depth":90,"text":52},{"id":121,"depth":90,"text":121},"Devtools",[152,155,158,161,165,169,173,177,180,184],{"id":38,"username":153,"contributions":154},"user99376",43,{"id":90,"username":156,"contributions":157},"user86649",16,{"id":112,"username":159,"contributions":160},"user49829",57,{"id":162,"username":163,"contributions":164},4,"user72634",14,{"id":166,"username":167,"contributions":168},5,"user28650",92,{"id":170,"username":171,"contributions":172},6,"user8758",55,{"id":174,"username":175,"contributions":176},7,"user74896",89,{"id":178,"username":179,"contributions":160},8,"user51798",{"id":181,"username":182,"contributions":183},9,"user67000",32,{"id":185,"username":186,"contributions":187},10,"user11627",36,"md","nuxt.svg",[191,195],{"name":192,"github":193,"bluesky":194},"Tim Damen","timdamen","timdamen.io",{"name":196,"github":197,"bluesky":198},"Daniel Roe","danielroe","danielroe.dev",{},"a11y",true,"\u002Fplugins\u002Fa11y","nuxt\u002Fa11y",{"title":6,"description":19},{"downloads":206,"stars":207,"watchers":208,"forks":209,"defaultBranch":210},2272902,36407,4858,1470,"main","plugins\u002Fa11y","official","YLxALoH_wZAsqCG6CMMXV7CM10sA6Y-aWquupJl5GMM",{"id":215,"title":216,"_id":7,"_partial":8,"_path":7,"body":217,"categories":7,"category":309,"contributors":310,"description":224,"extension":188,"github":300,"icon":189,"learn_more":7,"maintainers":338,"meta":351,"name":352,"navigation":201,"npm":216,"path":353,"repo":354,"seo":355,"sponsor":8,"stats":356,"stem":361,"type":212,"website":294,"__hash__":362},"plugins\u002Fplugins\u002Fcontent.md","@nuxt\u002Fcontent",{"type":10,"value":218,"toc":304},[219,222,225,227,241,243,247,286,288,302],[13,220,216],{"id":221},"nuxtcontent",[17,223,224],{},"基于文件的 CMS，支持 Markdown、YAML、JSON。",[21,226,23],{"id":23},[25,228,230],{"className":27,"code":229,"language":29,"meta":30,"style":30},"npm install @nuxt\u002Fcontent\n",[32,231,232],{"__ignoreMap":30},[35,233,234,236,238],{"class":37,"line":38},[35,235,42],{"class":41},[35,237,46],{"class":45},[35,239,240],{"class":45}," @nuxt\u002Fcontent\n",[21,242,52],{"id":52},[17,244,55,245,59],{},[32,246,58],{},[25,248,250],{"className":62,"code":249,"language":64,"meta":30,"style":30},"export default defineNuxtConfig({\n  modules: ['@nuxt\u002Fcontent']\n})\n",[32,251,252,264,280],{"__ignoreMap":30},[35,253,254,256,258,260,262],{"class":37,"line":38},[35,255,72],{"class":71},[35,257,75],{"class":71},[35,259,79],{"class":78},[35,261,83],{"class":82},[35,263,87],{"class":86},[35,265,266,268,270,272,274,276,278],{"class":37,"line":90},[35,267,94],{"class":93},[35,269,59],{"class":86},[35,271,99],{"class":82},[35,273,102],{"class":86},[35,275,216],{"class":45},[35,277,102],{"class":86},[35,279,109],{"class":82},[35,281,282,284],{"class":37,"line":112},[35,283,115],{"class":86},[35,285,118],{"class":82},[21,287,121],{"id":121},[123,289,290,296],{},[126,291,292],{},[129,293,134],{"href":294,"rel":295},"https:\u002F\u002Fcontent.nuxt.com",[133],[126,297,298],{},[129,299,140],{"href":300,"rel":301},"https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fcontent",[133],[142,303,144],{},{"title":30,"searchDepth":90,"depth":90,"links":305},[306,307,308],{"id":23,"depth":90,"text":23},{"id":52,"depth":90,"text":52},{"id":121,"depth":90,"text":121},"CMS",[311,314,317,319,322,324,327,330,333,335],{"id":38,"username":312,"contributions":313},"user13979",60,{"id":90,"username":315,"contributions":316},"user10947",52,{"id":112,"username":318,"contributions":187},"user11345",{"id":162,"username":320,"contributions":321},"user77708",64,{"id":166,"username":323,"contributions":183},"user96159",{"id":170,"username":325,"contributions":326},"user10252",65,{"id":174,"username":328,"contributions":329},"user88319",37,{"id":178,"username":331,"contributions":332},"user83651",74,{"id":181,"username":334,"contributions":183},"user76515",{"id":185,"username":336,"contributions":337},"user63596",73,[339,343,347],{"name":340,"github":341,"bluesky":342},"Farnabaz","farnabaz","farnabaz.dev",{"name":344,"github":345,"bluesky":346},"Baptiste Leproux","larbish","larbish.bsky.social",{"name":348,"github":349,"bluesky":350},"Sébastien Chopin","Atinux","atinux.com",{},"content","\u002Fplugins\u002Fcontent","nuxt\u002Fcontent#main",{"title":216,"description":224},{"downloads":357,"stars":358,"watchers":359,"forks":360,"defaultBranch":210},201400,37560,3723,499,"plugins\u002Fcontent","MPWexsb65o956t8kAcciteLzN5MYNwClRrI_CaJBSKg",{"id":364,"title":365,"_id":7,"_partial":8,"_path":7,"body":366,"categories":7,"category":150,"contributors":458,"description":373,"extension":188,"github":449,"icon":189,"learn_more":7,"maintainers":487,"meta":492,"name":493,"navigation":201,"npm":365,"path":494,"repo":495,"seo":496,"sponsor":8,"stats":497,"stem":502,"type":212,"website":443,"__hash__":503},"plugins\u002Fplugins\u002Fdevtools.md","@nuxt\u002Fdevtools",{"type":10,"value":367,"toc":453},[368,371,374,376,390,392,396,435,437,451],[13,369,365],{"id":370},"nuxtdevtools",[17,372,373],{},"帮助您更好地了解 Nuxt 应用程序的可视化工具。",[21,375,23],{"id":23},[25,377,379],{"className":27,"code":378,"language":29,"meta":30,"style":30},"npm install @nuxt\u002Fdevtools\n",[32,380,381],{"__ignoreMap":30},[35,382,383,385,387],{"class":37,"line":38},[35,384,42],{"class":41},[35,386,46],{"class":45},[35,388,389],{"class":45}," @nuxt\u002Fdevtools\n",[21,391,52],{"id":52},[17,393,55,394,59],{},[32,395,58],{},[25,397,399],{"className":62,"code":398,"language":64,"meta":30,"style":30},"export default defineNuxtConfig({\n  modules: ['@nuxt\u002Fdevtools']\n})\n",[32,400,401,413,429],{"__ignoreMap":30},[35,402,403,405,407,409,411],{"class":37,"line":38},[35,404,72],{"class":71},[35,406,75],{"class":71},[35,408,79],{"class":78},[35,410,83],{"class":82},[35,412,87],{"class":86},[35,414,415,417,419,421,423,425,427],{"class":37,"line":90},[35,416,94],{"class":93},[35,418,59],{"class":86},[35,420,99],{"class":82},[35,422,102],{"class":86},[35,424,365],{"class":45},[35,426,102],{"class":86},[35,428,109],{"class":82},[35,430,431,433],{"class":37,"line":112},[35,432,115],{"class":86},[35,434,118],{"class":82},[21,436,121],{"id":121},[123,438,439,445],{},[126,440,441],{},[129,442,134],{"href":443,"rel":444},"https:\u002F\u002Fdevtools.nuxt.com",[133],[126,446,447],{},[129,448,140],{"href":449,"rel":450},"https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fdevtools",[133],[142,452,144],{},{"title":30,"searchDepth":90,"depth":90,"links":454},[455,456,457],{"id":23,"depth":90,"text":23},{"id":52,"depth":90,"text":52},{"id":121,"depth":90,"text":121},[459,462,464,467,470,473,476,479,482,485],{"id":38,"username":460,"contributions":461},"user84341",23,{"id":90,"username":463,"contributions":174},"user10137",{"id":112,"username":465,"contributions":466},"user19110",67,{"id":162,"username":468,"contributions":469},"user69842",54,{"id":166,"username":471,"contributions":472},"user65163",29,{"id":170,"username":474,"contributions":475},"user87690",77,{"id":174,"username":477,"contributions":478},"user48871",99,{"id":178,"username":480,"contributions":481},"user11541",97,{"id":181,"username":483,"contributions":484},"user31909",90,{"id":185,"username":486,"contributions":332},"user72693",[488],{"name":489,"github":490,"bluesky":491},"Anthony Fu","antfu","antfu.me",{},"devtools","\u002Fplugins\u002Fdevtools","nuxt\u002Fdevtools#main\u002Fpackages\u002Fdevtools",{"title":365,"description":373},{"downloads":498,"stars":499,"watchers":500,"forks":501,"defaultBranch":210},338641,49933,433,225,"plugins\u002Fdevtools","TT6qV1tkhfILzk2j1f23tBPQu61DhF4FgXZ3Ap8Ntt0",{"id":505,"title":506,"_id":7,"_partial":8,"_path":7,"body":507,"categories":7,"category":150,"contributors":606,"description":514,"extension":188,"github":590,"icon":189,"learn_more":596,"maintainers":613,"meta":615,"name":616,"navigation":201,"npm":506,"path":617,"repo":618,"seo":619,"sponsor":8,"stats":620,"stem":625,"type":212,"website":584,"__hash__":626},"plugins\u002Fplugins\u002Feslint.md","@nuxt\u002Feslint",{"type":10,"value":508,"toc":601},[509,512,515,517,531,533,537,576,578,599],[13,510,506],{"id":511},"nuxteslint",[17,513,514],{},"项目感知、易于使用、可扩展且面向未来的 ESLint 集成。",[21,516,23],{"id":23},[25,518,520],{"className":27,"code":519,"language":29,"meta":30,"style":30},"npm install @nuxt\u002Feslint\n",[32,521,522],{"__ignoreMap":30},[35,523,524,526,528],{"class":37,"line":38},[35,525,42],{"class":41},[35,527,46],{"class":45},[35,529,530],{"class":45}," @nuxt\u002Feslint\n",[21,532,52],{"id":52},[17,534,55,535,59],{},[32,536,58],{},[25,538,540],{"className":62,"code":539,"language":64,"meta":30,"style":30},"export default defineNuxtConfig({\n  modules: ['@nuxt\u002Feslint']\n})\n",[32,541,542,554,570],{"__ignoreMap":30},[35,543,544,546,548,550,552],{"class":37,"line":38},[35,545,72],{"class":71},[35,547,75],{"class":71},[35,549,79],{"class":78},[35,551,83],{"class":82},[35,553,87],{"class":86},[35,555,556,558,560,562,564,566,568],{"class":37,"line":90},[35,557,94],{"class":93},[35,559,59],{"class":86},[35,561,99],{"class":82},[35,563,102],{"class":86},[35,565,506],{"class":45},[35,567,102],{"class":86},[35,569,109],{"class":82},[35,571,572,574],{"class":37,"line":112},[35,573,115],{"class":86},[35,575,118],{"class":82},[21,577,121],{"id":121},[123,579,580,586,592],{},[126,581,582],{},[129,583,134],{"href":584,"rel":585},"https:\u002F\u002Feslint.nuxt.com",[133],[126,587,588],{},[129,589,140],{"href":590,"rel":591},"https:\u002F\u002Fgithub.com\u002Fnuxt\u002Feslint",[133],[126,593,594],{},[129,595,598],{"href":596,"rel":597},"https:\u002F\u002Feslint.nuxt.com\u002Fpackages\u002Fmodule",[133],"了解更多",[142,600,144],{},{"title":30,"searchDepth":90,"depth":90,"links":602},[603,604,605],{"id":23,"depth":90,"text":23},{"id":52,"depth":90,"text":52},{"id":121,"depth":90,"text":121},[607,610],{"id":38,"username":608,"contributions":609},"user30113",84,{"id":90,"username":611,"contributions":612},"user63757",82,[614],{"name":489,"github":490,"bluesky":491},{},"eslint","\u002Fplugins\u002Feslint","nuxt\u002Feslint",{"title":506,"description":514},{"downloads":621,"stars":622,"watchers":623,"forks":624,"defaultBranch":210},4219129,40472,1319,493,"plugins\u002Feslint","y2i5lamEk99gHsmaCVBOf7SwD-h3Q5biJ5CqBsfaDlQ",{"id":628,"title":629,"_id":7,"_partial":8,"_path":7,"body":630,"categories":7,"category":722,"contributors":723,"description":637,"extension":188,"github":713,"icon":189,"learn_more":7,"maintainers":750,"meta":752,"name":753,"navigation":201,"npm":629,"path":754,"repo":755,"seo":756,"sponsor":8,"stats":757,"stem":762,"type":212,"website":707,"__hash__":763},"plugins\u002Fplugins\u002Ffonts.md","@nuxt\u002Ffonts",{"type":10,"value":631,"toc":717},[632,635,638,640,654,656,660,699,701,715],[13,633,629],{"id":634},"nuxtfonts",[17,636,637],{},"添加自定义 Web 字体，注重性能。",[21,639,23],{"id":23},[25,641,643],{"className":27,"code":642,"language":29,"meta":30,"style":30},"npm install @nuxt\u002Ffonts\n",[32,644,645],{"__ignoreMap":30},[35,646,647,649,651],{"class":37,"line":38},[35,648,42],{"class":41},[35,650,46],{"class":45},[35,652,653],{"class":45}," @nuxt\u002Ffonts\n",[21,655,52],{"id":52},[17,657,55,658,59],{},[32,659,58],{},[25,661,663],{"className":62,"code":662,"language":64,"meta":30,"style":30},"export default defineNuxtConfig({\n  modules: ['@nuxt\u002Ffonts']\n})\n",[32,664,665,677,693],{"__ignoreMap":30},[35,666,667,669,671,673,675],{"class":37,"line":38},[35,668,72],{"class":71},[35,670,75],{"class":71},[35,672,79],{"class":78},[35,674,83],{"class":82},[35,676,87],{"class":86},[35,678,679,681,683,685,687,689,691],{"class":37,"line":90},[35,680,94],{"class":93},[35,682,59],{"class":86},[35,684,99],{"class":82},[35,686,102],{"class":86},[35,688,629],{"class":45},[35,690,102],{"class":86},[35,692,109],{"class":82},[35,694,695,697],{"class":37,"line":112},[35,696,115],{"class":86},[35,698,118],{"class":82},[21,700,121],{"id":121},[123,702,703,709],{},[126,704,705],{},[129,706,134],{"href":707,"rel":708},"https:\u002F\u002Ffonts.nuxt.com",[133],[126,710,711],{},[129,712,140],{"href":713,"rel":714},"https:\u002F\u002Fgithub.com\u002Fnuxt\u002Ffonts",[133],[142,716,144],{},{"title":30,"searchDepth":90,"depth":90,"links":718},[719,720,721],{"id":23,"depth":90,"text":23},{"id":52,"depth":90,"text":52},{"id":121,"depth":90,"text":121},"Fonts",[724,727,730,733,735,738,741,744,746,748],{"id":38,"username":725,"contributions":726},"user42306",56,{"id":90,"username":728,"contributions":729},"user71199",33,{"id":112,"username":731,"contributions":732},"user16707",22,{"id":162,"username":734,"contributions":176},"user13463",{"id":166,"username":736,"contributions":737},"user63863",80,{"id":170,"username":739,"contributions":740},"user72286",35,{"id":174,"username":742,"contributions":743},"user84726",48,{"id":178,"username":745,"contributions":187},"user22103",{"id":181,"username":747,"contributions":164},"user45708",{"id":185,"username":749,"contributions":475},"user14848",[751],{"name":196,"github":197,"bluesky":198},{},"fonts","\u002Fplugins\u002Ffonts","nuxt\u002Ffonts",{"title":629,"description":637},{"downloads":758,"stars":759,"watchers":760,"forks":761,"defaultBranch":210},701472,23636,1481,2636,"plugins\u002Ffonts","T0fSWfcZn4S2Byr1npK0ulV8J1a2e4adeTZfj-sX5fc",{"id":765,"title":766,"_id":7,"_partial":8,"_path":7,"body":767,"categories":7,"category":150,"contributors":858,"description":774,"extension":188,"github":844,"icon":189,"learn_more":7,"maintainers":885,"meta":890,"name":891,"navigation":201,"npm":766,"path":892,"repo":893,"seo":894,"sponsor":8,"stats":895,"stem":900,"type":212,"website":844,"__hash__":901},"plugins\u002Fplugins\u002Fhints.md","@nuxt\u002Fhints",{"type":10,"value":768,"toc":853},[769,772,775,777,791,793,797,836,838,851],[13,770,766],{"id":771},"nuxthints",[17,773,774],{},"Nuxt 插件，显示应用程序各方面的提示，如性能、安全等！",[21,776,23],{"id":23},[25,778,780],{"className":27,"code":779,"language":29,"meta":30,"style":30},"npm install @nuxt\u002Fhints\n",[32,781,782],{"__ignoreMap":30},[35,783,784,786,788],{"class":37,"line":38},[35,785,42],{"class":41},[35,787,46],{"class":45},[35,789,790],{"class":45}," @nuxt\u002Fhints\n",[21,792,52],{"id":52},[17,794,55,795,59],{},[32,796,58],{},[25,798,800],{"className":62,"code":799,"language":64,"meta":30,"style":30},"export default defineNuxtConfig({\n  modules: ['@nuxt\u002Fhints']\n})\n",[32,801,802,814,830],{"__ignoreMap":30},[35,803,804,806,808,810,812],{"class":37,"line":38},[35,805,72],{"class":71},[35,807,75],{"class":71},[35,809,79],{"class":78},[35,811,83],{"class":82},[35,813,87],{"class":86},[35,815,816,818,820,822,824,826,828],{"class":37,"line":90},[35,817,94],{"class":93},[35,819,59],{"class":86},[35,821,99],{"class":82},[35,823,102],{"class":86},[35,825,766],{"class":45},[35,827,102],{"class":86},[35,829,109],{"class":82},[35,831,832,834],{"class":37,"line":112},[35,833,115],{"class":86},[35,835,118],{"class":82},[21,837,121],{"id":121},[123,839,840,846],{},[126,841,842],{},[129,843,134],{"href":844,"rel":845},"https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fhints",[133],[126,847,848],{},[129,849,140],{"href":844,"rel":850},[133],[142,852,144],{},{"title":30,"searchDepth":90,"depth":90,"links":854},[855,856,857],{"id":23,"depth":90,"text":23},{"id":52,"depth":90,"text":52},{"id":121,"depth":90,"text":121},[859,862,865,867,869,871,874,877,879,882],{"id":38,"username":860,"contributions":861},"user6533",91,{"id":90,"username":863,"contributions":864},"user71544",18,{"id":112,"username":866,"contributions":337},"user91675",{"id":162,"username":868,"contributions":166},"user25368",{"id":166,"username":870,"contributions":187},"user16215",{"id":170,"username":872,"contributions":873},"user81050",38,{"id":174,"username":875,"contributions":876},"user19700",44,{"id":178,"username":878,"contributions":321},"user41134",{"id":181,"username":880,"contributions":881},"user20762",19,{"id":185,"username":883,"contributions":884},"user339",42,[886],{"name":887,"github":888,"bluesky":889},"Julien Huang","huang-julien","julienhuang-dev.bsky.social",{},"hints","\u002Fplugins\u002Fhints","nuxt\u002Fhints",{"title":766,"description":774},{"downloads":896,"stars":897,"watchers":898,"forks":899,"defaultBranch":210},2213397,14758,1404,545,"plugins\u002Fhints","M4nkyrPTPXtaPD1YbnzIHqsvw9KU-5hHKG6Hp--8MMc",{"id":903,"title":904,"_id":7,"_partial":8,"_path":7,"body":905,"categories":7,"category":996,"contributors":997,"description":912,"extension":188,"github":982,"icon":189,"learn_more":7,"maintainers":1026,"meta":1029,"name":1030,"navigation":201,"npm":904,"path":1031,"repo":1032,"seo":1033,"sponsor":8,"stats":1034,"stem":1039,"type":212,"website":982,"__hash__":1040},"plugins\u002Fplugins\u002Ficon.md","@nuxt\u002Ficon",{"type":10,"value":906,"toc":991},[907,910,913,915,929,931,935,974,976,989],[13,908,904],{"id":909},"nuxticon",[17,911,912],{},"Nuxt 的图标插件，包含来自 Iconify 的 200,000+ 个即用图标。",[21,914,23],{"id":23},[25,916,918],{"className":27,"code":917,"language":29,"meta":30,"style":30},"npm install @nuxt\u002Ficon\n",[32,919,920],{"__ignoreMap":30},[35,921,922,924,926],{"class":37,"line":38},[35,923,42],{"class":41},[35,925,46],{"class":45},[35,927,928],{"class":45}," @nuxt\u002Ficon\n",[21,930,52],{"id":52},[17,932,55,933,59],{},[32,934,58],{},[25,936,938],{"className":62,"code":937,"language":64,"meta":30,"style":30},"export default defineNuxtConfig({\n  modules: ['@nuxt\u002Ficon']\n})\n",[32,939,940,952,968],{"__ignoreMap":30},[35,941,942,944,946,948,950],{"class":37,"line":38},[35,943,72],{"class":71},[35,945,75],{"class":71},[35,947,79],{"class":78},[35,949,83],{"class":82},[35,951,87],{"class":86},[35,953,954,956,958,960,962,964,966],{"class":37,"line":90},[35,955,94],{"class":93},[35,957,59],{"class":86},[35,959,99],{"class":82},[35,961,102],{"class":86},[35,963,904],{"class":45},[35,965,102],{"class":86},[35,967,109],{"class":82},[35,969,970,972],{"class":37,"line":112},[35,971,115],{"class":86},[35,973,118],{"class":82},[21,975,121],{"id":121},[123,977,978,984],{},[126,979,980],{},[129,981,134],{"href":982,"rel":983},"https:\u002F\u002Fgithub.com\u002Fnuxt\u002Ficon",[133],[126,985,986],{},[129,987,140],{"href":982,"rel":988},[133],[142,990,144],{},{"title":30,"searchDepth":90,"depth":90,"links":992},[993,994,995],{"id":23,"depth":90,"text":23},{"id":52,"depth":90,"text":52},{"id":121,"depth":90,"text":121},"UI",[998,1001,1004,1007,1010,1012,1015,1018,1020,1023],{"id":38,"username":999,"contributions":1000},"user37024",11,{"id":90,"username":1002,"contributions":1003},"user87306",70,{"id":112,"username":1005,"contributions":1006},"user73353",45,{"id":162,"username":1008,"contributions":1009},"user58644",20,{"id":166,"username":1011,"contributions":38},"user69260",{"id":170,"username":1013,"contributions":1014},"user30247",30,{"id":174,"username":1016,"contributions":1017},"user18477",41,{"id":178,"username":1019,"contributions":160},"user52769",{"id":181,"username":1021,"contributions":1022},"user43970",75,{"id":185,"username":1024,"contributions":1025},"user98140",12,[1027,1028],{"name":348,"github":349,"bluesky":350},{"name":489,"github":490,"bluesky":491},{},"icon","\u002Fplugins\u002Ficon","nuxt\u002Ficon",{"title":904,"description":912},{"downloads":1035,"stars":1036,"watchers":1037,"forks":1038,"defaultBranch":210},3202080,45665,4249,188,"plugins\u002Ficon","qOiuB-isRs131Q2t8HEr0bLG3_Lq-TrBdqcsYYbaouc",{"id":1042,"title":1043,"_id":7,"_partial":8,"_path":7,"body":1044,"categories":7,"category":1136,"contributors":7,"description":1051,"extension":188,"github":1127,"icon":189,"learn_more":7,"maintainers":7,"meta":1137,"name":1138,"navigation":201,"npm":1043,"path":1139,"repo":1140,"seo":1141,"sponsor":8,"stats":7,"stem":1142,"type":1143,"website":1121,"__hash__":1144},"plugins\u002Fplugins\u002Fimage.md","@nuxt\u002Fimage",{"type":10,"value":1045,"toc":1131},[1046,1049,1052,1054,1068,1070,1074,1113,1115,1129],[13,1047,1043],{"id":1048},"nuxtimage",[17,1050,1051],{},"添加图片，支持渐进式处理、懒加载、调整大小和提供商支持。",[21,1053,23],{"id":23},[25,1055,1057],{"className":27,"code":1056,"language":29,"meta":30,"style":30},"npm install @nuxt\u002Fimage\n",[32,1058,1059],{"__ignoreMap":30},[35,1060,1061,1063,1065],{"class":37,"line":38},[35,1062,42],{"class":41},[35,1064,46],{"class":45},[35,1066,1067],{"class":45}," @nuxt\u002Fimage\n",[21,1069,52],{"id":52},[17,1071,55,1072,59],{},[32,1073,58],{},[25,1075,1077],{"className":62,"code":1076,"language":64,"meta":30,"style":30},"export default defineNuxtConfig({\n  modules: ['@nuxt\u002Fimage']\n})\n",[32,1078,1079,1091,1107],{"__ignoreMap":30},[35,1080,1081,1083,1085,1087,1089],{"class":37,"line":38},[35,1082,72],{"class":71},[35,1084,75],{"class":71},[35,1086,79],{"class":78},[35,1088,83],{"class":82},[35,1090,87],{"class":86},[35,1092,1093,1095,1097,1099,1101,1103,1105],{"class":37,"line":90},[35,1094,94],{"class":93},[35,1096,59],{"class":86},[35,1098,99],{"class":82},[35,1100,102],{"class":86},[35,1102,1043],{"class":45},[35,1104,102],{"class":86},[35,1106,109],{"class":82},[35,1108,1109,1111],{"class":37,"line":112},[35,1110,115],{"class":86},[35,1112,118],{"class":82},[21,1114,121],{"id":121},[123,1116,1117,1123],{},[126,1118,1119],{},[129,1120,134],{"href":1121,"rel":1122},"https:\u002F\u002Fimage.nuxt.com",[133],[126,1124,1125],{},[129,1126,140],{"href":1127,"rel":1128},"https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fimage",[133],[142,1130,144],{},{"title":30,"searchDepth":90,"depth":90,"links":1132},[1133,1134,1135],{"id":23,"depth":90,"text":23},{"id":52,"depth":90,"text":52},{"id":121,"depth":90,"text":121},"Images",{},"image","\u002Fplugins\u002Fimage","nuxt\u002Fimage",{"title":1043,"description":1051},"plugins\u002Fimage","[object Object]","CXK46BX2BS38OrXRmxzhBG5zRJ5aqUOc_MQQMO_IddQ",{"id":1146,"title":1147,"_id":7,"_partial":8,"_path":7,"body":1148,"categories":7,"category":1245,"contributors":1246,"description":1154,"extension":188,"github":1230,"icon":1267,"learn_more":1236,"maintainers":1268,"meta":1272,"name":1147,"navigation":201,"npm":1147,"path":1273,"repo":1274,"seo":1275,"sponsor":8,"stats":1276,"stem":1281,"type":1282,"website":1224,"__hash__":1283},"plugins\u002Fplugins\u002Fnuxt-auth-sanctum.md","nuxt-auth-sanctum",{"type":10,"value":1149,"toc":1240},[1150,1152,1155,1157,1171,1173,1177,1216,1218,1238],[13,1151,1147],{"id":1147},[17,1153,1154],{},"Laravel Sanctum 身份验证的 Nuxt 插件",[21,1156,23],{"id":23},[25,1158,1160],{"className":27,"code":1159,"language":29,"meta":30,"style":30},"npm install nuxt-auth-sanctum\n",[32,1161,1162],{"__ignoreMap":30},[35,1163,1164,1166,1168],{"class":37,"line":38},[35,1165,42],{"class":41},[35,1167,46],{"class":45},[35,1169,1170],{"class":45}," nuxt-auth-sanctum\n",[21,1172,52],{"id":52},[17,1174,55,1175,59],{},[32,1176,58],{},[25,1178,1180],{"className":62,"code":1179,"language":64,"meta":30,"style":30},"export default defineNuxtConfig({\n  modules: ['nuxt-auth-sanctum']\n})\n",[32,1181,1182,1194,1210],{"__ignoreMap":30},[35,1183,1184,1186,1188,1190,1192],{"class":37,"line":38},[35,1185,72],{"class":71},[35,1187,75],{"class":71},[35,1189,79],{"class":78},[35,1191,83],{"class":82},[35,1193,87],{"class":86},[35,1195,1196,1198,1200,1202,1204,1206,1208],{"class":37,"line":90},[35,1197,94],{"class":93},[35,1199,59],{"class":86},[35,1201,99],{"class":82},[35,1203,102],{"class":86},[35,1205,1147],{"class":45},[35,1207,102],{"class":86},[35,1209,109],{"class":82},[35,1211,1212,1214],{"class":37,"line":112},[35,1213,115],{"class":86},[35,1215,118],{"class":82},[21,1217,121],{"id":121},[123,1219,1220,1226,1232],{},[126,1221,1222],{},[129,1223,134],{"href":1224,"rel":1225},"https:\u002F\u002Fsanctum.manchenkoff.me",[133],[126,1227,1228],{},[129,1229,140],{"href":1230,"rel":1231},"https:\u002F\u002Fgithub.com\u002Fmanchenkoff\u002Fnuxt-auth-sanctum",[133],[126,1233,1234],{},[129,1235,598],{"href":1236,"rel":1237},"https:\u002F\u002Flaravel.com\u002Fdocs\u002F12.x\u002Fsanctum",[133],[142,1239,144],{},{"title":30,"searchDepth":90,"depth":90,"links":1241},[1242,1243,1244],{"id":23,"depth":90,"text":23},{"id":52,"depth":90,"text":52},{"id":121,"depth":90,"text":121},"Security",[1247,1249,1251,1254,1257,1259,1262,1264],{"id":38,"username":1248,"contributions":337},"user3491",{"id":90,"username":1250,"contributions":478},"user52329",{"id":112,"username":1252,"contributions":1253},"user34359",81,{"id":162,"username":1255,"contributions":1256},"user86267",13,{"id":166,"username":1258,"contributions":166},"user71011",{"id":170,"username":1260,"contributions":1261},"user87107",86,{"id":174,"username":1263,"contributions":475},"user69652",{"id":178,"username":1265,"contributions":1266},"user80629",72,"laravel.svg",[1269],{"name":1270,"github":1271},"Artem Manchenkov","manchenkoff",{},"\u002Fplugins\u002Fnuxt-auth-sanctum","manchenkoff\u002Fnuxt-auth-sanctum",{"title":1147,"description":1154},{"downloads":1277,"stars":1278,"watchers":1279,"forks":1280,"defaultBranch":210},170439,571,491,288,"plugins\u002Fnuxt-auth-sanctum","3rd-party","a8McvtgCknAVn7piEt5AFjXKvoeG52aRnk-CAc_OdQo",{"id":1285,"title":1286,"_id":7,"_partial":8,"_path":7,"body":1287,"categories":7,"category":1378,"contributors":1379,"description":1404,"extension":188,"github":1369,"icon":1405,"learn_more":7,"maintainers":1406,"meta":1411,"name":1286,"navigation":201,"npm":1286,"path":1412,"repo":1413,"seo":1414,"sponsor":8,"stats":1415,"stem":1420,"type":1282,"website":1363,"__hash__":1421},"plugins\u002Fplugins\u002Fnuxt-mongoose.md","nuxt-mongoose",{"type":10,"value":1288,"toc":1373},[1289,1291,1294,1296,1310,1312,1316,1355,1357,1371],[13,1290,1286],{"id":1286},[17,1292,1293],{},"简化在项目中使用 Mongoose 的 Nuxt 插件。",[21,1295,23],{"id":23},[25,1297,1299],{"className":27,"code":1298,"language":29,"meta":30,"style":30},"npm install nuxt-mongoose\n",[32,1300,1301],{"__ignoreMap":30},[35,1302,1303,1305,1307],{"class":37,"line":38},[35,1304,42],{"class":41},[35,1306,46],{"class":45},[35,1308,1309],{"class":45}," nuxt-mongoose\n",[21,1311,52],{"id":52},[17,1313,55,1314,59],{},[32,1315,58],{},[25,1317,1319],{"className":62,"code":1318,"language":64,"meta":30,"style":30},"export default defineNuxtConfig({\n  modules: ['nuxt-mongoose']\n})\n",[32,1320,1321,1333,1349],{"__ignoreMap":30},[35,1322,1323,1325,1327,1329,1331],{"class":37,"line":38},[35,1324,72],{"class":71},[35,1326,75],{"class":71},[35,1328,79],{"class":78},[35,1330,83],{"class":82},[35,1332,87],{"class":86},[35,1334,1335,1337,1339,1341,1343,1345,1347],{"class":37,"line":90},[35,1336,94],{"class":93},[35,1338,59],{"class":86},[35,1340,99],{"class":82},[35,1342,102],{"class":86},[35,1344,1286],{"class":45},[35,1346,102],{"class":86},[35,1348,109],{"class":82},[35,1350,1351,1353],{"class":37,"line":112},[35,1352,115],{"class":86},[35,1354,118],{"class":82},[21,1356,121],{"id":121},[123,1358,1359,1365],{},[126,1360,1361],{},[129,1362,134],{"href":1363,"rel":1364},"https:\u002F\u002Fnuxt-mongoose.nuxt.space",[133],[126,1366,1367],{},[129,1368,140],{"href":1369,"rel":1370},"https:\u002F\u002Fgithub.com\u002Farashsheyda\u002Fnuxt-mongoose",[133],[142,1372,144],{},{"title":30,"searchDepth":90,"depth":90,"links":1374},[1375,1376,1377],{"id":23,"depth":90,"text":23},{"id":52,"depth":90,"text":52},{"id":121,"depth":90,"text":121},"Database",[1380,1383,1385,1387,1389,1392,1394,1397,1400,1402],{"id":38,"username":1381,"contributions":1382},"user44120",87,{"id":90,"username":1384,"contributions":881},"user69808",{"id":112,"username":1386,"contributions":160},"user43499",{"id":162,"username":1388,"contributions":1009},"user57745",{"id":166,"username":1390,"contributions":1391},"user19045",71,{"id":170,"username":1393,"contributions":1261},"user92868",{"id":174,"username":1395,"contributions":1396},"user76193",26,{"id":178,"username":1398,"contributions":1399},"user83794",94,{"id":181,"username":1401,"contributions":1399},"user91572",{"id":185,"username":1403,"contributions":1261},"user66728","简化在项目中使用 Mongoose 的 Nuxt 插件","nuxt-mongoose.svg",[1407],{"name":1408,"github":1409,"bluesky":1410},"Arash Ari Sheyda","arashsheyda","arashsheyda.me",{},"\u002Fplugins\u002Fnuxt-mongoose","arashsheyda\u002Fnuxt-mongoose",{"title":1286,"description":1404},{"downloads":1416,"stars":1417,"watchers":1418,"forks":1419,"defaultBranch":210},313268,1561,463,234,"plugins\u002Fnuxt-mongoose","rVDGisvuxFx5xMNmMn_AP8A-8i-bNJ-G_buXYZVbU5U",{"id":1423,"title":1424,"_id":7,"_partial":8,"_path":7,"body":1425,"categories":7,"category":1522,"contributors":1523,"description":1547,"extension":188,"github":1507,"icon":1548,"learn_more":1513,"maintainers":1549,"meta":1553,"name":1424,"navigation":201,"npm":1424,"path":1554,"repo":1555,"seo":1556,"sponsor":8,"stats":1557,"stem":1562,"type":1282,"website":1501,"__hash__":1563},"plugins\u002Fplugins\u002Fnuxt-posthog.md","nuxt-posthog",{"type":10,"value":1426,"toc":1517},[1427,1429,1432,1434,1448,1450,1454,1493,1495,1515],[13,1428,1424],{"id":1424},[17,1430,1431],{},"以最少的配置将 PostHog 集成到您的应用程序中。",[21,1433,23],{"id":23},[25,1435,1437],{"className":27,"code":1436,"language":29,"meta":30,"style":30},"npm install nuxt-posthog\n",[32,1438,1439],{"__ignoreMap":30},[35,1440,1441,1443,1445],{"class":37,"line":38},[35,1442,42],{"class":41},[35,1444,46],{"class":45},[35,1446,1447],{"class":45}," nuxt-posthog\n",[21,1449,52],{"id":52},[17,1451,55,1452,59],{},[32,1453,58],{},[25,1455,1457],{"className":62,"code":1456,"language":64,"meta":30,"style":30},"export default defineNuxtConfig({\n  modules: ['nuxt-posthog']\n})\n",[32,1458,1459,1471,1487],{"__ignoreMap":30},[35,1460,1461,1463,1465,1467,1469],{"class":37,"line":38},[35,1462,72],{"class":71},[35,1464,75],{"class":71},[35,1466,79],{"class":78},[35,1468,83],{"class":82},[35,1470,87],{"class":86},[35,1472,1473,1475,1477,1479,1481,1483,1485],{"class":37,"line":90},[35,1474,94],{"class":93},[35,1476,59],{"class":86},[35,1478,99],{"class":82},[35,1480,102],{"class":86},[35,1482,1424],{"class":45},[35,1484,102],{"class":86},[35,1486,109],{"class":82},[35,1488,1489,1491],{"class":37,"line":112},[35,1490,115],{"class":86},[35,1492,118],{"class":82},[21,1494,121],{"id":121},[123,1496,1497,1503,1509],{},[126,1498,1499],{},[129,1500,134],{"href":1501,"rel":1502},"https:\u002F\u002Fnuxt-posthog.cmitjans.dev",[133],[126,1504,1505],{},[129,1506,140],{"href":1507,"rel":1508},"https:\u002F\u002Fgithub.com\u002Fmitjans\u002Fnuxt-posthog",[133],[126,1510,1511],{},[129,1512,598],{"href":1513,"rel":1514},"https:\u002F\u002Fposthog.com",[133],[142,1516,144],{},{"title":30,"searchDepth":90,"depth":90,"links":1518},[1519,1520,1521],{"id":23,"depth":90,"text":23},{"id":52,"depth":90,"text":52},{"id":121,"depth":90,"text":121},"Analytics",[1524,1526,1529,1531,1534,1536,1538,1541,1543,1545],{"id":38,"username":1525,"contributions":1261},"user99328",{"id":90,"username":1527,"contributions":1528},"user36640",27,{"id":112,"username":1530,"contributions":743},"user8127",{"id":162,"username":1532,"contributions":1533},"user15154",63,{"id":166,"username":1535,"contributions":166},"user34098",{"id":170,"username":1537,"contributions":160},"user56129",{"id":174,"username":1539,"contributions":1540},"user16681",69,{"id":178,"username":1542,"contributions":183},"user23250",{"id":181,"username":1544,"contributions":469},"user69685",{"id":185,"username":1546,"contributions":164},"user26894","以最少的配置将 PostHog 集成到您的应用程序中","posthog.svg",[1550],{"name":1551,"github":1552},"Carles Mitjans","mitjans",{},"\u002Fplugins\u002Fnuxt-posthog","mitjans\u002Fnuxt-posthog",{"title":1424,"description":1547},{"downloads":1558,"stars":1559,"watchers":1560,"forks":1561,"defaultBranch":210},372773,749,249,248,"plugins\u002Fnuxt-posthog","2n73yQ9EGdeStmU9-KnMhhd-BroMNfiF29MCtTXzhg4",{"id":1565,"title":1566,"_id":7,"_partial":8,"_path":7,"body":1567,"categories":7,"category":1659,"contributors":1660,"description":1574,"extension":188,"github":1650,"icon":189,"learn_more":7,"maintainers":1684,"meta":1688,"name":1689,"navigation":201,"npm":1566,"path":1690,"repo":1691,"seo":1692,"sponsor":8,"stats":1693,"stem":1698,"type":212,"website":1644,"__hash__":1699},"plugins\u002Fplugins\u002Fscripts.md","@nuxt\u002Fscripts",{"type":10,"value":1568,"toc":1654},[1569,1572,1575,1577,1591,1593,1597,1636,1638,1652],[13,1570,1566],{"id":1571},"nuxtscripts",[17,1573,1574],{},"在不牺牲性能的情况下添加第三方脚本",[21,1576,23],{"id":23},[25,1578,1580],{"className":27,"code":1579,"language":29,"meta":30,"style":30},"npm install @nuxt\u002Fscripts\n",[32,1581,1582],{"__ignoreMap":30},[35,1583,1584,1586,1588],{"class":37,"line":38},[35,1585,42],{"class":41},[35,1587,46],{"class":45},[35,1589,1590],{"class":45}," @nuxt\u002Fscripts\n",[21,1592,52],{"id":52},[17,1594,55,1595,59],{},[32,1596,58],{},[25,1598,1600],{"className":62,"code":1599,"language":64,"meta":30,"style":30},"export default defineNuxtConfig({\n  modules: ['@nuxt\u002Fscripts']\n})\n",[32,1601,1602,1614,1630],{"__ignoreMap":30},[35,1603,1604,1606,1608,1610,1612],{"class":37,"line":38},[35,1605,72],{"class":71},[35,1607,75],{"class":71},[35,1609,79],{"class":78},[35,1611,83],{"class":82},[35,1613,87],{"class":86},[35,1615,1616,1618,1620,1622,1624,1626,1628],{"class":37,"line":90},[35,1617,94],{"class":93},[35,1619,59],{"class":86},[35,1621,99],{"class":82},[35,1623,102],{"class":86},[35,1625,1566],{"class":45},[35,1627,102],{"class":86},[35,1629,109],{"class":82},[35,1631,1632,1634],{"class":37,"line":112},[35,1633,115],{"class":86},[35,1635,118],{"class":82},[21,1637,121],{"id":121},[123,1639,1640,1646],{},[126,1641,1642],{},[129,1643,134],{"href":1644,"rel":1645},"https:\u002F\u002Fscripts.nuxt.com",[133],[126,1647,1648],{},[129,1649,140],{"href":1650,"rel":1651},"https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fscripts",[133],[142,1653,144],{},{"title":30,"searchDepth":90,"depth":90,"links":1655},[1656,1657,1658],{"id":23,"depth":90,"text":23},{"id":52,"depth":90,"text":52},{"id":121,"depth":90,"text":121},"Performance",[1661,1663,1665,1668,1670,1672,1675,1677,1680,1682],{"id":38,"username":1662,"contributions":185},"user50497",{"id":90,"username":1664,"contributions":170},"user7468",{"id":112,"username":1666,"contributions":1667},"user4831",85,{"id":162,"username":1669,"contributions":861},"user75013",{"id":166,"username":1671,"contributions":743},"user98072",{"id":170,"username":1673,"contributions":1674},"user11559",28,{"id":174,"username":1676,"contributions":1006},"user13714",{"id":178,"username":1678,"contributions":1679},"user94609",51,{"id":181,"username":1681,"contributions":154},"user41644",{"id":185,"username":1683,"contributions":732},"user76238",[1685],{"name":1686,"github":1687},"Harlan Wilton","harlan-zw",{},"scripts","\u002Fplugins\u002Fscripts","nuxt\u002Fscripts",{"title":1566,"description":1574},{"downloads":1694,"stars":1695,"watchers":1696,"forks":1697,"defaultBranch":210},654472,110,4891,718,"plugins\u002Fscripts","snquBudp2I-f1Ubv48w-17ZeDz9inLAAt_tSOMR4LCo",{"id":1701,"title":1702,"_id":7,"_partial":8,"_path":7,"body":1703,"categories":7,"category":150,"contributors":1795,"description":1710,"extension":188,"github":1786,"icon":189,"learn_more":7,"maintainers":1820,"meta":1823,"name":1824,"navigation":201,"npm":1702,"path":1825,"repo":1826,"seo":1827,"sponsor":8,"stats":1828,"stem":1833,"type":212,"website":1780,"__hash__":1834},"plugins\u002Fplugins\u002Ftest-utils.md","@nuxt\u002Ftest-utils",{"type":10,"value":1704,"toc":1790},[1705,1708,1711,1713,1727,1729,1733,1772,1774,1788],[13,1706,1702],{"id":1707},"nuxttest-utils",[17,1709,1710],{},"Nuxt 的测试工具",[21,1712,23],{"id":23},[25,1714,1716],{"className":27,"code":1715,"language":29,"meta":30,"style":30},"npm install @nuxt\u002Ftest-utils\n",[32,1717,1718],{"__ignoreMap":30},[35,1719,1720,1722,1724],{"class":37,"line":38},[35,1721,42],{"class":41},[35,1723,46],{"class":45},[35,1725,1726],{"class":45}," @nuxt\u002Ftest-utils\n",[21,1728,52],{"id":52},[17,1730,55,1731,59],{},[32,1732,58],{},[25,1734,1736],{"className":62,"code":1735,"language":64,"meta":30,"style":30},"export default defineNuxtConfig({\n  modules: ['@nuxt\u002Ftest-utils']\n})\n",[32,1737,1738,1750,1766],{"__ignoreMap":30},[35,1739,1740,1742,1744,1746,1748],{"class":37,"line":38},[35,1741,72],{"class":71},[35,1743,75],{"class":71},[35,1745,79],{"class":78},[35,1747,83],{"class":82},[35,1749,87],{"class":86},[35,1751,1752,1754,1756,1758,1760,1762,1764],{"class":37,"line":90},[35,1753,94],{"class":93},[35,1755,59],{"class":86},[35,1757,99],{"class":82},[35,1759,102],{"class":86},[35,1761,1702],{"class":45},[35,1763,102],{"class":86},[35,1765,109],{"class":82},[35,1767,1768,1770],{"class":37,"line":112},[35,1769,115],{"class":86},[35,1771,118],{"class":82},[21,1773,121],{"id":121},[123,1775,1776,1782],{},[126,1777,1778],{},[129,1779,134],{"href":1780,"rel":1781},"https:\u002F\u002Fnuxt.com\u002Fdocs\u002Fgetting-started\u002Ftesting",[133],[126,1783,1784],{},[129,1785,140],{"href":1786,"rel":1787},"https:\u002F\u002Fgithub.com\u002Fnuxt\u002Ftest-utils",[133],[142,1789,144],{},{"title":30,"searchDepth":90,"depth":90,"links":1791},[1792,1793,1794],{"id":23,"depth":90,"text":23},{"id":52,"depth":90,"text":52},{"id":121,"depth":90,"text":121},[1796,1799,1801,1804,1806,1808,1810,1812,1815,1818],{"id":38,"username":1797,"contributions":1798},"user42799",61,{"id":90,"username":1800,"contributions":1006},"user77607",{"id":112,"username":1802,"contributions":1803},"user70090",47,{"id":162,"username":1805,"contributions":181},"user95279",{"id":166,"username":1807,"contributions":1256},"user89952",{"id":170,"username":1809,"contributions":172},"user41689",{"id":174,"username":1811,"contributions":316},"user2190",{"id":178,"username":1813,"contributions":1814},"user4111",39,{"id":181,"username":1816,"contributions":1817},"user93327",46,{"id":185,"username":1819,"contributions":181},"user52428",[1821,1822],{"name":196,"github":197,"bluesky":198},{"name":489,"github":490,"bluesky":491},{},"test-utils","\u002Fplugins\u002Ftest-utils","nuxt\u002Ftest-utils#main",{"title":1702,"description":1710},{"downloads":1829,"stars":1830,"watchers":1831,"forks":1832,"defaultBranch":210},509128,9236,3824,2540,"plugins\u002Ftest-utils","uXkQHRcL1KX0bO4rKHC8DNyQVRtjTqdsoU3mNZK2YD4",{"id":1836,"title":1837,"_id":7,"_partial":8,"_path":7,"body":1838,"categories":7,"category":996,"contributors":1930,"description":1845,"extension":188,"github":1921,"icon":189,"learn_more":7,"maintainers":1950,"meta":1956,"name":1957,"navigation":201,"npm":1837,"path":1958,"repo":1959,"seo":1960,"sponsor":8,"stats":1961,"stem":1966,"type":212,"website":1915,"__hash__":1967},"plugins\u002Fplugins\u002Fui.md","@nuxt\u002Fui",{"type":10,"value":1839,"toc":1925},[1840,1843,1846,1848,1862,1864,1868,1907,1909,1923],[13,1841,1837],{"id":1842},"nuxtui",[17,1844,1845],{},"基于 Reka UI 和 Tailwind CSS 的直观 UI 库",[21,1847,23],{"id":23},[25,1849,1851],{"className":27,"code":1850,"language":29,"meta":30,"style":30},"npm install @nuxt\u002Fui\n",[32,1852,1853],{"__ignoreMap":30},[35,1854,1855,1857,1859],{"class":37,"line":38},[35,1856,42],{"class":41},[35,1858,46],{"class":45},[35,1860,1861],{"class":45}," @nuxt\u002Fui\n",[21,1863,52],{"id":52},[17,1865,55,1866,59],{},[32,1867,58],{},[25,1869,1871],{"className":62,"code":1870,"language":64,"meta":30,"style":30},"export default defineNuxtConfig({\n  modules: ['@nuxt\u002Fui']\n})\n",[32,1872,1873,1885,1901],{"__ignoreMap":30},[35,1874,1875,1877,1879,1881,1883],{"class":37,"line":38},[35,1876,72],{"class":71},[35,1878,75],{"class":71},[35,1880,79],{"class":78},[35,1882,83],{"class":82},[35,1884,87],{"class":86},[35,1886,1887,1889,1891,1893,1895,1897,1899],{"class":37,"line":90},[35,1888,94],{"class":93},[35,1890,59],{"class":86},[35,1892,99],{"class":82},[35,1894,102],{"class":86},[35,1896,1837],{"class":45},[35,1898,102],{"class":86},[35,1900,109],{"class":82},[35,1902,1903,1905],{"class":37,"line":112},[35,1904,115],{"class":86},[35,1906,118],{"class":82},[21,1908,121],{"id":121},[123,1910,1911,1917],{},[126,1912,1913],{},[129,1914,134],{"href":1915,"rel":1916},"https:\u002F\u002Fui.nuxt.com\u002Fdocs\u002Fgetting-started\u002Finstallation\u002Fnuxt",[133],[126,1918,1919],{},[129,1920,140],{"href":1921,"rel":1922},"https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fui",[133],[142,1924,144],{},{"title":30,"searchDepth":90,"depth":90,"links":1926},[1927,1928,1929],{"id":23,"depth":90,"text":23},{"id":52,"depth":90,"text":52},{"id":121,"depth":90,"text":121},[1931,1933,1935,1938,1941,1943,1945,1948],{"id":38,"username":1932,"contributions":1017},"user99346",{"id":90,"username":1934,"contributions":316},"user54967",{"id":112,"username":1936,"contributions":1937},"user11433",31,{"id":162,"username":1939,"contributions":1940},"user9986",100,{"id":166,"username":1942,"contributions":1937},"user89841",{"id":170,"username":1944,"contributions":1022},"user3725",{"id":174,"username":1946,"contributions":1947},"user89501",68,{"id":178,"username":1949,"contributions":609},"user88437",[1951,1955],{"name":1952,"github":1953,"bluesky":1954},"Benjamin Canac","benjamincanac","benjamincanac.dev",{"name":348,"github":349,"bluesky":350},{},"ui","\u002Fplugins\u002Fui","nuxt\u002Fui#dev",{"title":1837,"description":1845},{"downloads":1962,"stars":1963,"watchers":1964,"forks":1965,"defaultBranch":210},4898787,4588,1125,2648,"plugins\u002Fui","-l-I_UU8K6HTEy7-xTpyP_Mc1SGIH0ELsk7kc8GHh28",[1969,2025,2159,2233,2273,2287,2325,2422,2542,2556,2583],{"title":1970,"path":1971,"stem":1972,"children":1973,"titleTemplate":7,"icon":2024},"入门指南","\u002Fdocs\u002Fguide","docs\u002F01.guide\u002F01.index",[1974,1976,1980,2008,2012,2016],{"title":1975,"path":1971,"stem":1972,"titleTemplate":7},"创建你的第一个仓库",{"title":1977,"path":1978,"stem":1979,"titleTemplate":7},"迁移工具","\u002Fdocs\u002Fguide\u002Fmigration-tools","docs\u002F01.guide\u002F02.migration-tools",{"title":1981,"path":1982,"stem":1983,"children":1984,"titleTemplate":7,"icon":2007},"仓库","\u002Fdocs\u002Fguide\u002Frepo","docs\u002F01.guide\u002F02.repo\u002F01.index",[1985,1987,1991,1995,1999,2003],{"title":1986,"path":1982,"stem":1983,"titleTemplate":7},"产品介绍",{"title":1988,"path":1989,"stem":1990,"titleTemplate":7},"密钥仓库","\u002Fdocs\u002Fguide\u002Frepo\u002Fsecret","docs\u002F01.guide\u002F02.repo\u002F02.secret",{"title":1992,"path":1993,"stem":1994,"titleTemplate":7},"元数据","\u002Fdocs\u002Fguide\u002Frepo\u002Fannotations","docs\u002F01.guide\u002F02.repo\u002F03.annotations",{"title":1996,"path":1997,"stem":1998,"titleTemplate":7},"ISSUE 模板","\u002Fdocs\u002Fguide\u002Frepo\u002Fissue-template","docs\u002F01.guide\u002F02.repo\u002F04.issue-template",{"title":2000,"path":2001,"stem":2002,"titleTemplate":7},"分类标签","\u002Fdocs\u002Fguide\u002Frepo\u002Flabel","docs\u002F01.guide\u002F02.repo\u002F05.label",{"title":2004,"path":2005,"stem":2006,"titleTemplate":7},"UI 定制","\u002Fdocs\u002Fguide\u002Frepo\u002Fsettings","docs\u002F01.guide\u002F02.repo\u002F06.settings","lucide:folder",{"title":2009,"path":2010,"stem":2011,"titleTemplate":7},"角色权限","\u002Fdocs\u002Fguide\u002Frole-permissions","docs\u002F01.guide\u002F03.role-permissions",{"title":2013,"path":2014,"stem":2015,"titleTemplate":7},"访问令牌","\u002Fdocs\u002Fguide\u002Faccess-token","docs\u002F01.guide\u002F04.access-token",{"title":2017,"path":2018,"stem":2019,"children":2020,"titleTemplate":7,"icon":2023},"任务集","\u002Fdocs\u002Fguide\u002Fmissions","docs\u002F01.guide\u002F07.missions\u002F01.index",[2021],{"title":2022,"path":2018,"stem":2019,"titleTemplate":7},"任务集介绍","lucide:target","lucide:book-open",{"title":2026,"titleTemplate":7,"icon":2027,"path":2028,"stem":2029,"children":2030,"page":8},"云原生构建","lucide:rocket","\u002Fdocs\u002Fbuild","docs\u002F03.build",[2031,2079,2099,2139],{"title":2032,"path":2033,"stem":2034,"children":2035,"titleTemplate":7,"icon":2078},"基础使用","\u002Fdocs\u002Fbuild\u002Fbasic-usage","docs\u002F03.build\u002F01.basic-usage\u002F01.index",[2036,2038,2042,2046,2050,2054,2058,2062,2066,2070,2074],{"title":2037,"path":2033,"stem":2034,"titleTemplate":7},"云原生构建介绍",{"title":2039,"path":2040,"stem":2041,"titleTemplate":7},"快速开始","\u002Fdocs\u002Fbuild\u002Fbasic-usage\u002Fquick-start","docs\u002F03.build\u002F01.basic-usage\u002F02.quick-start",{"title":2043,"path":2044,"stem":2045,"titleTemplate":7},"构建触发规则","\u002Fdocs\u002Fbuild\u002Fbasic-usage\u002Ftrigger-rule","docs\u002F03.build\u002F01.basic-usage\u002F03.trigger-rule",{"title":2047,"path":2048,"stem":2049,"titleTemplate":7},"配置文件","\u002Fdocs\u002Fbuild\u002Fbasic-usage\u002Fconfiguration","docs\u002F03.build\u002F01.basic-usage\u002F04.configuration",{"title":2051,"path":2052,"stem":2053,"titleTemplate":7},"流水线语法","\u002Fdocs\u002Fbuild\u002Fbasic-usage\u002Fgrammar","docs\u002F03.build\u002F01.basic-usage\u002F05.grammar",{"title":2055,"path":2056,"stem":2057,"titleTemplate":7},"构建环境","\u002Fdocs\u002Fbuild\u002Fbasic-usage\u002Fbuild-env","docs\u002F03.build\u002F01.basic-usage\u002F06.build-env",{"title":2059,"path":2060,"stem":2061,"titleTemplate":7},"构建集群","\u002Fdocs\u002Fbuild\u002Fbasic-usage\u002Fbuild-node","docs\u002F03.build\u002F01.basic-usage\u002F07.build-node",{"title":2063,"path":2064,"stem":2065,"titleTemplate":7},"环境变量","\u002Fdocs\u002Fbuild\u002Fbasic-usage\u002Fenv","docs\u002F03.build\u002F01.basic-usage\u002F08.env",{"title":2067,"path":2068,"stem":2069,"titleTemplate":7},"默认环境变量","\u002Fdocs\u002Fbuild\u002Fbasic-usage\u002Fbuild-in-env","docs\u002F03.build\u002F01.basic-usage\u002F09.build-in-env",{"title":2071,"path":2072,"stem":2073,"titleTemplate":7},"超时策略","\u002Fdocs\u002Fbuild\u002Fbasic-usage\u002Ftimeout","docs\u002F03.build\u002F01.basic-usage\u002F10.timeout",{"title":2075,"path":2076,"stem":2077,"titleTemplate":7},"权限说明","\u002Fdocs\u002Fbuild\u002Fbasic-usage\u002Fpermission","docs\u002F03.build\u002F01.basic-usage\u002F11.permission","lucide:book",{"title":2080,"path":2081,"stem":2082,"children":2083,"titleTemplate":7,"icon":2098},"插件","\u002Fdocs\u002Fbuild\u002Fplugins","docs\u002F03.build\u002F02.plugins\u002F01.index",[2084,2086,2090,2094],{"title":2085,"path":2081,"stem":2082,"titleTemplate":7},"内置任务",{"title":2087,"path":2088,"stem":2089,"titleTemplate":7},"插件市场","\u002Fdocs\u002Fbuild\u002Fplugins\u002Fplugins","docs\u002F03.build\u002F02.plugins\u002F02.plugins",{"title":2091,"path":2092,"stem":2093,"titleTemplate":7},"插件制作","\u002Fdocs\u002Fbuild\u002Fplugins\u002Fcreate-plugin","docs\u002F03.build\u002F02.plugins\u002F03.create-plugin",{"title":2095,"path":2096,"stem":2097,"titleTemplate":7},"贡献插件","\u002Fdocs\u002Fbuild\u002Fplugins\u002Fcontribute-plugin","docs\u002F03.build\u002F02.plugins\u002F04.contribute-plugin","lucide:puzzle",{"title":2100,"path":2101,"stem":2102,"children":2103,"titleTemplate":7,"icon":2138},"进阶使用","\u002Fdocs\u002Fbuild\u002Fadvanced-usage","docs\u002F03.build\u002F03.advanced-usage\u002F01.index",[2104,2106,2110,2114,2118,2122,2126,2130,2134],{"title":2105,"path":2101,"stem":2102,"titleTemplate":7},"简化配置文件",{"title":2107,"path":2108,"stem":2109,"titleTemplate":7},"文件引用","\u002Fdocs\u002Fbuild\u002Fadvanced-usage\u002Ffile-reference","docs\u002F03.build\u002F03.advanced-usage\u002F02.file-reference",{"title":2111,"path":2112,"stem":2113,"titleTemplate":7},"流水线缓存","\u002Fdocs\u002Fbuild\u002Fadvanced-usage\u002Fpipeline-cache","docs\u002F03.build\u002F03.advanced-usage\u002F03.pipeline-cache",{"title":2115,"path":2116,"stem":2117,"titleTemplate":7},"定时任务","\u002Fdocs\u002Fbuild\u002Fadvanced-usage\u002Fcrontab","docs\u002F03.build\u002F03.advanced-usage\u002F04.crontab",{"title":2119,"path":2120,"stem":2121,"titleTemplate":7},"跳过流水线","\u002Fdocs\u002Fbuild\u002Fadvanced-usage\u002Fskip-pipeline","docs\u002F03.build\u002F03.advanced-usage\u002F05.skip-pipeline",{"title":2123,"path":2124,"stem":2125,"titleTemplate":7},"登录调试","\u002Fdocs\u002Fbuild\u002Fadvanced-usage\u002Flogin-debug","docs\u002F03.build\u002F03.advanced-usage\u002F06.login-debug",{"title":2127,"path":2128,"stem":2129,"titleTemplate":7},"手动触发流水线","\u002Fdocs\u002Fbuild\u002Fadvanced-usage\u002Fweb-trigger","docs\u002F03.build\u002F03.advanced-usage\u002F07.web-trigger",{"title":2131,"path":2132,"stem":2133,"titleTemplate":7},"自定义部署流程","\u002Fdocs\u002Fbuild\u002Fadvanced-usage\u002Fdeploy","docs\u002F03.build\u002F03.advanced-usage\u002F08.deploy",{"title":2135,"path":2136,"stem":2137,"titleTemplate":7},"常见问题","\u002Fdocs\u002Fbuild\u002Fadvanced-usage\u002Ffaq","docs\u002F03.build\u002F03.advanced-usage\u002F09.faq","lucide:zap",{"title":2140,"path":2141,"stem":2142,"children":2143,"titleTemplate":7,"icon":2158},"示例","\u002Fdocs\u002Fbuild\u002Fshowcase","docs\u002F03.build\u002F04.showcase\u002Findex",[2144,2146,2150,2154],{"title":2145,"path":2141,"stem":2142,"titleTemplate":7},"构建Docker镜像并上传",{"title":2147,"path":2148,"stem":2149,"titleTemplate":7},"ISSUE通知到企业微信群","\u002Fdocs\u002Fbuild\u002Fshowcase\u002Fissue-notice-group","docs\u002F03.build\u002F04.showcase\u002Fissue-notice-group",{"title":2151,"path":2152,"stem":2153,"titleTemplate":7},"Monorepo按需构建","\u002Fdocs\u002Fbuild\u002Fshowcase\u002Fmonorepo","docs\u002F03.build\u002F04.showcase\u002Fmonorepo",{"title":2155,"path":2156,"stem":2157,"titleTemplate":7},"PR通知到企业微信群","\u002Fdocs\u002Fbuild\u002Fshowcase\u002Fpr-notice-group","docs\u002F03.build\u002F04.showcase\u002Fpr-notice-group","lucide:app-window-mac",{"title":2160,"titleTemplate":7,"icon":2161,"path":2162,"stem":2163,"children":2164,"page":8},"云原生开发","lucide:laptop","\u002Fdocs\u002Fworkspaces","docs\u002F04.workspaces",[2165,2199,2217],{"title":2032,"path":2166,"stem":2167,"children":2168,"titleTemplate":7,"icon":2078},"\u002Fdocs\u002Fworkspaces\u002Fbasic-usage","docs\u002F04.workspaces\u002F01.basic-usage\u002F01.index",[2169,2171,2175,2179,2183,2187,2191,2195],{"title":2170,"path":2166,"stem":2167,"titleTemplate":7},"云原生开发介绍",{"title":2172,"path":2173,"stem":2174,"titleTemplate":7},"默认开发环境","\u002Fdocs\u002Fworkspaces\u002Fbasic-usage\u002Fdefault-dev-env","docs\u002F04.workspaces\u002F01.basic-usage\u002F02.default-dev-env",{"title":2176,"path":2177,"stem":2178,"titleTemplate":7},"自定义开发环境","\u002Fdocs\u002Fworkspaces\u002Fbasic-usage\u002Fcustom-dev-env","docs\u002F04.workspaces\u002F01.basic-usage\u002F03.custom-dev-env",{"title":2180,"path":2181,"stem":2182,"titleTemplate":7},"业务端口预览","\u002Fdocs\u002Fworkspaces\u002Fbasic-usage\u002Fbusiness-preview","docs\u002F04.workspaces\u002F01.basic-usage\u002F04.business-preview",{"title":2184,"path":2185,"stem":2186,"titleTemplate":7},"远程开发工作区回收机制","\u002Fdocs\u002Fworkspaces\u002Fbasic-usage\u002Fworkspace-recycling","docs\u002F04.workspaces\u002F01.basic-usage\u002F05.workspace-recycling",{"title":2188,"path":2189,"stem":2190,"titleTemplate":7},"代码备份和文件漫游","\u002Fdocs\u002Fworkspaces\u002Fbasic-usage\u002Ffile-keeper","docs\u002F04.workspaces\u002F01.basic-usage\u002F06.file-keeper",{"title":2192,"path":2193,"stem":2194,"titleTemplate":7},"云原生开发推荐用法","\u002Fdocs\u002Fworkspaces\u002Fbasic-usage\u002Frecommended-practice","docs\u002F04.workspaces\u002F01.basic-usage\u002F07.recommended-practice",{"title":2196,"path":2197,"stem":2198,"titleTemplate":7},"常见问题解答","\u002Fdocs\u002Fworkspaces\u002Fbasic-usage\u002Fquestion","docs\u002F04.workspaces\u002F01.basic-usage\u002F08.question",{"title":2100,"path":2200,"stem":2201,"children":2202,"titleTemplate":7,"icon":2138},"\u002Fdocs\u002Fworkspaces\u002Fadvanced-usage","docs\u002F04.workspaces\u002F02.advanced-usage\u002F01.index",[2203,2205,2209,2213],{"title":2204,"path":2200,"stem":2201,"titleTemplate":7},"自定义环境创建流程",{"title":2206,"path":2207,"stem":2208,"titleTemplate":7},"自定义云原生开发启动按钮","\u002Fdocs\u002Fworkspaces\u002Fadvanced-usage\u002Fcustom-dev-button","docs\u002F04.workspaces\u002F02.advanced-usage\u002F02.custom-dev-button",{"title":2210,"path":2211,"stem":2212,"titleTemplate":7},"单\u002F双容器模式","\u002Fdocs\u002Fworkspaces\u002Fadvanced-usage\u002Fdouble-container","docs\u002F04.workspaces\u002F02.advanced-usage\u002F03.double-container",{"title":2214,"path":2215,"stem":2216,"titleTemplate":7},"使用技巧","\u002Fdocs\u002Fworkspaces\u002Fadvanced-usage\u002Ftips","docs\u002F04.workspaces\u002F02.advanced-usage\u002F04.tips",{"title":2218,"path":2219,"stem":2220,"children":2221,"titleTemplate":7,"icon":2232},"本地IDE客户端","\u002Fdocs\u002Fworkspaces\u002Flocalide","docs\u002F04.workspaces\u002F03.localide\u002F01.index",[2222,2224,2228],{"title":2223,"path":2219,"stem":2220,"titleTemplate":7},"VSCode\u002FCursor 客户端",{"title":2225,"path":2226,"stem":2227,"titleTemplate":7},"Jetbrains 客户端","\u002Fdocs\u002Fworkspaces\u002Flocalide\u002Fjetbrains","docs\u002F04.workspaces\u002F03.localide\u002F02.jetbrains",{"title":2229,"path":2230,"stem":2231,"titleTemplate":7},"云原生开发 SSH 密钥指纹验证","\u002Fdocs\u002Fworkspaces\u002Flocalide\u002Ffingerprint","docs\u002F04.workspaces\u002F03.localide\u002F03.fingerprint","lucide:monitor",{"title":2234,"titleTemplate":7,"icon":2235,"path":2236,"stem":2237,"children":2238},"制品库","lucide:package","\u002Fdocs\u002Fartifact","docs\u002F05.artifact\u002Findex",[2239,2241,2245,2249,2253,2257,2261,2265,2269],{"title":2240,"path":2236,"stem":2237,"titleTemplate":7},"制品库介绍",{"title":2242,"path":2243,"stem":2244,"titleTemplate":7},"Composer 制品库","\u002Fdocs\u002Fartifact\u002Fcomposer","docs\u002F05.artifact\u002Fcomposer",{"title":2246,"path":2247,"stem":2248,"titleTemplate":7},"Docker 制品库","\u002Fdocs\u002Fartifact\u002Fdocker","docs\u002F05.artifact\u002Fdocker",{"title":2250,"path":2251,"stem":2252,"titleTemplate":7},"Helm 制品库","\u002Fdocs\u002Fartifact\u002Fhelm","docs\u002F05.artifact\u002Fhelm",{"title":2254,"path":2255,"stem":2256,"titleTemplate":7},"Maven 制品库","\u002Fdocs\u002Fartifact\u002Fmaven","docs\u002F05.artifact\u002Fmaven",{"title":2258,"path":2259,"stem":2260,"titleTemplate":7},"npm 制品库","\u002Fdocs\u002Fartifact\u002Fnpm","docs\u002F05.artifact\u002Fnpm",{"title":2262,"path":2263,"stem":2264,"titleTemplate":7},"Nuget 制品库","\u002Fdocs\u002Fartifact\u002Fnuget","docs\u002F05.artifact\u002Fnuget",{"title":2266,"path":2267,"stem":2268,"titleTemplate":7},"ohpm 制品库","\u002Fdocs\u002Fartifact\u002Fohpm","docs\u002F05.artifact\u002Fohpm",{"title":2270,"path":2271,"stem":2272,"titleTemplate":7},"PyPI 制品库","\u002Fdocs\u002Fartifact\u002Fpypi","docs\u002F05.artifact\u002Fpypi",{"title":2274,"path":2275,"stem":2276,"children":2277,"titleTemplate":7,"icon":2286},"AI助手","\u002Fdocs\u002Fai","docs\u002F06.ai\u002F01.index",[2278,2281],{"title":2279,"path":2275,"stem":2276,"titleTemplate":7,"icon":2280},"AI助手简介","lucide:bot",{"title":2282,"path":2283,"stem":2284,"titleTemplate":7,"icon":2285},"知识库","\u002Fdocs\u002Fai\u002Fknowledge-base","docs\u002F06.ai\u002F02.knowledge-base","lucide:knowledge","lucide:npc",{"title":2288,"titleTemplate":7,"icon":2289,"path":2290,"stem":2291,"children":2292,"page":8},"更多","lucide:menu","\u002Fdocs\u002Fmore","docs\u002F09.more",[2293,2297,2301,2305,2309,2313],{"title":2294,"path":2295,"stem":2296,"titleTemplate":7},"定价","\u002Fdocs\u002Fmore\u002Fpricing","docs\u002F09.more\u002F01.pricing",{"title":2298,"path":2299,"stem":2300,"titleTemplate":7},"平台赞赏","\u002Fdocs\u002Fmore\u002Fsponsor","docs\u002F09.more\u002F02.sponsor",{"title":2302,"path":2303,"stem":2304,"titleTemplate":7},"云原生构建-企业版","\u002Fdocs\u002Fmore\u002Fenterprise","docs\u002F09.more\u002F03.enterprise",{"title":2306,"path":2307,"stem":2308,"titleTemplate":7},"产品Logo","\u002Fdocs\u002Fmore\u002Flogo","docs\u002F09.more\u002F04.logo",{"title":2310,"path":2311,"stem":2312,"titleTemplate":7},"集成TAPD","\u002Fdocs\u002Fmore\u002Ftapd","docs\u002F09.more\u002F05.tapd",{"title":2314,"path":2315,"stem":2316,"children":2317,"titleTemplate":7,"icon":2324},"开发者","\u002Fdocs\u002Fmore\u002Fdevelops","docs\u002F09.more\u002F08.develops\u002F01.index",[2318,2320],{"title":2319,"path":2315,"stem":2316,"titleTemplate":7},"徽章",{"title":2321,"path":2322,"stem":2323,"titleTemplate":7},"Open API","\u002Fdocs\u002Fmore\u002Fdevelops\u002Fopenapi","docs\u002F09.more\u002F08.develops\u002F02.openapi","lucide:code",{"title":2326,"titleTemplate":7,"icon":2327,"path":2328,"stem":2329,"children":2330,"page":8},"目录结构","vscode-icons:default-folder","\u002Fdocs\u002Ftree","docs\u002F22.tree",[2331,2366,2376,2390,2395,2399,2403,2408,2413,2418],{"title":2332,"titleTemplate":7,"defaultOpen":201,"icon":2333,"path":2334,"stem":2335,"children":2336,"page":8},".cnb\u002F","vscode-icons:folder-type-app","\u002Fdocs\u002Ftree\u002F.cnb","docs\u002F22.tree\u002F0..cnb",[2337,2348,2353,2358,2362],{"title":2338,"titleTemplate":7,"defaultOpen":201,"icon":2339,"path":2340,"stem":2341,"children":2342,"page":8},"ISSUE_TEMPLATE\u002F","vscode-icons:folder-type-package","\u002Fdocs\u002Ftree\u002F.cnb\u002Fissue_template","docs\u002F22.tree\u002F0..cnb\u002F99.ISSUE_TEMPLATE",[2343],{"title":2344,"path":2345,"stem":2346,"titleTemplate":7,"icon":2347},"0-feedback","\u002Fdocs\u002Ftree\u002F.cnb\u002Fissue_template\u002F0-feedback","docs\u002F22.tree\u002F0..cnb\u002F99.ISSUE_TEMPLATE\u002F0-feedback","vscode-icons:folder-type-tools",{"title":2349,"path":2350,"stem":2351,"titleTemplate":7,"icon":2352},"logo.svg","\u002Fdocs\u002Ftree\u002F.cnb\u002Flogo_svg","docs\u002F22.tree\u002F0..cnb\u002Flogo_svg","vscode-icons:file-type-image",{"title":2354,"path":2355,"stem":2356,"titleTemplate":7,"icon":2357},"settings.yml","\u002Fdocs\u002Ftree\u002F.cnb\u002Fsettings_yml","docs\u002F22.tree\u002F0..cnb\u002Fsettings_yml","vscode-icons:file-type-light-config",{"title":2359,"path":2360,"stem":2361,"titleTemplate":7,"icon":2357},"tag_deploy.yml","\u002Fdocs\u002Ftree\u002F.cnb\u002Ftag_deploy_yml","docs\u002F22.tree\u002F0..cnb\u002Ftag_deploy_yml",{"title":2363,"path":2364,"stem":2365,"titleTemplate":7,"icon":2357},"web_trigger.yml","\u002Fdocs\u002Ftree\u002F.cnb\u002Fweb_trigger_yml","docs\u002F22.tree\u002F0..cnb\u002Fweb_trigger_yml",{"title":2367,"titleTemplate":7,"defaultOpen":201,"icon":2333,"path":2368,"stem":2369,"children":2370,"page":8},".ide\u002F","\u002Fdocs\u002Ftree\u002F.ide","docs\u002F22.tree\u002F0..ide",[2371],{"title":2372,"path":2373,"stem":2374,"titleTemplate":7,"icon":2375},"Dockerfile","\u002Fdocs\u002Ftree\u002F.ide\u002Fdockerfile","docs\u002F22.tree\u002F0..ide\u002FDockerfile","vscode-icons:default-file",{"title":2377,"titleTemplate":7,"defaultOpen":8,"icon":2378,"path":2379,"stem":2380,"children":2381,"page":8},"node_modules\u002F","vscode-icons:folder-type-node","\u002Fdocs\u002Ftree\u002Fnode-modules","docs\u002F22.tree\u002F0.node-modules",[2382,2386],{"title":2383,"path":2384,"stem":2385,"titleTemplate":7,"icon":2378},".bin\u002F","\u002Fdocs\u002Ftree\u002Fnode-modules\u002Fbin","docs\u002F22.tree\u002F0.node-modules\u002Fbin",{"title":2387,"path":2388,"stem":2389,"titleTemplate":7,"icon":2378},".cache\u002F","\u002Fdocs\u002Ftree\u002Fnode-modules\u002Fcache","docs\u002F22.tree\u002F0.node-modules\u002Fcache",{"title":2391,"path":2392,"stem":2393,"titleTemplate":7,"icon":2394},"public\u002F","\u002Fdocs\u002Ftree\u002Fpublic","docs\u002F22.tree\u002F0.public","vscode-icons:folder-type-public",{"title":2396,"path":2397,"stem":2398,"titleTemplate":7,"icon":2375},"README.md","\u002Fdocs\u002Ftree\u002Freadme","docs\u002F22.tree\u002F1.README",{"title":2400,"path":2401,"stem":2402,"titleTemplate":7,"icon":2357},".cnb.yml","\u002Fdocs\u002Ftree\u002Fcnb_yml","docs\u002F22.tree\u002F1.cnb_yml",{"title":2404,"path":2405,"stem":2406,"titleTemplate":7,"icon":2407},".env","\u002Fdocs\u002Ftree\u002Fenv","docs\u002F22.tree\u002F1.env","vscode-icons:file-type-dotenv",{"title":2409,"path":2410,"stem":2411,"titleTemplate":7,"icon":2412},".gitignore","\u002Fdocs\u002Ftree\u002Fgitignore","docs\u002F22.tree\u002F1.gitignore","vscode-icons:file-type-git",{"title":2414,"path":2415,"stem":2416,"titleTemplate":7,"icon":2417},"package.json","\u002Fdocs\u002Ftree\u002Fpackage","docs\u002F22.tree\u002F1.package","vscode-icons:file-type-npm",{"title":2419,"path":2420,"stem":2421,"titleTemplate":7,"icon":2417},"pnpm-lock.yaml","\u002Fdocs\u002Ftree\u002Fpnpm-lock_yaml","docs\u002F22.tree\u002F1.pnpm-lock_yaml",{"title":2423,"titleTemplate":7,"icon":2424,"path":2425,"stem":2426,"children":2427},"API","lucide:code-xml","\u002Fdocs\u002Fapi","docs\u002F44.api\u002Findex",[2428,2430,2434,2438,2442,2446,2450,2454,2458,2462,2466,2470,2474,2478,2482,2486,2490,2494,2498,2502,2506,2510,2514,2518,2522,2526,2530,2534,2538],{"title":2429,"path":2425,"stem":2426,"titleTemplate":7},"API 介绍",{"title":2431,"path":2432,"stem":2433,"titleTemplate":7},"活动 Activities","\u002Fdocs\u002Fapi\u002Factivities","docs\u002F44.api\u002Factivities",{"title":2435,"path":2436,"stem":2437,"titleTemplate":7},"AI 功能","\u002Fdocs\u002Fapi\u002Fai","docs\u002F44.api\u002Fai",{"title":2439,"path":2440,"stem":2441,"titleTemplate":7},"资源 Assets","\u002Fdocs\u002Fapi\u002Fassets","docs\u002F44.api\u002Fassets",{"title":2443,"path":2444,"stem":2445,"titleTemplate":7},"徽章 Badge","\u002Fdocs\u002Fapi\u002Fbadge","docs\u002F44.api\u002Fbadge",{"title":2447,"path":2448,"stem":2449,"titleTemplate":7},"构建 Build","\u002Fdocs\u002Fapi\u002Fbuild","docs\u002F44.api\u002Fbuild",{"title":2451,"path":2452,"stem":2453,"titleTemplate":7},"计费 Charge","\u002Fdocs\u002Fapi\u002Fcharge","docs\u002F44.api\u002Fcharge",{"title":2455,"path":2456,"stem":2457,"titleTemplate":7},"协作者 Collaborators","\u002Fdocs\u002Fapi\u002Fcollaborators","docs\u002F44.api\u002Fcollaborators",{"title":2459,"path":2460,"stem":2461,"titleTemplate":7},"事件 Event","\u002Fdocs\u002Fapi\u002Fevent","docs\u002F44.api\u002Fevent",{"title":2463,"path":2464,"stem":2465,"titleTemplate":7},"关注者 Followers","\u002Fdocs\u002Fapi\u002Ffollowers","docs\u002F44.api\u002Ffollowers",{"title":2467,"path":2468,"stem":2469,"titleTemplate":7},"Git 操作","\u002Fdocs\u002Fapi\u002Fgit","docs\u002F44.api\u002Fgit",{"title":2471,"path":2472,"stem":2473,"titleTemplate":7},"Git 设置","\u002Fdocs\u002Fapi\u002Fgit-settings","docs\u002F44.api\u002Fgit-settings",{"title":2475,"path":2476,"stem":2477,"titleTemplate":7},"问题 Issues","\u002Fdocs\u002Fapi\u002Fissues","docs\u002F44.api\u002Fissues",{"title":2479,"path":2480,"stem":2481,"titleTemplate":7},"知识库 KnowledgeBase","\u002Fdocs\u002Fapi\u002Fknowledge-base","docs\u002F44.api\u002Fknowledge-base",{"title":2483,"path":2484,"stem":2485,"titleTemplate":7},"成员 Members","\u002Fdocs\u002Fapi\u002Fmembers","docs\u002F44.api\u002Fmembers",{"title":2487,"path":2488,"stem":2489,"titleTemplate":7},"任务 Missions","\u002Fdocs\u002Fapi\u002Fmissions","docs\u002F44.api\u002Fmissions",{"title":2491,"path":2492,"stem":2493,"titleTemplate":7},"组织 Organizations","\u002Fdocs\u002Fapi\u002Forganizations","docs\u002F44.api\u002Forganizations",{"title":2495,"path":2496,"stem":2497,"titleTemplate":7},"Pull Requests","\u002Fdocs\u002Fapi\u002Fpulls","docs\u002F44.api\u002Fpulls",{"title":2499,"path":2500,"stem":2501,"titleTemplate":7},"注册表 Registries","\u002Fdocs\u002Fapi\u002Fregistries","docs\u002F44.api\u002Fregistries",{"title":2503,"path":2504,"stem":2505,"titleTemplate":7},"发布 Releases","\u002Fdocs\u002Fapi\u002Freleases","docs\u002F44.api\u002Freleases",{"title":2507,"path":2508,"stem":2509,"titleTemplate":7},"代码问题","\u002Fdocs\u002Fapi\u002Frepo-code-issue","docs\u002F44.api\u002Frepo-code-issue",{"title":2511,"path":2512,"stem":2513,"titleTemplate":7},"贡献者","\u002Fdocs\u002Fapi\u002Frepo-contributor","docs\u002F44.api\u002Frepo-contributor",{"title":2515,"path":2516,"stem":2517,"titleTemplate":7},"仓库标签","\u002Fdocs\u002Fapi\u002Frepo-labels","docs\u002F44.api\u002Frepo-labels",{"title":2519,"path":2520,"stem":2521,"titleTemplate":7},"仓库 Repositories","\u002Fdocs\u002Fapi\u002Frepositories","docs\u002F44.api\u002Frepositories",{"title":2523,"path":2524,"stem":2525,"titleTemplate":7},"搜索 Search","\u002Fdocs\u002Fapi\u002Fsearch","docs\u002F44.api\u002Fsearch",{"title":2527,"path":2528,"stem":2529,"titleTemplate":7},"安全 Security","\u002Fdocs\u002Fapi\u002Fsecurity","docs\u002F44.api\u002Fsecurity",{"title":2531,"path":2532,"stem":2533,"titleTemplate":7},"星标 Starring","\u002Fdocs\u002Fapi\u002Fstarring","docs\u002F44.api\u002Fstarring",{"title":2535,"path":2536,"stem":2537,"titleTemplate":7},"用户 Users","\u002Fdocs\u002Fapi\u002Fusers","docs\u002F44.api\u002Fusers",{"title":2539,"path":2540,"stem":2541,"titleTemplate":7},"工作空间 Workspace","\u002Fdocs\u002Fapi\u002Fworkspace","docs\u002F44.api\u002Fworkspace",{"title":2543,"path":2544,"stem":2545,"children":2546,"titleTemplate":7,"icon":2555},"社区","\u002Fdocs\u002Fcommunity","docs\u002F55.community\u002Findex",[2547,2550],{"title":2548,"path":2544,"stem":2545,"titleTemplate":7,"icon":2549},"获取帮助","lucide:life-buoy",{"title":2551,"path":2552,"stem":2553,"titleTemplate":7,"icon":2554},"报告 Bug","\u002Fdocs\u002Fcommunity\u002Freporting-bugs","docs\u002F55.community\u002Freporting-bugs","lucide:bug","lucide:messages-square",{"title":2140,"titleTemplate":7,"icon":2557,"path":2558,"stem":2559,"children":2560},"lucide:layout","\u002Fdocs\u002Fexamples","docs\u002Fexamples\u002Findex",[2561,2563,2573],{"title":2562,"path":2558,"stem":2559,"titleTemplate":7},"CNB完整示例",{"title":2564,"path":2565,"stem":2566,"children":2567,"titleTemplate":7},"构建环境和开发环境","\u002Fdocs\u002Fexamples\u002Ffeatures","docs\u002Fexamples\u002F1.features\u002Findex",[2568,2569],{"title":2564,"path":2565,"stem":2566,"titleTemplate":7},{"title":2570,"path":2571,"stem":2572,"titleTemplate":7},"Issue\u002Fpr 使用场景","\u002Fdocs\u002Fexamples\u002Ffeatures\u002Flayouts","docs\u002Fexamples\u002F1.features\u002F5.layouts",{"title":2574,"path":2575,"stem":2576,"children":2577,"titleTemplate":7},"路由","\u002Fdocs\u002Fexamples\u002Frouting","docs\u002Fexamples\u002F2.routing\u002Findex",[2578,2579],{"title":2574,"path":2575,"stem":2576,"titleTemplate":7},{"title":2580,"path":2581,"stem":2582,"titleTemplate":7},"中间件","\u002Fdocs\u002Fexamples\u002Frouting\u002Fmiddleware","docs\u002Fexamples\u002F2.routing\u002Fmiddleware",{"title":2584,"path":2585,"stem":2586,"children":2587,"page":8},"Blog","\u002Fblog","blog",[2588,2592,2596,2600,2604],{"title":2589,"path":2590,"stem":2591},"提示框组件演示","\u002Fblog\u002Fdemo-feedback","blog\u002Fdemo-feedback",{"title":2593,"path":2594,"stem":2595},"DOM 操作基础","\u002Fblog\u002Fdom-manipulation","blog\u002Fdom-manipulation",{"title":2597,"path":2598,"stem":2599},"HTML 基础入门","\u002Fblog\u002Fhtml-basics","blog\u002Fhtml-basics",{"title":2601,"path":2602,"stem":2603},"JavaScript 异步编程","\u002Fblog\u002Fjavascript-async","blog\u002Fjavascript-async",{"title":2605,"path":2606,"stem":2607},"响应式网页设计","\u002Fblog\u002Fresponsive-design","blog\u002Fresponsive-design",{"id":2609,"title":2051,"body":2610,"description":10898,"extension":188,"links":7,"meta":10899,"navigation":201,"path":2052,"seo":10900,"stem":2053,"titleTemplate":7,"__hash__":10901},"docs\u002Fdocs\u002F03.build\u002F01.basic-usage\u002F05.grammar.md",{"type":10,"value":2611,"toc":10835},[2612,2614,2617,2646,2744,2817,2820,2829,2835,3224,3229,3237,3256,3259,3266,3269,3283,3286,3302,3310,3313,3376,3378,3385,3388,3391,3393,3458,3460,3466,3475,3506,3510,3519,3527,3557,3565,3568,3635,3638,3733,3736,3838,3841,3866,3868,3876,3884,3895,3901,4039,4047,4052,4119,4213,4295,4300,4303,4405,4481,4489,4491,4499,4506,4524,4527,4607,4610,4613,4618,4620,4623,4626,4630,4633,4868,4871,4971,4973,4979,4982,4986,4997,5000,5011,5015,5038,5041,5060,5063,5073,5079,5082,5092,5107,5112,5244,5248,5260,5263,5269,5301,5305,5425,5429,5432,5434,5440,5451,5454,5461,5465,5472,5490,5492,5574,5583,5585,5657,5661,5664,5666,5744,5748,5754,5760,5764,5772,5775,5782,5801,5803,5854,5944,5950,5953,5987,5990,6007,6010,6015,6052,6072,6136,6143,6145,6151,6184,6187,6221,6224,6280,6286,6298,6508,6511,6778,6835,6837,6843,6846,6852,7111,7113,7120,7123,7126,7132,7135,7138,7144,7147,7150,7154,7164,7178,7193,7197,7205,7215,7218,7231,7256,7259,7283,7314,7317,7320,7374,7377,7380,7413,7416,7459,7462,7466,7476,7481,7485,7496,7502,7506,7516,7519,7525,7529,7537,7546,7549,7659,7683,7686,7739,7742,7836,7839,7907,7910,7919,7931,7935,7949,7998,8001,8035,8043,8062,8066,8072,8144,8148,8154,8216,8222,8336,8340,8346,8351,8355,8365,8376,8391,8395,8403,8410,8414,8422,8431,8434,8441,8549,8552,8647,8651,8657,8668,8677,8681,8689,8698,8702,8712,8717,8721,8730,8736,8739,8769,8771,8786,8789,8804,8807,8823,8832,8900,8907,9012,9016,9024,9031,9053,9059,9062,9072,9075,9085,9088,9093,9095,9144,9152,9157,9159,9216,9268,9271,9295,9340,9342,9373,9378,9389,9392,9415,9418,9421,9427,9436,9441,9516,9520,9522,9532,9563,9572,9589,9597,9623,9625,9628,9720,9833,9836,9906,10014,10018,10024,10028,10032,10040,10049,10053,10063,10071,10075,10083,10091,10095,10105,10114,10118,10128,10135,10139,10145,10152,10161,10165,10173,10181,10185,10191,10209,10215,10217,10225,10228,10238,10241,10267,10302,10308,10312,10324,10329,10335,10339,10347,10353,10355,10366,10371,10386,10388,10402,10404,10418,10420,10436,10438,10469,10471,10526,10530,10540,10544,10546,10552,10556,10558,10564,10567,10570,10578,10584,10591,10593,10601,10610,10619,10622,10630,10643,10647,10655,10667,10689,10695,10697,10703,10710,10713,10721,10728,10733,10736,10742,10748,10785,10788,10805,10808,10832],[13,2613,2051],{"id":2051},[21,2615,2616],{"id":2616},"基本概念",[123,2618,2619,2632,2641],{},[126,2620,2621,2624,2625,2628,2629,2631],{},[32,2622,2623],{},"Pipeline","： 表示一个流水线，包含一个或者多个阶段 ",[32,2626,2627],{},"Stage","，每个 ",[32,2630,2627],{}," 依次执行。",[126,2633,2634,2636,2637,2640],{},[32,2635,2627],{},"： 表示一个构建阶段，可以由一个或者多个任务 ",[32,2638,2639],{},"Job"," 组成。",[126,2642,2643,2645],{},[32,2644,2639],{},"： 最基本的任务执行单元。",[25,2647,2651],{"className":2648,"code":2649,"language":2650,"meta":30,"style":30},"language-yaml shiki shiki-themes material-theme-lighter material-theme-lighter material-theme-palenight","main: # 触发分支\n  push: # 触发事件，对应一个构建，可以包含多条 Pipeline。即可以是数组，也可以是对象。\n    - name: pipeline-1 # Pipeline 结构体\n      stages:\n        - name: stage-1 # Stage 结构体\n          jobs:\n            - name: job-1 # Job 结构体\n              script: echo\n","yaml",[32,2652,2653,2663,2673,2689,2697,2712,2719,2734],{"__ignoreMap":30},[35,2654,2655,2657,2659],{"class":37,"line":38},[35,2656,210],{"class":93},[35,2658,59],{"class":86},[35,2660,2662],{"class":2661},"sWuyu"," # 触发分支\n",[35,2664,2665,2668,2670],{"class":37,"line":90},[35,2666,2667],{"class":93},"  push",[35,2669,59],{"class":86},[35,2671,2672],{"class":2661}," # 触发事件，对应一个构建，可以包含多条 Pipeline。即可以是数组，也可以是对象。\n",[35,2674,2675,2678,2681,2683,2686],{"class":37,"line":112},[35,2676,2677],{"class":86},"    -",[35,2679,2680],{"class":93}," name",[35,2682,59],{"class":86},[35,2684,2685],{"class":45}," pipeline-1",[35,2687,2688],{"class":2661}," # Pipeline 结构体\n",[35,2690,2691,2694],{"class":37,"line":162},[35,2692,2693],{"class":93},"      stages",[35,2695,2696],{"class":86},":\n",[35,2698,2699,2702,2704,2706,2709],{"class":37,"line":166},[35,2700,2701],{"class":86},"        -",[35,2703,2680],{"class":93},[35,2705,59],{"class":86},[35,2707,2708],{"class":45}," stage-1",[35,2710,2711],{"class":2661}," # Stage 结构体\n",[35,2713,2714,2717],{"class":37,"line":170},[35,2715,2716],{"class":93},"          jobs",[35,2718,2696],{"class":86},[35,2720,2721,2724,2726,2728,2731],{"class":37,"line":174},[35,2722,2723],{"class":86},"            -",[35,2725,2680],{"class":93},[35,2727,59],{"class":86},[35,2729,2730],{"class":45}," job-1",[35,2732,2733],{"class":2661}," # Job 结构体\n",[35,2735,2736,2739,2741],{"class":37,"line":178},[35,2737,2738],{"class":93},"              script",[35,2740,59],{"class":86},[35,2742,2743],{"class":45}," echo\n",[25,2745,2747],{"className":2648,"code":2746,"language":2650,"meta":30,"style":30},"main: # 触发分支\n  push: # 触发事件，对应一个构建，通过对象指定流水线\n    pipeline-key:\n      stages:\n        - name: stage-1 # Stage 结构体\n          jobs:\n            - name: job-1 # Job 结构体\n              script: echo\n",[32,2748,2749,2757,2766,2773,2779,2791,2797,2809],{"__ignoreMap":30},[35,2750,2751,2753,2755],{"class":37,"line":38},[35,2752,210],{"class":93},[35,2754,59],{"class":86},[35,2756,2662],{"class":2661},[35,2758,2759,2761,2763],{"class":37,"line":90},[35,2760,2667],{"class":93},[35,2762,59],{"class":86},[35,2764,2765],{"class":2661}," # 触发事件，对应一个构建，通过对象指定流水线\n",[35,2767,2768,2771],{"class":37,"line":112},[35,2769,2770],{"class":93},"    pipeline-key",[35,2772,2696],{"class":86},[35,2774,2775,2777],{"class":37,"line":162},[35,2776,2693],{"class":93},[35,2778,2696],{"class":86},[35,2780,2781,2783,2785,2787,2789],{"class":37,"line":166},[35,2782,2701],{"class":86},[35,2784,2680],{"class":93},[35,2786,59],{"class":86},[35,2788,2708],{"class":45},[35,2790,2711],{"class":2661},[35,2792,2793,2795],{"class":37,"line":170},[35,2794,2716],{"class":93},[35,2796,2696],{"class":86},[35,2798,2799,2801,2803,2805,2807],{"class":37,"line":174},[35,2800,2723],{"class":86},[35,2802,2680],{"class":93},[35,2804,59],{"class":86},[35,2806,2730],{"class":45},[35,2808,2733],{"class":2661},[35,2810,2811,2813,2815],{"class":37,"line":178},[35,2812,2738],{"class":93},[35,2814,59],{"class":86},[35,2816,2743],{"class":45},[21,2818,2623],{"id":2819},"pipeline",[17,2821,2822,2824,2825,2628,2827,2631],{},[32,2823,2623],{}," 表示一个流水线，包含一个或者多个阶段 ",[32,2826,2627],{},[32,2828,2627],{},[17,2830,2831,2832,2834],{},"一个 ",[32,2833,2623],{}," 的基本配置如下：",[25,2836,2838],{"className":2648,"code":2837,"language":2650,"meta":30,"style":30},"name: 流水线名字\ndocker:\n  image: node\n  build: dev\u002FDockerfile\n  volumes:\n    - \u002Froot\u002F.npm:copy-on-write\ngit:\n  enable: true\n  submodules: true\n  lfs: true\nservices:\n  - docker\nenv:\n  TEST_KEY: TEST_VALUE\nimports:\n  - https:\u002F\u002Fcnb.cool\u002F\u003Cyour-repo-slug>\u002F-\u002Fblob\u002Fmain\u002Fxxx\u002Fenvs.yml\n  - .\u002Fenv.txt\nlabel:\n  type: MASTER\n  class: MAIN\nstages:\n  - name: stage 1\n    script: echo \"stage 1\"\n  - name: stage 2\n    script: echo \"stage 2\"\n  - name: stage 3\n    script: echo \"stage 3\"\nfailStages:\n  - name: fail stage 1\n    script: echo \"fail stage 1\"\n  - name: fail stage 2\n    script: echo \"fail stage 2\"\nendStages:\n  - name: end stage 1\n    script: echo \"end stage 1\"\n  - name: end stage 2\n    script: echo \"end stage 2\"\nifModify:\n  - a.txt\n  - 'src\u002F**\u002F*'\nretry: 3\nallowFailure: false\n",[32,2839,2840,2850,2857,2867,2877,2884,2891,2898,2909,2918,2927,2934,2942,2949,2959,2967,2974,2982,2989,2999,3009,3017,3028,3038,3050,3060,3071,3080,3087,3098,3107,3118,3127,3134,3146,3155,3166,3175,3182,3189,3203,3214],{"__ignoreMap":30},[35,2841,2842,2845,2847],{"class":37,"line":38},[35,2843,2844],{"class":93},"name",[35,2846,59],{"class":86},[35,2848,2849],{"class":45}," 流水线名字\n",[35,2851,2852,2855],{"class":37,"line":90},[35,2853,2854],{"class":93},"docker",[35,2856,2696],{"class":86},[35,2858,2859,2862,2864],{"class":37,"line":112},[35,2860,2861],{"class":93},"  image",[35,2863,59],{"class":86},[35,2865,2866],{"class":45}," node\n",[35,2868,2869,2872,2874],{"class":37,"line":162},[35,2870,2871],{"class":93},"  build",[35,2873,59],{"class":86},[35,2875,2876],{"class":45}," dev\u002FDockerfile\n",[35,2878,2879,2882],{"class":37,"line":166},[35,2880,2881],{"class":93},"  volumes",[35,2883,2696],{"class":86},[35,2885,2886,2888],{"class":37,"line":170},[35,2887,2677],{"class":86},[35,2889,2890],{"class":45}," \u002Froot\u002F.npm:copy-on-write\n",[35,2892,2893,2896],{"class":37,"line":174},[35,2894,2895],{"class":93},"git",[35,2897,2696],{"class":86},[35,2899,2900,2903,2905],{"class":37,"line":178},[35,2901,2902],{"class":93},"  enable",[35,2904,59],{"class":86},[35,2906,2908],{"class":2907},"sbKd-"," true\n",[35,2910,2911,2914,2916],{"class":37,"line":181},[35,2912,2913],{"class":93},"  submodules",[35,2915,59],{"class":86},[35,2917,2908],{"class":2907},[35,2919,2920,2923,2925],{"class":37,"line":185},[35,2921,2922],{"class":93},"  lfs",[35,2924,59],{"class":86},[35,2926,2908],{"class":2907},[35,2928,2929,2932],{"class":37,"line":1000},[35,2930,2931],{"class":93},"services",[35,2933,2696],{"class":86},[35,2935,2936,2939],{"class":37,"line":1025},[35,2937,2938],{"class":86},"  -",[35,2940,2941],{"class":45}," docker\n",[35,2943,2944,2947],{"class":37,"line":1256},[35,2945,2946],{"class":93},"env",[35,2948,2696],{"class":86},[35,2950,2951,2954,2956],{"class":37,"line":164},[35,2952,2953],{"class":93},"  TEST_KEY",[35,2955,59],{"class":86},[35,2957,2958],{"class":45}," TEST_VALUE\n",[35,2960,2962,2965],{"class":37,"line":2961},15,[35,2963,2964],{"class":93},"imports",[35,2966,2696],{"class":86},[35,2968,2969,2971],{"class":37,"line":157},[35,2970,2938],{"class":86},[35,2972,2973],{"class":45}," https:\u002F\u002Fcnb.cool\u002F\u003Cyour-repo-slug>\u002F-\u002Fblob\u002Fmain\u002Fxxx\u002Fenvs.yml\n",[35,2975,2977,2979],{"class":37,"line":2976},17,[35,2978,2938],{"class":86},[35,2980,2981],{"class":45}," .\u002Fenv.txt\n",[35,2983,2984,2987],{"class":37,"line":864},[35,2985,2986],{"class":93},"label",[35,2988,2696],{"class":86},[35,2990,2991,2994,2996],{"class":37,"line":881},[35,2992,2993],{"class":93},"  type",[35,2995,59],{"class":86},[35,2997,2998],{"class":45}," MASTER\n",[35,3000,3001,3004,3006],{"class":37,"line":1009},[35,3002,3003],{"class":93},"  class",[35,3005,59],{"class":86},[35,3007,3008],{"class":45}," MAIN\n",[35,3010,3012,3015],{"class":37,"line":3011},21,[35,3013,3014],{"class":93},"stages",[35,3016,2696],{"class":86},[35,3018,3019,3021,3023,3025],{"class":37,"line":732},[35,3020,2938],{"class":86},[35,3022,2680],{"class":93},[35,3024,59],{"class":86},[35,3026,3027],{"class":45}," stage 1\n",[35,3029,3030,3033,3035],{"class":37,"line":461},[35,3031,3032],{"class":93},"    script",[35,3034,59],{"class":86},[35,3036,3037],{"class":45}," echo \"stage 1\"\n",[35,3039,3041,3043,3045,3047],{"class":37,"line":3040},24,[35,3042,2938],{"class":86},[35,3044,2680],{"class":93},[35,3046,59],{"class":86},[35,3048,3049],{"class":45}," stage 2\n",[35,3051,3053,3055,3057],{"class":37,"line":3052},25,[35,3054,3032],{"class":93},[35,3056,59],{"class":86},[35,3058,3059],{"class":45}," echo \"stage 2\"\n",[35,3061,3062,3064,3066,3068],{"class":37,"line":1396},[35,3063,2938],{"class":86},[35,3065,2680],{"class":93},[35,3067,59],{"class":86},[35,3069,3070],{"class":45}," stage 3\n",[35,3072,3073,3075,3077],{"class":37,"line":1528},[35,3074,3032],{"class":93},[35,3076,59],{"class":86},[35,3078,3079],{"class":45}," echo \"stage 3\"\n",[35,3081,3082,3085],{"class":37,"line":1674},[35,3083,3084],{"class":93},"failStages",[35,3086,2696],{"class":86},[35,3088,3089,3091,3093,3095],{"class":37,"line":472},[35,3090,2938],{"class":86},[35,3092,2680],{"class":93},[35,3094,59],{"class":86},[35,3096,3097],{"class":45}," fail stage 1\n",[35,3099,3100,3102,3104],{"class":37,"line":1014},[35,3101,3032],{"class":93},[35,3103,59],{"class":86},[35,3105,3106],{"class":45}," echo \"fail stage 1\"\n",[35,3108,3109,3111,3113,3115],{"class":37,"line":1937},[35,3110,2938],{"class":86},[35,3112,2680],{"class":93},[35,3114,59],{"class":86},[35,3116,3117],{"class":45}," fail stage 2\n",[35,3119,3120,3122,3124],{"class":37,"line":183},[35,3121,3032],{"class":93},[35,3123,59],{"class":86},[35,3125,3126],{"class":45}," echo \"fail stage 2\"\n",[35,3128,3129,3132],{"class":37,"line":729},[35,3130,3131],{"class":93},"endStages",[35,3133,2696],{"class":86},[35,3135,3137,3139,3141,3143],{"class":37,"line":3136},34,[35,3138,2938],{"class":86},[35,3140,2680],{"class":93},[35,3142,59],{"class":86},[35,3144,3145],{"class":45}," end stage 1\n",[35,3147,3148,3150,3152],{"class":37,"line":740},[35,3149,3032],{"class":93},[35,3151,59],{"class":86},[35,3153,3154],{"class":45}," echo \"end stage 1\"\n",[35,3156,3157,3159,3161,3163],{"class":37,"line":187},[35,3158,2938],{"class":86},[35,3160,2680],{"class":93},[35,3162,59],{"class":86},[35,3164,3165],{"class":45}," end stage 2\n",[35,3167,3168,3170,3172],{"class":37,"line":329},[35,3169,3032],{"class":93},[35,3171,59],{"class":86},[35,3173,3174],{"class":45}," echo \"end stage 2\"\n",[35,3176,3177,3180],{"class":37,"line":873},[35,3178,3179],{"class":93},"ifModify",[35,3181,2696],{"class":86},[35,3183,3184,3186],{"class":37,"line":1814},[35,3185,2938],{"class":86},[35,3187,3188],{"class":45}," a.txt\n",[35,3190,3192,3194,3197,3200],{"class":37,"line":3191},40,[35,3193,2938],{"class":86},[35,3195,3196],{"class":86}," '",[35,3198,3199],{"class":45},"src\u002F**\u002F*",[35,3201,3202],{"class":86},"'\n",[35,3204,3205,3208,3210],{"class":37,"line":1017},[35,3206,3207],{"class":93},"retry",[35,3209,59],{"class":86},[35,3211,3213],{"class":3212},"sYRBq"," 3\n",[35,3215,3216,3219,3221],{"class":37,"line":884},[35,3217,3218],{"class":93},"allowFailure",[35,3220,59],{"class":86},[35,3222,3223],{"class":2907}," false\n",[3225,3226,3228],"h3",{"id":3227},"name-pipeline-name","name {#pipeline-name}",[123,3230,3231],{},[126,3232,3233,3234],{},"type: ",[32,3235,3236],{},"String",[17,3238,3239,3240,3242,3243,3245,3246,3245,3249,3252,3253,3255],{},"指定流水线名，默认为 ",[32,3241,2819],{},"。当有多条并行流水线时，\n默认流水线名为 ",[32,3244,2819],{},"、",[32,3247,3248],{},"pipeline-1",[32,3250,3251],{},"pipeline-2"," 依此类推，\n可定义 ",[32,3254,2844],{}," 指定流水线名来区分不同流水线。",[3225,3257,3258],{"id":3258},"runner",[123,3260,3261],{},[126,3262,3233,3263],{},[32,3264,3265],{},"Object",[17,3267,3268],{},"指定构建节点相关参数。",[123,3270,3271,3277],{},[126,3272,3273,3276],{},[32,3274,3275],{},"tags",": 可选，指定使用具备哪些标签的构建节点",[126,3278,3279,3282],{},[32,3280,3281],{},"cpus",": 可选，指定构建需使用的 cpu 核数",[3284,3285,3275],"h4",{"id":3275},[123,3287,3288,3296],{},[126,3289,3233,3290,3292,3293],{},[32,3291,3236],{}," ｜ ",[32,3294,3295],{},"Array\u003CString>",[126,3297,3298,3299],{},"default: ",[32,3300,3301],{},"cnb:arch:default",[17,3303,3304,3305,3309],{},"指定使用具备哪些标签的构建节点。详见",[129,3306,3308],{"href":3307},".\u002Fbuild-node","构建节点","。",[17,3311,3312],{},"示例：",[25,3314,3316],{"className":2648,"code":3315,"language":2650,"meta":30,"style":30},"main:\n  push:\n    - runner:\n        tags: cnb:arch:amd64\n      stages:\n        - name: uname\n          script: uname -a\n",[32,3317,3318,3324,3330,3339,3349,3355,3366],{"__ignoreMap":30},[35,3319,3320,3322],{"class":37,"line":38},[35,3321,210],{"class":93},[35,3323,2696],{"class":86},[35,3325,3326,3328],{"class":37,"line":90},[35,3327,2667],{"class":93},[35,3329,2696],{"class":86},[35,3331,3332,3334,3337],{"class":37,"line":112},[35,3333,2677],{"class":86},[35,3335,3336],{"class":93}," runner",[35,3338,2696],{"class":86},[35,3340,3341,3344,3346],{"class":37,"line":162},[35,3342,3343],{"class":93},"        tags",[35,3345,59],{"class":86},[35,3347,3348],{"class":45}," cnb:arch:amd64\n",[35,3350,3351,3353],{"class":37,"line":166},[35,3352,2693],{"class":93},[35,3354,2696],{"class":86},[35,3356,3357,3359,3361,3363],{"class":37,"line":170},[35,3358,2701],{"class":86},[35,3360,2680],{"class":93},[35,3362,59],{"class":86},[35,3364,3365],{"class":45}," uname\n",[35,3367,3368,3371,3373],{"class":37,"line":174},[35,3369,3370],{"class":93},"          script",[35,3372,59],{"class":86},[35,3374,3375],{"class":45}," uname -a\n",[3284,3377,3281],{"id":3281},[123,3379,3380],{},[126,3381,3233,3382],{},[32,3383,3384],{},"Number",[17,3386,3387],{},"指定构建需使用的最大 cpu 核数（memory = cpu 核数 * 2 G），\n其中 cpu 和 memory 不超过 runner 机器实际大小。",[17,3389,3390],{},"未配置，则最大可用 cpu 核数由分配到的 runner 机器配置来指定。",[17,3392,3312],{},[25,3394,3396],{"className":2648,"code":3395,"language":2650,"meta":30,"style":30},"# cpus = 1，memory = 2G\nmain:\n  push:\n    - runner:\n        cpus: 1\n      stages:\n        - name: echo\n          script: echo \"hello world\"\n",[32,3397,3398,3403,3409,3415,3423,3433,3439,3449],{"__ignoreMap":30},[35,3399,3400],{"class":37,"line":38},[35,3401,3402],{"class":2661},"# cpus = 1，memory = 2G\n",[35,3404,3405,3407],{"class":37,"line":90},[35,3406,210],{"class":93},[35,3408,2696],{"class":86},[35,3410,3411,3413],{"class":37,"line":112},[35,3412,2667],{"class":93},[35,3414,2696],{"class":86},[35,3416,3417,3419,3421],{"class":37,"line":162},[35,3418,2677],{"class":86},[35,3420,3336],{"class":93},[35,3422,2696],{"class":86},[35,3424,3425,3428,3430],{"class":37,"line":166},[35,3426,3427],{"class":93},"        cpus",[35,3429,59],{"class":86},[35,3431,3432],{"class":3212}," 1\n",[35,3434,3435,3437],{"class":37,"line":170},[35,3436,2693],{"class":93},[35,3438,2696],{"class":86},[35,3440,3441,3443,3445,3447],{"class":37,"line":174},[35,3442,2701],{"class":86},[35,3444,2680],{"class":93},[35,3446,59],{"class":86},[35,3448,2743],{"class":45},[35,3450,3451,3453,3455],{"class":37,"line":178},[35,3452,3370],{"class":93},[35,3454,59],{"class":86},[35,3456,3457],{"class":45}," echo \"hello world\"\n",[3225,3459,2854],{"id":2854},[123,3461,3462],{},[126,3463,3233,3464],{},[32,3465,3265],{},[17,3467,3468,3469,3471,3472],{},"指定 ",[32,3470,2854],{}," 相关的参数。详情见",[129,3473,2055],{"href":3474},".\u002Fbuild-env",[123,3476,3477,3488,3500],{},[126,3478,3479,3481,3482,3484,3485,3487],{},[32,3480,1138],{},": 当前 ",[32,3483,2623],{}," 的环境镜像，在当前 ",[32,3486,2623],{}," 下的所有任务都将在这个镜像环境中执行。",[126,3489,3490,3493,3494,3496,3497,3499],{},[32,3491,3492],{},"build",": 指定一个 ",[32,3495,2372],{},"，构建一个临时镜像，做为 ",[32,3498,1138],{}," 的值使用。",[126,3501,3502,3505],{},[32,3503,3504],{},"volumes",": 声明数据卷，用于缓存场景。",[3284,3507,3509],{"id":3508},"image-pipeline-image","image {#pipeline-image}",[123,3511,3512],{},[126,3513,3233,3514,3516,3517],{},[32,3515,3265],{}," | ",[32,3518,3236],{},[17,3520,3521,3522,3484,3524,3526],{},"指定当前 ",[32,3523,2623],{},[32,3525,2623],{}," 下的所有任务都将在这个镜像环境中执行，支持引用环境变量。",[123,3528,3529,3541,3549],{},[126,3530,3531,3534,3535,3537,3538,3309],{},[32,3532,3533],{},"image.name",": ",[32,3536,3236],{}," 镜像名，如 ",[32,3539,3540],{},"node:20",[126,3542,3543,3534,3546,3548],{},[32,3544,3545],{},"image.dockerUser",[32,3547,3236],{}," 指定 Docker 用户名，用于拉取指定的镜像。",[126,3550,3551,3534,3554,3556],{},[32,3552,3553],{},"image.dockerPassword",[32,3555,3236],{}," 指定 Docker 用户密码，用于拉取指定的镜像。",[17,3558,3559,3560,3562,3563,3309],{},"如果指定 ",[32,3561,1138],{}," 为字符串，则等同于指定了 ",[32,3564,3533],{},[17,3566,3567],{},"示例一，使用公开镜像：",[25,3569,3571],{"className":2648,"code":3570,"language":2650,"meta":30,"style":30},"main:\n  push:\n    - docker:\n        # 取 docker 官方镜像仓库中的 node:20 镜像作为构建容器\n        image: node:20\n      stages:\n        - name: show version\n          script: node -v\n",[32,3572,3573,3579,3585,3594,3599,3609,3615,3626],{"__ignoreMap":30},[35,3574,3575,3577],{"class":37,"line":38},[35,3576,210],{"class":93},[35,3578,2696],{"class":86},[35,3580,3581,3583],{"class":37,"line":90},[35,3582,2667],{"class":93},[35,3584,2696],{"class":86},[35,3586,3587,3589,3592],{"class":37,"line":112},[35,3588,2677],{"class":86},[35,3590,3591],{"class":93}," docker",[35,3593,2696],{"class":86},[35,3595,3596],{"class":37,"line":162},[35,3597,3598],{"class":2661},"        # 取 docker 官方镜像仓库中的 node:20 镜像作为构建容器\n",[35,3600,3601,3604,3606],{"class":37,"line":166},[35,3602,3603],{"class":93},"        image",[35,3605,59],{"class":86},[35,3607,3608],{"class":45}," node:20\n",[35,3610,3611,3613],{"class":37,"line":170},[35,3612,2693],{"class":93},[35,3614,2696],{"class":86},[35,3616,3617,3619,3621,3623],{"class":37,"line":174},[35,3618,2701],{"class":86},[35,3620,2680],{"class":93},[35,3622,59],{"class":86},[35,3624,3625],{"class":45}," show version\n",[35,3627,3628,3630,3632],{"class":37,"line":178},[35,3629,3370],{"class":93},[35,3631,59],{"class":86},[35,3633,3634],{"class":45}," node -v\n",[17,3636,3637],{},"示例二，使用 CNB 制品库私有镜像：",[25,3639,3641],{"className":2648,"code":3640,"language":2650,"meta":30,"style":30},"main:\n  push:\n    - docker:\n        # 取非公开镜像作为构建容器，需传入 docker 用户名和密码\n        image:\n          name: docker.cnb.cool\u002Fimages\u002Fpipeline-env:1.0\n          # 使用 CI 构建时默认注入的环境变量\n          dockerUser: $CNB_TOKEN_USER_NAME\n          dockerPassword: $CNB_TOKEN\n      stages:\n        - name: echo\n          script: echo \"hello world\"\n",[32,3642,3643,3649,3655,3663,3668,3674,3684,3689,3699,3709,3715,3725],{"__ignoreMap":30},[35,3644,3645,3647],{"class":37,"line":38},[35,3646,210],{"class":93},[35,3648,2696],{"class":86},[35,3650,3651,3653],{"class":37,"line":90},[35,3652,2667],{"class":93},[35,3654,2696],{"class":86},[35,3656,3657,3659,3661],{"class":37,"line":112},[35,3658,2677],{"class":86},[35,3660,3591],{"class":93},[35,3662,2696],{"class":86},[35,3664,3665],{"class":37,"line":162},[35,3666,3667],{"class":2661},"        # 取非公开镜像作为构建容器，需传入 docker 用户名和密码\n",[35,3669,3670,3672],{"class":37,"line":166},[35,3671,3603],{"class":93},[35,3673,2696],{"class":86},[35,3675,3676,3679,3681],{"class":37,"line":170},[35,3677,3678],{"class":93},"          name",[35,3680,59],{"class":86},[35,3682,3683],{"class":45}," docker.cnb.cool\u002Fimages\u002Fpipeline-env:1.0\n",[35,3685,3686],{"class":37,"line":174},[35,3687,3688],{"class":2661},"          # 使用 CI 构建时默认注入的环境变量\n",[35,3690,3691,3694,3696],{"class":37,"line":178},[35,3692,3693],{"class":93},"          dockerUser",[35,3695,59],{"class":86},[35,3697,3698],{"class":45}," $CNB_TOKEN_USER_NAME\n",[35,3700,3701,3704,3706],{"class":37,"line":181},[35,3702,3703],{"class":93},"          dockerPassword",[35,3705,59],{"class":86},[35,3707,3708],{"class":45}," $CNB_TOKEN\n",[35,3710,3711,3713],{"class":37,"line":185},[35,3712,2693],{"class":93},[35,3714,2696],{"class":86},[35,3716,3717,3719,3721,3723],{"class":37,"line":1000},[35,3718,2701],{"class":86},[35,3720,2680],{"class":93},[35,3722,59],{"class":86},[35,3724,2743],{"class":45},[35,3726,3727,3729,3731],{"class":37,"line":1025},[35,3728,3370],{"class":93},[35,3730,59],{"class":86},[35,3732,3457],{"class":45},[17,3734,3735],{},"示例三，使用 docker 官方镜像源私有镜像：",[25,3737,3739],{"className":2648,"code":3738,"language":2650,"meta":30,"style":30},"main:\n  push:\n    - imports: https:\u002F\u002Fcnb.cool\u002F\u003Cyour-repo-slug>\u002F-\u002Fblob\u002Fmain\u002Fxxx\u002Fdocker.yml\n      docker:\n        # 取非公开镜像作为构建容器，需传入 docker 用户名和密码\n        image:\n          name: images\u002Fpipeline-env:1.0\n          # docker.yml 中导入的环境变量\n          dockerUser: $DOCKER_USER\n          dockerPassword: $DOCKER_PASSWORD\n      stages:\n        - name: echo\n          script: echo \"hello world\"\n",[32,3740,3741,3747,3753,3765,3772,3776,3782,3791,3796,3805,3814,3820,3830],{"__ignoreMap":30},[35,3742,3743,3745],{"class":37,"line":38},[35,3744,210],{"class":93},[35,3746,2696],{"class":86},[35,3748,3749,3751],{"class":37,"line":90},[35,3750,2667],{"class":93},[35,3752,2696],{"class":86},[35,3754,3755,3757,3760,3762],{"class":37,"line":112},[35,3756,2677],{"class":86},[35,3758,3759],{"class":93}," imports",[35,3761,59],{"class":86},[35,3763,3764],{"class":45}," https:\u002F\u002Fcnb.cool\u002F\u003Cyour-repo-slug>\u002F-\u002Fblob\u002Fmain\u002Fxxx\u002Fdocker.yml\n",[35,3766,3767,3770],{"class":37,"line":162},[35,3768,3769],{"class":93},"      docker",[35,3771,2696],{"class":86},[35,3773,3774],{"class":37,"line":166},[35,3775,3667],{"class":2661},[35,3777,3778,3780],{"class":37,"line":170},[35,3779,3603],{"class":93},[35,3781,2696],{"class":86},[35,3783,3784,3786,3788],{"class":37,"line":174},[35,3785,3678],{"class":93},[35,3787,59],{"class":86},[35,3789,3790],{"class":45}," images\u002Fpipeline-env:1.0\n",[35,3792,3793],{"class":37,"line":178},[35,3794,3795],{"class":2661},"          # docker.yml 中导入的环境变量\n",[35,3797,3798,3800,3802],{"class":37,"line":181},[35,3799,3693],{"class":93},[35,3801,59],{"class":86},[35,3803,3804],{"class":45}," $DOCKER_USER\n",[35,3806,3807,3809,3811],{"class":37,"line":185},[35,3808,3703],{"class":93},[35,3810,59],{"class":86},[35,3812,3813],{"class":45}," $DOCKER_PASSWORD\n",[35,3815,3816,3818],{"class":37,"line":1000},[35,3817,2693],{"class":93},[35,3819,2696],{"class":86},[35,3821,3822,3824,3826,3828],{"class":37,"line":1025},[35,3823,2701],{"class":86},[35,3825,2680],{"class":93},[35,3827,59],{"class":86},[35,3829,2743],{"class":45},[35,3831,3832,3834,3836],{"class":37,"line":1256},[35,3833,3370],{"class":93},[35,3835,59],{"class":86},[35,3837,3457],{"class":45},[17,3839,3840],{},"docker.yml",[25,3842,3844],{"className":2648,"code":3843,"language":2650,"meta":30,"style":30},"DOCKER_USER: user\nDOCKER_PASSWORD: password\n",[32,3845,3846,3856],{"__ignoreMap":30},[35,3847,3848,3851,3853],{"class":37,"line":38},[35,3849,3850],{"class":93},"DOCKER_USER",[35,3852,59],{"class":86},[35,3854,3855],{"class":45}," user\n",[35,3857,3858,3861,3863],{"class":37,"line":90},[35,3859,3860],{"class":93},"DOCKER_PASSWORD",[35,3862,59],{"class":86},[35,3864,3865],{"class":45}," password\n",[3284,3867,3492],{"id":3492},[123,3869,3870],{},[126,3871,3233,3872,3516,3874],{},[32,3873,3265],{},[32,3875,3236],{},[17,3877,3878,3879,3496,3881,3883],{},"指定一个 ",[32,3880,2372],{},[32,3882,1138],{}," 的值使用，支持引用环境变量。",[17,3885,3886,3887,3889,3890,3309],{},"使用 ",[32,3888,3492],{}," 声明构建环境的完整示例可参考",[129,3891,3894],{"href":3892,"rel":3893},"https:\u002F\u002Fcnb.cool\u002Fexamples\u002Fecosystem\u002Fdocker-build-with-by",[133],"docker-build-with-by",[17,3896,3897,3898,3900],{},"以下是 ",[32,3899,3492],{}," 下各参数的说明：",[123,3902,3903,3920,3934,3965,3986,4000,4018],{},[126,3904,3905,59,3908,3914,3917,3919],{},[32,3906,3907],{},"build.dockerfile",[123,3909,3910],{},[126,3911,3233,3912],{},[32,3913,3236],{},[3915,3916],"br",{},[32,3918,2372],{},"路径。",[126,3921,3922,59,3925,3931,3933],{},[32,3923,3924],{},"build.target",[123,3926,3927],{},[126,3928,3233,3929],{},[32,3930,3236],{},[3915,3932],{},"对应 docker build 中的 --target 参数，可以选择性地构建 Dockerfile 中的特定阶段，而不是构建整个 Dockerfile。",[126,3935,3936,59,3939,3947,3949,3950,3952,3960,3962,3964],{},[32,3937,3938],{},"build.by",[123,3940,3941],{},[126,3942,3233,3943,3516,3945],{},[32,3944,3295],{},[32,3946,3236],{},[3915,3948],{},"用来声明缓存构建过程中依赖的文件列表。",[3915,3951],{},[3953,3954,3955,3956,3959],"strong",{},"注意：未出现在 ",[32,3957,3958],{},"by"," 列表中的文件，除了 Dockerfile，其他在构建镜像过程中，都当不存在处理。",[3915,3961],{},[32,3963,3236],{}," 类型时，多个文件可用英文逗号分隔。",[126,3966,3967,59,3970,3978,3980,3981,3983,3985],{},[32,3968,3969],{},"build.versionBy",[123,3971,3972],{},[126,3973,3233,3974,3516,3976],{},[32,3975,3295],{},[32,3977,3236],{},[3915,3979],{},"用来进行版本控制，所指向的文件内容发生变化，我们就会认为是一个新的版本，\n具体的计算逻辑见这个表达式：sha1(dockerfile + versionBy + buildArgs)。",[3915,3982],{},[32,3984,3236],{},"类型时，多个文件可用英文逗号分隔。",[126,3987,3988,59,3991,3997,3999],{},[32,3989,3990],{},"build.buildArgs",[123,3992,3993],{},[126,3994,3233,3995],{},[32,3996,3265],{},[3915,3998],{},"在 build 时插入额外的构建参数 (--build-arg $key=$value),\nvalue 值为 null 时只加入 key (--build-arg $key)。",[126,4001,4002,59,4005,4012,4014,4015,3309],{},[32,4003,4004],{},"build.ignoreBuildArgsInVersion",[123,4006,4007],{},[126,4008,3233,4009],{},[32,4010,4011],{},"Boolean",[3915,4013],{},"版本计算是否忽略buildArgs。详见 ",[32,4016,4017],{},"versionBy",[126,4019,4020,59,4023,4029,4031,4032,4035,4036,3309],{},[32,4021,4022],{},"build.sync",[123,4024,4025],{},[126,4026,3233,4027],{},[32,4028,3236],{},[3915,4030],{},"是否等待 ",[32,4033,4034],{},"docker push"," 成功后才继续。默认为",[32,4037,4038],{},"false",[17,4040,4041,4042,4044,4045,3309],{},"如果指定",[32,4043,3492],{},"为字符串，则等同于指定了",[32,4046,3907],{},[17,4048,4049],{},[3953,4050,4051],{},"Dockerfile 用法：",[25,4053,4055],{"className":2648,"code":4054,"language":2650,"meta":30,"style":30},"main:\n  push:\n    - docker:\n        # 通过 Dockerfile 指定构建环境\n        build: .\u002Fimage\u002FDockerfile\n      stages:\n        - stage1\n        - stage2\n        - stage3\n",[32,4056,4057,4063,4069,4077,4082,4092,4098,4105,4112],{"__ignoreMap":30},[35,4058,4059,4061],{"class":37,"line":38},[35,4060,210],{"class":93},[35,4062,2696],{"class":86},[35,4064,4065,4067],{"class":37,"line":90},[35,4066,2667],{"class":93},[35,4068,2696],{"class":86},[35,4070,4071,4073,4075],{"class":37,"line":112},[35,4072,2677],{"class":86},[35,4074,3591],{"class":93},[35,4076,2696],{"class":86},[35,4078,4079],{"class":37,"line":162},[35,4080,4081],{"class":2661},"        # 通过 Dockerfile 指定构建环境\n",[35,4083,4084,4087,4089],{"class":37,"line":166},[35,4085,4086],{"class":93},"        build",[35,4088,59],{"class":86},[35,4090,4091],{"class":45}," .\u002Fimage\u002FDockerfile\n",[35,4093,4094,4096],{"class":37,"line":170},[35,4095,2693],{"class":93},[35,4097,2696],{"class":86},[35,4099,4100,4102],{"class":37,"line":174},[35,4101,2701],{"class":86},[35,4103,4104],{"class":45}," stage1\n",[35,4106,4107,4109],{"class":37,"line":178},[35,4108,2701],{"class":86},[35,4110,4111],{"class":45}," stage2\n",[35,4113,4114,4116],{"class":37,"line":181},[35,4115,2701],{"class":86},[35,4117,4118],{"class":45}," stage3\n",[25,4120,4122],{"className":2648,"code":4121,"language":2650,"meta":30,"style":30},"main:\n  push:\n    - docker:\n        # 通过 Dockerfile 指定构建环境\n        build:\n          dockerfile: .\u002Fimage\u002FDockerfile\n          dockerImageName: cnb.cool\u002Fproject\u002Fimages\u002Fpipeline-env\n          dockerUser: $DOCKER_USER\n          dockerPassword: $DOCKER_PASSWORD\n      stages:\n        - stage1\n        - stage2\n        - stage3\n",[32,4123,4124,4130,4136,4144,4148,4154,4163,4173,4181,4189,4195,4201,4207],{"__ignoreMap":30},[35,4125,4126,4128],{"class":37,"line":38},[35,4127,210],{"class":93},[35,4129,2696],{"class":86},[35,4131,4132,4134],{"class":37,"line":90},[35,4133,2667],{"class":93},[35,4135,2696],{"class":86},[35,4137,4138,4140,4142],{"class":37,"line":112},[35,4139,2677],{"class":86},[35,4141,3591],{"class":93},[35,4143,2696],{"class":86},[35,4145,4146],{"class":37,"line":162},[35,4147,4081],{"class":2661},[35,4149,4150,4152],{"class":37,"line":166},[35,4151,4086],{"class":93},[35,4153,2696],{"class":86},[35,4155,4156,4159,4161],{"class":37,"line":170},[35,4157,4158],{"class":93},"          dockerfile",[35,4160,59],{"class":86},[35,4162,4091],{"class":45},[35,4164,4165,4168,4170],{"class":37,"line":174},[35,4166,4167],{"class":93},"          dockerImageName",[35,4169,59],{"class":86},[35,4171,4172],{"class":45}," cnb.cool\u002Fproject\u002Fimages\u002Fpipeline-env\n",[35,4174,4175,4177,4179],{"class":37,"line":178},[35,4176,3693],{"class":93},[35,4178,59],{"class":86},[35,4180,3804],{"class":45},[35,4182,4183,4185,4187],{"class":37,"line":181},[35,4184,3703],{"class":93},[35,4186,59],{"class":86},[35,4188,3813],{"class":45},[35,4190,4191,4193],{"class":37,"line":185},[35,4192,2693],{"class":93},[35,4194,2696],{"class":86},[35,4196,4197,4199],{"class":37,"line":1000},[35,4198,2701],{"class":86},[35,4200,4104],{"class":45},[35,4202,4203,4205],{"class":37,"line":1025},[35,4204,2701],{"class":86},[35,4206,4111],{"class":45},[35,4208,4209,4211],{"class":37,"line":1256},[35,4210,2701],{"class":86},[35,4212,4118],{"class":45},[25,4214,4216],{"className":2648,"code":4215,"language":2650,"meta":30,"style":30},"main:\n  push:\n    - docker:\n        # 通过 Dockerfile 指定构建环境\n        build:\n          dockerfile: .\u002Fimage\u002FDockerfile\n          # 只构建 builder，而不是整个Dockerfile\n          target: builder\n      stages:\n        - stage1\n        - stage2\n        - stage3\n",[32,4217,4218,4224,4230,4238,4242,4248,4256,4261,4271,4277,4283,4289],{"__ignoreMap":30},[35,4219,4220,4222],{"class":37,"line":38},[35,4221,210],{"class":93},[35,4223,2696],{"class":86},[35,4225,4226,4228],{"class":37,"line":90},[35,4227,2667],{"class":93},[35,4229,2696],{"class":86},[35,4231,4232,4234,4236],{"class":37,"line":112},[35,4233,2677],{"class":86},[35,4235,3591],{"class":93},[35,4237,2696],{"class":86},[35,4239,4240],{"class":37,"line":162},[35,4241,4081],{"class":2661},[35,4243,4244,4246],{"class":37,"line":166},[35,4245,4086],{"class":93},[35,4247,2696],{"class":86},[35,4249,4250,4252,4254],{"class":37,"line":170},[35,4251,4158],{"class":93},[35,4253,59],{"class":86},[35,4255,4091],{"class":45},[35,4257,4258],{"class":37,"line":174},[35,4259,4260],{"class":2661},"          # 只构建 builder，而不是整个Dockerfile\n",[35,4262,4263,4266,4268],{"class":37,"line":178},[35,4264,4265],{"class":93},"          target",[35,4267,59],{"class":86},[35,4269,4270],{"class":45}," builder\n",[35,4272,4273,4275],{"class":37,"line":181},[35,4274,2693],{"class":93},[35,4276,2696],{"class":86},[35,4278,4279,4281],{"class":37,"line":185},[35,4280,2701],{"class":86},[35,4282,4104],{"class":45},[35,4284,4285,4287],{"class":37,"line":1000},[35,4286,2701],{"class":86},[35,4288,4111],{"class":45},[35,4290,4291,4293],{"class":37,"line":1025},[35,4292,2701],{"class":86},[35,4294,4118],{"class":45},[17,4296,4297],{},[3953,4298,4299],{},"Dockerfile versionBy 用法：",[17,4301,4302],{},"示例：将 pnpm 缓存到环境镜像中，加速后续pnpm i过程",[25,4304,4306],{"className":2648,"code":4305,"language":2650,"meta":30,"style":30},"main:\n  push:\n    # 通过 Dockerfile 指定构建环境\n    - docker:\n        build:\n          dockerfile: .\u002FDockerfile\n          versionBy:\n            - package-lock.json\n      stages:\n        - name: pnpm i\n          script: pnpm i\n        - stage1\n        - stage2\n        - stage3\n",[32,4307,4308,4314,4320,4325,4333,4339,4348,4355,4362,4368,4379,4387,4393,4399],{"__ignoreMap":30},[35,4309,4310,4312],{"class":37,"line":38},[35,4311,210],{"class":93},[35,4313,2696],{"class":86},[35,4315,4316,4318],{"class":37,"line":90},[35,4317,2667],{"class":93},[35,4319,2696],{"class":86},[35,4321,4322],{"class":37,"line":112},[35,4323,4324],{"class":2661},"    # 通过 Dockerfile 指定构建环境\n",[35,4326,4327,4329,4331],{"class":37,"line":162},[35,4328,2677],{"class":86},[35,4330,3591],{"class":93},[35,4332,2696],{"class":86},[35,4334,4335,4337],{"class":37,"line":166},[35,4336,4086],{"class":93},[35,4338,2696],{"class":86},[35,4340,4341,4343,4345],{"class":37,"line":170},[35,4342,4158],{"class":93},[35,4344,59],{"class":86},[35,4346,4347],{"class":45}," .\u002FDockerfile\n",[35,4349,4350,4353],{"class":37,"line":174},[35,4351,4352],{"class":93},"          versionBy",[35,4354,2696],{"class":86},[35,4356,4357,4359],{"class":37,"line":178},[35,4358,2723],{"class":86},[35,4360,4361],{"class":45}," package-lock.json\n",[35,4363,4364,4366],{"class":37,"line":181},[35,4365,2693],{"class":93},[35,4367,2696],{"class":86},[35,4369,4370,4372,4374,4376],{"class":37,"line":185},[35,4371,2701],{"class":86},[35,4373,2680],{"class":93},[35,4375,59],{"class":86},[35,4377,4378],{"class":45}," pnpm i\n",[35,4380,4381,4383,4385],{"class":37,"line":1000},[35,4382,3370],{"class":93},[35,4384,59],{"class":86},[35,4386,4378],{"class":45},[35,4388,4389,4391],{"class":37,"line":1025},[35,4390,2701],{"class":86},[35,4392,4104],{"class":45},[35,4394,4395,4397],{"class":37,"line":1256},[35,4396,2701],{"class":86},[35,4398,4111],{"class":45},[35,4400,4401,4403],{"class":37,"line":164},[35,4402,2701],{"class":86},[35,4404,4118],{"class":45},[25,4406,4410],{"className":4407,"code":4408,"language":4409,"meta":30,"style":30},"language-dockerfile shiki shiki-themes material-theme-lighter material-theme-lighter material-theme-palenight","FROM node:20\n\n#替换真实的源\nRUN npm config set registry https:\u002F\u002Fxxx.com\u002Fnpm\u002F \\\n  && npm i -g pnpm \\\n  && pnpm config set store-dir \u002Flib\u002Fpnpm\n\nWORKDIR \u002Fdata\u002Forange-ci\u002Fworkspace\n\nCOPY package.json package-lock.json .\u002F\n\nRUN pnpm i\n","dockerfile",[32,4411,4412,4419,4424,4429,4437,4442,4447,4451,4459,4463,4471,4475],{"__ignoreMap":30},[35,4413,4414,4417],{"class":37,"line":38},[35,4415,4416],{"class":3212},"FROM",[35,4418,3608],{"class":82},[35,4420,4421],{"class":37,"line":90},[35,4422,4423],{"emptyLinePlaceholder":201},"\n",[35,4425,4426],{"class":37,"line":112},[35,4427,4428],{"class":2661},"#替换真实的源\n",[35,4430,4431,4434],{"class":37,"line":162},[35,4432,4433],{"class":3212},"RUN",[35,4435,4436],{"class":82}," npm config set registry https:\u002F\u002Fxxx.com\u002Fnpm\u002F \\\n",[35,4438,4439],{"class":37,"line":166},[35,4440,4441],{"class":82},"  && npm i -g pnpm \\\n",[35,4443,4444],{"class":37,"line":170},[35,4445,4446],{"class":82},"  && pnpm config set store-dir \u002Flib\u002Fpnpm\n",[35,4448,4449],{"class":37,"line":174},[35,4450,4423],{"emptyLinePlaceholder":201},[35,4452,4453,4456],{"class":37,"line":178},[35,4454,4455],{"class":3212},"WORKDIR",[35,4457,4458],{"class":82}," \u002Fdata\u002Forange-ci\u002Fworkspace\n",[35,4460,4461],{"class":37,"line":181},[35,4462,4423],{"emptyLinePlaceholder":201},[35,4464,4465,4468],{"class":37,"line":185},[35,4466,4467],{"class":3212},"COPY",[35,4469,4470],{"class":82}," package.json package-lock.json .\u002F\n",[35,4472,4473],{"class":37,"line":1000},[35,4474,4423],{"emptyLinePlaceholder":201},[35,4476,4477,4479],{"class":37,"line":1025},[35,4478,4433],{"class":3212},[35,4480,4378],{"class":82},[25,4482,4487],{"className":4483,"code":4485,"language":4486,"meta":30},[4484],"language-text","[pnpm i] Progress: resolved 445, reused 444, downloaded 0, added 100\n[pnpm i] Progress: resolved 445, reused 444, downloaded 0, added 141\n[pnpm i] Progress: resolved 445, reused 444, downloaded 0, added 272\n[pnpm i] Progress: resolved 445, reused 444, downloaded 0, added 444, done\n[pnpm i]\n[pnpm i] dependencies:\n[pnpm i] + mocha 8.4.0 (10.0.0 is available)\n[pnpm i]\n[pnpm i] devDependencies:\n[pnpm i] + babel-eslint 9.0.0 (10.1.0 is available)\n[pnpm i] + eslint 5.16.0 (8.23.0 is available)\n[pnpm i] + jest 27.5.1 (29.0.2 is available)\n[pnpm i]\n[pnpm i]\n[pnpm i] Job finished, duration: 6.8s\n","text",[32,4488,4485],{"__ignoreMap":30},[3284,4490,3504],{"id":3504},[123,4492,4493],{},[126,4494,3233,4495,3516,4497],{},[32,4496,3295],{},[32,4498,3236],{},[17,4500,4501,4502,4505],{},"声明数据卷，多个数据卷可用通过数组或者用",[32,4503,4504],{},",","号做分割符传入，可引用环境变量，支持的格式有：",[4507,4508,4509,4514,4519],"ol",{},[126,4510,4511],{},[32,4512,4513],{},"\u003Cgroup>:\u003Cpath>:\u003Ctype>",[126,4515,4516],{},[32,4517,4518],{},"\u003Cpath>:\u003Ctype>",[126,4520,4521],{},[32,4522,4523],{},"\u003Cpath>",[17,4525,4526],{},"各项含义：",[123,4528,4529,4535,4549],{},[126,4530,4531,4534],{},[32,4532,4533],{},"group",": 可选，数据卷分组，不同组间相互隔离",[126,4536,4537,4540,4541,4544,4545,4548],{},[32,4538,4539],{},"path",": 必填，数据卷挂载绝对路径，支持绝对路径（",[32,4542,4543],{},"\u002F"," 开头） 或 相对路径（",[32,4546,4547],{},".\u002F"," 开头），相对于工作区",[126,4550,4551,4554,4555,4561,4562],{},[32,4552,4553],{},"type",": 可选，数据卷类型，",[3953,4556,4557,4558],{},"缺省值为 ",[32,4559,4560],{},"copy-on-write","，支持以下类型：\n",[123,4563,4564,4574,4583,4595,4601],{},[126,4565,4566,4569,4570,4573],{},[32,4567,4568],{},"read-write"," 或 ",[32,4571,4572],{},"rw"," : 读写，并发写冲突需自行处理，适用于串行构建场景",[126,4575,4576,4569,4579,4582],{},[32,4577,4578],{},"read-only",[32,4580,4581],{},"ro"," : 只读，写操作抛出异常",[126,4584,4585,4569,4587,4590,4591,4594],{},[32,4586,4560],{},[32,4588,4589],{},"cow"," : 读写，变更（新增、修改、删除）在 ",[3953,4592,4593],{},"流水线成功"," 后被合并，适用于并发构建场景",[126,4596,4597,4600],{},[32,4598,4599],{},"copy-on-write-read-only"," : 只读，变更（新增、删除、修改）在流水线结束后丢弃",[126,4602,4603,4606],{},[32,4604,4605],{},"data"," : 创建一个临时数据卷，该数据卷在流水线结束时会自动清理",[4608,4609,4560],"h5",{"id":4560},[17,4611,4612],{},"用于缓存场景，支持并发",[17,4614,4615,4617],{},[32,4616,4560],{}," 技术允许系统在需要修改数据之前共享相同的数据副本，从而实现高效的缓存复制。\n在并发环境中，这种方法避免了缓存的读写冲突，因为只有在实际需要修改数据时，才会创建数据的私有副本。\n这样，只有写操作会导致数据复制，而读操作可以安全地并行进行，无需担心数据一致性问题。\n这种机制显著提高了性能，尤其是在读多写少的缓存场景中。",[4608,4619,4605],{"id":4605},[17,4621,4622],{},"用于共享数据，将容器中的指定目录，共享给其他容器中使用。",[17,4624,4625],{},"通过创建数据卷，然后 mount 到各容器中。\n与直接将构建节点上目录 mount 到容器中方式不同的是：当指定的目录在容器中已经存在，\n会先把容器中内容自动复制到数据卷，而不是将数据卷内容直接覆盖容器中目录。",[4608,4627,4629],{"id":4628},"volumes-示例","volumes 示例",[17,4631,4632],{},"示例1 : 挂载构建节点上目录到容器中，实现本地缓存效果",[25,4634,4636],{"className":2648,"code":4635,"language":2650,"meta":30,"style":30},"main:\n  push:\n    - docker:\n        image: node:20\n        # 声明数据卷\n        volumes:\n          - \u002Fdata\u002Fconfig:read-only\n          - \u002Fdata\u002Fmydata:read-write\n\n          # 使用缓存，同时更新\n          - \u002Froot\u002F.npm\n\n          # 使用 main 缓存，同时更新\n          - main:\u002Froot\u002F.gradle:copy-on-write\n\n      stages:\n        - stage1\n        - stage2\n        - stage3\n  pull_request:\n    - docker:\n        image: node:20\n\n        # 声明数据卷\n        volumes:\n          - \u002Fdata\u002Fconfig:read-only\n          - \u002Fdata\u002Fmydata:read-write\n\n          # 使用 copy-on-write 缓存\n          - \u002Froot\u002F.npm\n          - node_modules\n\n          # pr 使用 main 缓存，但不更新\n          - main:\u002Froot\u002F.gradle:copy-on-write-read-only\n\n      stages:\n        - stage1\n        - stage2\n        - stage3\n",[32,4637,4638,4644,4650,4658,4666,4671,4678,4686,4693,4697,4702,4709,4713,4718,4725,4729,4735,4741,4747,4753,4760,4768,4776,4780,4784,4790,4796,4802,4806,4811,4817,4824,4828,4833,4840,4844,4850,4856,4862],{"__ignoreMap":30},[35,4639,4640,4642],{"class":37,"line":38},[35,4641,210],{"class":93},[35,4643,2696],{"class":86},[35,4645,4646,4648],{"class":37,"line":90},[35,4647,2667],{"class":93},[35,4649,2696],{"class":86},[35,4651,4652,4654,4656],{"class":37,"line":112},[35,4653,2677],{"class":86},[35,4655,3591],{"class":93},[35,4657,2696],{"class":86},[35,4659,4660,4662,4664],{"class":37,"line":162},[35,4661,3603],{"class":93},[35,4663,59],{"class":86},[35,4665,3608],{"class":45},[35,4667,4668],{"class":37,"line":166},[35,4669,4670],{"class":2661},"        # 声明数据卷\n",[35,4672,4673,4676],{"class":37,"line":170},[35,4674,4675],{"class":93},"        volumes",[35,4677,2696],{"class":86},[35,4679,4680,4683],{"class":37,"line":174},[35,4681,4682],{"class":86},"          -",[35,4684,4685],{"class":45}," \u002Fdata\u002Fconfig:read-only\n",[35,4687,4688,4690],{"class":37,"line":178},[35,4689,4682],{"class":86},[35,4691,4692],{"class":45}," \u002Fdata\u002Fmydata:read-write\n",[35,4694,4695],{"class":37,"line":181},[35,4696,4423],{"emptyLinePlaceholder":201},[35,4698,4699],{"class":37,"line":185},[35,4700,4701],{"class":2661},"          # 使用缓存，同时更新\n",[35,4703,4704,4706],{"class":37,"line":1000},[35,4705,4682],{"class":86},[35,4707,4708],{"class":45}," \u002Froot\u002F.npm\n",[35,4710,4711],{"class":37,"line":1025},[35,4712,4423],{"emptyLinePlaceholder":201},[35,4714,4715],{"class":37,"line":1256},[35,4716,4717],{"class":2661},"          # 使用 main 缓存，同时更新\n",[35,4719,4720,4722],{"class":37,"line":164},[35,4721,4682],{"class":86},[35,4723,4724],{"class":45}," main:\u002Froot\u002F.gradle:copy-on-write\n",[35,4726,4727],{"class":37,"line":2961},[35,4728,4423],{"emptyLinePlaceholder":201},[35,4730,4731,4733],{"class":37,"line":157},[35,4732,2693],{"class":93},[35,4734,2696],{"class":86},[35,4736,4737,4739],{"class":37,"line":2976},[35,4738,2701],{"class":86},[35,4740,4104],{"class":45},[35,4742,4743,4745],{"class":37,"line":864},[35,4744,2701],{"class":86},[35,4746,4111],{"class":45},[35,4748,4749,4751],{"class":37,"line":881},[35,4750,2701],{"class":86},[35,4752,4118],{"class":45},[35,4754,4755,4758],{"class":37,"line":1009},[35,4756,4757],{"class":93},"  pull_request",[35,4759,2696],{"class":86},[35,4761,4762,4764,4766],{"class":37,"line":3011},[35,4763,2677],{"class":86},[35,4765,3591],{"class":93},[35,4767,2696],{"class":86},[35,4769,4770,4772,4774],{"class":37,"line":732},[35,4771,3603],{"class":93},[35,4773,59],{"class":86},[35,4775,3608],{"class":45},[35,4777,4778],{"class":37,"line":461},[35,4779,4423],{"emptyLinePlaceholder":201},[35,4781,4782],{"class":37,"line":3040},[35,4783,4670],{"class":2661},[35,4785,4786,4788],{"class":37,"line":3052},[35,4787,4675],{"class":93},[35,4789,2696],{"class":86},[35,4791,4792,4794],{"class":37,"line":1396},[35,4793,4682],{"class":86},[35,4795,4685],{"class":45},[35,4797,4798,4800],{"class":37,"line":1528},[35,4799,4682],{"class":86},[35,4801,4692],{"class":45},[35,4803,4804],{"class":37,"line":1674},[35,4805,4423],{"emptyLinePlaceholder":201},[35,4807,4808],{"class":37,"line":472},[35,4809,4810],{"class":2661},"          # 使用 copy-on-write 缓存\n",[35,4812,4813,4815],{"class":37,"line":1014},[35,4814,4682],{"class":86},[35,4816,4708],{"class":45},[35,4818,4819,4821],{"class":37,"line":1937},[35,4820,4682],{"class":86},[35,4822,4823],{"class":45}," node_modules\n",[35,4825,4826],{"class":37,"line":183},[35,4827,4423],{"emptyLinePlaceholder":201},[35,4829,4830],{"class":37,"line":729},[35,4831,4832],{"class":2661},"          # pr 使用 main 缓存，但不更新\n",[35,4834,4835,4837],{"class":37,"line":3136},[35,4836,4682],{"class":86},[35,4838,4839],{"class":45}," main:\u002Froot\u002F.gradle:copy-on-write-read-only\n",[35,4841,4842],{"class":37,"line":740},[35,4843,4423],{"emptyLinePlaceholder":201},[35,4845,4846,4848],{"class":37,"line":187},[35,4847,2693],{"class":93},[35,4849,2696],{"class":86},[35,4851,4852,4854],{"class":37,"line":329},[35,4853,2701],{"class":86},[35,4855,4104],{"class":45},[35,4857,4858,4860],{"class":37,"line":873},[35,4859,2701],{"class":86},[35,4861,4111],{"class":45},[35,4863,4864,4866],{"class":37,"line":1814},[35,4865,2701],{"class":86},[35,4867,4118],{"class":45},[17,4869,4870],{},"示例2：将打包在容器中的文件，共享到其他容器中使用",[25,4872,4874],{"className":2648,"code":4873,"language":2650,"meta":30,"style":30},"# .cnb.yml\nmain:\n  push:\n    - docker:\n        image: go-app-cli # 假设有个go应用在镜像的\u002Fgo-app\u002Fcli路径下\n        # 声明数据卷\n        volumes:\n          # 此路径在go-app-cli镜像存在，所以执行环境镜像时，会将此路径内容复制到临时数据卷中，可共享给其他任务容器里使用\n          - \u002Fgo-app\n      stages:\n        - name: show \u002Fgo-app-cli in job container\n          image: alpine\n          script: ls \u002Fgo-app\n",[32,4875,4876,4881,4887,4893,4901,4913,4917,4923,4928,4935,4941,4952,4962],{"__ignoreMap":30},[35,4877,4878],{"class":37,"line":38},[35,4879,4880],{"class":2661},"# .cnb.yml\n",[35,4882,4883,4885],{"class":37,"line":90},[35,4884,210],{"class":93},[35,4886,2696],{"class":86},[35,4888,4889,4891],{"class":37,"line":112},[35,4890,2667],{"class":93},[35,4892,2696],{"class":86},[35,4894,4895,4897,4899],{"class":37,"line":162},[35,4896,2677],{"class":86},[35,4898,3591],{"class":93},[35,4900,2696],{"class":86},[35,4902,4903,4905,4907,4910],{"class":37,"line":166},[35,4904,3603],{"class":93},[35,4906,59],{"class":86},[35,4908,4909],{"class":45}," go-app-cli",[35,4911,4912],{"class":2661}," # 假设有个go应用在镜像的\u002Fgo-app\u002Fcli路径下\n",[35,4914,4915],{"class":37,"line":170},[35,4916,4670],{"class":2661},[35,4918,4919,4921],{"class":37,"line":174},[35,4920,4675],{"class":93},[35,4922,2696],{"class":86},[35,4924,4925],{"class":37,"line":178},[35,4926,4927],{"class":2661},"          # 此路径在go-app-cli镜像存在，所以执行环境镜像时，会将此路径内容复制到临时数据卷中，可共享给其他任务容器里使用\n",[35,4929,4930,4932],{"class":37,"line":181},[35,4931,4682],{"class":86},[35,4933,4934],{"class":45}," \u002Fgo-app\n",[35,4936,4937,4939],{"class":37,"line":185},[35,4938,2693],{"class":93},[35,4940,2696],{"class":86},[35,4942,4943,4945,4947,4949],{"class":37,"line":1000},[35,4944,2701],{"class":86},[35,4946,2680],{"class":93},[35,4948,59],{"class":86},[35,4950,4951],{"class":45}," show \u002Fgo-app-cli in job container\n",[35,4953,4954,4957,4959],{"class":37,"line":1025},[35,4955,4956],{"class":93},"          image",[35,4958,59],{"class":86},[35,4960,4961],{"class":45}," alpine\n",[35,4963,4964,4966,4968],{"class":37,"line":1256},[35,4965,3370],{"class":93},[35,4967,59],{"class":86},[35,4969,4970],{"class":45}," ls \u002Fgo-app\n",[3225,4972,2895],{"id":2895},[123,4974,4975],{},[126,4976,3233,4977],{},[32,4978,3265],{},[17,4980,4981],{},"提供 Git 仓库相关配置。",[3284,4983,4985],{"id":4984},"gitenable","git.enable",[123,4987,4988,4992],{},[126,4989,3233,4990],{},[32,4991,4011],{},[126,4993,3298,4994],{},[32,4995,4996],{},"true",[17,4998,4999],{},"指定是否拉取代码。",[17,5001,5002,5005,5006,5008,5009,3309],{},[32,5003,5004],{},"branch.delete"," 事件，默认值为 ",[32,5007,4038],{},"。其他事件，默认值为 ",[32,5010,4996],{},[3284,5012,5014],{"id":5013},"gitsubmodules","git.submodules",[123,5016,5017,5023],{},[126,5018,3233,5019,3516,5021],{},[32,5020,3265],{},[32,5022,4011],{},[126,5024,5025,5026],{},"default:\n",[123,5027,5028,5033],{},[126,5029,5030,5031],{},"enable: ",[32,5032,4996],{},[126,5034,5035,5036],{},"remote: ",[32,5037,4038],{},[17,5039,5040],{},"指定是否要拉取子项目（submodules）。",[17,5042,5043,5044,5046,5047,5050,5051,5053,5054,5057,5058,3309],{},"当值为 ",[32,5045,4011],{}," 类型时，相当于指定 ",[32,5048,5049],{},"git.submodules.enable"," 为 ",[32,5052,5014],{}," 的值，",[32,5055,5056],{},"git.submodules.remote"," 为默认值 ",[32,5059,4038],{},[4608,5061,5049],{"id":5062},"gitsubmodulesenable",[123,5064,5065,5069],{},[126,5066,3233,5067],{},[32,5068,4011],{},[126,5070,3298,5071],{},[32,5072,4996],{},[17,5074,5075,5076,3309],{},"是否指定是否要拉取子项目 ",[32,5077,5078],{},"submodules",[4608,5080,5056],{"id":5081},"gitsubmodulesremote",[123,5083,5084,5088],{},[126,5085,3233,5086],{},[32,5087,4011],{},[126,5089,3298,5090],{},[32,5091,4038],{},[17,5093,5094,5095,5098,5099,5102,5103,5106],{},"执行 ",[32,5096,5097],{},"git submodule update"," 时是否添加 ",[32,5100,5101],{},"--remote"," 参数，用于每次拉取 ",[32,5104,5105],{},"submodule"," 最新的代码",[17,5108,5109],{},[3953,5110,5111],{},"基本用法：",[25,5113,5115],{"className":2648,"code":5114,"language":2650,"meta":30,"style":30},"main:\n  push:\n    - git:\n        enable: true\n        submodules: true\n      stages:\n        - name: echo\n          script: echo \"hello world\"\n    - git:\n        enable: true\n        submodules:\n          enable: true\n          remote: true\n      stages:\n        - name: echo\n          script: echo \"hello world\"\n",[32,5116,5117,5123,5129,5138,5147,5156,5162,5172,5180,5188,5196,5202,5211,5220,5226,5236],{"__ignoreMap":30},[35,5118,5119,5121],{"class":37,"line":38},[35,5120,210],{"class":93},[35,5122,2696],{"class":86},[35,5124,5125,5127],{"class":37,"line":90},[35,5126,2667],{"class":93},[35,5128,2696],{"class":86},[35,5130,5131,5133,5136],{"class":37,"line":112},[35,5132,2677],{"class":86},[35,5134,5135],{"class":93}," git",[35,5137,2696],{"class":86},[35,5139,5140,5143,5145],{"class":37,"line":162},[35,5141,5142],{"class":93},"        enable",[35,5144,59],{"class":86},[35,5146,2908],{"class":2907},[35,5148,5149,5152,5154],{"class":37,"line":166},[35,5150,5151],{"class":93},"        submodules",[35,5153,59],{"class":86},[35,5155,2908],{"class":2907},[35,5157,5158,5160],{"class":37,"line":170},[35,5159,2693],{"class":93},[35,5161,2696],{"class":86},[35,5163,5164,5166,5168,5170],{"class":37,"line":174},[35,5165,2701],{"class":86},[35,5167,2680],{"class":93},[35,5169,59],{"class":86},[35,5171,2743],{"class":45},[35,5173,5174,5176,5178],{"class":37,"line":178},[35,5175,3370],{"class":93},[35,5177,59],{"class":86},[35,5179,3457],{"class":45},[35,5181,5182,5184,5186],{"class":37,"line":181},[35,5183,2677],{"class":86},[35,5185,5135],{"class":93},[35,5187,2696],{"class":86},[35,5189,5190,5192,5194],{"class":37,"line":185},[35,5191,5142],{"class":93},[35,5193,59],{"class":86},[35,5195,2908],{"class":2907},[35,5197,5198,5200],{"class":37,"line":1000},[35,5199,5151],{"class":93},[35,5201,2696],{"class":86},[35,5203,5204,5207,5209],{"class":37,"line":1025},[35,5205,5206],{"class":93},"          enable",[35,5208,59],{"class":86},[35,5210,2908],{"class":2907},[35,5212,5213,5216,5218],{"class":37,"line":1256},[35,5214,5215],{"class":93},"          remote",[35,5217,59],{"class":86},[35,5219,2908],{"class":2907},[35,5221,5222,5224],{"class":37,"line":164},[35,5223,2693],{"class":93},[35,5225,2696],{"class":86},[35,5227,5228,5230,5232,5234],{"class":37,"line":2961},[35,5229,2701],{"class":86},[35,5231,2680],{"class":93},[35,5233,59],{"class":86},[35,5235,2743],{"class":45},[35,5237,5238,5240,5242],{"class":37,"line":157},[35,5239,3370],{"class":93},[35,5241,59],{"class":86},[35,5243,3457],{"class":45},[3284,5245,5247],{"id":5246},"gitlfs","git.lfs",[123,5249,5250,5256],{},[126,5251,3233,5252,3516,5254],{},[32,5253,3265],{},[32,5255,4011],{},[126,5257,3298,5258],{},[32,5259,4996],{},[17,5261,5262],{},"指定是否要拉取 LFS 文件。",[17,5264,5265,5266,5268],{},"支持 ",[32,5267,3265],{}," 形式指定具体参数，字段缺省时，默认值为：",[25,5270,5274],{"className":5271,"code":5272,"language":5273,"meta":30,"style":30},"language-json shiki shiki-themes material-theme-lighter material-theme-lighter material-theme-palenight","{\n  \"enable\": true\n}\n","json",[32,5275,5276,5280,5296],{"__ignoreMap":30},[35,5277,5278],{"class":37,"line":38},[35,5279,87],{"class":86},[35,5281,5282,5285,5289,5292,5294],{"class":37,"line":90},[35,5283,5284],{"class":86},"  \"",[35,5286,5288],{"class":5287},"smZ93","enable",[35,5290,5291],{"class":86},"\"",[35,5293,59],{"class":86},[35,5295,2908],{"class":86},[35,5297,5298],{"class":37,"line":112},[35,5299,5300],{"class":86},"}\n",[17,5302,5303],{},[3953,5304,5111],{},[25,5306,5308],{"className":2648,"code":5307,"language":2650,"meta":30,"style":30},"main:\n  push:\n    - git:\n        enable: true\n        lfs: true\n      stages:\n        - name: echo\n          script: echo \"hello world\"\n    - git:\n        enable: true\n        lfs:\n          enable: true\n      stages:\n        - name: echo\n          script: echo \"hello world\"\n",[32,5309,5310,5316,5322,5330,5338,5347,5353,5363,5371,5379,5387,5393,5401,5407,5417],{"__ignoreMap":30},[35,5311,5312,5314],{"class":37,"line":38},[35,5313,210],{"class":93},[35,5315,2696],{"class":86},[35,5317,5318,5320],{"class":37,"line":90},[35,5319,2667],{"class":93},[35,5321,2696],{"class":86},[35,5323,5324,5326,5328],{"class":37,"line":112},[35,5325,2677],{"class":86},[35,5327,5135],{"class":93},[35,5329,2696],{"class":86},[35,5331,5332,5334,5336],{"class":37,"line":162},[35,5333,5142],{"class":93},[35,5335,59],{"class":86},[35,5337,2908],{"class":2907},[35,5339,5340,5343,5345],{"class":37,"line":166},[35,5341,5342],{"class":93},"        lfs",[35,5344,59],{"class":86},[35,5346,2908],{"class":2907},[35,5348,5349,5351],{"class":37,"line":170},[35,5350,2693],{"class":93},[35,5352,2696],{"class":86},[35,5354,5355,5357,5359,5361],{"class":37,"line":174},[35,5356,2701],{"class":86},[35,5358,2680],{"class":93},[35,5360,59],{"class":86},[35,5362,2743],{"class":45},[35,5364,5365,5367,5369],{"class":37,"line":178},[35,5366,3370],{"class":93},[35,5368,59],{"class":86},[35,5370,3457],{"class":45},[35,5372,5373,5375,5377],{"class":37,"line":181},[35,5374,2677],{"class":86},[35,5376,5135],{"class":93},[35,5378,2696],{"class":86},[35,5380,5381,5383,5385],{"class":37,"line":185},[35,5382,5142],{"class":93},[35,5384,59],{"class":86},[35,5386,2908],{"class":2907},[35,5388,5389,5391],{"class":37,"line":1000},[35,5390,5342],{"class":93},[35,5392,2696],{"class":86},[35,5394,5395,5397,5399],{"class":37,"line":1025},[35,5396,5206],{"class":93},[35,5398,59],{"class":86},[35,5400,2908],{"class":2907},[35,5402,5403,5405],{"class":37,"line":1256},[35,5404,2693],{"class":93},[35,5406,2696],{"class":86},[35,5408,5409,5411,5413,5415],{"class":37,"line":164},[35,5410,2701],{"class":86},[35,5412,2680],{"class":93},[35,5414,59],{"class":86},[35,5416,2743],{"class":45},[35,5418,5419,5421,5423],{"class":37,"line":2961},[35,5420,3370],{"class":93},[35,5422,59],{"class":86},[35,5424,3457],{"class":45},[4608,5426,5428],{"id":5427},"gitlfsenable","git.lfs.enable",[17,5430,5431],{},"是否指定是否要拉取 LFS 文件。",[3225,5433,2931],{"id":2931},[123,5435,5436],{},[126,5437,3233,5438],{},[32,5439,3295],{},[17,5441,5442,5443,5446,5447,5450],{},"用于声明构建时需要的服务，格式：",[32,5444,5445],{},"name:[version]",", ",[32,5448,5449],{},"version"," 是可选的。",[17,5452,5453],{},"目前支持的服务有：",[123,5455,5456,5458],{},[126,5457,2854],{},[126,5459,5460],{},"vscode",[3284,5462,5464],{"id":5463},"servicedocker","service:docker",[17,5466,5467,5468,5471],{},"用于开启 ",[32,5469,5470],{},"dind"," 服务，",[17,5473,5474,5475,5478,5479,5482,5483,5486,5487,3309],{},"当构建过程中需要使用 ",[32,5476,5477],{},"docker build","，",[32,5480,5481],{},"docker login"," 等操作时声明，\n会自动在环境注入 ",[32,5484,5485],{},"docker daemon"," 和 ",[32,5488,5489],{},"docker cli",[17,5491,3312],{},[25,5493,5495],{"className":2648,"code":5494,"language":2650,"meta":30,"style":30},"main:\n  push:\n    - services:\n        - docker\n      docker:\n        image: alpine\n      stages:\n        - name: docker info\n          script:\n            - docker info\n            - docker ps\n",[32,5496,5497,5503,5509,5518,5524,5530,5538,5544,5555,5561,5567],{"__ignoreMap":30},[35,5498,5499,5501],{"class":37,"line":38},[35,5500,210],{"class":93},[35,5502,2696],{"class":86},[35,5504,5505,5507],{"class":37,"line":90},[35,5506,2667],{"class":93},[35,5508,2696],{"class":86},[35,5510,5511,5513,5516],{"class":37,"line":112},[35,5512,2677],{"class":86},[35,5514,5515],{"class":93}," services",[35,5517,2696],{"class":86},[35,5519,5520,5522],{"class":37,"line":162},[35,5521,2701],{"class":86},[35,5523,2941],{"class":45},[35,5525,5526,5528],{"class":37,"line":166},[35,5527,3769],{"class":93},[35,5529,2696],{"class":86},[35,5531,5532,5534,5536],{"class":37,"line":170},[35,5533,3603],{"class":93},[35,5535,59],{"class":86},[35,5537,4961],{"class":45},[35,5539,5540,5542],{"class":37,"line":174},[35,5541,2693],{"class":93},[35,5543,2696],{"class":86},[35,5545,5546,5548,5550,5552],{"class":37,"line":178},[35,5547,2701],{"class":86},[35,5549,2680],{"class":93},[35,5551,59],{"class":86},[35,5553,5554],{"class":45}," docker info\n",[35,5556,5557,5559],{"class":37,"line":181},[35,5558,3370],{"class":93},[35,5560,2696],{"class":86},[35,5562,5563,5565],{"class":37,"line":185},[35,5564,2723],{"class":86},[35,5566,5554],{"class":45},[35,5568,5569,5571],{"class":37,"line":1000},[35,5570,2723],{"class":86},[35,5572,5573],{"class":45}," docker ps\n",[17,5575,5576,5577,5579,5580,5582],{},"该服务会自动 ",[32,5578,5481],{}," 到 CNB Docker 制品库的镜像源(docker.cnb.cool)，\n在后续任务中可直接 ",[32,5581,4034],{}," 到当前仓库 Docker 制品库。",[17,5584,3312],{},[25,5586,5588],{"className":2648,"code":5587,"language":2650,"meta":30,"style":30},"main:\n  push:\n    - services:\n        - docker\n      stages:\n        - name: build and push\n          script: |\n            # 根目录存在 Dockerfile 文件\n            docker build -t ${CNB_DOCKER_REGISTRY}\u002F${CNB_REPO_SLUG_LOWERCASE}:latest .\n            docker push ${CNB_DOCKER_REGISTRY}\u002F${CNB_REPO_SLUG_LOWERCASE}:latest\n",[32,5589,5590,5596,5602,5610,5616,5622,5633,5642,5647,5652],{"__ignoreMap":30},[35,5591,5592,5594],{"class":37,"line":38},[35,5593,210],{"class":93},[35,5595,2696],{"class":86},[35,5597,5598,5600],{"class":37,"line":90},[35,5599,2667],{"class":93},[35,5601,2696],{"class":86},[35,5603,5604,5606,5608],{"class":37,"line":112},[35,5605,2677],{"class":86},[35,5607,5515],{"class":93},[35,5609,2696],{"class":86},[35,5611,5612,5614],{"class":37,"line":162},[35,5613,2701],{"class":86},[35,5615,2941],{"class":45},[35,5617,5618,5620],{"class":37,"line":166},[35,5619,2693],{"class":93},[35,5621,2696],{"class":86},[35,5623,5624,5626,5628,5630],{"class":37,"line":170},[35,5625,2701],{"class":86},[35,5627,2680],{"class":93},[35,5629,59],{"class":86},[35,5631,5632],{"class":45}," build and push\n",[35,5634,5635,5637,5639],{"class":37,"line":174},[35,5636,3370],{"class":93},[35,5638,59],{"class":86},[35,5640,5641],{"class":71}," |\n",[35,5643,5644],{"class":37,"line":178},[35,5645,5646],{"class":45},"            # 根目录存在 Dockerfile 文件\n",[35,5648,5649],{"class":37,"line":181},[35,5650,5651],{"class":45},"            docker build -t ${CNB_DOCKER_REGISTRY}\u002F${CNB_REPO_SLUG_LOWERCASE}:latest .\n",[35,5653,5654],{"class":37,"line":185},[35,5655,5656],{"class":45},"            docker push ${CNB_DOCKER_REGISTRY}\u002F${CNB_REPO_SLUG_LOWERCASE}:latest\n",[3284,5658,5660],{"id":5659},"servicevscode","service:vscode",[17,5662,5663],{},"需要远程开发时声明。",[17,5665,3312],{},[25,5667,5669],{"className":2648,"code":5668,"language":2650,"meta":30,"style":30},"$:\n  vscode:\n    - services:\n        - vscode\n        - docker\n      docker:\n        image: alpine\n      stages:\n        - name: uname\n          script: uname -a\n",[32,5670,5671,5678,5685,5693,5700,5706,5712,5720,5726,5736],{"__ignoreMap":30},[35,5672,5673,5676],{"class":37,"line":38},[35,5674,5675],{"class":93},"$",[35,5677,2696],{"class":86},[35,5679,5680,5683],{"class":37,"line":90},[35,5681,5682],{"class":93},"  vscode",[35,5684,2696],{"class":86},[35,5686,5687,5689,5691],{"class":37,"line":112},[35,5688,2677],{"class":86},[35,5690,5515],{"class":93},[35,5692,2696],{"class":86},[35,5694,5695,5697],{"class":37,"line":162},[35,5696,2701],{"class":86},[35,5698,5699],{"class":45}," vscode\n",[35,5701,5702,5704],{"class":37,"line":166},[35,5703,2701],{"class":86},[35,5705,2941],{"class":45},[35,5707,5708,5710],{"class":37,"line":170},[35,5709,3769],{"class":93},[35,5711,2696],{"class":86},[35,5713,5714,5716,5718],{"class":37,"line":174},[35,5715,3603],{"class":93},[35,5717,59],{"class":86},[35,5719,4961],{"class":45},[35,5721,5722,5724],{"class":37,"line":178},[35,5723,2693],{"class":93},[35,5725,2696],{"class":86},[35,5727,5728,5730,5732,5734],{"class":37,"line":181},[35,5729,2701],{"class":86},[35,5731,2680],{"class":93},[35,5733,59],{"class":86},[35,5735,3365],{"class":45},[35,5737,5738,5740,5742],{"class":37,"line":185},[35,5739,3370],{"class":93},[35,5741,59],{"class":86},[35,5743,3375],{"class":45},[3225,5745,5747],{"id":5746},"env-pipeline-env","env {#pipeline-env}",[123,5749,5750],{},[126,5751,3233,5752],{},[32,5753,3265],{},[17,5755,5756,5757,5759],{},"指定环境变量。可以定义一组环境变量，在任务执行中使用。对当前 ",[32,5758,2623],{}," 内的非插件任务均有效。",[3225,5761,5763],{"id":5762},"imports-pipeline-imports","imports {#pipeline-imports}",[123,5765,5766],{},[126,5767,3233,5768,3516,5770],{},[32,5769,3295],{},[32,5771,3236],{},[17,5773,5774],{},"指定 CNB Git 仓库文件路径（文件相对路径或 http 地址），可以读取此文件作为环境变量来源。",[17,5776,5777,5778,5781],{},"本地相对路径如 ",[32,5779,5780],{},".\u002Fenv.yml"," 会被拼接成远端 http 文件地址进行加载。",[17,5783,5784,5792],{},[3953,5785,5786,5788,5789,5791],{},[32,5787,2026],{}," 现支持",[129,5790,1988],{"href":1989},"，安全性更高，支持文件引用审计，",[3953,5793,5794,5795,5797,5798,5800],{},"一般使用一个密钥仓库来存放诸如 ",[32,5796,42],{}," 、 ",[32,5799,2854],{}," 等账号密码。",[17,5802,3312],{},[25,5804,5806],{"className":2648,"code":5805,"language":2650,"meta":30,"style":30},"#env.yml\nDOCKER_USER: 'username'\nDOCKER_TOKEN: 'token'\nDOCKER_REGISTRY: 'https:\u002F\u002Fxxx\u002Fxxx'\n",[32,5807,5808,5813,5826,5840],{"__ignoreMap":30},[35,5809,5810],{"class":37,"line":38},[35,5811,5812],{"class":2661},"#env.yml\n",[35,5814,5815,5817,5819,5821,5824],{"class":37,"line":90},[35,5816,3850],{"class":93},[35,5818,59],{"class":86},[35,5820,3196],{"class":86},[35,5822,5823],{"class":45},"username",[35,5825,3202],{"class":86},[35,5827,5828,5831,5833,5835,5838],{"class":37,"line":112},[35,5829,5830],{"class":93},"DOCKER_TOKEN",[35,5832,59],{"class":86},[35,5834,3196],{"class":86},[35,5836,5837],{"class":45},"token",[35,5839,3202],{"class":86},[35,5841,5842,5845,5847,5849,5852],{"class":37,"line":162},[35,5843,5844],{"class":93},"DOCKER_REGISTRY",[35,5846,59],{"class":86},[35,5848,3196],{"class":86},[35,5850,5851],{"class":45},"https:\u002F\u002Fxxx\u002Fxxx",[35,5853,3202],{"class":86},[25,5855,5857],{"className":2648,"code":5856,"language":2650,"meta":30,"style":30},"#.cnb.yml\nmain:\n  push:\n    - services:\n        - docker\n      imports:\n        - https:\u002F\u002Fcnb.cool\u002F\u003Cyour-repo-slug>\u002F-\u002Fblob\u002Fmain\u002Fxxx\u002Fenv.yml\n      stages:\n        - name: docker push\n          script: |\n            docker login -u ${DOCKER_USER} -p \"${DOCKER_TOKEN}\" ${CNB_DOCKER_REGISTRY}\n            docker build -t ${DOCKER_REGISTRY}\u002F${CNB_REPO_SLUG_LOWERCASE}:latest .\n            docker push ${DOCKER_REGISTRY}\u002F${CNB_REPO_SLUG_LOWERCASE}:latest\n",[32,5858,5859,5864,5870,5876,5884,5890,5897,5904,5910,5921,5929,5934,5939],{"__ignoreMap":30},[35,5860,5861],{"class":37,"line":38},[35,5862,5863],{"class":2661},"#.cnb.yml\n",[35,5865,5866,5868],{"class":37,"line":90},[35,5867,210],{"class":93},[35,5869,2696],{"class":86},[35,5871,5872,5874],{"class":37,"line":112},[35,5873,2667],{"class":93},[35,5875,2696],{"class":86},[35,5877,5878,5880,5882],{"class":37,"line":162},[35,5879,2677],{"class":86},[35,5881,5515],{"class":93},[35,5883,2696],{"class":86},[35,5885,5886,5888],{"class":37,"line":166},[35,5887,2701],{"class":86},[35,5889,2941],{"class":45},[35,5891,5892,5895],{"class":37,"line":170},[35,5893,5894],{"class":93},"      imports",[35,5896,2696],{"class":86},[35,5898,5899,5901],{"class":37,"line":174},[35,5900,2701],{"class":86},[35,5902,5903],{"class":45}," https:\u002F\u002Fcnb.cool\u002F\u003Cyour-repo-slug>\u002F-\u002Fblob\u002Fmain\u002Fxxx\u002Fenv.yml\n",[35,5905,5906,5908],{"class":37,"line":178},[35,5907,2693],{"class":93},[35,5909,2696],{"class":86},[35,5911,5912,5914,5916,5918],{"class":37,"line":181},[35,5913,2701],{"class":86},[35,5915,2680],{"class":93},[35,5917,59],{"class":86},[35,5919,5920],{"class":45}," docker push\n",[35,5922,5923,5925,5927],{"class":37,"line":185},[35,5924,3370],{"class":93},[35,5926,59],{"class":86},[35,5928,5641],{"class":71},[35,5930,5931],{"class":37,"line":1000},[35,5932,5933],{"class":45},"            docker login -u ${DOCKER_USER} -p \"${DOCKER_TOKEN}\" ${CNB_DOCKER_REGISTRY}\n",[35,5935,5936],{"class":37,"line":1025},[35,5937,5938],{"class":45},"            docker build -t ${DOCKER_REGISTRY}\u002F${CNB_REPO_SLUG_LOWERCASE}:latest .\n",[35,5940,5941],{"class":37,"line":1256},[35,5942,5943],{"class":45},"            docker push ${DOCKER_REGISTRY}\u002F${CNB_REPO_SLUG_LOWERCASE}:latest\n",[5945,5946,5947],"blockquote",{},[17,5948,5949],{},"注意：对插件任务无效",[17,5951,5952],{},"支持的文件格式列表：",[123,5954,5955,5966,5974],{},[126,5956,5957,5959,5960,4569,5963,3309],{},[32,5958,2650],{},"：解析文件后缀为 ",[32,5961,5962],{},".yml",[32,5964,5965],{},".yaml",[126,5967,5968,5970,5971,3309],{},[32,5969,5273],{},": 解析文件后缀为 ",[32,5972,5973],{},".json",[126,5975,5976,5979,5980,5983,5984],{},[32,5977,5978],{},"plain",": 每行格式为 ",[32,5981,5982],{},"key=value","，除了以上涉及的后缀都以此方式解析。",[3953,5985,5986],{},"（不推荐）",[17,5988,5989],{},"同名 key 优先级：",[123,5991,5992,5995],{},[126,5993,5994],{},"当配置 imports 为数组时，如遇到参数重复的情况，后面的配置会覆盖前面的。",[126,5996,5997,5998,6000,6001,6003,6004,6006],{},"如果和 ",[32,5999,2946],{}," 参数中重复，那么 ",[32,6002,2946],{}," 中的参数会覆盖掉 ",[32,6005,2964],{}," 文件中的。",[17,6008,6009],{},"变量赋值",[17,6011,6012,6014],{},[32,6013,2964],{}," 文件路径可读取环境变量。若是数组，下面的文件路径可读取上面文件中的变量。",[25,6016,6020],{"className":6017,"code":6018,"language":6019,"meta":30,"style":30},"language-javascript shiki shiki-themes material-theme-lighter material-theme-lighter material-theme-palenight","\u002F\u002F env.json\n{\n  FILE: 'https:\u002F\u002Fcnb.cool\u002F\u003Cyour-repo-slug>\u002F-\u002Fblob\u002Fmain\u002Fxxx\u002Fenv2.yml';\n}\n","javascript",[32,6021,6022,6027,6031,6048],{"__ignoreMap":30},[35,6023,6024],{"class":37,"line":38},[35,6025,6026],{"class":2661},"\u002F\u002F env.json\n",[35,6028,6029],{"class":37,"line":90},[35,6030,87],{"class":86},[35,6032,6033,6036,6038,6040,6043,6045],{"class":37,"line":112},[35,6034,6035],{"class":41},"  FILE",[35,6037,59],{"class":86},[35,6039,3196],{"class":86},[35,6041,6042],{"class":45},"https:\u002F\u002Fcnb.cool\u002F\u003Cyour-repo-slug>\u002F-\u002Fblob\u002Fmain\u002Fxxx\u002Fenv2.yml",[35,6044,102],{"class":86},[35,6046,6047],{"class":86},";\n",[35,6049,6050],{"class":37,"line":162},[35,6051,5300],{"class":86},[25,6053,6055],{"className":2648,"code":6054,"language":2650,"meta":30,"style":30},"# env2.yml\nTEST_TOKEN: some token\n",[32,6056,6057,6062],{"__ignoreMap":30},[35,6058,6059],{"class":37,"line":38},[35,6060,6061],{"class":2661},"# env2.yml\n",[35,6063,6064,6067,6069],{"class":37,"line":90},[35,6065,6066],{"class":93},"TEST_TOKEN",[35,6068,59],{"class":86},[35,6070,6071],{"class":45}," some token\n",[25,6073,6075],{"className":2648,"code":6074,"language":2650,"meta":30,"style":30},"main:\n  push:\n    - imports:\n        - .\u002Fenv1.json\n        - $FILE\n      stages:\n        - name: echo\n          script: echo $TEST_TOKEN\n",[32,6076,6077,6083,6089,6097,6104,6111,6117,6127],{"__ignoreMap":30},[35,6078,6079,6081],{"class":37,"line":38},[35,6080,210],{"class":93},[35,6082,2696],{"class":86},[35,6084,6085,6087],{"class":37,"line":90},[35,6086,2667],{"class":93},[35,6088,2696],{"class":86},[35,6090,6091,6093,6095],{"class":37,"line":112},[35,6092,2677],{"class":86},[35,6094,3759],{"class":93},[35,6096,2696],{"class":86},[35,6098,6099,6101],{"class":37,"line":162},[35,6100,2701],{"class":86},[35,6102,6103],{"class":45}," .\u002Fenv1.json\n",[35,6105,6106,6108],{"class":37,"line":166},[35,6107,2701],{"class":86},[35,6109,6110],{"class":45}," $FILE\n",[35,6112,6113,6115],{"class":37,"line":170},[35,6114,2693],{"class":93},[35,6116,2696],{"class":86},[35,6118,6119,6121,6123,6125],{"class":37,"line":174},[35,6120,2701],{"class":86},[35,6122,2680],{"class":93},[35,6124,59],{"class":86},[35,6126,2743],{"class":45},[35,6128,6129,6131,6133],{"class":37,"line":178},[35,6130,3370],{"class":93},[35,6132,59],{"class":86},[35,6134,6135],{"class":45}," echo $TEST_TOKEN\n",[17,6137,6138,6139,3309],{},"被引用文件可声明可被访问范围，参考 ",[129,6140,6142],{"href":6141},"..\u002Fadvanced-usage\u002Ffile-reference#%E6%9D%83%E9%99%90%E6%A3%80%E6%9F%A5","配置文件引用鉴权",[17,6144,3312],{},[17,6146,6147,6150],{},[32,6148,6149],{},"team_name\u002Fproject_name\u002F*","，匹配一个项目下面的所有仓库：",[25,6152,6154],{"className":2648,"code":6153,"language":2650,"meta":30,"style":30},"key: value\n\nallow_slugs:\n  - team_name\u002Fproject_name\u002F*\n",[32,6155,6156,6166,6170,6177],{"__ignoreMap":30},[35,6157,6158,6161,6163],{"class":37,"line":38},[35,6159,6160],{"class":93},"key",[35,6162,59],{"class":86},[35,6164,6165],{"class":45}," value\n",[35,6167,6168],{"class":37,"line":90},[35,6169,4423],{"emptyLinePlaceholder":201},[35,6171,6172,6175],{"class":37,"line":112},[35,6173,6174],{"class":93},"allow_slugs",[35,6176,2696],{"class":86},[35,6178,6179,6181],{"class":37,"line":162},[35,6180,2938],{"class":86},[35,6182,6183],{"class":45}," team_name\u002Fproject_name\u002F*\n",[17,6185,6186],{},"允许被所有仓库引用",[25,6188,6190],{"className":2648,"code":6189,"language":2650,"meta":30,"style":30},"key: value\n\nallow_slugs:\n  - '**'\n",[32,6191,6192,6200,6204,6210],{"__ignoreMap":30},[35,6193,6194,6196,6198],{"class":37,"line":38},[35,6195,6160],{"class":93},[35,6197,59],{"class":86},[35,6199,6165],{"class":45},[35,6201,6202],{"class":37,"line":90},[35,6203,4423],{"emptyLinePlaceholder":201},[35,6205,6206,6208],{"class":37,"line":112},[35,6207,6174],{"class":93},[35,6209,2696],{"class":86},[35,6211,6212,6214,6216,6219],{"class":37,"line":162},[35,6213,2938],{"class":86},[35,6215,3196],{"class":86},[35,6217,6218],{"class":45},"**",[35,6220,3202],{"class":86},[17,6222,6223],{},"大部份场景配置文件是简单的单层对象，比如：",[25,6225,6227],{"className":6017,"code":6226,"language":6019,"meta":30,"style":30},"\u002F\u002F env.json\n{\n  \"token\": \"private token\",\n  \"password\": \"private password\"\n}\n",[32,6228,6229,6233,6237,6257,6276],{"__ignoreMap":30},[35,6230,6231],{"class":37,"line":38},[35,6232,6026],{"class":2661},[35,6234,6235],{"class":37,"line":90},[35,6236,87],{"class":86},[35,6238,6239,6241,6243,6245,6247,6249,6252,6254],{"class":37,"line":112},[35,6240,5284],{"class":86},[35,6242,5837],{"class":45},[35,6244,5291],{"class":86},[35,6246,3534],{"class":93},[35,6248,5291],{"class":86},[35,6250,6251],{"class":45},"private token",[35,6253,5291],{"class":86},[35,6255,6256],{"class":86},",\n",[35,6258,6259,6261,6264,6266,6268,6270,6273],{"class":37,"line":162},[35,6260,5284],{"class":86},[35,6262,6263],{"class":45},"password",[35,6265,5291],{"class":86},[35,6267,3534],{"class":93},[35,6269,5291],{"class":86},[35,6271,6272],{"class":45},"private password",[35,6274,6275],{"class":86},"\"\n",[35,6277,6278],{"class":37,"line":166},[35,6279,5300],{"class":86},[17,6281,6282,6283,6285],{},"为了应对复杂的配置文件和场景，",[32,6284,2964],{}," 支持对象嵌套！若引入的文件解析后的对象包含深层属性（第一层不能为数组），会平铺成单层对象，规则是：",[4507,6287,6288,6291],{},[126,6289,6290],{},"属性名保留，属性值会转成字符串",[126,6292,6293,6294,6297],{},"属性值若为对象（包括数组），则会递归平铺，属性路径以 ",[32,6295,6296],{},"_"," 连接",[25,6299,6301],{"className":6017,"code":6300,"language":6019,"meta":30,"style":30},"\u002F\u002F env.json\n{\n  \"key1\": [\n    \"value1\",\n    \"value2\"\n  ],\n  \"key2\": {\n    \"subkey1\": [\n      \"value3\",\n      \"value4\"\n    ],\n    \"subkey2\": \"value5\"\n  },\n  \"key3\": [\n    \"value6\",\n    {\n      \"subsubkey1\": \"value7\"\n    }\n  ],\n  \"key4\": \"value8\"\n}\n",[32,6302,6303,6307,6311,6323,6335,6344,6351,6364,6378,6390,6399,6406,6425,6430,6441,6452,6457,6475,6480,6486,6504],{"__ignoreMap":30},[35,6304,6305],{"class":37,"line":38},[35,6306,6026],{"class":2661},[35,6308,6309],{"class":37,"line":90},[35,6310,87],{"class":86},[35,6312,6313,6315,6318,6320],{"class":37,"line":112},[35,6314,5284],{"class":86},[35,6316,6317],{"class":45},"key1",[35,6319,5291],{"class":86},[35,6321,6322],{"class":93},": [\n",[35,6324,6325,6328,6331,6333],{"class":37,"line":162},[35,6326,6327],{"class":86},"    \"",[35,6329,6330],{"class":45},"value1",[35,6332,5291],{"class":86},[35,6334,6256],{"class":86},[35,6336,6337,6339,6342],{"class":37,"line":166},[35,6338,6327],{"class":86},[35,6340,6341],{"class":45},"value2",[35,6343,6275],{"class":86},[35,6345,6346,6349],{"class":37,"line":170},[35,6347,6348],{"class":93},"  ]",[35,6350,6256],{"class":86},[35,6352,6353,6355,6358,6360,6362],{"class":37,"line":174},[35,6354,5284],{"class":86},[35,6356,6357],{"class":45},"key2",[35,6359,5291],{"class":86},[35,6361,3534],{"class":93},[35,6363,87],{"class":86},[35,6365,6366,6368,6371,6373,6375],{"class":37,"line":178},[35,6367,6327],{"class":86},[35,6369,6370],{"class":93},"subkey1",[35,6372,5291],{"class":86},[35,6374,59],{"class":86},[35,6376,6377],{"class":93}," [\n",[35,6379,6380,6383,6386,6388],{"class":37,"line":181},[35,6381,6382],{"class":86},"      \"",[35,6384,6385],{"class":45},"value3",[35,6387,5291],{"class":86},[35,6389,6256],{"class":86},[35,6391,6392,6394,6397],{"class":37,"line":185},[35,6393,6382],{"class":86},[35,6395,6396],{"class":45},"value4",[35,6398,6275],{"class":86},[35,6400,6401,6404],{"class":37,"line":1000},[35,6402,6403],{"class":93},"    ]",[35,6405,6256],{"class":86},[35,6407,6408,6410,6413,6415,6417,6420,6423],{"class":37,"line":1025},[35,6409,6327],{"class":86},[35,6411,6412],{"class":93},"subkey2",[35,6414,5291],{"class":86},[35,6416,59],{"class":86},[35,6418,6419],{"class":86}," \"",[35,6421,6422],{"class":45},"value5",[35,6424,6275],{"class":86},[35,6426,6427],{"class":37,"line":1256},[35,6428,6429],{"class":86},"  },\n",[35,6431,6432,6434,6437,6439],{"class":37,"line":164},[35,6433,5284],{"class":86},[35,6435,6436],{"class":45},"key3",[35,6438,5291],{"class":86},[35,6440,6322],{"class":93},[35,6442,6443,6445,6448,6450],{"class":37,"line":2961},[35,6444,6327],{"class":86},[35,6446,6447],{"class":45},"value6",[35,6449,5291],{"class":86},[35,6451,6256],{"class":86},[35,6453,6454],{"class":37,"line":157},[35,6455,6456],{"class":86},"    {\n",[35,6458,6459,6461,6464,6466,6468,6470,6473],{"class":37,"line":2976},[35,6460,6382],{"class":86},[35,6462,6463],{"class":93},"subsubkey1",[35,6465,5291],{"class":86},[35,6467,59],{"class":86},[35,6469,6419],{"class":86},[35,6471,6472],{"class":45},"value7",[35,6474,6275],{"class":86},[35,6476,6477],{"class":37,"line":864},[35,6478,6479],{"class":86},"    }\n",[35,6481,6482,6484],{"class":37,"line":881},[35,6483,6348],{"class":93},[35,6485,6256],{"class":86},[35,6487,6488,6490,6493,6495,6497,6499,6502],{"class":37,"line":1009},[35,6489,5284],{"class":86},[35,6491,6492],{"class":45},"key4",[35,6494,5291],{"class":86},[35,6496,3534],{"class":93},[35,6498,5291],{"class":86},[35,6500,6501],{"class":45},"value8",[35,6503,6275],{"class":86},[35,6505,6506],{"class":37,"line":3011},[35,6507,5300],{"class":86},[17,6509,6510],{},"会平铺成",[25,6512,6514],{"className":6017,"code":6513,"language":6019,"meta":30,"style":30},"{\n      \u002F\u002F 原属性值转成字符串\n      \"key1\": \"value1,value2\",\n      \u002F\u002F 属性值若为对象，则额外进行递归平铺操作增加属性\n      \"key1_0\": \"value1\",\n      \"key1_1\": \"value2\",\n      \"key2\": \"[object Object]\",\n      \"key2_subkey1\": \"value3,value4\",\n      \"key2_subkey1_0\": \"value3\",\n      \"key2_subkey1_1\": \"value4\",\n      \"key2_subkey2\": \"value5\",\n      \"key3\": \"value6,[object Object]\",\n      \"key3_0\": \"value6\",\n      \"key3_1\": \"[object Object]\",\n      \"key3_1_subsubkey1\": \"value7\",\n      \"key4\": \"value8\"\n    }\n",[32,6515,6516,6520,6525,6544,6549,6568,6587,6605,6625,6644,6663,6682,6701,6720,6739,6758,6774],{"__ignoreMap":30},[35,6517,6518],{"class":37,"line":38},[35,6519,87],{"class":86},[35,6521,6522],{"class":37,"line":90},[35,6523,6524],{"class":2661},"      \u002F\u002F 原属性值转成字符串\n",[35,6526,6527,6529,6531,6533,6535,6537,6540,6542],{"class":37,"line":112},[35,6528,6382],{"class":86},[35,6530,6317],{"class":45},[35,6532,5291],{"class":86},[35,6534,3534],{"class":93},[35,6536,5291],{"class":86},[35,6538,6539],{"class":45},"value1,value2",[35,6541,5291],{"class":86},[35,6543,6256],{"class":86},[35,6545,6546],{"class":37,"line":162},[35,6547,6548],{"class":2661},"      \u002F\u002F 属性值若为对象，则额外进行递归平铺操作增加属性\n",[35,6550,6551,6553,6556,6558,6560,6562,6564,6566],{"class":37,"line":166},[35,6552,6382],{"class":86},[35,6554,6555],{"class":45},"key1_0",[35,6557,5291],{"class":86},[35,6559,3534],{"class":93},[35,6561,5291],{"class":86},[35,6563,6330],{"class":45},[35,6565,5291],{"class":86},[35,6567,6256],{"class":86},[35,6569,6570,6572,6575,6577,6579,6581,6583,6585],{"class":37,"line":170},[35,6571,6382],{"class":86},[35,6573,6574],{"class":45},"key1_1",[35,6576,5291],{"class":86},[35,6578,3534],{"class":93},[35,6580,5291],{"class":86},[35,6582,6341],{"class":45},[35,6584,5291],{"class":86},[35,6586,6256],{"class":86},[35,6588,6589,6591,6593,6595,6597,6599,6601,6603],{"class":37,"line":174},[35,6590,6382],{"class":86},[35,6592,6357],{"class":45},[35,6594,5291],{"class":86},[35,6596,3534],{"class":93},[35,6598,5291],{"class":86},[35,6600,1143],{"class":45},[35,6602,5291],{"class":86},[35,6604,6256],{"class":86},[35,6606,6607,6609,6612,6614,6616,6618,6621,6623],{"class":37,"line":178},[35,6608,6382],{"class":86},[35,6610,6611],{"class":45},"key2_subkey1",[35,6613,5291],{"class":86},[35,6615,3534],{"class":93},[35,6617,5291],{"class":86},[35,6619,6620],{"class":45},"value3,value4",[35,6622,5291],{"class":86},[35,6624,6256],{"class":86},[35,6626,6627,6629,6632,6634,6636,6638,6640,6642],{"class":37,"line":181},[35,6628,6382],{"class":86},[35,6630,6631],{"class":45},"key2_subkey1_0",[35,6633,5291],{"class":86},[35,6635,3534],{"class":93},[35,6637,5291],{"class":86},[35,6639,6385],{"class":45},[35,6641,5291],{"class":86},[35,6643,6256],{"class":86},[35,6645,6646,6648,6651,6653,6655,6657,6659,6661],{"class":37,"line":185},[35,6647,6382],{"class":86},[35,6649,6650],{"class":45},"key2_subkey1_1",[35,6652,5291],{"class":86},[35,6654,3534],{"class":93},[35,6656,5291],{"class":86},[35,6658,6396],{"class":45},[35,6660,5291],{"class":86},[35,6662,6256],{"class":86},[35,6664,6665,6667,6670,6672,6674,6676,6678,6680],{"class":37,"line":1000},[35,6666,6382],{"class":86},[35,6668,6669],{"class":45},"key2_subkey2",[35,6671,5291],{"class":86},[35,6673,3534],{"class":93},[35,6675,5291],{"class":86},[35,6677,6422],{"class":45},[35,6679,5291],{"class":86},[35,6681,6256],{"class":86},[35,6683,6684,6686,6688,6690,6692,6694,6697,6699],{"class":37,"line":1025},[35,6685,6382],{"class":86},[35,6687,6436],{"class":45},[35,6689,5291],{"class":86},[35,6691,3534],{"class":93},[35,6693,5291],{"class":86},[35,6695,6696],{"class":45},"value6,[object Object]",[35,6698,5291],{"class":86},[35,6700,6256],{"class":86},[35,6702,6703,6705,6708,6710,6712,6714,6716,6718],{"class":37,"line":1256},[35,6704,6382],{"class":86},[35,6706,6707],{"class":45},"key3_0",[35,6709,5291],{"class":86},[35,6711,3534],{"class":93},[35,6713,5291],{"class":86},[35,6715,6447],{"class":45},[35,6717,5291],{"class":86},[35,6719,6256],{"class":86},[35,6721,6722,6724,6727,6729,6731,6733,6735,6737],{"class":37,"line":164},[35,6723,6382],{"class":86},[35,6725,6726],{"class":45},"key3_1",[35,6728,5291],{"class":86},[35,6730,3534],{"class":93},[35,6732,5291],{"class":86},[35,6734,1143],{"class":45},[35,6736,5291],{"class":86},[35,6738,6256],{"class":86},[35,6740,6741,6743,6746,6748,6750,6752,6754,6756],{"class":37,"line":2961},[35,6742,6382],{"class":86},[35,6744,6745],{"class":45},"key3_1_subsubkey1",[35,6747,5291],{"class":86},[35,6749,3534],{"class":93},[35,6751,5291],{"class":86},[35,6753,6472],{"class":45},[35,6755,5291],{"class":86},[35,6757,6256],{"class":86},[35,6759,6760,6762,6764,6766,6768,6770,6772],{"class":37,"line":157},[35,6761,6382],{"class":86},[35,6763,6492],{"class":45},[35,6765,5291],{"class":86},[35,6767,3534],{"class":93},[35,6769,5291],{"class":86},[35,6771,6501],{"class":45},[35,6773,6275],{"class":86},[35,6775,6776],{"class":37,"line":2976},[35,6777,6479],{"class":86},[25,6779,6781],{"className":2648,"code":6780,"language":2650,"meta":30,"style":30},"main:\n  push:\n    - imports:\n        - .\u002Fenv.json\n      stages:\n        - name: echo\n          script: echo $key3_1_subsubkey1\n",[32,6782,6783,6789,6795,6803,6810,6816,6826],{"__ignoreMap":30},[35,6784,6785,6787],{"class":37,"line":38},[35,6786,210],{"class":93},[35,6788,2696],{"class":86},[35,6790,6791,6793],{"class":37,"line":90},[35,6792,2667],{"class":93},[35,6794,2696],{"class":86},[35,6796,6797,6799,6801],{"class":37,"line":112},[35,6798,2677],{"class":86},[35,6800,3759],{"class":93},[35,6802,2696],{"class":86},[35,6804,6805,6807],{"class":37,"line":162},[35,6806,2701],{"class":86},[35,6808,6809],{"class":45}," .\u002Fenv.json\n",[35,6811,6812,6814],{"class":37,"line":166},[35,6813,2693],{"class":93},[35,6815,2696],{"class":86},[35,6817,6818,6820,6822,6824],{"class":37,"line":170},[35,6819,2701],{"class":86},[35,6821,2680],{"class":93},[35,6823,59],{"class":86},[35,6825,2743],{"class":45},[35,6827,6828,6830,6832],{"class":37,"line":174},[35,6829,3370],{"class":93},[35,6831,59],{"class":86},[35,6833,6834],{"class":45}," echo $key3_1_subsubkey1\n",[3225,6836,2986],{"id":2986},[123,6838,6839],{},[126,6840,3233,6841],{},[32,6842,3265],{},[17,6844,6845],{},"为流水线指定标签。每个标签的值可以是一个字符串，也可以是一个字符串数组。该标签可用于后续流水线记录筛选等功能。",[17,6847,6848,6849,3309],{},"这里举一种工作流的例子：",[3953,6850,6851],{},"main 分支合并即发布预发布环境，打 tag 后发布正式环境",[25,6853,6855],{"className":2648,"code":6854,"language":2650,"meta":30,"style":30},"main:\n  push:\n    - label:\n        # Master 分支的常规流水线\n        type:\n          - MASTER\n          - PREVIEW\n      stages:\n        - name: install\n          script: npm install\n        - name: CCK-lint\n          script: npm run lint\n        - name: BVT-build\n          script: npm run build\n        - name: UT-test\n          script: npm run test\n        - name: pre release\n          script: .\u002Fpre-release.sh\n\n$:\n  tag_push:\n    - label:\n        # 产品发布分支的常规流水线\n        type: RELEASE\n      stages:\n        - name: install\n          script: npm install\n        - name: build\n          script: npm run build\n        - name: DELIVERY-release\n          script: .\u002Frelease.sh\n",[32,6856,6857,6863,6869,6878,6883,6890,6896,6903,6909,6920,6929,6940,6949,6960,6969,6980,6989,7000,7009,7013,7019,7026,7034,7039,7048,7054,7064,7072,7083,7091,7102],{"__ignoreMap":30},[35,6858,6859,6861],{"class":37,"line":38},[35,6860,210],{"class":93},[35,6862,2696],{"class":86},[35,6864,6865,6867],{"class":37,"line":90},[35,6866,2667],{"class":93},[35,6868,2696],{"class":86},[35,6870,6871,6873,6876],{"class":37,"line":112},[35,6872,2677],{"class":86},[35,6874,6875],{"class":93}," label",[35,6877,2696],{"class":86},[35,6879,6880],{"class":37,"line":162},[35,6881,6882],{"class":2661},"        # Master 分支的常规流水线\n",[35,6884,6885,6888],{"class":37,"line":166},[35,6886,6887],{"class":93},"        type",[35,6889,2696],{"class":86},[35,6891,6892,6894],{"class":37,"line":170},[35,6893,4682],{"class":86},[35,6895,2998],{"class":45},[35,6897,6898,6900],{"class":37,"line":174},[35,6899,4682],{"class":86},[35,6901,6902],{"class":45}," PREVIEW\n",[35,6904,6905,6907],{"class":37,"line":178},[35,6906,2693],{"class":93},[35,6908,2696],{"class":86},[35,6910,6911,6913,6915,6917],{"class":37,"line":181},[35,6912,2701],{"class":86},[35,6914,2680],{"class":93},[35,6916,59],{"class":86},[35,6918,6919],{"class":45}," install\n",[35,6921,6922,6924,6926],{"class":37,"line":185},[35,6923,3370],{"class":93},[35,6925,59],{"class":86},[35,6927,6928],{"class":45}," npm install\n",[35,6930,6931,6933,6935,6937],{"class":37,"line":1000},[35,6932,2701],{"class":86},[35,6934,2680],{"class":93},[35,6936,59],{"class":86},[35,6938,6939],{"class":45}," CCK-lint\n",[35,6941,6942,6944,6946],{"class":37,"line":1025},[35,6943,3370],{"class":93},[35,6945,59],{"class":86},[35,6947,6948],{"class":45}," npm run lint\n",[35,6950,6951,6953,6955,6957],{"class":37,"line":1256},[35,6952,2701],{"class":86},[35,6954,2680],{"class":93},[35,6956,59],{"class":86},[35,6958,6959],{"class":45}," BVT-build\n",[35,6961,6962,6964,6966],{"class":37,"line":164},[35,6963,3370],{"class":93},[35,6965,59],{"class":86},[35,6967,6968],{"class":45}," npm run build\n",[35,6970,6971,6973,6975,6977],{"class":37,"line":2961},[35,6972,2701],{"class":86},[35,6974,2680],{"class":93},[35,6976,59],{"class":86},[35,6978,6979],{"class":45}," UT-test\n",[35,6981,6982,6984,6986],{"class":37,"line":157},[35,6983,3370],{"class":93},[35,6985,59],{"class":86},[35,6987,6988],{"class":45}," npm run test\n",[35,6990,6991,6993,6995,6997],{"class":37,"line":2976},[35,6992,2701],{"class":86},[35,6994,2680],{"class":93},[35,6996,59],{"class":86},[35,6998,6999],{"class":45}," pre release\n",[35,7001,7002,7004,7006],{"class":37,"line":864},[35,7003,3370],{"class":93},[35,7005,59],{"class":86},[35,7007,7008],{"class":45}," .\u002Fpre-release.sh\n",[35,7010,7011],{"class":37,"line":881},[35,7012,4423],{"emptyLinePlaceholder":201},[35,7014,7015,7017],{"class":37,"line":1009},[35,7016,5675],{"class":93},[35,7018,2696],{"class":86},[35,7020,7021,7024],{"class":37,"line":3011},[35,7022,7023],{"class":93},"  tag_push",[35,7025,2696],{"class":86},[35,7027,7028,7030,7032],{"class":37,"line":732},[35,7029,2677],{"class":86},[35,7031,6875],{"class":93},[35,7033,2696],{"class":86},[35,7035,7036],{"class":37,"line":461},[35,7037,7038],{"class":2661},"        # 产品发布分支的常规流水线\n",[35,7040,7041,7043,7045],{"class":37,"line":3040},[35,7042,6887],{"class":93},[35,7044,59],{"class":86},[35,7046,7047],{"class":45}," RELEASE\n",[35,7049,7050,7052],{"class":37,"line":3052},[35,7051,2693],{"class":93},[35,7053,2696],{"class":86},[35,7055,7056,7058,7060,7062],{"class":37,"line":1396},[35,7057,2701],{"class":86},[35,7059,2680],{"class":93},[35,7061,59],{"class":86},[35,7063,6919],{"class":45},[35,7065,7066,7068,7070],{"class":37,"line":1528},[35,7067,3370],{"class":93},[35,7069,59],{"class":86},[35,7071,6928],{"class":45},[35,7073,7074,7076,7078,7080],{"class":37,"line":1674},[35,7075,2701],{"class":86},[35,7077,2680],{"class":93},[35,7079,59],{"class":86},[35,7081,7082],{"class":45}," build\n",[35,7084,7085,7087,7089],{"class":37,"line":472},[35,7086,3370],{"class":93},[35,7088,59],{"class":86},[35,7090,6968],{"class":45},[35,7092,7093,7095,7097,7099],{"class":37,"line":1014},[35,7094,2701],{"class":86},[35,7096,2680],{"class":93},[35,7098,59],{"class":86},[35,7100,7101],{"class":45}," DELIVERY-release\n",[35,7103,7104,7106,7108],{"class":37,"line":1937},[35,7105,3370],{"class":93},[35,7107,59],{"class":86},[35,7109,7110],{"class":45}," .\u002Frelease.sh\n",[3225,7112,3014],{"id":3014},[123,7114,7115],{},[126,7116,3233,7117],{},[32,7118,7119],{},"Array\u003CStage|Job>",[17,7121,7122],{},"定义一组阶段任务，每个阶段串行运行。",[3225,7124,3084],{"id":7125},"failstages",[123,7127,7128],{},[126,7129,3233,7130],{},[32,7131,7119],{},[17,7133,7134],{},"定义一组失败阶段任务。当正常流程失败，会依次执行此阶段任务。",[3225,7136,3131],{"id":7137},"endstages",[123,7139,7140],{},[126,7141,3233,7142],{},[32,7143,7119],{},[17,7145,7146],{},"定义流水线结束阶段执行的一组任务。当流水线 stages\u002FfailStages 执行完，流水线结束前，会依次执行此阶段任务。",[17,7148,7149],{},"当流水线 prepare 阶段成功，无论 stages 是否成功，endStages 都将执行。\n且 endStages 是否成功不影响流水线状态（即 endStages 失败，流水线状态也可能是成功）。",[3225,7151,7153],{"id":7152},"ifnewbranch-pipeline-ifnewbranch","ifNewBranch {#pipeline-ifnewbranch}",[123,7155,7156,7160],{},[126,7157,3233,7158],{},[32,7159,4011],{},[126,7161,3298,7162],{},[32,7163,4038],{},[17,7165,7166,7167,7169,7170,5050,7173,7175,7176,3309],{},"为 ",[32,7168,4996],{}," 表示当前分支属于新分支（即 ",[32,7171,7172],{},"CNB_IS_NEW_BRANCH",[32,7174,4996],{},"）时，才执行此 ",[32,7177,2623],{},[5945,7179,7180],{},[17,7181,7182,7183,7186,7187,7189,7190,7192],{},"当同时存在 ",[32,7184,7185],{},"ifNewBranch"," \u002F ",[32,7188,3179],{}," 时，其中有一个条件满足，此 ",[32,7191,2623],{}," 就会执行。",[3225,7194,7196],{"id":7195},"ifmodify-pipeline-ifmodify","ifModify {#pipeline-ifmodify}",[123,7198,7199],{},[126,7200,3233,7201,3516,7203],{},[32,7202,3295],{},[32,7204,3236],{},[17,7206,7207,7208,7210,7211,7214],{},"指定只有相应文件变动时，才执行此 ",[32,7209,2623],{},"。\n是一个 ",[32,7212,7213],{},"glob"," 表达式字符串或字符串数组。",[17,7216,7217],{},"示例1：",[17,7219,7220,7221,7224,7225,7228,7229,3309],{},"当修改文件列表中包含 ",[32,7222,7223],{},"a.js"," 或者 ",[32,7226,7227],{},"b.js","，会执行此 ",[32,7230,2623],{},[25,7232,7234],{"className":2648,"code":7233,"language":2650,"meta":30,"style":30},"ifModify:\n  - a.js\n  - b.js\n",[32,7235,7236,7242,7249],{"__ignoreMap":30},[35,7237,7238,7240],{"class":37,"line":38},[35,7239,3179],{"class":93},[35,7241,2696],{"class":86},[35,7243,7244,7246],{"class":37,"line":90},[35,7245,2938],{"class":86},[35,7247,7248],{"class":45}," a.js\n",[35,7250,7251,7253],{"class":37,"line":112},[35,7252,2938],{"class":86},[35,7254,7255],{"class":45}," b.js\n",[17,7257,7258],{},"示例2：",[17,7260,7261,7262,7265,7266,7268,7269,7272,7273,7275,7276,7279,7280,7282],{},"当修改文件列表中包含有 ",[32,7263,7264],{},"js"," 后缀的文件时，会执行此 ",[32,7267,2623],{},"。\n其中 ",[32,7270,7271],{},"**\u002F*.js"," 表示匹配所有子目录中的 ",[32,7274,7264],{}," 后缀文件，",[32,7277,7278],{},"*.js"," 表示所有根目录中的 ",[32,7281,7264],{}," 后缀文件。",[25,7284,7286],{"className":2648,"code":7285,"language":2650,"meta":30,"style":30},"ifModify:\n  - '**\u002F*.js'\n  - '*.js'\n",[32,7287,7288,7294,7304],{"__ignoreMap":30},[35,7289,7290,7292],{"class":37,"line":38},[35,7291,3179],{"class":93},[35,7293,2696],{"class":86},[35,7295,7296,7298,7300,7302],{"class":37,"line":90},[35,7297,2938],{"class":86},[35,7299,3196],{"class":86},[35,7301,7271],{"class":45},[35,7303,3202],{"class":86},[35,7305,7306,7308,7310,7312],{"class":37,"line":112},[35,7307,2938],{"class":86},[35,7309,3196],{"class":86},[35,7311,7278],{"class":45},[35,7313,3202],{"class":86},[17,7315,7316],{},"示例3：",[17,7318,7319],{},"反向匹配，排除目录 legacy 和排除所有 Markdown 文件，有其他文件变更时触发",[25,7321,7323],{"className":2648,"code":7322,"language":2650,"meta":30,"style":30},"ifModify:\n  - '**'\n  - '!(legacy\u002F**)'\n  - '!(**\u002F*.md)'\n  - '!*.md'\n",[32,7324,7325,7331,7341,7352,7363],{"__ignoreMap":30},[35,7326,7327,7329],{"class":37,"line":38},[35,7328,3179],{"class":93},[35,7330,2696],{"class":86},[35,7332,7333,7335,7337,7339],{"class":37,"line":90},[35,7334,2938],{"class":86},[35,7336,3196],{"class":86},[35,7338,6218],{"class":45},[35,7340,3202],{"class":86},[35,7342,7343,7345,7347,7350],{"class":37,"line":112},[35,7344,2938],{"class":86},[35,7346,3196],{"class":86},[35,7348,7349],{"class":45},"!(legacy\u002F**)",[35,7351,3202],{"class":86},[35,7353,7354,7356,7358,7361],{"class":37,"line":162},[35,7355,2938],{"class":86},[35,7357,3196],{"class":86},[35,7359,7360],{"class":45},"!(**\u002F*.md)",[35,7362,3202],{"class":86},[35,7364,7365,7367,7369,7372],{"class":37,"line":166},[35,7366,2938],{"class":86},[35,7368,3196],{"class":86},[35,7370,7371],{"class":45},"!*.md",[35,7373,3202],{"class":86},[17,7375,7376],{},"示例4：",[17,7378,7379],{},"反向匹配，src 目录并且除目录 src\u002Flegacy 以外有变更时触发",[25,7381,7383],{"className":2648,"code":7382,"language":2650,"meta":30,"style":30},"ifModify:\n  - 'src\u002F**'\n  - '!(src\u002Flegacy\u002F**)'\n",[32,7384,7385,7391,7402],{"__ignoreMap":30},[35,7386,7387,7389],{"class":37,"line":38},[35,7388,3179],{"class":93},[35,7390,2696],{"class":86},[35,7392,7393,7395,7397,7400],{"class":37,"line":90},[35,7394,2938],{"class":86},[35,7396,3196],{"class":86},[35,7398,7399],{"class":45},"src\u002F**",[35,7401,3202],{"class":86},[35,7403,7404,7406,7408,7411],{"class":37,"line":112},[35,7405,2938],{"class":86},[35,7407,3196],{"class":86},[35,7409,7410],{"class":45},"!(src\u002Flegacy\u002F**)",[35,7412,3202],{"class":86},[3284,7414,7415],{"id":7415},"支持事件",[123,7417,7418,7432,7441,7450],{},[126,7419,7420,7421,7424,7425,5486,7428,7431],{},"非新建分支的 ",[32,7422,7423],{},"push"," 事件，会对比 ",[32,7426,7427],{},"before",[32,7429,7430],{},"after"," 统计变更文件。",[126,7433,7420,7434,7436,7437,7440],{},[32,7435,7423],{}," 事件流水线中通过 ",[32,7438,7439],{},"cnb:apply"," 触发的事件，变更文件统计规则同上。",[126,7442,7443,7446,7447,7449],{},[32,7444,7445],{},"PR"," 触发的事件，统计 ",[32,7448,7445],{}," 中的变更文件。",[126,7451,7452,7454,7455,7446,7457,7449],{},[32,7453,7445],{}," 触发的事件通过 ",[32,7456,7439],{},[32,7458,7445],{},[17,7460,7461],{},"因为文件变更可能非常多，变更文件的统计限制为最多300个。",[3225,7463,7465],{"id":7464},"breakifmodify-pipeline-breakifmodify","breakIfModify {#pipeline-breakifmodify}",[123,7467,7468,7472],{},[126,7469,3233,7470],{},[32,7471,4011],{},[126,7473,3298,7474],{},[32,7475,4038],{},[17,7477,7478,7480],{},[32,7479,2639],{}," 执行前，如果源分支已更新，则终止构建。",[3225,7482,7484],{"id":7483},"retry-pipeline-retry","retry {#pipeline-retry}",[123,7486,7487,7491],{},[126,7488,3233,7489],{},[32,7490,3384],{},[126,7492,3298,7493],{},[32,7494,7495],{},"0",[17,7497,7498,7499,7501],{},"失败重试次数， ",[32,7500,7495],{}," 表示不重试。",[3225,7503,7505],{"id":7504},"allowfailure-pipeline-allowfailure","allowFailure {#pipeline-allowfailure}",[123,7507,7508,7512],{},[126,7509,3233,7510],{},[32,7511,4011],{},[126,7513,3298,7514],{},[32,7515,4038],{},[17,7517,7518],{},"是否允许当前流水线 失败。",[17,7520,7521,7522,7524],{},"当此参数设置为 ",[32,7523,4996],{}," 时，流水线的失败的状态不会上报到 CNB 上。",[3225,7526,7528],{"id":7527},"lock-pipeline-lock","lock {#pipeline-lock}",[123,7530,7531],{},[126,7532,3233,7533,3516,7535],{},[32,7534,3265],{},[32,7536,4011],{},[17,7538,7539,7540,7542,7543,7545],{},"给 ",[32,7541,2819],{}," 设置锁，",[32,7544,2819],{}," 执行完后自动释放锁，锁不能跨仓库使用。",[17,7547,7548],{},"表现： 流水线 A 获取到锁后，流水线 B 再申请锁，可以终止A或等待A执行完释放锁后，获取到锁再继续执行任务。",[123,7550,7551,7569,7587,7603,7619,7639],{},[126,7552,7553,7554,7560,7562,7563,7566,7567],{},"key:",[123,7555,7556],{},[126,7557,3233,7558],{},[32,7559,3236],{},[3915,7561],{},"自定义锁名，默认为 ",[32,7564,7565],{},"分支名-流水线名","，既锁范围默认为当前 ",[32,7568,2819],{},[126,7570,7571,7572,7584,7586],{},"expires:",[123,7573,7574,7578],{},[126,7575,3233,7576],{},[32,7577,3384],{},[126,7579,3298,7580,7583],{},[32,7581,7582],{},"3600","(一小时)",[3915,7585],{},"锁过期时间，过期后自动释放锁，单位“秒”。",[126,7588,7589,7590,7600,7602],{},"timeout:",[123,7591,7592,7596],{},[126,7593,3233,7594],{},[32,7595,3384],{},[126,7597,3298,7598,7583],{},[32,7599,7582],{},[3915,7601],{},"超时时间，用于等待锁的场景下，单位“秒”。",[126,7604,7605,7606,7616,7618],{},"cancel-in-progress:",[123,7607,7608,7612],{},[126,7609,3233,7610],{},[32,7611,4011],{},[126,7613,3298,7614],{},[32,7615,4038],{},[3915,7617],{},"是否终止占用锁或等待锁的流水线，让当前流水线获取锁并执行",[126,7620,7621,7622,7632,7634,7635,7638],{},"wait:",[123,7623,7624,7628],{},[126,7625,3233,7626],{},[32,7627,4011],{},[126,7629,3298,7630],{},[32,7631,4038],{},[3915,7633],{},"锁被占用是否等待（不占用流水线资源和耗时），为 false 则直接报错，不能与 ",[32,7636,7637],{},"cancel-in-progress"," 同时使用",[126,7640,7641,7642,7652,7654,7655,7658],{},"cancel-in-wait:",[123,7643,7644,7648],{},[126,7645,3233,7646],{},[32,7647,4011],{},[126,7649,3298,7650],{},[32,7651,4038],{},[3915,7653],{},"是否终止正在等待锁的流水线，让当前流水线加入等待锁队列。需配合",[32,7656,7657],{},"wait","属性使用。",[17,7660,7661,7662,7665,7666,7668,7669,7668,7672,7668,7675,7668,7677,7668,7679,7682],{},"若 ",[32,7663,7664],{},"lock"," 为 true，则 ",[32,7667,6160],{},"、 ",[32,7670,7671],{},"expires",[32,7673,7674],{},"timeout",[32,7676,7637],{},[32,7678,7657],{},[32,7680,7681],{},"cancel-in-wait","为各自默认值。",[17,7684,7685],{},"例1: lock 是 Boolean 格式",[25,7687,7689],{"className":2648,"code":7688,"language":2650,"meta":30,"style":30},"main:\n  push:\n    - lock: true\n      stages:\n        - name: stage1\n          script: echo \"stage1\"\n",[32,7690,7691,7697,7703,7714,7720,7730],{"__ignoreMap":30},[35,7692,7693,7695],{"class":37,"line":38},[35,7694,210],{"class":93},[35,7696,2696],{"class":86},[35,7698,7699,7701],{"class":37,"line":90},[35,7700,2667],{"class":93},[35,7702,2696],{"class":86},[35,7704,7705,7707,7710,7712],{"class":37,"line":112},[35,7706,2677],{"class":86},[35,7708,7709],{"class":93}," lock",[35,7711,59],{"class":86},[35,7713,2908],{"class":2907},[35,7715,7716,7718],{"class":37,"line":162},[35,7717,2693],{"class":93},[35,7719,2696],{"class":86},[35,7721,7722,7724,7726,7728],{"class":37,"line":166},[35,7723,2701],{"class":86},[35,7725,2680],{"class":93},[35,7727,59],{"class":86},[35,7729,4104],{"class":45},[35,7731,7732,7734,7736],{"class":37,"line":170},[35,7733,3370],{"class":93},[35,7735,59],{"class":86},[35,7737,7738],{"class":45}," echo \"stage1\"\n",[17,7740,7741],{},"例2: lock 是 Object 格式",[25,7743,7745],{"className":2648,"code":7744,"language":2650,"meta":30,"style":30},"main:\n  push:\n    - lock:\n        key: key\n        expires: 600 # 10分钟\n        wait: true\n        timeout: 60 # 最多等待 1分钟\n      stages:\n        - name: stage1\n          script: echo \"stage1\"\n",[32,7746,7747,7753,7759,7767,7777,7790,7799,7812,7818,7828],{"__ignoreMap":30},[35,7748,7749,7751],{"class":37,"line":38},[35,7750,210],{"class":93},[35,7752,2696],{"class":86},[35,7754,7755,7757],{"class":37,"line":90},[35,7756,2667],{"class":93},[35,7758,2696],{"class":86},[35,7760,7761,7763,7765],{"class":37,"line":112},[35,7762,2677],{"class":86},[35,7764,7709],{"class":93},[35,7766,2696],{"class":86},[35,7768,7769,7772,7774],{"class":37,"line":162},[35,7770,7771],{"class":93},"        key",[35,7773,59],{"class":86},[35,7775,7776],{"class":45}," key\n",[35,7778,7779,7782,7784,7787],{"class":37,"line":166},[35,7780,7781],{"class":93},"        expires",[35,7783,59],{"class":86},[35,7785,7786],{"class":3212}," 600",[35,7788,7789],{"class":2661}," # 10分钟\n",[35,7791,7792,7795,7797],{"class":37,"line":170},[35,7793,7794],{"class":93},"        wait",[35,7796,59],{"class":86},[35,7798,2908],{"class":2907},[35,7800,7801,7804,7806,7809],{"class":37,"line":174},[35,7802,7803],{"class":93},"        timeout",[35,7805,59],{"class":86},[35,7807,7808],{"class":3212}," 60",[35,7810,7811],{"class":2661}," # 最多等待 1分钟\n",[35,7813,7814,7816],{"class":37,"line":178},[35,7815,2693],{"class":93},[35,7817,2696],{"class":86},[35,7819,7820,7822,7824,7826],{"class":37,"line":181},[35,7821,2701],{"class":86},[35,7823,2680],{"class":93},[35,7825,59],{"class":86},[35,7827,4104],{"class":45},[35,7829,7830,7832,7834],{"class":37,"line":185},[35,7831,3370],{"class":93},[35,7833,59],{"class":86},[35,7835,7738],{"class":45},[17,7837,7838],{},"例3: 停止 pull_request 下上一条正在进行的流水线",[25,7840,7842],{"className":2648,"code":7841,"language":2650,"meta":30,"style":30},"main:\n  pull_request:\n    - lock:\n        key: pr\n        cancel-in-progress: true\n      stages:\n        - name: echo hello\n          script: echo \"stage1\"\n",[32,7843,7844,7850,7856,7864,7873,7882,7888,7899],{"__ignoreMap":30},[35,7845,7846,7848],{"class":37,"line":38},[35,7847,210],{"class":93},[35,7849,2696],{"class":86},[35,7851,7852,7854],{"class":37,"line":90},[35,7853,4757],{"class":93},[35,7855,2696],{"class":86},[35,7857,7858,7860,7862],{"class":37,"line":112},[35,7859,2677],{"class":86},[35,7861,7709],{"class":93},[35,7863,2696],{"class":86},[35,7865,7866,7868,7870],{"class":37,"line":162},[35,7867,7771],{"class":93},[35,7869,59],{"class":86},[35,7871,7872],{"class":45}," pr\n",[35,7874,7875,7878,7880],{"class":37,"line":166},[35,7876,7877],{"class":93},"        cancel-in-progress",[35,7879,59],{"class":86},[35,7881,2908],{"class":2907},[35,7883,7884,7886],{"class":37,"line":170},[35,7885,2693],{"class":93},[35,7887,2696],{"class":86},[35,7889,7890,7892,7894,7896],{"class":37,"line":174},[35,7891,2701],{"class":86},[35,7893,2680],{"class":93},[35,7895,59],{"class":86},[35,7897,7898],{"class":45}," echo hello\n",[35,7900,7901,7903,7905],{"class":37,"line":178},[35,7902,3370],{"class":93},[35,7904,59],{"class":86},[35,7906,7738],{"class":45},[21,7908,2627],{"id":7909},"stage",[123,7911,7912],{},[126,7913,3233,7914,3516,7916],{},[32,7915,2639],{},[32,7917,7918],{},"Object\u003Cname: Job>",[17,7920,7921,7923,7924,7926,7927,3309],{},[32,7922,2627],{}," 表示一个构建阶段，可以由一个或者多个 ",[32,7925,2639],{}," 组成，见 ",[129,7928,7930],{"href":7929},"#job","Job 介绍",[3225,7932,7934],{"id":7933},"单个-job","单个 Job",[17,7936,7937,7938,7940,7941,7943,7944,7946,7947,3309],{},"如果一个 ",[32,7939,2627],{}," 只有一个 ",[32,7942,2639],{},"，那么可以省掉 ",[32,7945,2627],{}," 直接书写这个 ",[32,7948,2639],{},[25,7950,7952],{"className":2648,"code":7951,"language":2650,"meta":30,"style":30},"stages:\n  - name: stage1\n    jobs:\n      - name: job A\n        script: echo hello\n",[32,7953,7954,7960,7970,7977,7989],{"__ignoreMap":30},[35,7955,7956,7958],{"class":37,"line":38},[35,7957,3014],{"class":93},[35,7959,2696],{"class":86},[35,7961,7962,7964,7966,7968],{"class":37,"line":90},[35,7963,2938],{"class":86},[35,7965,2680],{"class":93},[35,7967,59],{"class":86},[35,7969,4104],{"class":45},[35,7971,7972,7975],{"class":37,"line":112},[35,7973,7974],{"class":93},"    jobs",[35,7976,2696],{"class":86},[35,7978,7979,7982,7984,7986],{"class":37,"line":162},[35,7980,7981],{"class":86},"      -",[35,7983,2680],{"class":93},[35,7985,59],{"class":86},[35,7987,7988],{"class":45}," job A\n",[35,7990,7991,7994,7996],{"class":37,"line":166},[35,7992,7993],{"class":93},"        script",[35,7995,59],{"class":86},[35,7997,7898],{"class":45},[17,7999,8000],{},"可以简化为以下写法:",[25,8002,8004],{"className":2648,"code":8003,"language":2650,"meta":30,"style":30},"- stages:\n    - name: job A\n      script: echo hello\n",[32,8005,8006,8016,8026],{"__ignoreMap":30},[35,8007,8008,8011,8014],{"class":37,"line":38},[35,8009,8010],{"class":86},"-",[35,8012,8013],{"class":93}," stages",[35,8015,2696],{"class":86},[35,8017,8018,8020,8022,8024],{"class":37,"line":90},[35,8019,2677],{"class":86},[35,8021,2680],{"class":93},[35,8023,59],{"class":86},[35,8025,7988],{"class":45},[35,8027,8028,8031,8033],{"class":37,"line":112},[35,8029,8030],{"class":93},"      script",[35,8032,59],{"class":86},[35,8034,7898],{"class":45},[17,8036,8037],{},[3953,8038,8039,8040,8042],{},"当 ",[32,8041,2639],{}," 为字符串时，可以视作脚本任务，name 和 script 取该字符串，可以继续简化为：",[25,8044,8046],{"className":2648,"code":8045,"language":2650,"meta":30,"style":30},"- stages:\n    - echo hello\n",[32,8047,8048,8056],{"__ignoreMap":30},[35,8049,8050,8052,8054],{"class":37,"line":38},[35,8051,8010],{"class":86},[35,8053,8013],{"class":93},[35,8055,2696],{"class":86},[35,8057,8058,8060],{"class":37,"line":90},[35,8059,2677],{"class":86},[35,8061,7898],{"class":45},[3284,8063,8065],{"id":8064},"串行-job","串行 Job",[17,8067,8068,8069,8071],{},"当值为数组（有序）时，那么这组 ",[32,8070,2639],{}," 会串行执行。",[25,8073,8075],{"className":2648,"code":8074,"language":2650,"meta":30,"style":30},"# 串行\nstages:\n  - name: install\n    jobs:\n      - name: job1\n        script: echo \"job1\"\n      - name: job2\n        script: echo \"job2\"\n",[32,8076,8077,8082,8088,8098,8104,8115,8124,8135],{"__ignoreMap":30},[35,8078,8079],{"class":37,"line":38},[35,8080,8081],{"class":2661},"# 串行\n",[35,8083,8084,8086],{"class":37,"line":90},[35,8085,3014],{"class":93},[35,8087,2696],{"class":86},[35,8089,8090,8092,8094,8096],{"class":37,"line":112},[35,8091,2938],{"class":86},[35,8093,2680],{"class":93},[35,8095,59],{"class":86},[35,8097,6919],{"class":45},[35,8099,8100,8102],{"class":37,"line":162},[35,8101,7974],{"class":93},[35,8103,2696],{"class":86},[35,8105,8106,8108,8110,8112],{"class":37,"line":166},[35,8107,7981],{"class":86},[35,8109,2680],{"class":93},[35,8111,59],{"class":86},[35,8113,8114],{"class":45}," job1\n",[35,8116,8117,8119,8121],{"class":37,"line":170},[35,8118,7993],{"class":93},[35,8120,59],{"class":86},[35,8122,8123],{"class":45}," echo \"job1\"\n",[35,8125,8126,8128,8130,8132],{"class":37,"line":174},[35,8127,7981],{"class":86},[35,8129,2680],{"class":93},[35,8131,59],{"class":86},[35,8133,8134],{"class":45}," job2\n",[35,8136,8137,8139,8141],{"class":37,"line":178},[35,8138,7993],{"class":93},[35,8140,59],{"class":86},[35,8142,8143],{"class":45}," echo \"job2\"\n",[3284,8145,8147],{"id":8146},"并行-job","并行 Job",[17,8149,8150,8151,8153],{},"当值为对象（无序）时，那么这组 ",[32,8152,2639],{}," 会并行执行。",[25,8155,8157],{"className":2648,"code":8156,"language":2650,"meta":30,"style":30},"# 并行\nstages:\n  - name: install\n    jobs:\n      job1:\n        script: echo \"job1\"\n      job2:\n        script: echo \"job2\"\n",[32,8158,8159,8164,8170,8180,8186,8193,8201,8208],{"__ignoreMap":30},[35,8160,8161],{"class":37,"line":38},[35,8162,8163],{"class":2661},"# 并行\n",[35,8165,8166,8168],{"class":37,"line":90},[35,8167,3014],{"class":93},[35,8169,2696],{"class":86},[35,8171,8172,8174,8176,8178],{"class":37,"line":112},[35,8173,2938],{"class":86},[35,8175,2680],{"class":93},[35,8177,59],{"class":86},[35,8179,6919],{"class":45},[35,8181,8182,8184],{"class":37,"line":162},[35,8183,7974],{"class":93},[35,8185,2696],{"class":86},[35,8187,8188,8191],{"class":37,"line":166},[35,8189,8190],{"class":93},"      job1",[35,8192,2696],{"class":86},[35,8194,8195,8197,8199],{"class":37,"line":170},[35,8196,7993],{"class":93},[35,8198,59],{"class":86},[35,8200,8123],{"class":45},[35,8202,8203,8206],{"class":37,"line":174},[35,8204,8205],{"class":93},"      job2",[35,8207,2696],{"class":86},[35,8209,8210,8212,8214],{"class":37,"line":178},[35,8211,7993],{"class":93},[35,8213,59],{"class":86},[35,8215,8143],{"class":45},[17,8217,8218,8219,8221],{},"多个 ",[32,8220,2639],{}," 串行、并行可灵活组织。\n先串行后并行的示例：",[25,8223,8225],{"className":2648,"code":8224,"language":2650,"meta":30,"style":30},"main:\n  push:\n    - stages:\n        - name: serial first\n          script: echo \"serial\"\n        - name: parallel\n          jobs:\n            parallel job 1:\n              script: echo \"1\"\n            parallel job 2:\n              script: echo \"2\"\n        - name: serial next\n          script: echo \"serial next\"\n",[32,8226,8227,8233,8239,8247,8258,8267,8278,8284,8291,8300,8307,8316,8327],{"__ignoreMap":30},[35,8228,8229,8231],{"class":37,"line":38},[35,8230,210],{"class":93},[35,8232,2696],{"class":86},[35,8234,8235,8237],{"class":37,"line":90},[35,8236,2667],{"class":93},[35,8238,2696],{"class":86},[35,8240,8241,8243,8245],{"class":37,"line":112},[35,8242,2677],{"class":86},[35,8244,8013],{"class":93},[35,8246,2696],{"class":86},[35,8248,8249,8251,8253,8255],{"class":37,"line":162},[35,8250,2701],{"class":86},[35,8252,2680],{"class":93},[35,8254,59],{"class":86},[35,8256,8257],{"class":45}," serial first\n",[35,8259,8260,8262,8264],{"class":37,"line":166},[35,8261,3370],{"class":93},[35,8263,59],{"class":86},[35,8265,8266],{"class":45}," echo \"serial\"\n",[35,8268,8269,8271,8273,8275],{"class":37,"line":170},[35,8270,2701],{"class":86},[35,8272,2680],{"class":93},[35,8274,59],{"class":86},[35,8276,8277],{"class":45}," parallel\n",[35,8279,8280,8282],{"class":37,"line":174},[35,8281,2716],{"class":93},[35,8283,2696],{"class":86},[35,8285,8286,8289],{"class":37,"line":178},[35,8287,8288],{"class":93},"            parallel job 1",[35,8290,2696],{"class":86},[35,8292,8293,8295,8297],{"class":37,"line":181},[35,8294,2738],{"class":93},[35,8296,59],{"class":86},[35,8298,8299],{"class":45}," echo \"1\"\n",[35,8301,8302,8305],{"class":37,"line":185},[35,8303,8304],{"class":93},"            parallel job 2",[35,8306,2696],{"class":86},[35,8308,8309,8311,8313],{"class":37,"line":1000},[35,8310,2738],{"class":93},[35,8312,59],{"class":86},[35,8314,8315],{"class":45}," echo \"2\"\n",[35,8317,8318,8320,8322,8324],{"class":37,"line":1025},[35,8319,2701],{"class":86},[35,8321,2680],{"class":93},[35,8323,59],{"class":86},[35,8325,8326],{"class":45}," serial next\n",[35,8328,8329,8331,8333],{"class":37,"line":1256},[35,8330,3370],{"class":93},[35,8332,59],{"class":86},[35,8334,8335],{"class":45}," echo \"serial next\"\n",[3225,8337,8339],{"id":8338},"name-stage-name","name {#Stage-name}",[123,8341,8342],{},[126,8343,3233,8344],{},[32,8345,3236],{},[17,8347,8348,8350],{},[32,8349,2627],{}," 名称。",[3225,8352,8354],{"id":8353},"ifnewbranch-stage-ifnewbranch","ifNewBranch {#stage-ifnewbranch}",[123,8356,8357,8361],{},[126,8358,3233,8359],{},[32,8360,4011],{},[126,8362,3298,8363],{},[32,8364,4038],{},[17,8366,7166,8367,8369,8370,5050,8372,7175,8374,3309],{},[32,8368,4996],{}," 表示只有当前分支属于新分支（即 ",[32,8371,7172],{},[32,8373,4996],{},[32,8375,2627],{},[5945,8377,8378],{},[17,8379,7182,8380,7186,8382,7186,8384,8387,8388,8390],{},[32,8381,7185],{},[32,8383,3179],{},[32,8385,8386],{},"if"," 有一个条件满足，此 ",[32,8389,2627],{}," 就会执行",[3225,8392,8394],{"id":8393},"ifmodify-stage-ifmodify","ifModify {#stage-ifmodify}",[123,8396,8397],{},[126,8398,3233,8399,3516,8401],{},[32,8400,3295],{},[32,8402,3236],{},[17,8404,7207,8405,7210,8407,8409],{},[32,8406,2627],{},[32,8408,7213],{}," 匹配表达式字符串或字符串数组。",[3225,8411,8413],{"id":8412},"if-stage-if","if {#stage-if}",[123,8415,8416],{},[126,8417,3233,8418,3516,8420],{},[32,8419,3295],{},[32,8421,3236],{},[17,8423,8424,8425,8427,8428,8430],{},"一个或者多个 Shell 脚本，根据脚本执行的退出程序码（exit code）来判断是否执行此 ",[32,8426,2627],{},"。\n当退出程序码为 ",[32,8429,7495],{}," 时，表示需要执行本步骤。",[17,8432,8433],{},"示例1：判断某个变量的值",[17,8435,8436],{},[129,8437,8440],{"href":8438,"rel":8439},"https:\u002F\u002Flinux.die.net\u002Fman\u002F1\u002Ftest",[133],"shell表达式语法",[25,8442,8444],{"className":2648,"code":8443,"language":2650,"meta":30,"style":30},"main:\n  push:\n    - env:\n        IS_NEW: true\n      stages:\n        - name: is new\n          if: |\n            [ \"$IS_NEW\" = \"true\" ]\n          script: echo is new\n        - name: is not new\n          if: |\n            [ \"$IS_NEW\" != \"true\" ]\n          script: echo not new\n",[32,8445,8446,8452,8458,8467,8476,8482,8493,8502,8507,8516,8527,8535,8540],{"__ignoreMap":30},[35,8447,8448,8450],{"class":37,"line":38},[35,8449,210],{"class":93},[35,8451,2696],{"class":86},[35,8453,8454,8456],{"class":37,"line":90},[35,8455,2667],{"class":93},[35,8457,2696],{"class":86},[35,8459,8460,8462,8465],{"class":37,"line":112},[35,8461,2677],{"class":86},[35,8463,8464],{"class":93}," env",[35,8466,2696],{"class":86},[35,8468,8469,8472,8474],{"class":37,"line":162},[35,8470,8471],{"class":93},"        IS_NEW",[35,8473,59],{"class":86},[35,8475,2908],{"class":2907},[35,8477,8478,8480],{"class":37,"line":166},[35,8479,2693],{"class":93},[35,8481,2696],{"class":86},[35,8483,8484,8486,8488,8490],{"class":37,"line":170},[35,8485,2701],{"class":86},[35,8487,2680],{"class":93},[35,8489,59],{"class":86},[35,8491,8492],{"class":45}," is new\n",[35,8494,8495,8498,8500],{"class":37,"line":174},[35,8496,8497],{"class":93},"          if",[35,8499,59],{"class":86},[35,8501,5641],{"class":71},[35,8503,8504],{"class":37,"line":178},[35,8505,8506],{"class":45},"            [ \"$IS_NEW\" = \"true\" ]\n",[35,8508,8509,8511,8513],{"class":37,"line":181},[35,8510,3370],{"class":93},[35,8512,59],{"class":86},[35,8514,8515],{"class":45}," echo is new\n",[35,8517,8518,8520,8522,8524],{"class":37,"line":185},[35,8519,2701],{"class":86},[35,8521,2680],{"class":93},[35,8523,59],{"class":86},[35,8525,8526],{"class":45}," is not new\n",[35,8528,8529,8531,8533],{"class":37,"line":1000},[35,8530,8497],{"class":93},[35,8532,59],{"class":86},[35,8534,5641],{"class":71},[35,8536,8537],{"class":37,"line":1025},[35,8538,8539],{"class":45},"            [ \"$IS_NEW\" != \"true\" ]\n",[35,8541,8542,8544,8546],{"class":37,"line":1256},[35,8543,3370],{"class":93},[35,8545,59],{"class":86},[35,8547,8548],{"class":45}," echo not new\n",[17,8550,8551],{},"示例2： 判断任务执行的输出",[25,8553,8555],{"className":2648,"code":8554,"language":2650,"meta":30,"style":30},"main:\n  push:\n    - stages:\n        - name: make info\n          script: echo 'haha'\n          exports:\n            info: RESULT\n        - name: run if RESULT is haha\n          if: |\n            [ \"$RESULT\" = \"haha\" ]\n          script: echo $RESULT\n",[32,8556,8557,8563,8569,8577,8588,8597,8604,8614,8625,8633,8638],{"__ignoreMap":30},[35,8558,8559,8561],{"class":37,"line":38},[35,8560,210],{"class":93},[35,8562,2696],{"class":86},[35,8564,8565,8567],{"class":37,"line":90},[35,8566,2667],{"class":93},[35,8568,2696],{"class":86},[35,8570,8571,8573,8575],{"class":37,"line":112},[35,8572,2677],{"class":86},[35,8574,8013],{"class":93},[35,8576,2696],{"class":86},[35,8578,8579,8581,8583,8585],{"class":37,"line":162},[35,8580,2701],{"class":86},[35,8582,2680],{"class":93},[35,8584,59],{"class":86},[35,8586,8587],{"class":45}," make info\n",[35,8589,8590,8592,8594],{"class":37,"line":166},[35,8591,3370],{"class":93},[35,8593,59],{"class":86},[35,8595,8596],{"class":45}," echo 'haha'\n",[35,8598,8599,8602],{"class":37,"line":170},[35,8600,8601],{"class":93},"          exports",[35,8603,2696],{"class":86},[35,8605,8606,8609,8611],{"class":37,"line":174},[35,8607,8608],{"class":93},"            info",[35,8610,59],{"class":86},[35,8612,8613],{"class":45}," RESULT\n",[35,8615,8616,8618,8620,8622],{"class":37,"line":178},[35,8617,2701],{"class":86},[35,8619,2680],{"class":93},[35,8621,59],{"class":86},[35,8623,8624],{"class":45}," run if RESULT is haha\n",[35,8626,8627,8629,8631],{"class":37,"line":181},[35,8628,8497],{"class":93},[35,8630,59],{"class":86},[35,8632,5641],{"class":71},[35,8634,8635],{"class":37,"line":185},[35,8636,8637],{"class":45},"            [ \"$RESULT\" = \"haha\" ]\n",[35,8639,8640,8642,8644],{"class":37,"line":1000},[35,8641,3370],{"class":93},[35,8643,59],{"class":86},[35,8645,8646],{"class":45}," echo $RESULT\n",[3225,8648,8650],{"id":8649},"env-stage-env","env {#stage-env}",[123,8652,8653],{},[126,8654,3233,8655],{},[32,8656,3265],{},[17,8658,8659,8660,8664,8665,8667],{},"同 ",[129,8661,8663],{"href":8662},"#pipeline-env","Pipeline env","，只对当前 ",[32,8666,2627],{}," 生效。",[17,8669,8670,8673,8674,8676],{},[32,8671,8672],{},"Stage env"," 优先级比 ",[32,8675,8663],{}," 高。",[3225,8678,8680],{"id":8679},"imports-stage-imports","imports {#stage-imports}",[123,8682,8683],{},[126,8684,3233,8685,3516,8687],{},[32,8686,3295],{},[32,8688,3236],{},[17,8690,8659,8691,8664,8695,8697],{},[129,8692,8694],{"href":8693},"#pipeline-imports","Pipeline imports",[32,8696,2627],{}," 生效1。",[3225,8699,8701],{"id":8700},"retry-stage-retry","retry {#stage-retry}",[123,8703,8704,8708],{},[126,8705,3233,8706],{},[32,8707,3384],{},[126,8709,3298,8710],{},[32,8711,7495],{},[17,8713,8714,8715,7501],{},"失败重试次数，",[32,8716,7495],{},[3225,8718,8720],{"id":8719},"lock-stage-lock","lock {#stage-lock}",[123,8722,8723],{},[126,8724,3233,8725,8727,8728],{},[32,8726,4011],{}," ｜",[32,8729,3265],{},[17,8731,7539,8732,7542,8734,7545],{},[32,8733,2627],{},[32,8735,2627],{},[17,8737,8738],{},"表现： 任务 A 获取到锁后，任务 B 再申请锁，将等待锁释放后，才能获取到锁继续执行任务。",[123,8740,8741,8756],{},[126,8742,8743,8744,8750,8752,8753],{},"lock.key",[123,8745,8746],{},[126,8747,3233,8748],{},[32,8749,3236],{},[3915,8751],{},"自定义锁名,默认值为 ",[32,8754,8755],{},"分支名-流水线名-stage下标",[126,8757,8758,8759],{},"lock.expires",[123,8760,8761,8765],{},[126,8762,3233,8763],{},[32,8764,3384],{},[126,8766,3298,8767,7583],{},[32,8768,7582],{},[17,8770,7586],{},[123,8772,8773],{},[126,8774,8775,8776],{},"lock.wait\n",[123,8777,8778,8782],{},[126,8779,3233,8780],{},[32,8781,4011],{},[126,8783,3298,8784],{},[32,8785,4038],{},[17,8787,8788],{},"锁被占用是否等待。",[123,8790,8791],{},[126,8792,8793,8794],{},"lock.timeout\n",[123,8795,8796,8800],{},[126,8797,3233,8798],{},[32,8799,3384],{},[126,8801,3298,8802,7583],{},[32,8803,7582],{},[17,8805,8806],{},"指定等待锁的超时时间，单位“秒”。",[17,8808,7661,8809,7665,8811,7668,8813,7668,8815,7668,8817,7668,8819,7668,8821,7682],{},[32,8810,7664],{},[32,8812,6160],{},[32,8814,7671],{},[32,8816,7674],{},[32,8818,7637],{},[32,8820,7657],{},[32,8822,7681],{},[17,8824,8825,8826,8828,8829,8831],{},"例1: ",[32,8827,7664],{}," 是 ",[32,8830,4011],{}," 格式",[25,8833,8835],{"className":2648,"code":8834,"language":2650,"meta":30,"style":30},"main:\n  push:\n    - stages:\n        - name: stage1\n          lock: true\n          jobs:\n            - name: job1\n              script: echo \"job1\"\n",[32,8836,8837,8843,8849,8857,8867,8876,8882,8892],{"__ignoreMap":30},[35,8838,8839,8841],{"class":37,"line":38},[35,8840,210],{"class":93},[35,8842,2696],{"class":86},[35,8844,8845,8847],{"class":37,"line":90},[35,8846,2667],{"class":93},[35,8848,2696],{"class":86},[35,8850,8851,8853,8855],{"class":37,"line":112},[35,8852,2677],{"class":86},[35,8854,8013],{"class":93},[35,8856,2696],{"class":86},[35,8858,8859,8861,8863,8865],{"class":37,"line":162},[35,8860,2701],{"class":86},[35,8862,2680],{"class":93},[35,8864,59],{"class":86},[35,8866,4104],{"class":45},[35,8868,8869,8872,8874],{"class":37,"line":166},[35,8870,8871],{"class":93},"          lock",[35,8873,59],{"class":86},[35,8875,2908],{"class":2907},[35,8877,8878,8880],{"class":37,"line":170},[35,8879,2716],{"class":93},[35,8881,2696],{"class":86},[35,8883,8884,8886,8888,8890],{"class":37,"line":174},[35,8885,2723],{"class":86},[35,8887,2680],{"class":93},[35,8889,59],{"class":86},[35,8891,8114],{"class":45},[35,8893,8894,8896,8898],{"class":37,"line":178},[35,8895,2738],{"class":93},[35,8897,59],{"class":86},[35,8899,8123],{"class":45},[17,8901,8902,8903,8828,8905,8831],{},"例2: ",[32,8904,7664],{},[32,8906,3265],{},[25,8908,8910],{"className":2648,"code":8909,"language":2650,"meta":30,"style":30},"main:\n  push:\n    - stages:\n        - name: stage1\n          lock:\n            key: key\n            expires: 600 # 10分钟\n            wait: true\n            timeout: 60 # 最多等待 1分钟\n          jobs:\n            - name: job1\n              script: echo \"job1\"\n",[32,8911,8912,8918,8924,8932,8942,8948,8957,8968,8977,8988,8994,9004],{"__ignoreMap":30},[35,8913,8914,8916],{"class":37,"line":38},[35,8915,210],{"class":93},[35,8917,2696],{"class":86},[35,8919,8920,8922],{"class":37,"line":90},[35,8921,2667],{"class":93},[35,8923,2696],{"class":86},[35,8925,8926,8928,8930],{"class":37,"line":112},[35,8927,2677],{"class":86},[35,8929,8013],{"class":93},[35,8931,2696],{"class":86},[35,8933,8934,8936,8938,8940],{"class":37,"line":162},[35,8935,2701],{"class":86},[35,8937,2680],{"class":93},[35,8939,59],{"class":86},[35,8941,4104],{"class":45},[35,8943,8944,8946],{"class":37,"line":166},[35,8945,8871],{"class":93},[35,8947,2696],{"class":86},[35,8949,8950,8953,8955],{"class":37,"line":170},[35,8951,8952],{"class":93},"            key",[35,8954,59],{"class":86},[35,8956,7776],{"class":45},[35,8958,8959,8962,8964,8966],{"class":37,"line":174},[35,8960,8961],{"class":93},"            expires",[35,8963,59],{"class":86},[35,8965,7786],{"class":3212},[35,8967,7789],{"class":2661},[35,8969,8970,8973,8975],{"class":37,"line":178},[35,8971,8972],{"class":93},"            wait",[35,8974,59],{"class":86},[35,8976,2908],{"class":2907},[35,8978,8979,8982,8984,8986],{"class":37,"line":181},[35,8980,8981],{"class":93},"            timeout",[35,8983,59],{"class":86},[35,8985,7808],{"class":3212},[35,8987,7811],{"class":2661},[35,8989,8990,8992],{"class":37,"line":185},[35,8991,2716],{"class":93},[35,8993,2696],{"class":86},[35,8995,8996,8998,9000,9002],{"class":37,"line":1000},[35,8997,2723],{"class":86},[35,8999,2680],{"class":93},[35,9001,59],{"class":86},[35,9003,8114],{"class":45},[35,9005,9006,9008,9010],{"class":37,"line":1025},[35,9007,2738],{"class":93},[35,9009,59],{"class":86},[35,9011,8123],{"class":45},[3225,9013,9015],{"id":9014},"image-stage-image","image {#Stage-image}",[123,9017,9018],{},[126,9019,3233,9020,3516,9022],{},[32,9021,3265],{},[32,9023,3236],{},[17,9025,3521,9026,3484,9028,9030],{},[32,9027,2627],{},[32,9029,2627],{}," 下的所有任务默认都将在这个镜像环境中执行。",[123,9032,9033,9041,9047],{},[126,9034,9035,3534,9037,3537,9039,3309],{},[32,9036,3533],{},[32,9038,3236],{},[32,9040,3540],{},[126,9042,9043,3534,9045,3548],{},[32,9044,3545],{},[32,9046,3236],{},[126,9048,9049,3534,9051,3556],{},[32,9050,3553],{},[32,9052,3236],{},[17,9054,3559,9055,3562,9057,3309],{},[32,9056,1138],{},[32,9058,3533],{},[3225,9060,9061],{"id":9061},"jobs",[123,9063,9064],{},[126,9065,3233,9066,3516,9069],{},[32,9067,9068],{},"Array\u003CJob>",[32,9070,9071],{},"Object\u003Cname,Job>",[17,9073,9074],{},"定义一组任务，每个任务串行\u002F并行运行。",[123,9076,9077,9081],{},[126,9078,8068,9079,8071],{},[32,9080,2639],{},[126,9082,8150,9083,8153],{},[32,9084,2639],{},[21,9086,2639],{"id":9087},"job",[17,9089,9090,9092],{},[32,9091,2639],{}," 是最基本的任务执行单元，可以分为三类：",[3225,9094,2085],{"id":2085},[123,9096,9097,9111,9123],{},[126,9098,9099,9100,9106,9108,9109,3309],{},"type:",[123,9101,9102],{},[126,9103,3233,9104],{},[32,9105,3236],{},[3915,9107],{},"指定该步骤所要执行的 ",[129,9110,2085],{"href":2081},[126,9112,9113,9114,9120,9122],{},"options:",[123,9115,9116],{},[126,9117,3233,9118],{},[32,9119,3265],{},[3915,9121],{},"指定内置任务的相应参数。",[126,9124,9125,9126,9134,9136,9137,9139,9140,9143],{},"optionsFrom:",[123,9127,9128],{},[126,9129,9130,3516,9132],{},[32,9131,3295],{},[32,9133,3236],{},[3915,9135],{},"指定本地或 Git 仓库文件路径，加载为内置任务参数。与 ",[32,9138,2964],{}," 参数类似，配置 ",[32,9141,9142],{},"optionsFrom"," 为数组时，如遇到参数重复的情况，后面的配置会覆盖前面的。",[17,9145,9146,9149,9150,3309],{},[32,9147,9148],{},"options"," 中同名字段优先级高于 ",[32,9151,9142],{},[17,9153,9154,9155,3309],{},"引用配置文件权限控制参考 ",[129,9156,6142],{"href":6141},[17,9158,3312],{},[25,9160,9162],{"className":2648,"code":9161,"language":2650,"meta":30,"style":30},"name: install\ntype: INTERNAL_JOB_NAME\noptionsFrom: .\u002Foptions.json\noptions:\n  key1: value1\n  key2: value2\n",[32,9163,9164,9172,9181,9190,9196,9206],{"__ignoreMap":30},[35,9165,9166,9168,9170],{"class":37,"line":38},[35,9167,2844],{"class":93},[35,9169,59],{"class":86},[35,9171,6919],{"class":45},[35,9173,9174,9176,9178],{"class":37,"line":90},[35,9175,4553],{"class":93},[35,9177,59],{"class":86},[35,9179,9180],{"class":45}," INTERNAL_JOB_NAME\n",[35,9182,9183,9185,9187],{"class":37,"line":112},[35,9184,9142],{"class":93},[35,9186,59],{"class":86},[35,9188,9189],{"class":45}," .\u002Foptions.json\n",[35,9191,9192,9194],{"class":37,"line":162},[35,9193,9148],{"class":93},[35,9195,2696],{"class":86},[35,9197,9198,9201,9203],{"class":37,"line":166},[35,9199,9200],{"class":93},"  key1",[35,9202,59],{"class":86},[35,9204,9205],{"class":45}," value1\n",[35,9207,9208,9211,9213],{"class":37,"line":170},[35,9209,9210],{"class":93},"  key2",[35,9212,59],{"class":86},[35,9214,9215],{"class":45}," value2\n",[25,9217,9219],{"className":5271,"code":9218,"language":5273,"meta":30,"style":30},"\u002F\u002F .\u002Foptions.json\n{\n  \"key1\": \"value1\",\n  \"key2\": \"value2\"\n}\n",[32,9220,9221,9226,9230,9248,9264],{"__ignoreMap":30},[35,9222,9223],{"class":37,"line":38},[35,9224,9225],{"class":2661},"\u002F\u002F .\u002Foptions.json\n",[35,9227,9228],{"class":37,"line":90},[35,9229,87],{"class":86},[35,9231,9232,9234,9236,9238,9240,9242,9244,9246],{"class":37,"line":112},[35,9233,5284],{"class":86},[35,9235,6317],{"class":5287},[35,9237,5291],{"class":86},[35,9239,59],{"class":86},[35,9241,6419],{"class":86},[35,9243,6330],{"class":45},[35,9245,5291],{"class":86},[35,9247,6256],{"class":86},[35,9249,9250,9252,9254,9256,9258,9260,9262],{"class":37,"line":162},[35,9251,5284],{"class":86},[35,9253,6357],{"class":5287},[35,9255,5291],{"class":86},[35,9257,59],{"class":86},[35,9259,6419],{"class":86},[35,9261,6341],{"class":45},[35,9263,6275],{"class":86},[35,9265,9266],{"class":37,"line":166},[35,9267,5300],{"class":86},[3225,9269,9270],{"id":9270},"脚本任务",[25,9272,9274],{"className":2648,"code":9273,"language":2650,"meta":30,"style":30},"- name: install\n  script: npm install\n",[32,9275,9276,9286],{"__ignoreMap":30},[35,9277,9278,9280,9282,9284],{"class":37,"line":38},[35,9279,8010],{"class":86},[35,9281,2680],{"class":93},[35,9283,59],{"class":86},[35,9285,6919],{"class":45},[35,9287,9288,9291,9293],{"class":37,"line":90},[35,9289,9290],{"class":93},"  script",[35,9292,59],{"class":86},[35,9294,6928],{"class":45},[123,9296,9297,9328],{},[126,9298,9299,9300,9308,9108,9310,9313,9314,9317,9318,9320,9321,9324,9325,9327],{},"script:",[123,9301,9302],{},[126,9303,3233,9304,3516,9306],{},[32,9305,3295],{},[32,9307,3236],{},[3915,9309],{},[32,9311,9312],{},"shell"," 脚本。数组会默认使用 ",[32,9315,9316],{},"&&"," 连接。",[3915,9319],{},"如果希望 ",[32,9322,9323],{},"script"," 拥有自己的运行环境，而不是在 pipeline 所在环境执行，可以通过 ",[32,9326,1138],{}," 属性指定运行环境。",[126,9329,9330,9331,9337,9339],{},"image:",[123,9332,9333],{},[126,9334,3233,9335],{},[32,9336,3236],{},[3915,9338],{},"指定脚本运行环境。",[17,9341,3312],{},[25,9343,9345],{"className":2648,"code":9344,"language":2650,"meta":30,"style":30},"- name: install\n  image: node:20\n  script: npm install\n",[32,9346,9347,9357,9365],{"__ignoreMap":30},[35,9348,9349,9351,9353,9355],{"class":37,"line":38},[35,9350,8010],{"class":86},[35,9352,2680],{"class":93},[35,9354,59],{"class":86},[35,9356,6919],{"class":45},[35,9358,9359,9361,9363],{"class":37,"line":90},[35,9360,2861],{"class":93},[35,9362,59],{"class":86},[35,9364,3608],{"class":45},[35,9366,9367,9369,9371],{"class":37,"line":112},[35,9368,9290],{"class":93},[35,9370,59],{"class":86},[35,9372,6928],{"class":45},[17,9374,9375],{},[3953,9376,9377],{},"脚本任务可以简化为字符串，此时 script 取该字符串，name 取该字符串第一行：",[25,9379,9381],{"className":2648,"code":9380,"language":2650,"meta":30,"style":30},"- echo hello\n",[32,9382,9383],{"__ignoreMap":30},[35,9384,9385,9387],{"class":37,"line":38},[35,9386,8010],{"class":86},[35,9388,7898],{"class":45},[17,9390,9391],{},"相当于：",[25,9393,9395],{"className":2648,"code":9394,"language":2650,"meta":30,"style":30},"- name: echo hello\n  script: echo hello\n",[32,9396,9397,9407],{"__ignoreMap":30},[35,9398,9399,9401,9403,9405],{"class":37,"line":38},[35,9400,8010],{"class":86},[35,9402,2680],{"class":93},[35,9404,59],{"class":86},[35,9406,7898],{"class":45},[35,9408,9409,9411,9413],{"class":37,"line":90},[35,9410,9290],{"class":93},[35,9412,59],{"class":86},[35,9414,7898],{"class":45},[3225,9416,9417],{"id":9417},"插件任务",[17,9419,9420],{},"插件即 Docker 镜像，也可称为镜像任务。",[17,9422,9423,9424,9426],{},"不同于以上两类任务，",[32,9425,9417],{}," 具有执行环境更自由的特点。\n而且更易在团队、公司内外分享，甚至可以跨 CI 复用。",[17,9428,9429,9431,9432,9435],{},[32,9430,9417],{}," 通过向 ",[32,9433,9434],{},"ENTRYPOINT"," 传递环境变量的方式，来达到隐藏内部实现的目的。",[5945,9437,9438],{},[17,9439,9440],{},"注意：通过 imports、env 等参数设置的自定义环境变量不会传递给插件，但可以用在 settings、args中的变量替换。CNB 系统环境变量依然会传递给插件",[123,9442,9443,9456,9467,9486],{},[126,9444,9445,9446,9452,3468,9454,8350],{},"name:",[123,9447,9448],{},[126,9449,3233,9450],{},[32,9451,3236],{},[3915,9453],{},[32,9455,2639],{},[126,9457,9330,9458,9464,9466],{},[123,9459,9460],{},[126,9461,3233,9462],{},[32,9463,3236],{},[3915,9465],{},"镜像的完整路径。",[126,9468,9469,9470,9476,9478,9479,7224,9482,9485],{},"settings:",[123,9471,9472],{},[126,9473,3233,9474],{},[32,9475,3265],{},[3915,9477],{},"指定该插件任务参数。按照镜像提供方的文档填写即可。也可以通过 ",[32,9480,9481],{},"$VAR",[32,9483,9484],{},"${VAR}"," 取到环境变量。",[126,9487,9488,9489],{},"settingsFrom:",[123,9490,9491],{},[126,9492,3233,9493,3516,9495,9497,9499,9500,9502,9503],{},[32,9494,3295],{},[32,9496,3236],{},[3915,9498],{},"指定本地或 Git 仓库文件路径，加载为插件任务参数。",[3915,9501],{},"优先级：",[123,9504,9505,9508],{},[126,9506,9507],{},"如遇到参数重复的情况，后面的配置会覆盖前面的。",[126,9509,9510,9149,9513,3309],{},[32,9511,9512],{},"settings",[32,9514,9515],{},"settingsFrom",[17,9517,9154,9518,3309],{},[129,9519,6142],{"href":6141},[17,9521,3312],{},[17,9523,9524,9525,5486,9528,9531],{},"同时限制 ",[32,9526,9527],{},"images",[32,9529,9530],{},"slugs","：",[25,9533,9535],{"className":2648,"code":9534,"language":2650,"meta":30,"style":30},"allow_slugs:\n  - a\u002Fb\nallow_images:\n  - a\u002Fb\n",[32,9536,9537,9543,9550,9557],{"__ignoreMap":30},[35,9538,9539,9541],{"class":37,"line":38},[35,9540,6174],{"class":93},[35,9542,2696],{"class":86},[35,9544,9545,9547],{"class":37,"line":90},[35,9546,2938],{"class":86},[35,9548,9549],{"class":45}," a\u002Fb\n",[35,9551,9552,9555],{"class":37,"line":112},[35,9553,9554],{"class":93},"allow_images",[35,9556,2696],{"class":86},[35,9558,9559,9561],{"class":37,"line":162},[35,9560,2938],{"class":86},[35,9562,9549],{"class":45},[17,9564,9565,9566,9568,9569,9531],{},"仅限制 ",[32,9567,9527],{},"，不限制 ",[32,9570,9571],{},"slug",[25,9573,9575],{"className":2648,"code":9574,"language":2650,"meta":30,"style":30},"allow_images:\n  - a\u002Fb\n",[32,9576,9577,9583],{"__ignoreMap":30},[35,9578,9579,9581],{"class":37,"line":38},[35,9580,9554],{"class":93},[35,9582,2696],{"class":86},[35,9584,9585,9587],{"class":37,"line":90},[35,9586,2938],{"class":86},[35,9588,9549],{"class":45},[17,9590,9591,9593,9594,9596],{},[32,9592,9515],{}," 可以写在 ",[32,9595,2372],{}," 中：",[25,9598,9600],{"className":4407,"code":9599,"language":4409,"meta":30,"style":30},"FROM node:20\n\nLABEL cnb.cool\u002Fsettings-from=\"https:\u002F\u002Fcnb.cool\u002F\u003Cyour-repo-slug>\u002F-\u002Fblob\u002Fmain\u002Fxxx\u002Fsettings.json\"\n",[32,9601,9602,9608,9612],{"__ignoreMap":30},[35,9603,9604,9606],{"class":37,"line":38},[35,9605,4416],{"class":3212},[35,9607,3608],{"class":82},[35,9609,9610],{"class":37,"line":90},[35,9611,4423],{"emptyLinePlaceholder":201},[35,9613,9614,9617,9620],{"class":37,"line":112},[35,9615,9616],{"class":3212},"LABEL",[35,9618,9619],{"class":82}," cnb.cool\u002Fsettings-from=",[35,9621,9622],{"class":45},"\"https:\u002F\u002Fcnb.cool\u002F\u003Cyour-repo-slug>\u002F-\u002Fblob\u002Fmain\u002Fxxx\u002Fsettings.json\"\n",[3284,9624,2140],{"id":2140},[17,9626,9627],{},"with imports：",[25,9629,9631],{"className":2648,"code":9630,"language":2650,"meta":30,"style":30},"- name: npm publish\n  image: plugins\u002Fnpm\n  imports: https:\u002F\u002Fcnb.cool\u002F\u003Cyour-repo-slug>\u002F-\u002Fblob\u002Fmain\u002Fxxx\u002Fnpm.json\n  settings:\n    username: $NPM_USER\n    password: $NPM_PASS\n    email: $NPM_EMAIL\n    registry: https:\u002F\u002Fmirrors.xxx.com\u002Fnpm\u002F\n    folder: .\u002F\n",[32,9632,9633,9644,9653,9663,9670,9680,9690,9700,9710],{"__ignoreMap":30},[35,9634,9635,9637,9639,9641],{"class":37,"line":38},[35,9636,8010],{"class":86},[35,9638,2680],{"class":93},[35,9640,59],{"class":86},[35,9642,9643],{"class":45}," npm publish\n",[35,9645,9646,9648,9650],{"class":37,"line":90},[35,9647,2861],{"class":93},[35,9649,59],{"class":86},[35,9651,9652],{"class":45}," plugins\u002Fnpm\n",[35,9654,9655,9658,9660],{"class":37,"line":112},[35,9656,9657],{"class":93},"  imports",[35,9659,59],{"class":86},[35,9661,9662],{"class":45}," https:\u002F\u002Fcnb.cool\u002F\u003Cyour-repo-slug>\u002F-\u002Fblob\u002Fmain\u002Fxxx\u002Fnpm.json\n",[35,9664,9665,9668],{"class":37,"line":162},[35,9666,9667],{"class":93},"  settings",[35,9669,2696],{"class":86},[35,9671,9672,9675,9677],{"class":37,"line":166},[35,9673,9674],{"class":93},"    username",[35,9676,59],{"class":86},[35,9678,9679],{"class":45}," $NPM_USER\n",[35,9681,9682,9685,9687],{"class":37,"line":170},[35,9683,9684],{"class":93},"    password",[35,9686,59],{"class":86},[35,9688,9689],{"class":45}," $NPM_PASS\n",[35,9691,9692,9695,9697],{"class":37,"line":174},[35,9693,9694],{"class":93},"    email",[35,9696,59],{"class":86},[35,9698,9699],{"class":45}," $NPM_EMAIL\n",[35,9701,9702,9705,9707],{"class":37,"line":178},[35,9703,9704],{"class":93},"    registry",[35,9706,59],{"class":86},[35,9708,9709],{"class":45}," https:\u002F\u002Fmirrors.xxx.com\u002Fnpm\u002F\n",[35,9711,9712,9715,9717],{"class":37,"line":181},[35,9713,9714],{"class":93},"    folder",[35,9716,59],{"class":86},[35,9718,9719],{"class":45}," .\u002F\n",[25,9721,9723],{"className":5271,"code":9722,"language":5273,"meta":30,"style":30},"{\n  \"username\": \"xxx\",\n  \"password\": \"xxx\",\n  \"email\": \"xxx@emai.com\",\n  \"allow_slugs\": [\"cnb\u002F**\u002F**\"],\n  \"allow_images\": [\"plugins\u002Fnpm\"]\n}\n",[32,9724,9725,9729,9748,9766,9786,9808,9829],{"__ignoreMap":30},[35,9726,9727],{"class":37,"line":38},[35,9728,87],{"class":86},[35,9730,9731,9733,9735,9737,9739,9741,9744,9746],{"class":37,"line":90},[35,9732,5284],{"class":86},[35,9734,5823],{"class":5287},[35,9736,5291],{"class":86},[35,9738,59],{"class":86},[35,9740,6419],{"class":86},[35,9742,9743],{"class":45},"xxx",[35,9745,5291],{"class":86},[35,9747,6256],{"class":86},[35,9749,9750,9752,9754,9756,9758,9760,9762,9764],{"class":37,"line":112},[35,9751,5284],{"class":86},[35,9753,6263],{"class":5287},[35,9755,5291],{"class":86},[35,9757,59],{"class":86},[35,9759,6419],{"class":86},[35,9761,9743],{"class":45},[35,9763,5291],{"class":86},[35,9765,6256],{"class":86},[35,9767,9768,9770,9773,9775,9777,9779,9782,9784],{"class":37,"line":162},[35,9769,5284],{"class":86},[35,9771,9772],{"class":5287},"email",[35,9774,5291],{"class":86},[35,9776,59],{"class":86},[35,9778,6419],{"class":86},[35,9780,9781],{"class":45},"xxx@emai.com",[35,9783,5291],{"class":86},[35,9785,6256],{"class":86},[35,9787,9788,9790,9792,9794,9796,9798,9800,9803,9805],{"class":37,"line":166},[35,9789,5284],{"class":86},[35,9791,6174],{"class":5287},[35,9793,5291],{"class":86},[35,9795,59],{"class":86},[35,9797,99],{"class":86},[35,9799,5291],{"class":86},[35,9801,9802],{"class":45},"cnb\u002F**\u002F**",[35,9804,5291],{"class":86},[35,9806,9807],{"class":86},"],\n",[35,9809,9810,9812,9814,9816,9818,9820,9822,9825,9827],{"class":37,"line":170},[35,9811,5284],{"class":86},[35,9813,9554],{"class":5287},[35,9815,5291],{"class":86},[35,9817,59],{"class":86},[35,9819,99],{"class":86},[35,9821,5291],{"class":86},[35,9823,9824],{"class":45},"plugins\u002Fnpm",[35,9826,5291],{"class":86},[35,9828,109],{"class":86},[35,9830,9831],{"class":37,"line":174},[35,9832,5300],{"class":86},[17,9834,9835],{},"with settingsFrom：",[25,9837,9839],{"className":2648,"code":9838,"language":2650,"meta":30,"style":30},"- name: npm publish\n  image: plugins\u002Fnpm\n  settingsFrom: https:\u002F\u002Fcnb.cool\u002F\u003Cyour-repo-slug>\u002F-\u002Fblob\u002Fmain\u002Fxxx\u002Fnpm-settings.json\n  settings:\n    # username: $NPM_USER\n    # password: $NPM_PASS\n    # email: $NPM_EMAIL\n    registry: https:\u002F\u002Fmirrors.xxx.com\u002Fnpm\u002F\n    folder: .\u002F\n",[32,9840,9841,9851,9859,9869,9875,9880,9885,9890,9898],{"__ignoreMap":30},[35,9842,9843,9845,9847,9849],{"class":37,"line":38},[35,9844,8010],{"class":86},[35,9846,2680],{"class":93},[35,9848,59],{"class":86},[35,9850,9643],{"class":45},[35,9852,9853,9855,9857],{"class":37,"line":90},[35,9854,2861],{"class":93},[35,9856,59],{"class":86},[35,9858,9652],{"class":45},[35,9860,9861,9864,9866],{"class":37,"line":112},[35,9862,9863],{"class":93},"  settingsFrom",[35,9865,59],{"class":86},[35,9867,9868],{"class":45}," https:\u002F\u002Fcnb.cool\u002F\u003Cyour-repo-slug>\u002F-\u002Fblob\u002Fmain\u002Fxxx\u002Fnpm-settings.json\n",[35,9870,9871,9873],{"class":37,"line":162},[35,9872,9667],{"class":93},[35,9874,2696],{"class":86},[35,9876,9877],{"class":37,"line":166},[35,9878,9879],{"class":2661},"    # username: $NPM_USER\n",[35,9881,9882],{"class":37,"line":170},[35,9883,9884],{"class":2661},"    # password: $NPM_PASS\n",[35,9886,9887],{"class":37,"line":174},[35,9888,9889],{"class":2661},"    # email: $NPM_EMAIL\n",[35,9891,9892,9894,9896],{"class":37,"line":178},[35,9893,9704],{"class":93},[35,9895,59],{"class":86},[35,9897,9709],{"class":45},[35,9899,9900,9902,9904],{"class":37,"line":181},[35,9901,9714],{"class":93},[35,9903,59],{"class":86},[35,9905,9719],{"class":45},[25,9907,9909],{"className":5271,"code":9908,"language":5273,"meta":30,"style":30},"{\n  \"username\": \"xxx\",\n  \"password\": \"xxx\",\n  \"email\": \"xxx@emai.com\",\n  \"allow_slugs\": [\"cnb\u002Fcnb\"],\n  \"allow_images\": [\"plugins\u002Fnpm\"]\n}\n",[32,9910,9911,9915,9933,9951,9969,9990,10010],{"__ignoreMap":30},[35,9912,9913],{"class":37,"line":38},[35,9914,87],{"class":86},[35,9916,9917,9919,9921,9923,9925,9927,9929,9931],{"class":37,"line":90},[35,9918,5284],{"class":86},[35,9920,5823],{"class":5287},[35,9922,5291],{"class":86},[35,9924,59],{"class":86},[35,9926,6419],{"class":86},[35,9928,9743],{"class":45},[35,9930,5291],{"class":86},[35,9932,6256],{"class":86},[35,9934,9935,9937,9939,9941,9943,9945,9947,9949],{"class":37,"line":112},[35,9936,5284],{"class":86},[35,9938,6263],{"class":5287},[35,9940,5291],{"class":86},[35,9942,59],{"class":86},[35,9944,6419],{"class":86},[35,9946,9743],{"class":45},[35,9948,5291],{"class":86},[35,9950,6256],{"class":86},[35,9952,9953,9955,9957,9959,9961,9963,9965,9967],{"class":37,"line":162},[35,9954,5284],{"class":86},[35,9956,9772],{"class":5287},[35,9958,5291],{"class":86},[35,9960,59],{"class":86},[35,9962,6419],{"class":86},[35,9964,9781],{"class":45},[35,9966,5291],{"class":86},[35,9968,6256],{"class":86},[35,9970,9971,9973,9975,9977,9979,9981,9983,9986,9988],{"class":37,"line":166},[35,9972,5284],{"class":86},[35,9974,6174],{"class":5287},[35,9976,5291],{"class":86},[35,9978,59],{"class":86},[35,9980,99],{"class":86},[35,9982,5291],{"class":86},[35,9984,9985],{"class":45},"cnb\u002Fcnb",[35,9987,5291],{"class":86},[35,9989,9807],{"class":86},[35,9991,9992,9994,9996,9998,10000,10002,10004,10006,10008],{"class":37,"line":170},[35,9993,5284],{"class":86},[35,9995,9554],{"class":5287},[35,9997,5291],{"class":86},[35,9999,59],{"class":86},[35,10001,99],{"class":86},[35,10003,5291],{"class":86},[35,10005,9824],{"class":45},[35,10007,5291],{"class":86},[35,10009,109],{"class":86},[35,10011,10012],{"class":37,"line":174},[35,10013,5300],{"class":86},[3225,10015,10017],{"id":10016},"name-job-name","name {#job-name}",[123,10019,10020],{},[126,10021,3233,10022],{},[32,10023,3236],{},[17,10025,3468,10026,8350],{},[32,10027,2639],{},[3225,10029,10031],{"id":10030},"ifmodify-job-ifmodify","ifModify {#job-ifmodify}",[123,10033,10034],{},[126,10035,3233,10036,3516,10038],{},[32,10037,3295],{},[32,10039,3236],{},[17,10041,8659,10042,10046,10047,8667],{},[129,10043,10045],{"href":10044},"#stage-ifmodify","Stage ifModify","。只对当前 ",[32,10048,2639],{},[3225,10050,10052],{"id":10051},"ifnewbranch-job-ifnewbranch","ifNewBranch {#job-ifnewbranch}",[123,10054,10055,10059],{},[126,10056,3233,10057],{},[32,10058,4011],{},[126,10060,3298,10061],{},[32,10062,4038],{},[17,10064,8659,10065,10046,10069,8667],{},[129,10066,10068],{"href":10067},"#stage-ifnewbranch","Stage ifNewBranch",[32,10070,2639],{},[3225,10072,10074],{"id":10073},"if-job-if","if {#job-if}",[123,10076,10077],{},[126,10078,3233,10079,3516,10081],{},[32,10080,3295],{},[32,10082,3236],{},[17,10084,8659,10085,10046,10089,8667],{},[129,10086,10088],{"href":10087},"#stage-if","Stage if",[32,10090,2639],{},[3225,10092,10094],{"id":10093},"breakifmodify-job-breakifmodify","breakIfModify {#job-breakifmodify}",[123,10096,10097,10101],{},[126,10098,3233,10099],{},[32,10100,4011],{},[126,10102,3298,10103],{},[32,10104,4038],{},[17,10106,8659,10107,10111,10112,8667],{},[129,10108,10110],{"href":10109},"#pipeline-breakifmodify","Pipeline breakIfModify","。不同点在于只对当前 ",[32,10113,2639],{},[3225,10115,10117],{"id":10116},"skipifmodify-job-skipifmodify","skipIfModify {#job-skipifmodify}",[123,10119,10120,10124],{},[126,10121,3233,10122],{},[32,10123,4011],{},[126,10125,3298,10126],{},[32,10127,4038],{},[17,10129,10130,10132,10133,3309],{},[32,10131,2639],{}," 执行前，如果源分支已更新，则跳过当前 ",[32,10134,2639],{},[3225,10136,10138],{"id":10137},"env-job-env","env {#job-env}",[123,10140,10141],{},[126,10142,3233,10143],{},[32,10144,3265],{},[17,10146,8659,10147,8664,10150,8667],{},[129,10148,8672],{"href":10149},"#stage-env",[32,10151,2639],{},[17,10153,10154,8673,10157,3245,10159,8676],{},[32,10155,10156],{},"Job env",[32,10158,8663],{},[32,10160,8672],{},[3225,10162,10164],{"id":10163},"imports-job-imports","imports {#job-imports}",[123,10166,10167],{},[126,10168,3233,10169,3516,10171],{},[32,10170,3295],{},[32,10172,3236],{},[17,10174,8659,10175,8664,10179,8667],{},[129,10176,10178],{"href":10177},"#stage-imports","Stage imports",[32,10180,2639],{},[3225,10182,10184],{"id":10183},"exports-job-exports","exports {#job-exports}",[123,10186,10187],{},[126,10188,3233,10189],{},[32,10190,3265],{},[17,10192,10193,10195,10196,10199,10200,10203,10204,10206,10207,3309],{},[32,10194,2639],{}," 执行结束后，有一个 ",[32,10197,10198],{},"result"," 对象，可通过 ",[32,10201,10202],{},"exports"," 将 ",[32,10205,10198],{}," 中的属性导出到环境变量，生命周期为当前 ",[32,10208,2623],{},[17,10210,10211,10212],{},"详情请见 ",[129,10213,2063],{"href":10214},".\u002Fenv#%E5%AF%BC%E5%87%BA%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F",[3225,10216,7674],{"id":7674},[123,10218,10219],{},[126,10220,3233,10221,3516,10223],{},[32,10222,3384],{},[32,10224,3236],{},[17,10226,10227],{},"设置单个任务的超时时间，默认为 1 小时，最大不能超过 12 小时。",[17,10229,10230,10231,5486,10234,10237],{},"对 ",[32,10232,10233],{},"script-job",[32,10235,10236],{},"image-job"," 有效。",[17,10239,10240],{},"同时支持以下单位：",[123,10242,10243,10249,10255,10261],{},[126,10244,10245,10248],{},[32,10246,10247],{},"ms",": 毫秒(默认)",[126,10250,10251,10254],{},[32,10252,10253],{},"s"," : 秒",[126,10256,10257,10260],{},[32,10258,10259],{},"m"," : 分钟",[126,10262,10263,10266],{},[32,10264,10265],{},"h"," : 小时",[25,10268,10270],{"className":2648,"code":10269,"language":2650,"meta":30,"style":30},"name: timeout job\nscript: sleep 1d\ntimeout: 100s #任务将在100秒后超时退出\n",[32,10271,10272,10281,10290],{"__ignoreMap":30},[35,10273,10274,10276,10278],{"class":37,"line":38},[35,10275,2844],{"class":93},[35,10277,59],{"class":86},[35,10279,10280],{"class":45}," timeout job\n",[35,10282,10283,10285,10287],{"class":37,"line":90},[35,10284,9323],{"class":93},[35,10286,59],{"class":86},[35,10288,10289],{"class":45}," sleep 1d\n",[35,10291,10292,10294,10296,10299],{"class":37,"line":112},[35,10293,7674],{"class":93},[35,10295,59],{"class":86},[35,10297,10298],{"class":45}," 100s",[35,10300,10301],{"class":2661}," #任务将在100秒后超时退出\n",[17,10303,10304,10305],{},"详见 ",[129,10306,2071],{"href":10307},".\u002Ftimeout",[3225,10309,10311],{"id":10310},"allowfailure-job-allowfailure","allowFailure {#job-allowfailure}",[123,10313,10314,10320],{},[126,10315,3233,10316,3516,10318],{},[32,10317,4011],{},[32,10319,3236],{},[126,10321,3298,10322],{},[32,10323,4038],{},[17,10325,7166,10326,10328],{},[32,10327,4996],{}," 表示本步骤如果失败，也不会影响接下来流程的执行，并且不会影响最后的结果。",[17,10330,10331,10332,10334],{},"值为 ",[32,10333,3236],{}," 类型时可以读取环境变量",[3225,10336,10338],{"id":10337},"lock-job-lock","lock {#job-lock}",[123,10340,10341],{},[126,10342,3233,10343,3516,10345],{},[32,10344,3265],{},[32,10346,4011],{},[17,10348,7539,10349,7542,10351,7545],{},[32,10350,2639],{},[32,10352,2639],{},[17,10354,8738],{},[123,10356,10357],{},[126,10358,10359,10360],{},"lock.key\n",[123,10361,10362],{},[126,10363,3233,10364],{},[32,10365,3236],{},[17,10367,7562,10368],{},[32,10369,10370],{},"分支名-流水线名-stage下标-job名",[123,10372,10373],{},[126,10374,10375,10376],{},"lock.expires\n",[123,10377,10378,10382],{},[126,10379,3233,10380],{},[32,10381,3384],{},[126,10383,3298,10384,7583],{},[32,10385,7582],{},[17,10387,7586],{},[123,10389,10390],{},[126,10391,8775,10392],{},[123,10393,10394,10398],{},[126,10395,3233,10396],{},[32,10397,4011],{},[126,10399,3298,10400],{},[32,10401,4038],{},[17,10403,8788],{},[123,10405,10406],{},[126,10407,8793,10408],{},[123,10409,10410,10414],{},[126,10411,3233,10412],{},[32,10413,3384],{},[126,10415,3298,10416,7583],{},[32,10417,7582],{},[17,10419,8806],{},[17,10421,7661,10422,7665,10424,7668,10426,7668,10428,7668,10430,7668,10432,7668,10434,7682],{},[32,10423,7664],{},[32,10425,6160],{},[32,10427,7671],{},[32,10429,7674],{},[32,10431,7637],{},[32,10433,7657],{},[32,10435,7681],{},[17,10437,7685],{},[25,10439,10441],{"className":2648,"code":10440,"language":2650,"meta":30,"style":30},"name: 锁\nlock: true\nscript: echo 'job 锁'\n",[32,10442,10443,10452,10460],{"__ignoreMap":30},[35,10444,10445,10447,10449],{"class":37,"line":38},[35,10446,2844],{"class":93},[35,10448,59],{"class":86},[35,10450,10451],{"class":45}," 锁\n",[35,10453,10454,10456,10458],{"class":37,"line":90},[35,10455,7664],{"class":93},[35,10457,59],{"class":86},[35,10459,2908],{"class":2907},[35,10461,10462,10464,10466],{"class":37,"line":112},[35,10463,9323],{"class":93},[35,10465,59],{"class":86},[35,10467,10468],{"class":45}," echo 'job 锁'\n",[17,10470,7741],{},[25,10472,10474],{"className":2648,"code":10473,"language":2650,"meta":30,"style":30},"name: 锁\nlock:\n  key: key\n  expires: 10\n  wait: true\nscript: echo 'job 锁'\n",[32,10475,10476,10484,10490,10499,10509,10518],{"__ignoreMap":30},[35,10477,10478,10480,10482],{"class":37,"line":38},[35,10479,2844],{"class":93},[35,10481,59],{"class":86},[35,10483,10451],{"class":45},[35,10485,10486,10488],{"class":37,"line":90},[35,10487,7664],{"class":93},[35,10489,2696],{"class":86},[35,10491,10492,10495,10497],{"class":37,"line":112},[35,10493,10494],{"class":93},"  key",[35,10496,59],{"class":86},[35,10498,7776],{"class":45},[35,10500,10501,10504,10506],{"class":37,"line":162},[35,10502,10503],{"class":93},"  expires",[35,10505,59],{"class":86},[35,10507,10508],{"class":3212}," 10\n",[35,10510,10511,10514,10516],{"class":37,"line":166},[35,10512,10513],{"class":93},"  wait",[35,10515,59],{"class":86},[35,10517,2908],{"class":2907},[35,10519,10520,10522,10524],{"class":37,"line":170},[35,10521,9323],{"class":93},[35,10523,59],{"class":86},[35,10525,10468],{"class":45},[3225,10527,10529],{"id":10528},"retry-job-retry","retry {#job-retry}",[123,10531,10532,10536],{},[126,10533,3233,10534],{},[32,10535,3384],{},[126,10537,3298,10538],{},[32,10539,7495],{},[17,10541,8714,10542,7501],{},[32,10543,7495],{},[3225,10545,4553],{"id":4553},[123,10547,10548],{},[126,10549,3233,10550],{},[32,10551,3236],{},[17,10553,9108,10554,3309],{},[129,10555,2085],{"href":2081},[3225,10557,9148],{"id":9148},[123,10559,10560],{},[126,10561,3233,10562],{},[32,10563,3265],{},[17,10565,10566],{},"指定内置任务参数。",[3225,10568,9142],{"id":10569},"optionsfrom",[123,10571,10572],{},[126,10573,3233,10574,3516,10576],{},[32,10575,3295],{},[32,10577,3236],{},[17,10579,9136,10580,9139,10582,9143],{},[32,10581,2964],{},[32,10583,9142],{},[17,10585,10586,10588,10589,3309],{},[32,10587,9148],{}," 同名字段优先级高于 ",[32,10590,9142],{},[3225,10592,9323],{"id":9323},[123,10594,10595],{},[126,10596,3233,10597,3516,10599],{},[32,10598,3295],{},[32,10600,3236],{},[17,10602,10603,10604,10606,10607,10609],{},"指定任务要执行的脚本。为数组时会自动使用 ",[32,10605,9316],{}," 拼接。执行脚本的进程退出码会作为这个 ",[32,10608,2639],{}," 的退出码。",[17,10611,10612],{},[3953,10613,10614,10615,10618],{},"注意： 流水线使用的基础镜像的默认命令行解释器是 ",[32,10616,10617],{},"sh","，指定不同的 image 作为执行环境，命令行解释器可能有所不同",[3225,10620,10621],{"id":10621},"commands",[123,10623,10624],{},[126,10625,3233,10626,3516,10628],{},[32,10627,3295],{},[32,10629,3236],{},[17,10631,10632,10633,10635,10636,10638,10639,10642],{},"作用同 ",[32,10634,9323],{}," 参数, 优先级比 ",[32,10637,9323],{}," 高。主要为了兼容 ",[32,10640,10641],{},"Drone CI"," 语法。",[3225,10644,10646],{"id":10645},"image-job-image","image {#job-image}",[123,10648,10649],{},[126,10650,3233,10651,3516,10653],{},[32,10652,3265],{},[32,10654,3236],{},[17,10656,10657,10658,10660,10661,4569,10664],{},"指定用哪个 Image 作为当前 ",[32,10659,2639],{}," 执行环境, 用于 ",[32,10662,10663],{},"docker image as env",[32,10665,10666],{},"docker image as plugins",[123,10668,10669,10677,10683],{},[126,10670,10671,3534,10673,3537,10675,3309],{},[32,10672,3533],{},[32,10674,3236],{},[32,10676,3540],{},[126,10678,10679,3534,10681,3548],{},[32,10680,3545],{},[32,10682,3236],{},[126,10684,10685,3534,10687,3556],{},[32,10686,3553],{},[32,10688,3236],{},[17,10690,3559,10691,3562,10693,3309],{},[32,10692,1138],{},[32,10694,3533],{},[3225,10696,9512],{"id":9512},[123,10698,10699],{},[126,10700,3233,10701],{},[32,10702,3265],{},[17,10704,10705,10706],{},"指定该插件任务执行所需的参数。详细",[129,10707,10709],{"href":10708},"#%E6%8F%92%E4%BB%B6%E4%BB%BB%E5%8A%A1","插件任务介绍",[3225,10711,9515],{"id":10712},"settingsfrom",[123,10714,10715],{},[126,10716,10717,3516,10719],{},[32,10718,3295],{},[32,10720,3236],{},[17,10722,10723,10724,9139,10726,9143],{},"指定本地或 Git 仓库文件路径，加载为插件任务参数。与 ",[32,10725,2964],{},[32,10727,9515],{},[17,10729,10730,10731],{},"详细",[129,10732,10709],{"href":10708},[3225,10734,10735],{"id":10735},"args",[123,10737,10738],{},[126,10739,10740],{},[32,10741,3295],{},[17,10743,10744,10745,10747],{},"指定执行镜像时传递的参数，内容将会追加到 ",[32,10746,9434],{}," 中，仅支持数组。",[25,10749,10751],{"className":2648,"code":10750,"language":2650,"meta":30,"style":30},"- name: npm publish\n  image: plugins\u002Fnpm\n  args:\n    - ls\n",[32,10752,10753,10763,10771,10778],{"__ignoreMap":30},[35,10754,10755,10757,10759,10761],{"class":37,"line":38},[35,10756,8010],{"class":86},[35,10758,2680],{"class":93},[35,10760,59],{"class":86},[35,10762,9643],{"class":45},[35,10764,10765,10767,10769],{"class":37,"line":90},[35,10766,2861],{"class":93},[35,10768,59],{"class":86},[35,10770,9652],{"class":45},[35,10772,10773,10776],{"class":37,"line":112},[35,10774,10775],{"class":93},"  args",[35,10777,2696],{"class":86},[35,10779,10780,10782],{"class":37,"line":162},[35,10781,2677],{"class":86},[35,10783,10784],{"class":45}," ls\n",[17,10786,10787],{},"将执行",[25,10789,10791],{"className":27,"code":10790,"language":29,"meta":30,"style":30},"docker run plugins\u002Fnpm ls\n",[32,10792,10793],{"__ignoreMap":30},[35,10794,10795,10797,10800,10803],{"class":37,"line":38},[35,10796,2854],{"class":41},[35,10798,10799],{"class":45}," run",[35,10801,10802],{"class":45}," plugins\u002Fnpm",[35,10804,10784],{"class":45},[3225,10806,10807],{"id":10807},"任务退出码",[123,10809,10810,10813,10823],{},[126,10811,10812],{},"0: 任务成功, 继续执行。",[126,10814,10815,10816,10818,10819,10822],{},"78: 任务成功，但中断当前 ",[32,10817,2623],{}," 的执行。可在自定义脚本中主动执行 ",[32,10820,10821],{},"exit 78"," ，达到中断流水线效果。",[126,10824,10825,10826,10828,10829,10831],{},"other: ",[32,10827,3384],{},"，任务失败，同时中断当前 ",[32,10830,2623],{}," 的执行。",[142,10833,10834],{},"html pre.shiki code .sRlkE, html code.shiki .sRlkE{--shiki-light:#E53935;--shiki-default:#E53935;--shiki-dark:#F07178}html pre.shiki code .sDfIl, html code.shiki .sDfIl{--shiki-light:#39ADB5;--shiki-default:#39ADB5;--shiki-dark:#89DDFF}html pre.shiki code .sWuyu, html code.shiki .sWuyu{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#90A4AE;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sGFVr, html code.shiki .sGFVr{--shiki-light:#91B859;--shiki-default:#91B859;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}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 .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sbKd-, html code.shiki .sbKd-{--shiki-light:#FF5370;--shiki-default:#FF5370;--shiki-dark:#FF9CAC}html pre.shiki code .sYRBq, html code.shiki .sYRBq{--shiki-light:#F76D47;--shiki-default:#F76D47;--shiki-dark:#F78C6C}html pre.shiki code .sZSNi, html code.shiki .sZSNi{--shiki-light:#90A4AE;--shiki-default:#90A4AE;--shiki-dark:#BABED8}html pre.shiki code .smZ93, html code.shiki .smZ93{--shiki-light:#9C3EDA;--shiki-default:#9C3EDA;--shiki-dark:#C792EA}html pre.shiki code .s8R28, html code.shiki .s8R28{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#39ADB5;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .s52Pk, html code.shiki .s52Pk{--shiki-light:#E2931D;--shiki-default:#E2931D;--shiki-dark:#FFCB6B}",{"title":30,"searchDepth":90,"depth":90,"links":10836},[10837,10838,10857,10870],{"id":2616,"depth":90,"text":2616},{"id":2819,"depth":90,"text":2623,"children":10839},[10840,10841,10842,10843,10844,10845,10846,10847,10848,10849,10850,10851,10852,10853,10854,10855,10856],{"id":3227,"depth":112,"text":3228},{"id":3258,"depth":112,"text":3258},{"id":2854,"depth":112,"text":2854},{"id":2895,"depth":112,"text":2895},{"id":2931,"depth":112,"text":2931},{"id":5746,"depth":112,"text":5747},{"id":5762,"depth":112,"text":5763},{"id":2986,"depth":112,"text":2986},{"id":3014,"depth":112,"text":3014},{"id":7125,"depth":112,"text":3084},{"id":7137,"depth":112,"text":3131},{"id":7152,"depth":112,"text":7153},{"id":7195,"depth":112,"text":7196},{"id":7464,"depth":112,"text":7465},{"id":7483,"depth":112,"text":7484},{"id":7504,"depth":112,"text":7505},{"id":7527,"depth":112,"text":7528},{"id":7909,"depth":90,"text":2627,"children":10858},[10859,10860,10861,10862,10863,10864,10865,10866,10867,10868,10869],{"id":7933,"depth":112,"text":7934},{"id":8338,"depth":112,"text":8339},{"id":8353,"depth":112,"text":8354},{"id":8393,"depth":112,"text":8394},{"id":8412,"depth":112,"text":8413},{"id":8649,"depth":112,"text":8650},{"id":8679,"depth":112,"text":8680},{"id":8700,"depth":112,"text":8701},{"id":8719,"depth":112,"text":8720},{"id":9014,"depth":112,"text":9015},{"id":9061,"depth":112,"text":9061},{"id":9087,"depth":90,"text":2639,"children":10871},[10872,10873,10874,10875,10876,10877,10878,10879,10880,10881,10882,10883,10884,10885,10886,10887,10888,10889,10890,10891,10892,10893,10894,10895,10896,10897],{"id":2085,"depth":112,"text":2085},{"id":9270,"depth":112,"text":9270},{"id":9417,"depth":112,"text":9417},{"id":10016,"depth":112,"text":10017},{"id":10030,"depth":112,"text":10031},{"id":10051,"depth":112,"text":10052},{"id":10073,"depth":112,"text":10074},{"id":10093,"depth":112,"text":10094},{"id":10116,"depth":112,"text":10117},{"id":10137,"depth":112,"text":10138},{"id":10163,"depth":112,"text":10164},{"id":10183,"depth":112,"text":10184},{"id":7674,"depth":112,"text":7674},{"id":10310,"depth":112,"text":10311},{"id":10337,"depth":112,"text":10338},{"id":10528,"depth":112,"text":10529},{"id":4553,"depth":112,"text":4553},{"id":9148,"depth":112,"text":9148},{"id":10569,"depth":112,"text":9142},{"id":9323,"depth":112,"text":9323},{"id":10621,"depth":112,"text":10621},{"id":10645,"depth":112,"text":10646},{"id":9512,"depth":112,"text":9512},{"id":10712,"depth":112,"text":9515},{"id":10735,"depth":112,"text":10735},{"id":10807,"depth":112,"text":10807},"该文本详细介绍了流水线语法，包括基本概念如 Pipeline、Stage 和 Job，以及它们的配置方法。文本解释了如何定义不同类型的任务，如脚本任务、内置任务和插件任务，并提供了环境变量、锁机制和条件执行的配置选项。通过示例代码，文本展示了在不同触发事件下如何配置和运行流水线。",{},{"title":2051,"description":10898},"cQpIqrwH94ji1av19VP9C2FR8ob1WfQIxgbAFEZL97o",[10903,10905],{"title":2047,"path":2048,"stem":2049,"description":10904,"children":-1},"云原生构建配置文件（.cnb.yml）用于定义仓库事件触发构建任务的条件和步骤，采用YAML格式，存放在仓库根目录下，支持通过PR进行变更。配置文件包括触发分支和事件、执行环境和任务脚本，支持锚点复用和跨文件配置导入，提供语法检查和自动补全功能。",{"title":2055,"path":2056,"stem":2057,"description":10906,"children":-1},"构建环境由 Docker 容器提供，支持两种配置方式：指定已有镜像或使用 Dockerfile 动态构建。未指定时，默认使用 cnbcool\u002Fdefault-build-env:latest。镜像中的 VOLUME 可通过参数共享给插件任务，以 NodeJS 构建为例，可使用官方 NodeJS 镜像进行依赖安装和测试。",1775504722090]