Jenkins-pipeline + gitlab + nodejs 自动发布vue项目

环境

OS SOFTWARE NOTE
CentOS7.4 Jenkins2.327
x nodejs16.3.2 实施版本15.14.0
x gitlab13.2.0

操作步骤

0. 为Jenkins安装nodejs插件

#mermaid-svg-x5XUjpvbHsHm7kA5 .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-x5XUjpvbHsHm7kA5 .label text{fill:#333}#mermaid-svg-x5XUjpvbHsHm7kA5 .node rect,#mermaid-svg-x5XUjpvbHsHm7kA5 .node circle,#mermaid-svg-x5XUjpvbHsHm7kA5 .node ellipse,#mermaid-svg-x5XUjpvbHsHm7kA5 .node polygon,#mermaid-svg-x5XUjpvbHsHm7kA5 .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-x5XUjpvbHsHm7kA5 .node .label{text-align:center;fill:#333}#mermaid-svg-x5XUjpvbHsHm7kA5 .node.clickable{cursor:pointer}#mermaid-svg-x5XUjpvbHsHm7kA5 .arrowheadPath{fill:#333}#mermaid-svg-x5XUjpvbHsHm7kA5 .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-x5XUjpvbHsHm7kA5 .flowchart-link{stroke:#333;fill:none}#mermaid-svg-x5XUjpvbHsHm7kA5 .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-x5XUjpvbHsHm7kA5 .edgeLabel rect{opacity:0.9}#mermaid-svg-x5XUjpvbHsHm7kA5 .edgeLabel span{color:#333}#mermaid-svg-x5XUjpvbHsHm7kA5 .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-x5XUjpvbHsHm7kA5 .cluster text{fill:#333}#mermaid-svg-x5XUjpvbHsHm7kA5 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-x5XUjpvbHsHm7kA5 .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-x5XUjpvbHsHm7kA5 text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-x5XUjpvbHsHm7kA5 .actor-line{stroke:grey}#mermaid-svg-x5XUjpvbHsHm7kA5 .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-x5XUjpvbHsHm7kA5 .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-x5XUjpvbHsHm7kA5 #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-x5XUjpvbHsHm7kA5 .sequenceNumber{fill:#fff}#mermaid-svg-x5XUjpvbHsHm7kA5 #sequencenumber{fill:#333}#mermaid-svg-x5XUjpvbHsHm7kA5 #crosshead path{fill:#333;stroke:#333}#mermaid-svg-x5XUjpvbHsHm7kA5 .messageText{fill:#333;stroke:#333}#mermaid-svg-x5XUjpvbHsHm7kA5 .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-x5XUjpvbHsHm7kA5 .labelText,#mermaid-svg-x5XUjpvbHsHm7kA5 .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-x5XUjpvbHsHm7kA5 .loopText,#mermaid-svg-x5XUjpvbHsHm7kA5 .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-x5XUjpvbHsHm7kA5 .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-x5XUjpvbHsHm7kA5 .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-x5XUjpvbHsHm7kA5 .noteText,#mermaid-svg-x5XUjpvbHsHm7kA5 .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-x5XUjpvbHsHm7kA5 .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-x5XUjpvbHsHm7kA5 .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-x5XUjpvbHsHm7kA5 .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-x5XUjpvbHsHm7kA5 .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-x5XUjpvbHsHm7kA5 .section{stroke:none;opacity:0.2}#mermaid-svg-x5XUjpvbHsHm7kA5 .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-x5XUjpvbHsHm7kA5 .section2{fill:#fff400}#mermaid-svg-x5XUjpvbHsHm7kA5 .section1,#mermaid-svg-x5XUjpvbHsHm7kA5 .section3{fill:#fff;opacity:0.2}#mermaid-svg-x5XUjpvbHsHm7kA5 .sectionTitle0{fill:#333}#mermaid-svg-x5XUjpvbHsHm7kA5 .sectionTitle1{fill:#333}#mermaid-svg-x5XUjpvbHsHm7kA5 .sectionTitle2{fill:#333}#mermaid-svg-x5XUjpvbHsHm7kA5 .sectionTitle3{fill:#333}#mermaid-svg-x5XUjpvbHsHm7kA5 .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-x5XUjpvbHsHm7kA5 .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-x5XUjpvbHsHm7kA5 .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-x5XUjpvbHsHm7kA5 .grid path{stroke-width:0}#mermaid-svg-x5XUjpvbHsHm7kA5 .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-x5XUjpvbHsHm7kA5 .task{stroke-width:2}#mermaid-svg-x5XUjpvbHsHm7kA5 .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-x5XUjpvbHsHm7kA5 .taskText:not([font-size]){font-size:11px}#mermaid-svg-x5XUjpvbHsHm7kA5 .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-x5XUjpvbHsHm7kA5 .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-x5XUjpvbHsHm7kA5 .task.clickable{cursor:pointer}#mermaid-svg-x5XUjpvbHsHm7kA5 .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-x5XUjpvbHsHm7kA5 .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-x5XUjpvbHsHm7kA5 .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-x5XUjpvbHsHm7kA5 .taskText0,#mermaid-svg-x5XUjpvbHsHm7kA5 .taskText1,#mermaid-svg-x5XUjpvbHsHm7kA5 .taskText2,#mermaid-svg-x5XUjpvbHsHm7kA5 .taskText3{fill:#fff}#mermaid-svg-x5XUjpvbHsHm7kA5 .task0,#mermaid-svg-x5XUjpvbHsHm7kA5 .task1,#mermaid-svg-x5XUjpvbHsHm7kA5 .task2,#mermaid-svg-x5XUjpvbHsHm7kA5 .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-x5XUjpvbHsHm7kA5 .taskTextOutside0,#mermaid-svg-x5XUjpvbHsHm7kA5 .taskTextOutside2{fill:#000}#mermaid-svg-x5XUjpvbHsHm7kA5 .taskTextOutside1,#mermaid-svg-x5XUjpvbHsHm7kA5 .taskTextOutside3{fill:#000}#mermaid-svg-x5XUjpvbHsHm7kA5 .active0,#mermaid-svg-x5XUjpvbHsHm7kA5 .active1,#mermaid-svg-x5XUjpvbHsHm7kA5 .active2,#mermaid-svg-x5XUjpvbHsHm7kA5 .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-x5XUjpvbHsHm7kA5 .activeText0,#mermaid-svg-x5XUjpvbHsHm7kA5 .activeText1,#mermaid-svg-x5XUjpvbHsHm7kA5 .activeText2,#mermaid-svg-x5XUjpvbHsHm7kA5 .activeText3{fill:#000 !important}#mermaid-svg-x5XUjpvbHsHm7kA5 .done0,#mermaid-svg-x5XUjpvbHsHm7kA5 .done1,#mermaid-svg-x5XUjpvbHsHm7kA5 .done2,#mermaid-svg-x5XUjpvbHsHm7kA5 .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-x5XUjpvbHsHm7kA5 .doneText0,#mermaid-svg-x5XUjpvbHsHm7kA5 .doneText1,#mermaid-svg-x5XUjpvbHsHm7kA5 .doneText2,#mermaid-svg-x5XUjpvbHsHm7kA5 .doneText3{fill:#000 !important}#mermaid-svg-x5XUjpvbHsHm7kA5 .crit0,#mermaid-svg-x5XUjpvbHsHm7kA5 .crit1,#mermaid-svg-x5XUjpvbHsHm7kA5 .crit2,#mermaid-svg-x5XUjpvbHsHm7kA5 .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-x5XUjpvbHsHm7kA5 .activeCrit0,#mermaid-svg-x5XUjpvbHsHm7kA5 .activeCrit1,#mermaid-svg-x5XUjpvbHsHm7kA5 .activeCrit2,#mermaid-svg-x5XUjpvbHsHm7kA5 .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-x5XUjpvbHsHm7kA5 .doneCrit0,#mermaid-svg-x5XUjpvbHsHm7kA5 .doneCrit1,#mermaid-svg-x5XUjpvbHsHm7kA5 .doneCrit2,#mermaid-svg-x5XUjpvbHsHm7kA5 .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-x5XUjpvbHsHm7kA5 .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-x5XUjpvbHsHm7kA5 .milestoneText{font-style:italic}#mermaid-svg-x5XUjpvbHsHm7kA5 .doneCritText0,#mermaid-svg-x5XUjpvbHsHm7kA5 .doneCritText1,#mermaid-svg-x5XUjpvbHsHm7kA5 .doneCritText2,#mermaid-svg-x5XUjpvbHsHm7kA5 .doneCritText3{fill:#000 !important}#mermaid-svg-x5XUjpvbHsHm7kA5 .activeCritText0,#mermaid-svg-x5XUjpvbHsHm7kA5 .activeCritText1,#mermaid-svg-x5XUjpvbHsHm7kA5 .activeCritText2,#mermaid-svg-x5XUjpvbHsHm7kA5 .activeCritText3{fill:#000 !important}#mermaid-svg-x5XUjpvbHsHm7kA5 .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-x5XUjpvbHsHm7kA5 g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-x5XUjpvbHsHm7kA5 g.classGroup text .title{font-weight:bolder}#mermaid-svg-x5XUjpvbHsHm7kA5 g.clickable{cursor:pointer}#mermaid-svg-x5XUjpvbHsHm7kA5 g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-x5XUjpvbHsHm7kA5 g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-x5XUjpvbHsHm7kA5 .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-x5XUjpvbHsHm7kA5 .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-x5XUjpvbHsHm7kA5 .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-x5XUjpvbHsHm7kA5 .dashed-line{stroke-dasharray:3}#mermaid-svg-x5XUjpvbHsHm7kA5 #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-x5XUjpvbHsHm7kA5 #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-x5XUjpvbHsHm7kA5 #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-x5XUjpvbHsHm7kA5 #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-x5XUjpvbHsHm7kA5 #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-x5XUjpvbHsHm7kA5 #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-x5XUjpvbHsHm7kA5 #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-x5XUjpvbHsHm7kA5 #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-x5XUjpvbHsHm7kA5 .commit-id,#mermaid-svg-x5XUjpvbHsHm7kA5 .commit-msg,#mermaid-svg-x5XUjpvbHsHm7kA5 .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-x5XUjpvbHsHm7kA5 .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-x5XUjpvbHsHm7kA5 .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-x5XUjpvbHsHm7kA5 g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-x5XUjpvbHsHm7kA5 g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-x5XUjpvbHsHm7kA5 g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-x5XUjpvbHsHm7kA5 g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-x5XUjpvbHsHm7kA5 g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-x5XUjpvbHsHm7kA5 g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-x5XUjpvbHsHm7kA5 .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-x5XUjpvbHsHm7kA5 .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-x5XUjpvbHsHm7kA5 .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-x5XUjpvbHsHm7kA5 .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-x5XUjpvbHsHm7kA5 .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-x5XUjpvbHsHm7kA5 .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-x5XUjpvbHsHm7kA5 .edgeLabel text{fill:#333}#mermaid-svg-x5XUjpvbHsHm7kA5 .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-x5XUjpvbHsHm7kA5 .node circle.state-start{fill:black;stroke:black}#mermaid-svg-x5XUjpvbHsHm7kA5 .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-x5XUjpvbHsHm7kA5 #statediagram-barbEnd{fill:#9370db}#mermaid-svg-x5XUjpvbHsHm7kA5 .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-x5XUjpvbHsHm7kA5 .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-x5XUjpvbHsHm7kA5 .statediagram-state .divider{stroke:#9370db}#mermaid-svg-x5XUjpvbHsHm7kA5 .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-x5XUjpvbHsHm7kA5 .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-x5XUjpvbHsHm7kA5 .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-x5XUjpvbHsHm7kA5 .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-x5XUjpvbHsHm7kA5 .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-x5XUjpvbHsHm7kA5 .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-x5XUjpvbHsHm7kA5 .note-edge{stroke-dasharray:5}#mermaid-svg-x5XUjpvbHsHm7kA5 .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-x5XUjpvbHsHm7kA5 .error-icon{fill:#522}#mermaid-svg-x5XUjpvbHsHm7kA5 .error-text{fill:#522;stroke:#522}#mermaid-svg-x5XUjpvbHsHm7kA5 .edge-thickness-normal{stroke-width:2px}#mermaid-svg-x5XUjpvbHsHm7kA5 .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-x5XUjpvbHsHm7kA5 .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-x5XUjpvbHsHm7kA5 .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-x5XUjpvbHsHm7kA5 .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-x5XUjpvbHsHm7kA5 .marker{fill:#333}#mermaid-svg-x5XUjpvbHsHm7kA5 .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-x5XUjpvbHsHm7kA5 {color: rgba(0, 0, 0, 0.75);font: ;}

