jenkins/服务器/nginx/npm打包/git 踩坑日志

1,033 阅读5分钟

1.服务器

阿里云ssh无法登录其他服务器

  • 原因
    • 创建的ECS服务器未添加安全组策略
  • 方案
    • 在管理页面添加自己定义的策略即可

阿里云新开的服务器不能修改密码

  • 原因
    • 必须等待超过3分钟后才可以设置
  • 方案

无法使用sftp连接,但是可以ssh

  • 原因
    • /etc/ssh/sshd_config 文件被修改了, 其中被设置成Subsystem sftp /usr/libexec/openssh/sftp-server
  • 方案
    • 调整Subsystem sftp /usr/libexec/openssh/sftp-server 为系统自带 Subsystem sftp internal-sftp

总是很快就断开连接

  • 原因
    • linux的配置文件设置超时太小
  • 方案
    • 修改 sshd_config 和 /etc/profile 两个配置文件

vim /etc/ssh/sshd_config
打开下面两个开关
ClientAliveInterval 30
ClientAliveCountMax 3

vi /etc/profile

export TMOUT=86400 #设置一个大值

2.jenkins

使用Jenkins发布代码失败,,本地打包发布可以

  • 原因

  • 方案
    • Jenkins将cnpm改为yarn

使用Jenkins发布代码,部分样式无效,本地打包发布可以

  • 原因
    • 替换了node-sass,但是样式里面的/deep/修饰没有对应改,导致无效。本地可以是因为我本地代码有node-sass的缓存
  • 方案
    • 把老的 webpack版本改成 vue-cli

jenkins打包异常,构建错误

  • 原因
    • 最新提交的代码 install后的库有问题 ,感觉是库太新。
  • 方案
    • 需要利用之前开发人员本地的环境代码 打包才能生成正常的库。然后把node_modules 复制到 jenkins正式 里面。再执行build

gitlab自动化构建,提交yml时候总是提示 Checking pipeline status

  • 原因
    • 使用了变量 访问 git分支
  • 方案
    • 把变量 $GIT_BRANCH 改为常量字符

提示找不到 自定义cdn库

提示找不到 ims-cdn库,Error: [my-cdn@^3.0.0] Can't find package ims-cdn@^3.0.0

  • 原因
    • cdn改成了内网的私有源, 使用cnpm install ,cnpm 需要单独设置 registry ,不能用npm的,要单独设置cnpm的
  • 方案

jenkins打包使用 pnpm报错

提示ERR_PNPM_PEER_DEP_ISSUES  Unmet peer dependencies

  • 原因
    • 在pnpm严格模式下,必须所有包都是对等依赖
  • 方案
    • 执行 pnpm config set strict-peer-dependencies=false 忽略严格模式

jenkins打包提示错误

These dependencies were not found:
* core-js/modules/es.array.push.js in ./src/utils/index.js,.....
  • 原因
    • 更换node16之后,pnpm 执行打包后,错误
  • 方案
    • 在打包前,先删除执行的pnpm生成文件 rm -rf package-lock.json prod.tar.gz pnpm-lock.yaml node_modules

jenkins打包提示错误2

Error: Node Sass does not yet support your current environment: Linux 64-bit with Unsupported runtime (93)
https://github.com/sass/node-sass/releases/tag/v4.14.1
    at module.exports (/home/jenkins/.jenkins/workspace/xxxxxxx/node_modules/_node-sass@4.14.1@node-sass/lib/binding.js:13:13)
  • 原因
    • 更换node16之后,pnpm 执行打包后,由于node_sass和node版本是强相关,所以要么修改项目里的sass版本,要么回退node到指定版本
  • 方案
    • 实际测试 把node降为 14版本,依然node-sass版本问题 ,最终还是使用node12 + cnpm打包。

pnpm打包报错

ERROR: This version of pnpm requires at least Node.js v14.6

  • 原因
    • pnpm 最低要求版本是14.6
  • 方案
    • 升级node到16的版本,但是要注意 如node-sass使用老版本的项目可能不支持

