{"id":26,"date":"2025-06-19T17:17:50","date_gmt":"2025-06-19T09:17:50","guid":{"rendered":"https:\/\/kzqgy.cn\/?p=26"},"modified":"2025-07-03T10:44:29","modified_gmt":"2025-07-03T02:44:29","slug":"ci-cd%e8%87%aa%e5%8a%a8%e5%8c%96%e9%83%a8%e7%bd%b2-%e5%89%8d%e7%ab%af","status":"publish","type":"post","link":"https:\/\/kzqgy.cn\/index.php\/2025\/06\/19\/ci-cd%e8%87%aa%e5%8a%a8%e5%8c%96%e9%83%a8%e7%bd%b2-%e5%89%8d%e7%ab%af\/","title":{"rendered":"CI\/CD\u81ea\u52a8\u5316\u90e8\u7f72-\u524d\u7aef"},"content":{"rendered":"<h1>GitLab CI\/CD \u914d\u7f6e\u89e3\u6790<\/h1>\n<p id=\"\">\u8fd9\u4e2a\u914d\u7f6e\u6587\u4ef6\u5b9a\u4e49\u4e86\u4e00\u4e2a\u5b8c\u6574\u7684 Node.js \u9879\u76ee\u90e8\u7f72\u6d41\u7a0b\uff0c\u5305\u542b\u9884\u5b89\u88c5\u3001\u5b89\u88c5\u548c\u90e8\u7f72\u4e09\u4e2a\u9636\u6bb5\u3002\u4e0b\u9762\u662f\u5bf9\u6bcf\u4e00\u90e8\u5206\u7684\u8be6\u7ec6\u89e3\u6790\uff1a<\/p>\n<h2>\u53d8\u91cf\u5b9a\u4e49\u90e8\u5206<\/h2>\n<pre><code class=\"language-yaml \" data-theme=\"light\"><\/code><\/pre>\n<div class=\"code-header\"><span class=\"code-lang\">yaml<\/span><\/div>\n<pre><code class=\"language-yaml \" data-theme=\"light\"><\/code><\/pre>\n<div class=\"code-wrapper-outter\">\n<div class=\"code-wrapper\">\n<table class=\"hljs hljs-ln\">\n<tbody>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"1\">\n<div class=\"hljs-ln-n\" data-line-number=\"1\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"1\"><span class=\"hljs-attr\">variables:<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"2\">\n<div class=\"hljs-ln-n\" data-line-number=\"2\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"2\"><span class=\"hljs-attr\">BD:<\/span> <span class=\"hljs-string\">dist<\/span> <span class=\"hljs-comment\"># \u6784\u5efa\u8f93\u51fa\u76ee\u5f55(build directory)<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"3\">\n<div class=\"hljs-ln-n\" data-line-number=\"3\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"3\"><span class=\"hljs-attr\">PD:<\/span> <span class=\"hljs-string\">dev.hanlan.site<\/span> <span class=\"hljs-comment\"># \u751f\u4ea7\u76ee\u5f55(production directory)<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"4\">\n<div class=\"hljs-ln-n\" data-line-number=\"4\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"4\"><span class=\"hljs-attr\">BUR:<\/span> <span class=\"hljs-string\">dev.hanlan.site_backup<\/span> <span class=\"hljs-comment\"># \u5907\u4efd\u76ee\u5f55(backup directory)<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"5\">\n<div class=\"hljs-ln-n\" data-line-number=\"5\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"5\"><span class=\"hljs-attr\">SD:<\/span> <span class=\"hljs-string\">&#8220;${ng_sd}&#8221;<\/span> <span class=\"hljs-comment\"># \u6e90\u76ee\u5f55(source directory)\uff0c\u4ece\u53d8\u91cfng_sd\u83b7\u53d6<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"6\">\n<div class=\"hljs-ln-n\" data-line-number=\"6\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"6\"><span class=\"hljs-attr\">ORTHER_SOURCEDIR:<\/span> <span class=\"hljs-string\">\/www\/wwwroot<\/span> <span class=\"hljs-comment\"># \u5176\u4ed6\u6e90\u76ee\u5f55\u8def\u5f84<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"7\">\n<div class=\"hljs-ln-n\" data-line-number=\"7\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"7\"><span class=\"hljs-attr\">DSI:<\/span> <span class=\"hljs-string\">&#8220;${DEFAULT}&#8221;<\/span> <span class=\"hljs-comment\"># \u90e8\u7f72\u670d\u52a1\u5668IP(deploy server IP)<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"8\">\n<div class=\"hljs-ln-n\" data-line-number=\"8\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"8\"><span class=\"hljs-attr\">TEST_SERVER_IP:<\/span> <span class=\"hljs-string\">&#8220;10.10.17.18&#8221;<\/span> <span class=\"hljs-comment\"># \u6d4b\u8bd5\u670d\u52a1\u5668IP<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"9\">\n<div class=\"hljs-ln-n\" data-line-number=\"9\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"9\"><span class=\"hljs-attr\">MASTER_SERVER_IP:<\/span> <span class=\"hljs-string\">&#8220;\u6682\u65f6\u65e0\u751f\u4ea7IP&#8221;<\/span> <span class=\"hljs-comment\"># \u751f\u4ea7\u670d\u52a1\u5668IP(\u6682\u672a\u8bbe\u7f6e)<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"10\">\n<div class=\"hljs-ln-n\" data-line-number=\"10\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"10\"><span class=\"hljs-attr\">D_HOST:<\/span> <span class=\"hljs-string\">&#8220;10.10.17.16:5000&#8221;<\/span> <span class=\"hljs-comment\"># Docker\u955c\u50cf\u4ed3\u5e93\u5730\u5740<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"11\">\n<div class=\"hljs-ln-n\" data-line-number=\"11\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"11\"><span class=\"hljs-attr\">NPM_REGISTRY:<\/span> <span class=\"hljs-string\">&#8220;https:\/\/registry.npmmirror.com&#8221;<\/span> <span class=\"hljs-comment\"># npm\u955c\u50cf\u6e90<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<pre><code class=\"language-yaml \" data-theme=\"light\"><\/code><\/pre>\n<h2>\u9636\u6bb5\u5b9a\u4e49<\/h2>\n<pre><code class=\"language-yaml \" data-theme=\"light\"><\/code><\/pre>\n<div class=\"code-header\"><span class=\"code-lang\">yaml<\/span><\/div>\n<pre><code class=\"language-yaml \" data-theme=\"light\"><\/code><\/pre>\n<div class=\"code-wrapper-outter\">\n<div class=\"code-wrapper\">\n<table class=\"hljs hljs-ln\">\n<tbody>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"1\">\n<div class=\"hljs-ln-n\" data-line-number=\"1\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"1\"><span class=\"hljs-attr\">stages:<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"2\">\n<div class=\"hljs-ln-n\" data-line-number=\"2\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"2\"><span class=\"hljs-bullet\">&#8211;<\/span> <span class=\"hljs-string\">preinstall<\/span> <span class=\"hljs-comment\"># \u9884\u5b89\u88c5\u9636\u6bb5(\u4ec5\u5f53package.json\/package-lock.json\u53d8\u5316\u65f6\u8fd0\u884c)<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"3\">\n<div class=\"hljs-ln-n\" data-line-number=\"3\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"3\"><span class=\"hljs-bullet\">&#8211;<\/span> <span class=\"hljs-string\">install<\/span> <span class=\"hljs-comment\"># \u5b89\u88c5\u9636\u6bb5(\u6bcf\u6b21\u6784\u5efa\u90fd\u8fd0\u884c)<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"4\">\n<div class=\"hljs-ln-n\" data-line-number=\"4\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"4\"><span class=\"hljs-bullet\">&#8211;<\/span> <span class=\"hljs-string\">deploy<\/span> <span class=\"hljs-comment\"># \u90e8\u7f72\u9636\u6bb5<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<pre><code class=\"language-yaml \" data-theme=\"light\"><\/code><\/pre>\n<h2>\u7f13\u5b58\u914d\u7f6e<\/h2>\n<pre><code class=\"language-yaml \" data-theme=\"light\"><\/code><\/pre>\n<div class=\"code-header\"><span class=\"code-lang\">yaml<\/span><\/div>\n<pre><code class=\"language-yaml \" data-theme=\"light\"><\/code><\/pre>\n<div class=\"code-wrapper-outter\">\n<div class=\"code-wrapper\">\n<table class=\"hljs hljs-ln\">\n<tbody>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"1\">\n<div class=\"hljs-ln-n\" data-line-number=\"1\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"1\"><span class=\"hljs-attr\">cache:<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"2\">\n<div class=\"hljs-ln-n\" data-line-number=\"2\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"2\"><span class=\"hljs-attr\">key:<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"3\">\n<div class=\"hljs-ln-n\" data-line-number=\"3\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"3\"><span class=\"hljs-attr\">files:<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"4\">\n<div class=\"hljs-ln-n\" data-line-number=\"4\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"4\"><span class=\"hljs-bullet\">&#8211;<\/span> <span class=\"hljs-string\">package-lock.json<\/span> <span class=\"hljs-comment\"># \u57fa\u4e8epackage-lock.json\u7684hash\u4f5c\u4e3a\u7f13\u5b58\u952e<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"5\">\n<div class=\"hljs-ln-n\" data-line-number=\"5\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"5\"><span class=\"hljs-attr\">paths:<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"6\">\n<div class=\"hljs-ln-n\" data-line-number=\"6\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"6\"><span class=\"hljs-bullet\">&#8211;<\/span> <span class=\"hljs-string\">node_modules\/<\/span> <span class=\"hljs-comment\"># \u7f13\u5b58node_modules\u76ee\u5f55<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"7\">\n<div class=\"hljs-ln-n\" data-line-number=\"7\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"7\"><span class=\"hljs-bullet\">&#8211;<\/span> <span class=\"hljs-string\">package-lock.json<\/span> <span class=\"hljs-comment\"># \u7f13\u5b58package-lock.json\u6587\u4ef6<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<pre><code class=\"language-yaml \" data-theme=\"light\"><\/code><\/pre>\n<h2>\u9884\u5b89\u88c5\u4efb\u52a1<\/h2>\n<pre><code class=\"language-yaml \" data-theme=\"light\"><\/code><\/pre>\n<div class=\"code-header\"><span class=\"code-lang\">yaml<\/span><\/div>\n<pre><code class=\"language-yaml \" data-theme=\"light\"><\/code><\/pre>\n<div class=\"code-wrapper-outter\">\n<div class=\"code-wrapper\">\n<table class=\"hljs hljs-ln\">\n<tbody>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"1\">\n<div class=\"hljs-ln-n\" data-line-number=\"1\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"1\"><span class=\"hljs-attr\">preinstall-job:<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"2\">\n<div class=\"hljs-ln-n\" data-line-number=\"2\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"2\"><span class=\"hljs-attr\">image:<\/span> <span class=\"hljs-string\">$D_HOST\/node:v20<\/span> <span class=\"hljs-comment\"># \u4f7f\u7528\u81ea\u5b9a\u4e49Node.js 20\u955c\u50cf<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"3\">\n<div class=\"hljs-ln-n\" data-line-number=\"3\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"3\"><span class=\"hljs-attr\">stage:<\/span> <span class=\"hljs-string\">preinstall<\/span> <span class=\"hljs-comment\"># \u5c5e\u4e8epreinstall\u9636\u6bb5<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"4\">\n<div class=\"hljs-ln-n\" data-line-number=\"4\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"4\"><span class=\"hljs-attr\">only:<\/span> <span class=\"hljs-comment\"># \u4ec5\u5728\u4ee5\u4e0b\u5206\u652f\u89e6\u53d1<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"5\">\n<div class=\"hljs-ln-n\" data-line-number=\"5\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"5\"><span class=\"hljs-attr\">refs:<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"6\">\n<div class=\"hljs-ln-n\" data-line-number=\"6\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"6\"><span class=\"hljs-bullet\">&#8211;<\/span> <span class=\"hljs-string\">master<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"7\">\n<div class=\"hljs-ln-n\" data-line-number=\"7\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"7\"><span class=\"hljs-bullet\">&#8211;<\/span> <span class=\"hljs-string\">test<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"8\">\n<div class=\"hljs-ln-n\" data-line-number=\"8\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"8\"><span class=\"hljs-bullet\">&#8211;<\/span> <span class=\"hljs-string\">dev<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"9\">\n<div class=\"hljs-ln-n\" data-line-number=\"9\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"9\"><span class=\"hljs-attr\">changes:<\/span> <span class=\"hljs-comment\"># \u4ec5\u5f53\u4ee5\u4e0b\u6587\u4ef6\u53d8\u5316\u65f6\u89e6\u53d1<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"10\">\n<div class=\"hljs-ln-n\" data-line-number=\"10\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"10\"><span class=\"hljs-bullet\">&#8211;<\/span> <span class=\"hljs-string\">package.json<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"11\">\n<div class=\"hljs-ln-n\" data-line-number=\"11\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"11\"><span class=\"hljs-bullet\">&#8211;<\/span> <span class=\"hljs-string\">package-lock.json<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"12\">\n<div class=\"hljs-ln-n\" data-line-number=\"12\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"12\"><span class=\"hljs-attr\">script:<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"13\">\n<div class=\"hljs-ln-n\" data-line-number=\"13\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"13\"><span class=\"hljs-bullet\">&#8211;<\/span> <span class=\"hljs-string\">echo<\/span> <span class=\"hljs-string\">&#8220;\u914d\u7f6e NPM \u955c\u50cf&#8221;<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"14\">\n<div class=\"hljs-ln-n\" data-line-number=\"14\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"14\"><span class=\"hljs-bullet\">&#8211;<\/span> <span class=\"hljs-string\">npm<\/span> <span class=\"hljs-string\">config<\/span> <span class=\"hljs-string\">set<\/span> <span class=\"hljs-string\">registry<\/span> <span class=\"hljs-string\">$NPM_REGISTRY<\/span> <span class=\"hljs-comment\"># \u8bbe\u7f6enpm\u955c\u50cf\u6e90<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"15\">\n<div class=\"hljs-ln-n\" data-line-number=\"15\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"15\"><span class=\"hljs-bullet\">&#8211;<\/span> <span class=\"hljs-string\">echo<\/span> <span class=\"hljs-string\">&#8220;\u4f9d\u8d56\u53d1\u751f\u53d8\u5316,\u5f00\u59cb install&#8221;<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"16\">\n<div class=\"hljs-ln-n\" data-line-number=\"16\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"16\"><span class=\"hljs-bullet\">&#8211;<\/span> <span class=\"hljs-string\">npm<\/span> <span class=\"hljs-string\">install<\/span> <span class=\"hljs-comment\"># \u5b89\u88c5\u4f9d\u8d56<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"17\">\n<div class=\"hljs-ln-n\" data-line-number=\"17\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"17\"><span class=\"hljs-bullet\">&#8211;<\/span> <span class=\"hljs-string\">echo<\/span> <span class=\"hljs-string\">&#8220;install \u5b8c\u6210&#8221;<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<pre><code class=\"language-yaml \" data-theme=\"light\"><\/code><\/pre>\n<h2>\u5b89\u88c5\u4efb\u52a1<\/h2>\n<pre><code class=\"language-yaml \" data-theme=\"light\"><\/code><\/pre>\n<div class=\"code-header\"><span class=\"code-lang\">yaml<\/span><\/div>\n<pre><code class=\"language-yaml \" data-theme=\"light\"><\/code><\/pre>\n<div class=\"code-wrapper-outter\">\n<div class=\"code-wrapper\">\n<table class=\"hljs hljs-ln\">\n<tbody>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"1\">\n<div class=\"hljs-ln-n\" data-line-number=\"1\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"1\"><span class=\"hljs-attr\">install-job:<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"2\">\n<div class=\"hljs-ln-n\" data-line-number=\"2\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"2\"><span class=\"hljs-attr\">image:<\/span> <span class=\"hljs-string\">$D_HOST\/node:v20<\/span> <span class=\"hljs-comment\"># \u4f7f\u7528\u81ea\u5b9a\u4e49Node.js 20\u955c\u50cf<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"3\">\n<div class=\"hljs-ln-n\" data-line-number=\"3\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"3\"><span class=\"hljs-attr\">stage:<\/span> <span class=\"hljs-string\">install<\/span> <span class=\"hljs-comment\"># \u5c5e\u4e8einstall\u9636\u6bb5<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"4\">\n<div class=\"hljs-ln-n\" data-line-number=\"4\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"4\"><span class=\"hljs-attr\">only:<\/span> <span class=\"hljs-comment\"># \u4ec5\u5728\u4ee5\u4e0b\u5206\u652f\u89e6\u53d1<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"5\">\n<div class=\"hljs-ln-n\" data-line-number=\"5\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"5\"><span class=\"hljs-attr\">refs:<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"6\">\n<div class=\"hljs-ln-n\" data-line-number=\"6\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"6\"><span class=\"hljs-bullet\">&#8211;<\/span> <span class=\"hljs-string\">master<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"7\">\n<div class=\"hljs-ln-n\" data-line-number=\"7\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"7\"><span class=\"hljs-bullet\">&#8211;<\/span> <span class=\"hljs-string\">test<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"8\">\n<div class=\"hljs-ln-n\" data-line-number=\"8\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"8\"><span class=\"hljs-bullet\">&#8211;<\/span> <span class=\"hljs-string\">dev<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"9\">\n<div class=\"hljs-ln-n\" data-line-number=\"9\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"9\"><span class=\"hljs-attr\">script:<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"10\">\n<div class=\"hljs-ln-n\" data-line-number=\"10\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"10\"><span class=\"hljs-bullet\">&#8211;<\/span> <span class=\"hljs-string\">echo<\/span> <span class=\"hljs-string\">&#8220;\u914d\u7f6e NPM \u955c\u50cf&#8221;<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"11\">\n<div class=\"hljs-ln-n\" data-line-number=\"11\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"11\"><span class=\"hljs-bullet\">&#8211;<\/span> <span class=\"hljs-string\">npm<\/span> <span class=\"hljs-string\">config<\/span> <span class=\"hljs-string\">set<\/span> <span class=\"hljs-string\">registry<\/span> <span class=\"hljs-string\">$NPM_REGISTRY<\/span> <span class=\"hljs-comment\"># \u8bbe\u7f6enpm\u955c\u50cf\u6e90<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"12\">\n<div class=\"hljs-ln-n\" data-line-number=\"12\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"12\"><span class=\"hljs-bullet\">&#8211;<\/span> <span class=\"hljs-string\">echo<\/span> <span class=\"hljs-string\">&#8220;start install&#8221;<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"13\">\n<div class=\"hljs-ln-n\" data-line-number=\"13\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"13\"><span class=\"hljs-bullet\">&#8211;<\/span> <span class=\"hljs-string\">npm<\/span> <span class=\"hljs-string\">install<\/span> <span class=\"hljs-comment\"># \u5b89\u88c5\u4f9d\u8d56<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"14\">\n<div class=\"hljs-ln-n\" data-line-number=\"14\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"14\"><span class=\"hljs-bullet\">&#8211;<\/span> <span class=\"hljs-string\">echo<\/span> <span class=\"hljs-string\">&#8220;build package&#8221;<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"15\">\n<div class=\"hljs-ln-n\" data-line-number=\"15\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"15\"><span class=\"hljs-bullet\">&#8211;<\/span> <span class=\"hljs-string\">npm<\/span> <span class=\"hljs-string\">run<\/span> <span class=\"hljs-string\">build:${CI_COMMIT_BRANCH}<\/span> <span class=\"hljs-comment\"># \u6839\u636e\u5206\u652f\u6784\u5efa\u9879\u76ee<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"16\">\n<div class=\"hljs-ln-n\" data-line-number=\"16\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"16\"><span class=\"hljs-bullet\">&#8211;<\/span> <span class=\"hljs-string\">echo<\/span> <span class=\"hljs-string\">&#8220;\u5b8c\u6210\u6253\u5305&#8221;<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"17\">\n<div class=\"hljs-ln-n\" data-line-number=\"17\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"17\"><span class=\"hljs-attr\">artifacts:<\/span> <span class=\"hljs-comment\"># \u751f\u6210\u7269\u914d\u7f6e<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"18\">\n<div class=\"hljs-ln-n\" data-line-number=\"18\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"18\"><span class=\"hljs-attr\">paths:<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"19\">\n<div class=\"hljs-ln-n\" data-line-number=\"19\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"19\"><span class=\"hljs-bullet\">&#8211;<\/span> <span class=\"hljs-string\">$BD\/<\/span> <span class=\"hljs-comment\"># \u4fdd\u5b58dist\u76ee\u5f55\u5185\u5bb9<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"20\">\n<div class=\"hljs-ln-n\" data-line-number=\"20\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"20\"><span class=\"hljs-attr\">expire_in:<\/span> <span class=\"hljs-number\">1<\/span> <span class=\"hljs-string\">days<\/span> <span class=\"hljs-comment\"># \u751f\u6210\u7269\u4fdd\u5b581\u5929<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<pre><code class=\"language-yaml \" data-theme=\"light\"><\/code><\/pre>\n<h2>\u90e8\u7f72\u4efb\u52a1<\/h2>\n<pre><code class=\"language-yaml \" data-theme=\"light\"><\/code><\/pre>\n<div class=\"code-header\"><span class=\"code-lang\">yaml<\/span><\/div>\n<pre><code class=\"language-yaml \" data-theme=\"light\"><\/code><\/pre>\n<div class=\"code-wrapper-outter\">\n<div class=\"code-wrapper\">\n<table class=\"hljs hljs-ln\">\n<tbody>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"1\">\n<div class=\"hljs-ln-n\" data-line-number=\"1\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"1\"><span class=\"hljs-attr\">deploy-job:<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"2\">\n<div class=\"hljs-ln-n\" data-line-number=\"2\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"2\"><span class=\"hljs-attr\">image:<\/span> <span class=\"hljs-string\">$D_HOST\/sshpass:latest<\/span> <span class=\"hljs-comment\"># \u4f7f\u7528\u5305\u542bsshpass\u7684\u81ea\u5b9a\u4e49\u955c\u50cf<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"3\">\n<div class=\"hljs-ln-n\" data-line-number=\"3\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"3\"><span class=\"hljs-attr\">stage:<\/span> <span class=\"hljs-string\">deploy<\/span> <span class=\"hljs-comment\"># \u5c5e\u4e8edeploy\u9636\u6bb5<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"4\">\n<div class=\"hljs-ln-n\" data-line-number=\"4\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"4\"><span class=\"hljs-attr\">only:<\/span> <span class=\"hljs-comment\"># \u4ec5\u5728\u4ee5\u4e0b\u5206\u652f\u89e6\u53d1<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"5\">\n<div class=\"hljs-ln-n\" data-line-number=\"5\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"5\"><span class=\"hljs-attr\">refs:<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"6\">\n<div class=\"hljs-ln-n\" data-line-number=\"6\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"6\"><span class=\"hljs-bullet\">&#8211;<\/span> <span class=\"hljs-string\">master<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"7\">\n<div class=\"hljs-ln-n\" data-line-number=\"7\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"7\"><span class=\"hljs-bullet\">&#8211;<\/span> <span class=\"hljs-string\">test<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"8\">\n<div class=\"hljs-ln-n\" data-line-number=\"8\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"8\"><span class=\"hljs-bullet\">&#8211;<\/span> <span class=\"hljs-string\">dev<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"9\">\n<div class=\"hljs-ln-n\" data-line-number=\"9\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"9\"><span class=\"hljs-attr\">script:<\/span> <span class=\"hljs-string\">|<\/span> <span class=\"hljs-comment\"># \u591a\u884c\u811a\u672c(\u4f7f\u7528|\u4fdd\u6301\u683c\u5f0f)<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"10\">\n<div class=\"hljs-ln-n\" data-line-number=\"10\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"10\"><span class=\"hljs-string\">echo<\/span> <span class=\"hljs-string\">&#8220;\u90e8\u7f72\u5230 Nginx&#8221;<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"11\">\n<div class=\"hljs-ln-n\" data-line-number=\"11\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"11\"><span class=\"hljs-string\">echo<\/span> <span class=\"hljs-string\">&#8220;\u5f53\u524d\u5206\u652f: $CI_COMMIT_BRANCH&#8221;<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"12\">\n<div class=\"hljs-ln-n\" data-line-number=\"12\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"12\"><span class=\"hljs-string\">echo<\/span> <span class=\"hljs-string\">&#8220;\u9ed8\u8ba4\u8def\u5f84: SD=${SD}, PD=${PD}, BUR=${BUR}, DSI=${DSI}&#8221;<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"13\">\n<div class=\"hljs-ln-n\" data-line-number=\"13\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"13\"><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"14\">\n<div class=\"hljs-ln-n\" data-line-number=\"14\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"14\"><span class=\"hljs-comment\"># \u6839\u636e\u5206\u652f\u8bbe\u7f6e\u53d8\u91cf<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"15\">\n<div class=\"hljs-ln-n\" data-line-number=\"15\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"15\"><span class=\"hljs-string\">if<\/span> [[ <span class=\"hljs-string\">&#8220;$CI_COMMIT_BRANCH&#8221;<\/span> <span class=\"hljs-string\">==<\/span> <span class=\"hljs-string\">&#8220;test&#8221;<\/span> ]]<span class=\"hljs-string\">;<\/span> <span class=\"hljs-string\">then<\/span> <span class=\"hljs-comment\"># \u6d4b\u8bd5\u5206\u652f\u914d\u7f6e<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"16\">\n<div class=\"hljs-ln-n\" data-line-number=\"16\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"16\"><span class=\"hljs-string\">PD=&#8221;test.emit.team&#8221;<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"17\">\n<div class=\"hljs-ln-n\" data-line-number=\"17\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"17\"><span class=\"hljs-string\">BUR=&#8221;test.emit.team_backup&#8221;<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"18\">\n<div class=\"hljs-ln-n\" data-line-number=\"18\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"18\"><span class=\"hljs-string\">DSI=&#8221;${TEST_SERVER_IP:-10.10.17.18}&#8221;<\/span> <span class=\"hljs-comment\"># \u4f7f\u7528\u6d4b\u8bd5\u670d\u52a1\u5668IP<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"19\">\n<div class=\"hljs-ln-n\" data-line-number=\"19\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"19\"><span class=\"hljs-string\">SD=&#8221;${ORTHER_SOURCEDIR:-\/www\/wwwroot}&#8221;<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"20\">\n<div class=\"hljs-ln-n\" data-line-number=\"20\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"20\"><span class=\"hljs-string\">elif<\/span> [[ <span class=\"hljs-string\">&#8220;$CI_COMMIT_BRANCH&#8221;<\/span> <span class=\"hljs-string\">==<\/span> <span class=\"hljs-string\">&#8220;master&#8221;<\/span> ]]<span class=\"hljs-string\">;<\/span> <span class=\"hljs-string\">then<\/span> <span class=\"hljs-comment\"># \u4e3b\u5206\u652f\u914d\u7f6e<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"21\">\n<div class=\"hljs-ln-n\" data-line-number=\"21\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"21\"><span class=\"hljs-string\">DSI=&#8221;${MASTER_SERVER_IP:-10.10.17.18}&#8221;<\/span> <span class=\"hljs-comment\"># \u4f7f\u7528\u751f\u4ea7\u670d\u52a1\u5668IP(\u6682\u672a\u8bbe\u7f6e)<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"22\">\n<div class=\"hljs-ln-n\" data-line-number=\"22\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"22\"><span class=\"hljs-string\">SD=&#8221;${ORTHER_SOURCEDIR:-\/www\/wwwroot}&#8221;<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"23\">\n<div class=\"hljs-ln-n\" data-line-number=\"23\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"23\"><span class=\"hljs-string\">fi<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"24\">\n<div class=\"hljs-ln-n\" data-line-number=\"24\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"24\"><span class=\"hljs-string\">echo<\/span> <span class=\"hljs-string\">&#8220;\u66f4\u65b0\u540e\u8def\u5f84: SD=${SD}, PD=${PD}, BUR=${BUR}, DSI=${DSI}&#8221;<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"25\">\n<div class=\"hljs-ln-n\" data-line-number=\"25\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"25\"><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"26\">\n<div class=\"hljs-ln-n\" data-line-number=\"26\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"26\"><span class=\"hljs-comment\"># \u4e00\u884cSSH\u5907\u4efd\u547d\u4ee4(\u53d8\u91cf\u5728\u672c\u5730\u5148\u5c55\u5f00)<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"27\">\n<div class=\"hljs-ln-n\" data-line-number=\"27\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"27\"><span class=\"hljs-string\">sshpass<\/span> <span class=\"hljs-string\">-p<\/span> <span class=\"hljs-string\">$PASSWORD<\/span> <span class=\"hljs-string\">ssh<\/span> <span class=\"hljs-string\">-o<\/span> <span class=\"hljs-string\">StrictHostKeyChecking=no<\/span> <span class=\"hljs-string\">root@$DSI<\/span> <span class=\"hljs-string\">&#8220;\\<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"28\">\n<div class=\"hljs-ln-n\" data-line-number=\"28\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"28\"><span class=\"hljs-string\"> mkdir -p \\&#8221;$SD\/$BUR\\&#8221; &amp;&amp; \\ # \u521b\u5efa\u5907\u4efd\u76ee\u5f55<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"29\">\n<div class=\"hljs-ln-n\" data-line-number=\"29\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"29\"><span class=\"hljs-string\"> if [ -d \\&#8221;$SD\/$PD\\&#8221; ] &amp;&amp; [ \\&#8221;\\$(ls -A \\&#8221;$SD\/$PD\\&#8221;)\\&#8221; ]; then \\ # \u68c0\u67e5\u751f\u4ea7\u76ee\u5f55\u662f\u5426\u5b58\u5728\u4e14\u975e\u7a7a<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"30\">\n<div class=\"hljs-ln-n\" data-line-number=\"30\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"30\"><span class=\"hljs-string\"> BACKUP_FILE=\\&#8221;$SD\/$BUR\/backup_$(date +%Y%m%d%H%M%S).tar.gz\\&#8221; &amp;&amp; \\ # \u5907\u4efd\u6587\u4ef6\u540d<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"31\">\n<div class=\"hljs-ln-n\" data-line-number=\"31\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"31\"><span class=\"hljs-string\"> echo \\&#8221;\u5f00\u59cb\u5907\u4efd: \\$BACKUP_FILE\\&#8221; &amp;&amp; \\<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"32\">\n<div class=\"hljs-ln-n\" data-line-number=\"32\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"32\"><span class=\"hljs-string\"> tar czf \\&#8221;\\$BACKUP_FILE\\&#8221; -C \\&#8221;$SD\\&#8221; \\&#8221;$PD\\&#8221; &amp;&amp; \\ # \u6267\u884c\u5907\u4efd<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"33\">\n<div class=\"hljs-ln-n\" data-line-number=\"33\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"33\"><span class=\"hljs-string\"> echo \\&#8221;\u5907\u4efd\u6210\u529f\uff1a\\$BACKUP_FILE\\&#8221;; \\<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"34\">\n<div class=\"hljs-ln-n\" data-line-number=\"34\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"34\"><span class=\"hljs-string\"> else \\<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"35\">\n<div class=\"hljs-ln-n\" data-line-number=\"35\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"35\"><span class=\"hljs-string\"> echo \\&#8221;\u6e90\u76ee\u5f55\u4e0d\u5b58\u5728\u6216\u4e3a\u7a7a\uff0c\u8df3\u8fc7\u5907\u4efd\\&#8221;; \\ # \u76ee\u5f55\u4e0d\u5b58\u5728\u6216\u4e3a\u7a7a\u65f6\u7684\u5904\u7406<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"36\">\n<div class=\"hljs-ln-n\" data-line-number=\"36\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"36\"><span class=\"hljs-string\"> fi&#8221;<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"37\">\n<div class=\"hljs-ln-n\" data-line-number=\"37\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"37\"><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"38\">\n<div class=\"hljs-ln-n\" data-line-number=\"38\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"38\"><span class=\"hljs-comment\"># \u6e05\u7a7a\u65e7\u76ee\u5f55<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"39\">\n<div class=\"hljs-ln-n\" data-line-number=\"39\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"39\"><span class=\"hljs-string\">sshpass<\/span> <span class=\"hljs-string\">-p<\/span> <span class=\"hljs-string\">$PASSWORD<\/span> <span class=\"hljs-string\">ssh<\/span> <span class=\"hljs-string\">-o<\/span> <span class=\"hljs-string\">StrictHostKeyChecking=no<\/span> <span class=\"hljs-string\">root@$DSI<\/span> <span class=\"hljs-string\">&#8220;rm -rf \\&#8221;$SD\/$PD\\&#8221;\/*&#8221;<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"40\">\n<div class=\"hljs-ln-n\" data-line-number=\"40\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"40\"><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"41\">\n<div class=\"hljs-ln-n\" data-line-number=\"41\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"41\"><span class=\"hljs-comment\"># \u672c\u5730\u6253\u5305<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"42\">\n<div class=\"hljs-ln-n\" data-line-number=\"42\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"42\"><span class=\"hljs-string\">if<\/span> [ <span class=\"hljs-string\">-d<\/span> <span class=\"hljs-string\">&#8220;$BD&#8221;<\/span> ] <span class=\"hljs-string\">&amp;&amp;<\/span> [ <span class=\"hljs-string\">&#8220;$(ls -A &#8220;<\/span><span class=\"hljs-string\">$BD&#8221;)&#8221;<\/span> ]<span class=\"hljs-string\">;<\/span> <span class=\"hljs-string\">then<\/span> <span class=\"hljs-comment\"># \u68c0\u67e5\u6784\u5efa\u76ee\u5f55\u662f\u5426\u5b58\u5728\u4e14\u975e\u7a7a<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"43\">\n<div class=\"hljs-ln-n\" data-line-number=\"43\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"43\"><span class=\"hljs-string\">echo<\/span> <span class=\"hljs-string\">&#8220;\u6253\u5305\u6784\u5efa\u4ea7\u7269&#8221;<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"44\">\n<div class=\"hljs-ln-n\" data-line-number=\"44\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"44\"><span class=\"hljs-string\">tar<\/span> <span class=\"hljs-string\">czf<\/span> <span class=\"hljs-string\">release.tar.gz<\/span> <span class=\"hljs-string\">-C<\/span> <span class=\"hljs-string\">&#8220;$BD&#8221;<\/span> <span class=\"hljs-string\">.<\/span> <span class=\"hljs-comment\"># \u6253\u5305\u6784\u5efa\u4ea7\u7269<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"45\">\n<div class=\"hljs-ln-n\" data-line-number=\"45\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"45\"><span class=\"hljs-string\">else<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"46\">\n<div class=\"hljs-ln-n\" data-line-number=\"46\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"46\"><span class=\"hljs-string\">echo<\/span> <span class=\"hljs-string\">&#8220;\u9519\u8bef: \u6784\u5efa\u76ee\u5f55 $BD \u4e0d\u5b58\u5728\u6216\u4e3a\u7a7a!&#8221;<\/span> <span class=\"hljs-comment\"># \u9519\u8bef\u5904\u7406<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"47\">\n<div class=\"hljs-ln-n\" data-line-number=\"47\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"47\"><span class=\"hljs-string\">exit<\/span> <span class=\"hljs-number\">1<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"48\">\n<div class=\"hljs-ln-n\" data-line-number=\"48\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"48\"><span class=\"hljs-string\">fi<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"49\">\n<div class=\"hljs-ln-n\" data-line-number=\"49\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"49\"><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"50\">\n<div class=\"hljs-ln-n\" data-line-number=\"50\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"50\"><span class=\"hljs-comment\"># \u4f20\u8f93\u5e76\u89e3\u538b<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"51\">\n<div class=\"hljs-ln-n\" data-line-number=\"51\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"51\"><span class=\"hljs-string\">sshpass<\/span> <span class=\"hljs-string\">-p<\/span> <span class=\"hljs-string\">$PASSWORD<\/span> <span class=\"hljs-string\">scp<\/span> <span class=\"hljs-string\">-o<\/span> <span class=\"hljs-string\">StrictHostKeyChecking=no<\/span> <span class=\"hljs-string\">release.tar.gz<\/span> <span class=\"hljs-string\">root@$DSI:&#8221;$SD\/$PD\/&#8221;<\/span> <span class=\"hljs-comment\"># \u4e0a\u4f20\u6253\u5305\u6587\u4ef6<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"52\">\n<div class=\"hljs-ln-n\" data-line-number=\"52\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"52\"><span class=\"hljs-string\">sshpass<\/span> <span class=\"hljs-string\">-p<\/span> <span class=\"hljs-string\">$PASSWORD<\/span> <span class=\"hljs-string\">ssh<\/span> <span class=\"hljs-string\">-o<\/span> <span class=\"hljs-string\">StrictHostKeyChecking=no<\/span> <span class=\"hljs-string\">root@$DSI<\/span> <span class=\"hljs-string\">&#8220;\\ # \u8fdc\u7a0b\u89e3\u538b<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"53\">\n<div class=\"hljs-ln-n\" data-line-number=\"53\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"53\"><span class=\"hljs-string\"> cd \\&#8221;$SD\/$PD\\&#8221; &amp;&amp; \\<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"54\">\n<div class=\"hljs-ln-n\" data-line-number=\"54\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"54\"><span class=\"hljs-string\"> echo \\&#8221;\u89e3\u538b\u5230: $SD\/$PD\\&#8221; &amp;&amp; \\<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"55\">\n<div class=\"hljs-ln-n\" data-line-number=\"55\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"55\"><span class=\"hljs-string\"> tar xzf release.tar.gz &amp;&amp; \\ # \u89e3\u538b\u6587\u4ef6<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"56\">\n<div class=\"hljs-ln-n\" data-line-number=\"56\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"56\"><span class=\"hljs-string\"> rm -f release.tar.gz &amp;&amp; \\ # \u5220\u9664\u4e34\u65f6\u6253\u5305\u6587\u4ef6<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"57\">\n<div class=\"hljs-ln-n\" data-line-number=\"57\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"57\"><span class=\"hljs-string\"> echo \\&#8221;\u89e3\u538b\u540e\u6587\u4ef6\u5217\u8868:\\&#8221; &amp;&amp; \\<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"58\">\n<div class=\"hljs-ln-n\" data-line-number=\"58\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"58\"><span class=\"hljs-string\"> ls -l&#8221;<\/span> <span class=\"hljs-comment\"># \u5217\u51fa\u89e3\u538b\u540e\u7684\u6587\u4ef6<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"59\">\n<div class=\"hljs-ln-n\" data-line-number=\"59\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"59\"><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"60\">\n<div class=\"hljs-ln-n\" data-line-number=\"60\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"60\"><span class=\"hljs-string\">echo<\/span> <span class=\"hljs-string\">&#8220;\u90e8\u7f72\u5b8c\u6210&#8221;<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"61\">\n<div class=\"hljs-ln-n\" data-line-number=\"61\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"61\"><span class=\"hljs-attr\">dependencies:<\/span> <span class=\"hljs-comment\"># \u4f9d\u8d56\u7684\u4efb\u52a1<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"62\">\n<div class=\"hljs-ln-n\" data-line-number=\"62\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"62\"><span class=\"hljs-bullet\">&#8211;<\/span> <span class=\"hljs-string\">install-job<\/span> <span class=\"hljs-comment\"># \u4f9d\u8d56install-job\u7684\u751f\u6210\u7269<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"63\">\n<div class=\"hljs-ln-n\" data-line-number=\"63\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"63\"><span class=\"hljs-attr\">after_script:<\/span> <span class=\"hljs-comment\"># \u90e8\u7f72\u540e\u6e05\u7406<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"64\">\n<div class=\"hljs-ln-n\" data-line-number=\"64\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"64\"><span class=\"hljs-bullet\">&#8211;<\/span> <span class=\"hljs-string\">echo<\/span> <span class=\"hljs-string\">&#8220;\u6e05\u7406\u4e34\u65f6\u6587\u4ef6&#8221;<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"65\">\n<div class=\"hljs-ln-n\" data-line-number=\"65\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"65\"><span class=\"hljs-bullet\">&#8211;<\/span> <span class=\"hljs-string\">rm<\/span> <span class=\"hljs-string\">-f<\/span> <span class=\"hljs-string\">release.tar.gz<\/span> <span class=\"hljs-comment\"># \u5220\u9664\u672c\u5730\u4e34\u65f6\u6253\u5305\u6587\u4ef6<\/span><\/td>\n<\/tr>\n<tr>\n<td class=\"hljs-ln-line hljs-ln-numbers\" data-line-number=\"66\">\n<div class=\"hljs-ln-n\" data-line-number=\"66\"><\/div>\n<\/td>\n<td class=\"hljs-ln-line hljs-ln-code\" data-line-number=\"66\"><span class=\"hljs-bullet\">&#8211;<\/span> <span class=\"hljs-string\">echo<\/span> <span class=\"hljs-string\">&#8220;\u90e8\u7f72\u6d41\u7a0b\u7ed3\u675f&#8221;<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<pre><code class=\"language-yaml \" data-theme=\"light\"><\/code><\/pre>\n<h2>\u6d41\u7a0b\u603b\u7ed3<\/h2>\n<ol>\n<li><strong>\u9884\u5b89\u88c5\u9636\u6bb5<\/strong>\uff1a\u4ec5\u5728\u4f9d\u8d56\u6587\u4ef6\u53d8\u5316\u65f6\u8fd0\u884c\uff0c\u5b89\u88c5\u9879\u76ee\u4f9d\u8d56<\/li>\n<li><strong>\u5b89\u88c5\u9636\u6bb5<\/strong>\uff1a\u6bcf\u6b21\u6784\u5efa\u90fd\u8fd0\u884c\uff0c\u5b89\u88c5\u4f9d\u8d56\u5e76\u6784\u5efa\u9879\u76ee\uff0c\u751f\u6210\u6784\u5efa\u4ea7\u7269<\/li>\n<li><strong>\u90e8\u7f72\u9636\u6bb5<\/strong>\uff1a\u5c06\u6784\u5efa\u4ea7\u7269\u90e8\u7f72\u5230\u76ee\u6807\u670d\u52a1\u5668\uff0c\u5305\u62ec\uff1a\n<ul>\n<li>\u6839\u636e\u5206\u652f\u8bbe\u7f6e\u4e0d\u540c\u7684\u90e8\u7f72\u914d\u7f6e<\/li>\n<li>\u5907\u4efd\u73b0\u6709\u751f\u4ea7\u73af\u5883<\/li>\n<li>\u6e05\u7a7a\u751f\u4ea7\u76ee\u5f55<\/li>\n<li>\u4e0a\u4f20\u5e76\u89e3\u538b\u65b0\u7248\u672c<\/li>\n<li>\u6e05\u7406\u4e34\u65f6\u6587\u4ef6<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p>\u6574\u4e2a\u6d41\u7a0b\u5b9e\u73b0\u4e86\u81ea\u52a8\u5316\u6784\u5efa\u548c\u90e8\u7f72\uff0c\u652f\u6301\u591a\u73af\u5883(\u5f00\u53d1\/\u6d4b\u8bd5\/\u751f\u4ea7)\u90e8\u7f72\uff0c\u5e76\u5305\u542b\u5907\u4efd\u673a\u5236\u786e\u4fdd\u90e8\u7f72\u5b89\u5168\u3002<\/p>\n<p>\/\/\/\/\/\/.gitlab-ci.yml\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/<\/p>\n<div>\n<div>\n<div>variables:<\/div>\n<div>\u00a0 BD: dist<\/div>\n<div>\u00a0 PD: dev.hanlan.site<\/div>\n<div>\u00a0 BUR: dev.hanlan.site_backup<\/div>\n<div>\u00a0 SD: &#8220;${ng_sd}&#8221;<\/div>\n<div>\u00a0 ORTHER_SOURCEDIR: \/www\/wwwroot<\/div>\n<div>\u00a0 DSI: &#8220;${DEFAULT}&#8221;<\/div>\n<div>\u00a0 TEST_SERVER_IP: &#8220;10.10.17.18&#8221;<\/div>\n<div>\u00a0 MASTER_SERVER_IP: &#8220;pro.emit.team&#8221;<\/div>\n<div>\u00a0 D_HOST: &#8220;10.10.17.16:5000&#8221;<\/div>\n<div>\u00a0 NPM_REGISTRY: &#8220;https:\/\/registry.npmmirror.com&#8221;<\/div>\n<div>stages:<\/div>\n<div>\u00a0 &#8211; preinstall<\/div>\n<div>\u00a0 &#8211; install<\/div>\n<div>\u00a0 &#8211; deploy<\/div>\n<div># \u7f13\u5b58\u914d\u7f6e\uff0c\u57fa\u4e8e package-lock.json \u7684 hash<\/div>\n<div>cache:<\/div>\n<div>\u00a0 key:<\/div>\n<div>\u00a0 \u00a0 files:<\/div>\n<div>\u00a0 \u00a0 \u00a0 &#8211; package-lock.json<\/div>\n<div>\u00a0 paths:<\/div>\n<div>\u00a0 \u00a0 &#8211; node_modules\/<\/div>\n<div>\u00a0 \u00a0 &#8211; package-lock.json<\/div>\n<div>preinstall-job:<\/div>\n<div>\u00a0 image: $D_HOST\/node:v20<\/div>\n<div>\u00a0 stage: preinstall<\/div>\n<div>\u00a0 only:<\/div>\n<div>\u00a0 \u00a0 refs:<\/div>\n<div>\u00a0 \u00a0 \u00a0 &#8211; master<\/div>\n<div>\u00a0 \u00a0 \u00a0 &#8211; test<\/div>\n<div>\u00a0 \u00a0 \u00a0 &#8211; dev<\/div>\n<div>\u00a0 \u00a0 changes:<\/div>\n<div>\u00a0 \u00a0 \u00a0 &#8211; package.json<\/div>\n<div>\u00a0 \u00a0 \u00a0 &#8211; package-lock.json<\/div>\n<div>\u00a0 script:<\/div>\n<div>\u00a0 \u00a0 &#8211; echo &#8220;\u914d\u7f6e NPM \u955c\u50cf&#8221;<\/div>\n<div>\u00a0 \u00a0 &#8211; npm config set registry $NPM_REGISTRY<\/div>\n<div>\u00a0 \u00a0 &#8211; echo &#8220;\u4f9d\u8d56\u53d1\u751f\u53d8\u5316,\u5f00\u59cb install&#8221;<\/div>\n<div>\u00a0 \u00a0 &#8211; npm install<\/div>\n<div>\u00a0 \u00a0 &#8211; echo &#8220;install \u5b8c\u6210&#8221;<\/div>\n<div>install-job:<\/div>\n<div>\u00a0 image: $D_HOST\/node:v20<\/div>\n<div>\u00a0 stage: install<\/div>\n<div>\u00a0 only:<\/div>\n<div>\u00a0 \u00a0 refs:<\/div>\n<div>\u00a0 \u00a0 \u00a0 &#8211; master<\/div>\n<div>\u00a0 \u00a0 \u00a0 &#8211; test<\/div>\n<div>\u00a0 \u00a0 \u00a0 &#8211; dev<\/div>\n<div>\u00a0 script:<\/div>\n<div>\u00a0 \u00a0 &#8211; echo &#8220;\u914d\u7f6e NPM \u955c\u50cf&#8221;<\/div>\n<div>\u00a0 \u00a0 &#8211; npm config set registry $NPM_REGISTRY<\/div>\n<div>\u00a0 \u00a0 &#8211; echo &#8220;start install&#8221;<\/div>\n<div>\u00a0 \u00a0 &#8211; npm install<\/div>\n<div>\u00a0 \u00a0 &#8211; echo &#8220;Format all the files under the &#8220;src&#8221; directory&#8221;<\/div>\n<div>\u00a0 \u00a0 &#8211; npm run format<\/div>\n<div>\u00a0 \u00a0 &#8211; echo &#8220;build package&#8221;<\/div>\n<div>\u00a0 \u00a0 &#8211; npm run build:${CI_COMMIT_BRANCH}<\/div>\n<div>\u00a0 \u00a0 &#8211; echo &#8220;\u5b8c\u6210\u6253\u5305&#8221;<\/div>\n<div>\u00a0 artifacts:<\/div>\n<div>\u00a0 \u00a0 paths:<\/div>\n<div>\u00a0 \u00a0 \u00a0 &#8211; $BD\/<\/div>\n<div>\u00a0 \u00a0 expire_in: 1 days<\/div>\n<div>deploy-job:<\/div>\n<div>\u00a0 image: $D_HOST\/sshpass:latest<\/div>\n<div>\u00a0 stage: deploy<\/div>\n<div>\u00a0 only:<\/div>\n<div>\u00a0 \u00a0 refs:<\/div>\n<div>\u00a0 \u00a0 \u00a0 &#8211; master<\/div>\n<div>\u00a0 \u00a0 \u00a0 &#8211; test<\/div>\n<div>\u00a0 \u00a0 \u00a0 &#8211; dev<\/div>\n<div>\u00a0 script: |<\/div>\n<div>\u00a0 \u00a0 echo &#8220;\u90e8\u7f72\u5230 Nginx&#8221;<\/div>\n<div>\u00a0 \u00a0 echo &#8220;\u5f53\u524d\u5206\u652f: $CI_COMMIT_BRANCH&#8221;<\/div>\n<div>\u00a0 \u00a0 echo &#8220;\u9ed8\u8ba4\u8def\u5f84: SD=${SD}, PD=${PD}, BUR=${BUR}, DSI=${DSI}&#8221;<\/div>\n<div>\u00a0 \u00a0 # \u6839\u636e\u5206\u652f\u8bbe\u7f6e\u53d8\u91cf<\/div>\n<div>\u00a0 \u00a0 if [[ &#8220;$CI_COMMIT_BRANCH&#8221; == &#8220;test&#8221; ]]; then<\/div>\n<div>\u00a0 \u00a0 \u00a0 PD=&#8221;test.emit.team&#8221;<\/div>\n<div>\u00a0 \u00a0 \u00a0 BUR=&#8221;test.emit.team_backup&#8221;<\/div>\n<div>\u00a0 \u00a0 \u00a0 DSI=&#8221;${TEST_SERVER_IP:-10.10.17.18}&#8221;<\/div>\n<div>\u00a0 \u00a0 \u00a0 SD=&#8221;${ORTHER_SOURCEDIR:-\/www\/wwwroot}&#8221;<\/div>\n<div>\u00a0 \u00a0 elif [[ &#8220;$CI_COMMIT_BRANCH&#8221; == &#8220;master&#8221; ]]; then<\/div>\n<div>\u00a0 \u00a0 \u00a0 PD=&#8221;pro.emit.team&#8221;<\/div>\n<div>\u00a0 \u00a0 \u00a0 BUR=&#8221;pro.emit.team_backup&#8221;<\/div>\n<div>\u00a0 \u00a0 \u00a0 DSI=&#8221;${MASTER_SERVER_IP:-pro.emit.team}&#8221;<\/div>\n<div>\u00a0 \u00a0 \u00a0 SD=&#8221;${ORTHER_SOURCEDIR:-\/www\/wwwroot}&#8221;<\/div>\n<div>\u00a0 \u00a0 \u00a0 PASSWORD=$PASSWORD_PROD_WEB<\/div>\n<div>\u00a0 \u00a0 fi<\/div>\n<div>\u00a0 \u00a0 echo &#8220;\u66f4\u65b0\u540e\u8def\u5f84: SD=${SD}, PD=${PD}, BUR=${BUR}, DSI=${DSI}&#8221;<\/div>\n<div>\u00a0 \u00a0 # \u4e00\u884c SSH \u5907\u4efd\uff08\u53d8\u91cf\u5728\u672c\u5730\u5148\u5c55\u5f00\uff09<\/div>\n<div>\u00a0 \u00a0 sshpass -p $PASSWORD ssh -o StrictHostKeyChecking=no root@$DSI &#8220;\\<\/div>\n<div>\u00a0 \u00a0 \u00a0 mkdir -p \\&#8221;$SD\/$BUR\\&#8221; &amp;&amp; \\<\/div>\n<div>\u00a0 \u00a0 \u00a0 if [ -d \\&#8221;$SD\/$PD\\&#8221; ] &amp;&amp; [ \\&#8221;\\$(ls -A \\&#8221;$SD\/$PD\\&#8221;)\\&#8221; ]; then \\<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 BACKUP_FILE=\\&#8221;$SD\/$BUR\/backup_$(date +%Y%m%d%H%M%S).tar.gz\\&#8221; &amp;&amp; \\<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 echo \\&#8221;\u5f00\u59cb\u5907\u4efd: \\$BACKUP_FILE\\&#8221; &amp;&amp; \\<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 tar czf \\&#8221;\\$BACKUP_FILE\\&#8221; -C \\&#8221;$SD\\&#8221; \\&#8221;$PD\\&#8221; &amp;&amp; \\<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 echo \\&#8221;\u5907\u4efd\u6210\u529f\uff1a\\$BACKUP_FILE\\&#8221;; \\<\/div>\n<div>\u00a0 \u00a0 \u00a0 else \\<\/div>\n<div>\u00a0 \u00a0 \u00a0 \u00a0 echo \\&#8221;\u6e90\u76ee\u5f55\u4e0d\u5b58\u5728\u6216\u4e3a\u7a7a\uff0c\u8df3\u8fc7\u5907\u4efd\\&#8221;; \\<\/div>\n<div>\u00a0 \u00a0 \u00a0 fi&#8221;<\/div>\n<div>\u00a0 \u00a0 # \u6e05\u7a7a\u65e7\u76ee\u5f55<\/div>\n<div>\u00a0 \u00a0 sshpass -p $PASSWORD ssh -o StrictHostKeyChecking=no root@$DSI &#8220;rm -rf \\&#8221;$SD\/$PD\\&#8221;\/*&#8221;<\/div>\n<div>\u00a0 \u00a0 # \u672c\u5730\u6253\u5305<\/div>\n<div>\u00a0 \u00a0 if [ -d &#8220;$BD&#8221; ] &amp;&amp; [ &#8220;$(ls -A &#8220;$BD&#8221;)&#8221; ]; then<\/div>\n<div>\u00a0 \u00a0 \u00a0 echo &#8220;\u6253\u5305\u6784\u5efa\u4ea7\u7269&#8221;<\/div>\n<div>\u00a0 \u00a0 \u00a0 tar czf release.tar.gz -C &#8220;$BD&#8221; .<\/div>\n<div>\u00a0 \u00a0 else<\/div>\n<div>\u00a0 \u00a0 \u00a0 echo &#8220;\u9519\u8bef: \u6784\u5efa\u76ee\u5f55 $BD \u4e0d\u5b58\u5728\u6216\u4e3a\u7a7a!&#8221;<\/div>\n<div>\u00a0 \u00a0 \u00a0 exit 1<\/div>\n<div>\u00a0 \u00a0 fi<\/div>\n<div>\u00a0 \u00a0 # \u4f20\u8f93\u5e76\u89e3\u538b<\/div>\n<div>\u00a0 \u00a0 sshpass -p $PASSWORD scp -o StrictHostKeyChecking=no release.tar.gz root@$DSI:&#8221;$SD\/$PD\/&#8221;<\/div>\n<div>\u00a0 \u00a0 sshpass -p $PASSWORD ssh -o StrictHostKeyChecking=no root@$DSI &#8220;\\<\/div>\n<div>\u00a0 \u00a0 \u00a0 cd \\&#8221;$SD\/$PD\\&#8221; &amp;&amp; \\<\/div>\n<div>\u00a0 \u00a0 \u00a0 echo \\&#8221;\u89e3\u538b\u5230: $SD\/$PD\\&#8221; &amp;&amp; \\<\/div>\n<div>\u00a0 \u00a0 \u00a0 tar xzf release.tar.gz &amp;&amp; \\<\/div>\n<div>\u00a0 \u00a0 \u00a0 rm -f release.tar.gz &amp;&amp; \\<\/div>\n<div>\u00a0 \u00a0 \u00a0 echo \\&#8221;\u89e3\u538b\u540e\u6587\u4ef6\u5217\u8868:\\&#8221; &amp;&amp; \\<\/div>\n<div>\u00a0 \u00a0 \u00a0 ls -l&#8221;<\/div>\n<div>\u00a0 \u00a0 echo &#8220;\u90e8\u7f72\u5b8c\u6210&#8221;<\/div>\n<div>\u00a0 dependencies:<\/div>\n<div>\u00a0 \u00a0 &#8211; install-job<\/div>\n<div>\u00a0 after_script:<\/div>\n<div>\u00a0 \u00a0 &#8211; echo &#8220;\u6e05\u7406\u4e34\u65f6\u6587\u4ef6&#8221;<\/div>\n<div>\u00a0 \u00a0 &#8211; rm -f release.tar.gz<\/div>\n<div>\u00a0 \u00a0 &#8211; echo &#8220;\u90e8\u7f72\u6d41\u7a0b\u7ed3\u675f&#8221;<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>GitLab CI\/CD \u914d\u7f6e\u89e3\u6790 \u8fd9\u4e2a\u914d\u7f6e\u6587\u4ef6\u5b9a\u4e49\u4e86\u4e00\u4e2a\u5b8c\u6574\u7684 Node.js&#8230; <a href=\"https:\/\/kzqgy.cn\/index.php\/2025\/06\/19\/ci-cd%e8%87%aa%e5%8a%a8%e5%8c%96%e9%83%a8%e7%bd%b2-%e5%89%8d%e7%ab%af\/\" class=\"readmore\">Read more<span class=\"screen-reader-text\">CI\/CD\u81ea\u52a8\u5316\u90e8\u7f72-\u524d\u7aef<\/span><span class=\"fa fa-angle-double-right\" aria-hidden=\"true\"><\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[9],"class_list":["post-26","post","type-post","status-publish","format-standard","hentry","category-all","tag-ci-cd","content-layout-excerpt-thumb"],"_links":{"self":[{"href":"https:\/\/kzqgy.cn\/index.php\/wp-json\/wp\/v2\/posts\/26","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kzqgy.cn\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kzqgy.cn\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kzqgy.cn\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/kzqgy.cn\/index.php\/wp-json\/wp\/v2\/comments?post=26"}],"version-history":[{"count":3,"href":"https:\/\/kzqgy.cn\/index.php\/wp-json\/wp\/v2\/posts\/26\/revisions"}],"predecessor-version":[{"id":36,"href":"https:\/\/kzqgy.cn\/index.php\/wp-json\/wp\/v2\/posts\/26\/revisions\/36"}],"wp:attachment":[{"href":"https:\/\/kzqgy.cn\/index.php\/wp-json\/wp\/v2\/media?parent=26"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kzqgy.cn\/index.php\/wp-json\/wp\/v2\/categories?post=26"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kzqgy.cn\/index.php\/wp-json\/wp\/v2\/tags?post=26"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}