可选插件
选择版本
插件管理
全局工具配置
新增NodeJS
结束

1. 编写Pipeline脚本

公司新上项目前端项目采用VUE写成,需要接入Jenkins-Pipeline进行持续集成与发布。由于Jenkins上还没有nodejs环境所以需要配置。不上不知道以上才知道。先写好Pipeline脚本:

pipeline {agent anyenvironment {serviceName = "compoment-official"}tools {nodejs "nodejs"}stages {stage('Preparation codes') {steps {dir("${serviceName}") {git branch: "develop", credentialsId: 'ad3a4389-3f1f-42c8-86fe-aee55f362a8e', url: 'git@git.gitrepostory.com:compoment-web/compoment-official.git'}}}stage('Install') {steps {dir("${serviceName}") {sh '''source /opt/rh/devtoolset-7/enablenpm config set python /usr/local/python3/bin/python3npm config set registry https://registry.npm.taobao.orgnpm install'''}}}stage('Build') {steps {dir("${serviceName}") {sh """npm run build:test"""}}}stage('Build ansible-playbook') {steps {script {sh """rm -rf roles/${serviceName} # 清理releasemv roles/projectname roles/${serviceName}cd ${serviceName}/dist/zip -9rv ${WORKSPACE}/roles/${serviceName}/files/${serviceName}.zip *cd ${WORKSPACE}sed -i 's/groupname/${serviceName}/' hostssed -i 's/\\(projectname: \\).*/\\1${serviceName}/g' site.ymlsed -i 's/\\(programfile: \\).*/\\1${serviceName}.zip/g' site.yml"""}}}stage('Deploy To Remote Host') {steps {script {sh "ansible-playbook -i hosts site.yml"}}}}
}