使用最新pnpm 和源打包jenkis失败

  • 原因
    • 打包的时候不能使用pnpm,cnpm yarn ,因为会根据最新的情况生产lock 或 yml 文件,但是最早期生成的package-lock.json 才是最稳定。所以只能使用npm install 和打包 因为会使用
  • 方案
    • 一定要保留最早的package-lock.json, 并且使用npm打包

jenkins升级openssh 9.3sp无效

jenkins在系统设置页面,无法连接已经升级openssh 9.3sp的服务器

  • 原因
    • 不支持高版本,建议降级
  • 方案
# 通过移除 /usr/bin/和 /usr/sbin 两个文件夹下带ssh的程序,并且 重新执行yum 安装原有系统支持的openssh版本 一般是7.4
yum  -y  install  openssh openssh-server openssh-clients
# 重启sshd服务
systemctl restart sshd

3.nginx

nginx新配置的项目无法访问

location /mes {
    alias  html/pc/mes/prod;
    try_files $uri $uri/ /mes/index.html;
}
location /mes_leader {
    alias  html/pc/mes_leader/prod;
    try_files $uri $uri/ /mes_leader/index.html;
} 

pc 新增的mes_leader 项目路径,访问总是重定向到mes路径下。

  • 原因
    • nginx的配置顺序问题,mes 配置在了mes_leader 的前面,导致总是优先匹配了 /mes 路径
  • 方案
    • 调整顺序,把mes 放到mes_leader 的下面

nginx新配置的项目无法访问2

配置了路径监听,但是一直访问不到,提示404

location /hioshop {
            root   /usr/share/nginx/html/hioshop;
            index  index.html index.htm;
}
  • 原因
    • 只有根目录才能用 root 字段,其他的要用 alias 字段配置
  • 方案
location /hioshop {
      alias   /usr/share/nginx/html/hioshop;
       index  index.html index.htm;
}

cur命令无法获取第二个参数

使用curl 的$args无法获取第二个参数 curl 171.35.40.133:8304?a=11&b=222

  • 原因
    • 当多个参数的时候 只能识别第一个参数
  • 方案
    1. 必须通过引号 包裹 curl '171.35.40.133:8304?a=11&b=222'
    2. 或者用浏览器访问

nginx部署项目,在jenkins打包运行后,项目不能访问,提示无法访问

部署命令如下

cd /usr/local/nginx/html/pc/admin/
rm -rf $folderName
tar -zxvf dev.tar.gz
mv dist $folderName
  • 原因
    • 执行 tar -zxvf dev.tar.gz 解压文件夹后,文件权限默认过低
  • 方案
    • 添加文件夹权限即可,在命令的最后面执行
    • chmod -R 777 $folderName

测试环境 jenkis打包失败

  • 原因
    • jenkis服务端配置 远程服务器没有配置 根路径 /
  • 方案
    • 在配置加上 / 设置

Jenkins 发布只能传输文件到服务器,无法启动

  • 原因
    • 不知
  • 方案
    • 手动启动项目:登录堡垒机,使用网页shell模式,进入项目根目录,执行命令:
    1. npm run stop-prod
    2. npm run start-prod

从首页进入子项目,提示js加载异常

  • 原因
    • nginx配置 预正式 里面 多了 参数 $args,

location /mes_leader {
    alias  html/mobile/mes_leader/gray;
    try_files $uri $uri/ /mes_leader/index.html$args;
}

新代码在url尾部添加了?0679458697404145 随机码,导致新拼接的url无法正常识别,重定向到 /index模块项目

  • 方案
    • 删除$args; 参数

发布项目后,总是提示资源加载不到

项目所有测试和正式域名的项目,正式环境下 发布项目后,总是提示资源加载不到,刷新后才能获取最新。

  • 原因
    • nginx的全局配置 add_header Cache-Control no-cache; 只有在配置ip+端口才能生效,配置域名不能生效。
    • 所以加载的index.html 还是老的 对应的js和css 就会找不到。开发环境没这个问题主要就是用的都是ip。
    • 正式test.mobile可以是因为转发了开发的ip,开发的ip已经生效了。
  • 方案
    • 在对应的server区域单独配置 即可 add_header Cache-Control no-cache;
    • 部分需要直接配置到 localtion区域才能生效

