一、原始的nodejs项目发布
1、scp、winscp上传文件到服务器 - 把代码拷到服务器即可
scp 命令:scp -r .dist root@116.62.229.124:/usr/local/nginx/html
2、git拉取分支
通过分支控制拉取代码拷贝到服务器即可
centOS 安装git:yum install -y git
二、gulp脚本发布项目
一个自动话构建工具,可以使用它在项目开发过程中自动执行常见任务
基于Nodejs构建的,利用Nodejs流的威力,可以快速构建项目并减少频繁的IO操作
通过配置gulp-ssh执行上传任务即可
1 /** 2 * gulpfile.js 3 * 定义任务 4 * 1、删除dist rm dist 5 * 2、上传dist upload 6 */ 7 const fs = require('fs') 8 const gulp = require('gulp') 9 const gulpSSH = require('gulp-ssh') 10 11 const filePath = '/usr/local/nginx/html/dist' 12 const command = `rm -rf ${filePath}` 13 14 const config = { 15 host: '116.62.229.124', 16 port: 22, 17 username: 'root', 18 // privateKey: fs.readFileSync('C:/Users/pf184/.ssh/id_rsa') 19 password: '#服务器密码#' 20 } 21 22 // eslint-disable-next-line new-cap 23 const gulpSsh = new gulpSSH({ 24 ignoreErrors: false, 25 sshConfig: config 26 }) 27 28 // 登录远程服务器,删除dist文件 29 gulp.task('del', (done) => { 30 console.log(command) 31 gulpSsh.shell([command]) 32 done() 33 }) 34 35 // 上传文件 36 // * 只能上传一级目录,不能长传子文件夹 37 // ** 文件夹下所有内容 38 gulp.task('upload', (done) => { 39 gulp.src('./dist/**') 40 .pipe(gulpSsh.dest(filePath)) // 传到服务器 41 done() 42 })
// 运行脚本 "build:dist": "npm run build:stage && npm run del && npm run upload"
1 // node 项目 2 gulpSsh.shell(['cd /root/test', 'cnpm install', 'pm2 delete all', 'pm2 start /root/test/app.js']) 3 4 // 运行命令 5 "node": "gulp node"
三、自动化构建gitlab、gitlab-runner、jenkins
0、准备
- 一个云服务器
- 一个GitLab仓库
1、gttlab-runner
首先仍是简单说一下什么是gitlab-runner,官网是这么描述的:git
GitLab Runner is the open source project that is used to run your jobs and send the results back to GitLab. It is used in conjunction with GitLab CI, the open-source continuous integration service included with GitLab that coordinates the jobs.docker
也就是说gitlab-runner是配合gitlab-ci进行使用的。
通常地,gitlab里面的每个工程都会定义一个属于这个工程的软件集成脚本,用来自动化地完成一些软件集成工做。
当这个工程的仓库代码发生变更时,好比有人push了代码或者分支合并,gitlab就会将这个变更通知gitlab-ci。这时gitlab-ci会找出与这个工程相关联的runner,并通知这些runner把代码更新到本地并执行预约义好的执行脚本。
GitLab-CI 就是一套配合gitLab使用的持续集成系统
使用GitLab-CI我们可以使用 GitLab-Runner
每个项目配置一个自动化的runner,当项目发生变化(比如push代码),当然这个变化行为是可定义的,
我们的GitLab-CI就会找到于这个项目相关的runner,通知runner把代码更新到本地,并且执行定义好的执行脚本(gitlab-ci.yml)
太难了,来来回回捣鼓好几遍,好像有点懂了,,虽然还没成功,,目前报错 bash: line 118: npm: command not found,记录下过程吧
参考文件:https://segmentfault.com/a/1190000023117085?utm_source=sf-related
1、编写CI/CD脚本,CI/CD编辑器,可选模版Docker,我的配置如下
1 # docker-build: 2 # Use the official docker image. 3 image: node:10 4 stages: 5 - install_deps 6 # services: 7 # - docker:dind 8 before_script: 9 - echo "before_script 开始构建" 10 after_script: 11 - echo "after_script 构建结束" 12 install_deps: 13 stage: install_deps 14 tags: 15 - master 16 only: 17 - master 18 script: 19 - cd /usr/local/nginx/html/front-vue 20 - users 21 - pwd 22 - ls -al 23 - git remote set-url origin git@gitlab.com:pfSlight/front-vue.git 24 - git pull origin master 25 - rm -rf ./dist 26 - rm -rf ./node_modules 27 - npm config set registry https://register.npm.taobao.prg 28 - npm install -g cnpm --registry=https://registry.npm.taobao.org 29 - cnpm install 30 - npm run build:stage
2、需要配置CI/CD Runner,设置 - CI/CD - Runner
配置前,长这样 | 配置后,就这样 | 过程是真的难,,, |
1、点击按钮,, 要安装的插件,配置的账号,都很清楚,照着做就可以了 2、查看运行状态 gitlab-runner status |
3、运行流水线 CI/CD - 流水线 - Run pipeline
失败,查看日志,,报错就是最上面说的 npm: command not found ,,然后参照上面连接的文章进行处理
1)切换到gitlab-runner用户,重新安装 nvm ,命令:curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash (git不稳,可能需要多次尝试)
2)配置环境变量,命令:source ~/.bashrc (有问题,参照前面的随笔)
3)安装node, 命令:nvm install 12.18.4
4)得,npm有了,别的错又来了,如下:,接着改脚本,改成https//
5)上结果,,完美,,,欸,就是个玩儿
7)这是后补的,因为我过了一段时间去操作的时候,练习着多建几个runner,没想到,怎么做都不好使,,
建了有4个runner,一直怀疑是操作有问题,浪费了两个下去
直到今天周末有时间,百度了很多,其实一开始就有搜到可能是因为git版本过低导致,但是不愿意相信,因为第一次建好的时间,多次操作都能成功,
实在不行,就试试吧,尝试去升级git版本,,参考这个文件 https://www.cnblogs.com/kevingrace/p/8252517.html ,,可以,,又见到了上面的succeeded。
哎,以后不能轴了,多角度嘛,干嘛不相信自己的配置。
8)npm run build报错 :building for production...Killed
按照他人的说法是,服务器内存不够用了,这样就给他配置一个单独的内存出来就解决了
sudo /bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024 sudo /sbin/mkswap /var/swap.1 sudo /sbin/swapon /var/swap.1 |
9)修改用户权限 https://www.cnblogs.com/suyufei/p/11941385.html
2、jenkins
开源CI/CD软件领导者,提供超过1000个插件来支持构建、部署、自动化、满足任何项目需要。
优点:简单安装、