2. 解决canvas依赖问题

Jenkins控制面板上一跑才发现,错误一大堆!!!

+ npm config set python /usr/1ocal/python3/bin/python3
+ npm --registry=https://registry. npm. taobao. org install
npm WARN deprecated 9hapi/topo03. 1.6: This version has been deprecated and is no longer supported or maintained
.....
npm WARN deprecated core-js02.6.12: core-js0<3.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could Ci
to the actual version of core-js.
npm ERR! code 1
npm BRR! path /var/1ib/ jenkins/ jobs/tfxing-official-dev/workspace/ode_modu1es/canvas
apm ERR! command failed  # 关键错误信息
ipm ERR! command sh -c node-pre-gyp install -- fallback-to-build
npm BRR! Failed to execute '/var/1ib/ jenkins/tools/ jenkins. plugins. nodejs. tools. NodeJSInstallation/nodejs/bin/node /var/1ib/ jenkins/tools/ jenkins. plugins. nodejs. tools. NodeJSInstallation/nodejs/1ib/node. modules/npm
module=/var/lib/ jenkins/ jobs/tfxing-official-dev/workspace/node_ _modules/canvas/bui1d/Release/canvas. node --module_name=canvas --module_ path=/var/1ib/ jenkins/ jobs/tfxing-official-dev/workspace/node_modules/canvas/bl
node_ napi 1abel=node-v93 --python=/usr/1ocal/python3/bin/python3’ (1)
npm ERR! node-pre-gyp info it worked if it ends with ok
.....