nginx更新缓存策略也不生效

nginx更新了最新的缓存策略,但是前端一直不生效

  • 原因
    • 项目启动了servicework ,导致每次访问的都是之前缓存的信息,刷新无效,需要彻底清缓存才可以
  • 方案
    1. 需要谷歌浏览器 开发者工具- 应用页签->cacha->cache storage 清空即可
    2. 对应的项目main.js 直接删除
    3. import './registerServiceWorker' 的引入

配置http 转发接口的时候,提示400 request header or cookie too large

  • 原因
    • 多配置了 http2 和
    add_header Strict-Transport-Security "max-age=31536000";
    ssl_ciphers TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-256-GCM-SHA384:TLS13-AES-128-GCM-SHA256:EECDH+CHACHA20:EECDH+AESGCM:EECDH+AES;
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_verify_depth 10;
    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;
    resolver 8.8.8.8 8.8.4.4 216.146.35.35 216.146.36.36 valid=60s; #添加resolver解析OSCP响应服务器的主机名,valid表示缓存。
    resolver_timeout 2s; # resolver_timeout表示网络超时时间
    
  • 方案
    • 移除多余的配置

预正式环境,把nginx stop 后,重启后端口一直访问转圈

  • 原因
    • nginx启动的时候 需要先加载fastds模块,因为有一个服务没有启动,导致
  • 方案
    • 通过nginx 的error.log日志 分析得出服务一直在启动中,

把fastds启动即可

sudo service fdfs_trackerd start # 启动fdfs_trackerd服务,停止用stop
service fdfs_storaged start  # 启动fdfs_storaged服务,停止用stop

调用接口提示跨域问题

提示The 'Access-Control-Allow-Origin' header contains multiple values'*, *', but only one is allowed.

  • 原因
    • 后端打开了跨域,前端nginx也打开了跨域
  • 方案
    • nginx要去除重复的跨域全局设置
# add_header Access-Control-Allow-Origin *;

上传大文件提示 413 (too large)

  • 原因
    • nginx默认上传大小限制1m
  • 方案
    • 新增配置头
    • client_max_body_size 100m;

nginx 提示 unknown directive "gzip_static" in xxx

  • 原因
    • 没有安装http_gzip_static_module 模块
  • 方案
    • 重新编译构建nginx
        ./configure --prefix=/usr/local/nginx --with-http_gzip_static_module
    

nginx部署日志切割,使用cron 执行logrotate定时任务没有生效

  • 原因
    • logratate需要$Path的全局环境变量,需要提前引入
  • 方案
  1. 如果是直接nginx部署 加入 . /etc/profile;
    • . /etc/profile;/usr/local/nginx/logs/tack.sh
  2. 如果是docker部署 则需要在Dockerfile 里面把环境变量导出 ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

日志切割修改系统时间不生效

nginx部署日志切割,使用修改系统时间第一次生效,后面没有生效,如计划是晚上0点执行,提前设置成 23:59:50, 等待10秒执行。

  • 原因
    • linux调度 一般在一分钟以上
  • 方案
    • 需要提前1分钟以上调试才生效,提前设置成 23:59:00, 等待1分钟执行

4. git

提交代码总是提示失败

eslint . xxxxxx 
husky pre-commit hook exited with code 1 (error)
  • 原因
    • 项目使用了eslint ,必须满足指定的格式化才可以
  • 方案
    • 在 package.json 找到 formatter 格式化命令,提交前执行
    • npm run formatter

gitlab版本升级

提示

GitLab version mismatch:
Your current GitLab version (15.11.3) differs from the GitLab version in the backup!
Please switch to the following version and try again:
version: 11.2.3
  • 原因
    • gitlab 必须同版本升级 或小版本升级,不能夸大版本
  • 方案
    • 要从11到15 必须经过 15次 小版本升级 ,建议使用docker 升级版本

push失败

push 提示无法 fatal: unable to access 'github.com/xxxxx.git/': Failed to connect to github.com port 443: Timed out

  • 原因
    • 可能是gitbub之前设置过代理,取消git的proxy设置即可
  • 方案
    •   git config --global http.proxy
        git config --global https.proxy
      

commit失败