怎么会出现canvas模块无法安装呢?明明项目的package.json中已经把相关依赖都安装上了。重试多吃无果,只能对依赖模块进行单独安装。但仍旧报错:

+ npm config set python /usr/1ocal/python3/bin/python3
npm config set registry https://registry. npm. taobao. org
+ npm install canvas02.9.0 # 单独安装canvas
npm WARN deprecated @hapi/topo03.1.6: This version has been deprecated and is no longer supported or maintained
npm WARN deprecated Chapi/bourne01.3.2: This version has been deprecated and is no longer supported or maintained
npm WARN deprecated urix0.1.0: Please see https://github. com/1yde11/urix#deprecated
npm WARN deprecated har-validator05.1.5: this library is no 1onger supported
npm WARN deprecated eslint-loader02.2. 1: This loader has been deprecated. Please use eslint-webpack-plugin
npm WARN deprecated resolve-ur100.2. 1: https://github. com/lyde1l/resolve-ur1#deprecated
npm WARN deprecated chokidar02.1.8: Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.
npm WARN deprecated chokidar02. 1.8: Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.
npm WARN deprecated querystring0.2.0: The querystring API is considered Legacy. new code should use the URLSearchParams API instead.
npm WARN deprecated html-webpack-plugin03.2.0: 3.x is no longer supported
npm WARN deprecated babel-eslint010.1.0: babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.
npm WARN deprecated Qhapi/address02. 1.4: Moved to。 npm install esideway/address '
npm WARN deprecated uuid03.4.0: Please upgrade to version 7 or higher. 01der versions may use Math. random() in certain circumstances, which is known to be problematic. See https://v8. dev/b1og/math-random :
npm WARN deprecated request02. 88.2: request has been deprecated, see https://github. com/request/request/issues/3142
npm WARN deprecated Qhapi/hoek08.5.1: This version has been deprecated and is no 1onger supported or maintained
npm WARN deprecated Qhapi/joi015.1.1: Switch to 'npm install joi'
npm WARN deprecated svg01.3.2: This SVGO version is no longer supported. Upgrade to v2.x.x.
npm WARN deprecated core-js02. 6.12: core-js0<3.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims,feature detection in old core-js versions could
to the actual version of core-js.
npm BRR! code 1
npm BRR! path /var/1ib/ jenkins/jobs/tfxing-official-dev/workspace/node_modules/node-sass # 此时又报依赖node-sass模块错误
npm ERR! command failed
npm ERR! command sh -c node scripts/build. js

3. 解决node-sass依赖

没办法继续对node-sass模块进行独立安装,但仍旧报错:

+ npm install --python=/usr/bin/python ,node-sass0^4.0.0'
npm WARN deprecated Chapi/topo@3. 1.6: This version has been deprecated and is no longer supported or maintained
npm WARN deprecated Chapi/bourne01. 3.2: This version has been deprecated and is no longer supported or maintained
....
npm ERR! gyp info spawn args [ 'BUILDTYPE=Release', ' -C*,’huild' 1
npm ERR! g++: error: unrecognized command line option( ‘-std=gnu++14’ # 此处是关键错误信息
npm ERR! make: *** [Release/obj. target/libsass/src/libsass/src/ast.o] Error 1
npm ERR! gyp ERR! build error
npm ERR! gyp ERR! stack Error:
make failed with exit code: 2
....

4. 解决gnu++14依赖

到此处问题开始明朗起来了!!!再接再厉。
从错误信息中可以得知系统上没有gnu++14,原因很简单CentOS7.4默认的GCC4.8不支持,需要升级GCC。在网上找到一篇说得很清楚的问文章:centos 升级gcc - tycoon3 - 博客园 (cnblogs.com) 根据这篇文章升级到GCC7——查看devtoolset源可得知目前其最低版本已经到7最高到11。

> sudo yum list |grep gcc
...
devtoolset-10-gcc.x86_64                   10.2.1-11.2.el7        centos-sclo-rh
devtoolset-10-libgccjit-devel.x86_64       10.2.1-11.2.el7        centos-sclo-rh
devtoolset-10-libgccjit-docs.x86_64        10.2.1-11.2.el7        centos-sclo-rh
...
devtoolset-11-annobin-plugin-gcc.x86_64    9.82-1.el7.1           centos-sclo-rh
devtoolset-11-libgccjit-devel.x86_64       11.2.1-1.2.el7         centos-sclo-rh
devtoolset-11-libgccjit-docs.x86_64        11.2.1-1.2.el7         centos-sclo-rh
...
devtoolset-7-gcc-gdb-plugin.x86_64         7.3.1-5.16.el7         centos-sclo-rh
devtoolset-7-gcc-gfortran.x86_64           7.3.1-5.16.el7         centos-sclo-rh
devtoolset-7-gcc-plugin-devel.x86_64       7.3.1-5.16.el7         centos-sclo-rh
...
devtoolset-8-gcc.x86_64                    8.3.1-3.2.el7          centos-sclo-rh
devtoolset-8-gcc-c++.x86_64                8.3.1-3.2.el7          centos-sclo-rh
devtoolset-8-libgccjit-docs.x86_64         8.3.1-3.2.el7          centos-sclo-rh
...
devtoolset-9-libgccjit.x86_64              9.3.1-2.2.el7          centos-sclo-rh
devtoolset-9-libgccjit-devel.x86_64        9.3.1-2.2.el7          centos-sclo-rh
devtoolset-9-libgccjit-docs.x86_64         9.3.1-2.2.el7          centos-sclo-rh
...

这里直接安装devtoolset-7

yum install -y devtoolset-7-gcc devtoolset-7-gcc-c++

值得说明的是这些软件包可以同时安装,不会相互覆盖和冲突,也不会覆盖系统的版本。即可以在系统中可同时存在gcc 6, gcc 7, gcc 8等多个版本。

因为不会覆盖系统默认的gcc,使用这些软件的方法有四种:

  1. 使用绝对路径;
  2. 添加可执行文件路径到PATH环境变量;
  3. 使用官方推荐的加载命令:scl enable devtoolset-x bash, x为要启用的版本;
  4. 执行安装软件自带的脚本: source /opt/rh/devtoolset-x/enable,x为要启用的版本。

实践推荐使用最后两种方式。例如启用gcc 6: source /opt/rh/devtoolset-6/enable,接着输入gcc -v查看版本已经变成gcc 6.3.1。如果希望长期使用某个高版本,可将此命令写入.bashrc等配置文件。

以上说明引用自centos 升级gcc - tycoon3 - 博客园 (cnblogs.com)

经过测试在Jenkins-Pipeline中使用:source /opt/rh/devtoolset-x/enable 才有效

5. 解决python3的依赖

此时还要注意组件编译过程中需要python3.6+的支持:

...
npm ERR! gyp ERR! find Python checking Python explicitly set from command line or npm configuration
npm ERR! gyp ERR! find Python -”- - python=”or' 'npm config get python” is" /usr/bin/python'
npm ERR! 8yp ERR! find Python - executable path is" /usr/bin/python
npm ERR! gyp ERR! find Python - version is "2. 7.5"
npm ERR! gyp ERR! find Python - version is 2.7.5 - should be >=3.6.0.
npm ERR! gyp ERR! find Python - THIS VBRSION OF PYTHON IS NOT SUPPORTED
npm ERR! gyp ERR! find Python Python is not set from environment variable PYTHON
npm ERR! gyp ERR! find Python checking if "python3” can be used
npm ERR! gyp ERR! find Python -" python3” is not in PATH or produced an error
npm ERR! gyp ERR! find Python checking if" python" can be used
npm ERR! gyp ERR! find Python - executable path is" /bin/python'
npm ERR! gyp ERR! find Python - version is "2. 7.5”
npm ERR! 8yp ERR! find Python - version is 2. 7.5 - should be >=3. 6.0
npm ERR! gyp ERR! find Python - THIS VERSION 0F PYTHON IS NOT SUPPORTED
npm ERR! gyp ERR! find Python
npm ERR! gyp ERR! find Python **********************************************
npm ERR! gyp ERR! find Python You need to install the latest version of Python.
npm BRR! 8Yp ERR! find Python Node-gyp should be able to find and use Python. If not,
npm ERR! gyp ERR! find Python you can try one of the following options:
npm ERR! gyp ERR! find Python - Use the switch --python=" /path/to/pythonexecutable"
npm ERR! gyp ERR! find Python
(accepted by both node-gyp and npm)
npm ERR! gyp ERR! find Python - Set the environment variable PYTHON
npm ERR! 8yP ERR! find Python - Set the npm configuration variable python:
npm ERR! gyp ERR! find Python
npm config set python "/path/to/pythonexecutable"
npm ERR! gyp ERR! find Python For more information consult the documentation at:
npm ERR! gyp ERR! find Python https://github. com/nodejs/node-gyp#installation
npm ERR! gyp ERR! find Python *******************************************
nom ERR1 gvp ERR1 find Pvthon
...

因此只需要在执行install之前机上如下代码即可解决python3依赖的问题

+ npm config set python /usr/1ocal/python3/bin/python3
+ npm --registry-https:/ / registry. npm. taobao. org install

6. 解决nodejsnode-sass版本匹配的问题

另外对nodejs的版本也有要求,不然就会报如下错误:

npm EKK! /var/ 11b/ jenkins/. cache/noae-gyp/ 10.13. 2/1ncluae/ noae/v8-1nternal. h:492:58: note: suggestea alternative:" remove_cv
npm BRR!
!std::is_ same<Data, std::remove_Cv_t<T>>::value>::Perform(data) :
npm BRR
npm BRR!
remove_ _cv
npm ERR! /var/1ib/jenkins/. cache/node-gyp/16. 13. 2/include/node/v8-internal. h:492:38: error: 'remove_ _cv_t’is not a member of 'std'
npm ERR! /var/lib/ jenkins/. cache/node-gyp/16. 13. 2/include/node/v8-interna1. h:492:38: note: suggested alternative:‘ remove_cv'
npm ERR
!std::is_same<Data, std::remove_cv_t<T>>::value>::Perform(data) ;
npm BRR
npm ERR!
remove_cv
npm ERR! /var/1ib/ jenkins/.cache/node-gyp/16. 13. 2/ include/node/v8-internal. h:492:50: error: template argument 2 is invalid
rpm RR!
!std::is_ same<Data, std::remove_cv_t<T>>::value>::Perform (data) ;
npm BRR!
npm BRR! /var/lib/jenkins/. cache/node-gyp/16. 13. 2/include/node/v8-internal. h:492:63: error: ‘::Perform’ has not been declared
npm ERR!
!std::is_ same<Data,std::remove_cv_t<T>>::value>::Perform(data) :
npm BRR!
npm BRR! /var/lib/ jenkins/.cache/node-gyp/16.13. 2/include/node/v8-internal. h:492:63: note: suggested alternative: herror '
npm ERR!
!std::is_ same<Data, std::remove_Cv_t<T>>::value>: :Perform(data) :
npm ERR!
npm ERR!
herror
npm BRR! make: *** [Release/obj. target/binding/src/binding.o] Error 1 # 此处为关键错误信息
npm BRR! gYP ERR! build error
npm BERR! gyp ERR! stack Brror:、 make failed with exit code: 2
npm ERR! gyp ERR! stack
at ChildProcess. onExit (/var/1ib/ jenkins/ jobs/ tfxing-official-dev/workspace/node_ modules/node-gyp/1ib/build. js:194:23)
npm BRR! gyp BRR! stack
npm ERR! gyp BRR! stack
at Process. ChildProcess.. _handle.onexit (node:internal/chi1d_ process:290:12) .
npm BRR! gyp ERR! System Linux 3. 10.0-327.36. 3. e17.x86_ _64
npm ERR! BYP ERR! command' /var/1ib/jenkins/tools/ jenkins. plugins. nodejs. tools. NodeJSInstallation/nodejs/bin/node”" /var/lib/ jenkins/ jobs/tfxing-official-dev/workspace/node. _modules/node-8yp/bin/node-gYP
npm ERR! gyp ERR! cwd /var/1ib/jenkins/ jobs/tfxing-official-dev/workspace/node_ modules/node-sass
npm ERR! 8yp BERR! node -v v16. 13.2
npm BRR! gyp BRR! node-gyp -v v7.1.2
npm ERR! gyp ERR! not ok
npm ERR! Build failed with error code: 1

遇事不决问Google:谷歌出奇迹!!!在这里:https://www.codenong.com/cs122036023/
找到一张nodenode-sass的匹配图:

出处: https://github.com/sass/node-sass

再通过项目中的packages.json文件找到node-sass的版本是5.0.0因此正确的nodejs版本是15,需要对nodejs进行降级。
降级之后仍然报错!!此时头顶飘过一万条草泥马、草泥马、草泥马、草泥马!!!

npm ER! Package pixman-1 was not found in the pkg-config search path.
npm ER! Perhaps you should add the directory containing pixman- 1.pc'
npm ERR! to the PKG_CONFIG_ PATH envir onment variable
npm ERR! No package'pixman-1’ found # 此为何方妖物呀!!!:( :(
npm ERR! gyP: Call to’ pkg-config pixman-1 --libs’ returned exit status 1 while in binding. gyp. while trying to load binding. gyPp
npm ERR! gyP ERR! configure error
npm ERR! gyP ERR! stack Error:、 gyP failed with exit code: 1

No package ‘pixman-1’ found ? 什么鬼。。。。

在StackOverflow上有人已经回答了:

https://stackoverflow.com/questions/64562563/how-can-i-ovecome-this-error-in-npm-install

跟随跳转:

https://github.com/Automattic/node-canvas

node-canvas的GitHub仓库中找到解决方案:

sudo yum install gcc-c++ cairo-devel pango-devel libjpeg-turbo-devel giflib-devel

最终编译成功:

gcc version 7.3. 120180303 (Red Hat 7.3. 1-5) (GCC)
+ npm config set python /usr/1ocal/ python3/bin/ python3
+ npm config set registry https:/fregistry. npm. taobao. org
+ npm install
npm WARN deprecated @hapi/topo@3. 1. 6: This version has been deprecated and is no longer supported or maintained
npm WARN deprecated @hapi/bourne@1.3. 2: This version has been deprecated and is no longer supported or maintained
npm WARN deprecated urix@0. 1.0: Please see https: 1{ github. com/ 1ydell/ur ix#deprecated
npm WARN deprecated har- -validator@5. 1.5: this library is no longer supported
npm WARN deprecated eslint- loader@2.2. 1: This loader has been deprecated. Please use eslint- -webpack- plugin
npm WARN deprecated resolve- url@0. 2.1: https: 11 github. com/ 1yde11/ resolve- -url#deprecated
npm WARN deprecated chokidar@2. 1.8: Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.
npm WARN deprecated chokidar@2. 1.8: Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.
npm WARN deprecated querystring@0. 2.0: The querystring API is considered Legacy. new code should use the URL SearchParams API instead.
npm WARN deprecated html-webpack- -plugin@3. 2.0: 3.x is no longer supported
npm WARN deprecated babel-eslint@10. 1.0: babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.
npm WARN deprecated @hapi/ address@2. 1.4: Moved to’npm install @sideway/ address'
npm WARN deprecated uuid@3. 4. 0: Please upgrade
to version 7 or higher.
01der versions may use Math. random() in certain circumstances
npm WARN deprecated request@2. 88. 2: request has been deprecated, see https: //github. com/ request/ request/issues/3142
npm WARN deprecated @hapi/hoek@8.5. 1: This version has been deprecated and is no longer supported or maint ained
npm WARN deprecated @hapi/joi@15. 1. 1: Switch to’npm install joi'
npm WARN deprecated svgo@1. 3.2: This SVGO version is no longer supported. Upgrade to v2. x. x.
npm WARN deprecated core- js@2. 6.12: core-js@<3.3 is no longer maintained and not recommended for usage due to the number of issues. Be
to the actual version of core- js.
added 1475 packages in 4m
87 packages are looking for funding
run、npm fund~ for details

哎呀!妈呀!!这下成功了!!!

总结

喜大普奔,总结下经验教训:

nodejs相关的项目编译,需要以来的东西大致有:GCC=5+Python3.6+ 、("sudo yum install gcc-c++ cairo-devel pango-devel libjpeg-turbo-devel giflib-devel" 如果项目没有node-canvas依赖应该可以跳过)。编译nodejs项目查看日志错误信息,从下往上更有助于发现问题的根源。就拿本次经历来说:根源问题还是编译node-sass的时候所依赖的

npm ERR! gyp info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ]
npm ERR! g++: error: unrecognized command line option ‘-std=gnu++14’

解决了这个报错后面nodejs与node-sass版本匹配度的问题才会浮出水面,到最后node-canvas的系统依赖库。将这些解决了编译才最终完成。

Jenkins-pipeline + gitlab + nodejs 自动发布vue项目相关推荐

  1. 【linux】【jenkins】自动化运维三 整合gitlab、docker发布vue项目

    由于工作需要,这里我先创建一个vue的工程. 1.首先安装好gitlab相关插件:GitLab.GitLab Hook.NodeJS 插件安装参考:https://www.cnblogs.com/jx ...

  2. 专题篇四:Linux企业级CICD持续集成交付发布(终极实战部署:gitlab++jenkins+web(tomcat)+webbook自动发布)

    4,企业级CI/CD 持续集成/交付/发布 实验一:github+jenkins+web(tomcat) 构建的时候 网络连接超时(正常现象) githud仓库地址1.安装对应的插件(jenkins) ...

  3. jenkins+kubernetes(k8s)发布Springboot项目

    jenkins+kubernetes(k8s)发布Java项目 准备工作 机器列表 镜像列表 创建一个java项目 创建jenkins镜像 Jenkins服务配置 启动jenkins 访问jenkin ...

  4. nginx 访问图片404_nginx发布vue 项目

    在本次使用nginx发布vue项目遇到 配置location 始终404 和 在项目子目录点击浏览器刷新出现404问题 使用nginx发布vue项目,为了方便测试就下载了一个nginx 放置自己目录下 ...

  5. svn添加提交备注限制和自动发布web项目

    1.添加提交备注: vim /home/svn/hqjj/hooks/pre-commit (没有这个文件就新建) #!/bin/sh REPOS="$1" TXN="$ ...

  6. Jenkins 自动部署VUE项目

    文章目录 CI/CD的总流程 配置 NodeJS 环境 安装插件 安装环境 新建任务 配置构建环境 编写构建脚本 项目配置 配置 Dockerfile 配置 nginx CI/CD的总流程 持续集成和 ...

  7. 解放双手 | Jenkins + gitlab + maven 自动打包部署项目

    前言 记录 Jenkins + gitlab + maven 自动打包部署后端项目详细过程! 需求背景 不会偷懒的程序员不是好码农,传统的项目部署,有时候采用本地手动打包,再通过ssh传到服务器部署运 ...

  8. jenkins gitlab php,jenkins(8): 实战jenkins+gitlab持续集成发布php项目(代码不需要编译)...

    一. jenkins 的配置 1.前提条件安装了GitLab Plugin (源码管理使用),GitLab Hook(gitlab webhook需要) Manage Jenkins--->Ma ...

  9. 使用Github Actions自动部署vue项目到nginx服务器

    解决的问题:妈妈再也不担心我deploy时候手滑了 1. 避免手动执行重复的前端发布流程,节约开发时间和耐心 2. 减少了使用Jenkins类似的工具来做这种简单的发布流程,减少了第三方系统(Jenk ...

最新文章

  1. 【一】TSP、VRP、VRP模型介绍
  2. [python]目录及文件操作
  3. python3 ThreadPoolExecutor 线程池大小设置
  4. leetcode算法题--两个字符串的最小ASCII删除和★
  5. 拼多多和国美合作,这可不仅仅是可转债的问题
  6. Spring MVC--自定义HttpMessageConverter接收JSON格式的数据
  7. Oracle86和92语法的连接,子查询,集合的操作
  8. BAT批处理代码快速打开注册表并定位到指定目录
  9. android真机调式问题之offline target
  10. leetcode103. 二叉树的锯齿形层次遍历
  11. (翻译)31天Windows Phone学习-1-项目模板
  12. JanusGraph: 可视化 Gephi 插件安装
  13. oracle arp绑定mac地址,使用ARP命令来绑定IP和MAC地址
  14. 【Java】计算从你的出生日期到现在相隔了多少天,多少时,XX分,XX秒。
  15. onvif协议_大华的录像机添加海康摄像头,使用了onvif协议,为啥也添加不进去?...
  16. TensorFlow tf.keras.callbacks.ModelCheckpoint
  17. nosql第二章课后习题
  18. Android应用文本字体设置
  19. 大学机器人类公选课(ROS机器人高效编程)申请表、大纲、部分教案、进度表等材料分享
  20. 到底灰度化是在干什么?

热门文章

  1. 【Python】利用百度地图API获取多方式行程时间
  2. 微软携手云南打造软件产业高地 签约建立微软IT学院
  3. oracle实现汉字按照拼音、笔画和部首排序
  4. 电子邮箱免费申请注册教程,公司企业邮箱怎么开通注册?
  5. 【转载】儒林外史人物——严贡生和严监生(一)
  6. 互联网冲击能源业 光伏或迎新融资模式
  7. 微信支付服务商以及特约商户相关总结
  8. gentoo linux 内核,Gentoo内核编译选项说明
  9. 杰奇是否生成html,杰奇cms章节页面报错功能实现,基本思路
  10. 接入交换机,汇聚交换机,核心交换机