在git 直接提交git commit -am 'xxxx' fatal: paths 'xxxxx...' with -a does not make sense

  • 原因
    • git commit -am “注释(提交)说明” 需要使用双引号
  • 方案
    • 单引号 改 双引号

访问git 超时

fatal: unable to access 'github.com/mjsong07/vu…': OpenSSL SSL_read: Connection was reset, errno 10054

  • 原因
    • 中国国外网站- 连接限制问题
  • 方案
    • 使用fastgithub 来自动切换dns实现实时访问

项目构建打包

Parsing error: Unexpected token

  • 原因
    • Parsing error 是eslint解析错误
  • 方案
    • 安装babel-eslint插件,配置eslint:"parser": "babel-eslint"

无法注入环境变量到运行时环境

  • 原因
    • vue-cli的库实现了VUE_APP_前缀的参数自动注入环境变量,其他变量名需要自己实现
  • 方案
//打包配置项添加对应数据即可
    configureWebpack:{
    plugins:[
    new webpack.DefinePlugin({
        'process.env.RUN_TYPE': JSON.stringify(RUN_TYPE),
        'process.env.ROOT_PATH':JSON.stringify(rootPath)
    })
    ]
},

使用node-sass的项目容易安装失败

  • 原因
    • node-sass 国内安装不上去/官方放弃维护
  • 方案
    • 改用sass即可

使用es6兼容插件babel第三方依赖库时,cnpm打包babel第三方库无效

  • 原因

  • 方案
    • 使用yarn打包

vite创建的项目启动失败

vite创建的项目,在执行node命令都会提示ReferenceError: module is not defined in ES module scope This file is being treated as an ES module because it has a '.js' file extension

  • 原因
    • package.jason 中定义了 "type": "module",
  • 方案
    • 删除 "type": "module", 即可

xxxxxxx

执行jest 提示Cannot find module './Button.vue' or its corresponding type declarations

  • 原因
    • ts项目需要声明shims-vue.d.ts,才能识别.vue文件
  • 方案

在src下新建文件 D:\my_project\vite-project2\src\shims-vue.d.ts

declare module '*.vue' {
    import type { DefineComponent } from 'vue'
    const component: DefineComponent<{}, {}, any>
    export default component
  }

node.js 卸载提示:Windows10 安装软件时提示“ the error code is 2503/2502”错误

  • 原因
    • C:\Windows\temp 权限限制
  • 方案
    • C:\Windows\temp 设置当前用户为完全访问权限

nodejs报错:npm WARN config global --global,xx

nodejs报错:npm WARN config global --global, --local are deprecated. Use `--location解决

  • 原因
    • 最新版本已经废弃 --global , -g 的写法
  • 方案
    • 找到nodejs安装地址,把文件npm和npm.cmd 里面的将prefix -g替换为prefix --location=global

vscode命令行无法访问和执行 全局的pnpm

  • 原因
    • 当前用户的权限不够,导致访问不了部分环境变量
  • 方案
    • 需要在打开的时候,使用管理员身份打开vscode

nvm 执行命令 nvm -v 报错

提示 This is not the package you are looking for: please go to nvm.sh

  • 原因
    • 使用 npm -g i nvm 安装无效
  • 方案
直接下载安装包  https://github.com/nvm-sh/nvm/archive/refs/tags/v0.38.0.tar.gz
//进入服务器 根目录
cd ../
//解压文件 到 root/.nvm
tar -zxvf nvm-0.38.0.tar.gz --strip-components 1  -C /root/.nvm

配置全局信息
vi ~/.bashrc

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

source ~/.bashrc

vue-dev-tool插件配置无效果

配置完vue-dev-tool插件 后,提示Vue.js is detected on this page. Devtools inspection is not available because it's in production mode or explicitly disabled by the author. 并且底部开发工具vue页签不显示

  • 原因
    • 当前页面必须满足下面3个条件
      1. 页面必须是vue的项目
      2. 当前项目打包方式不能是 production 正式模式
      3. vue的库不能使用 vue.min.js等压缩过的库
  • 方案
    1. 访问vue的项目,
    2. 打包时候使用开发模式
    3. cdn只使用 vue.js