部署脚本 (deploy.js 自己命名)

const co = require('co')
const OSS = require('ali-oss')
const path = require('path')
const fs = require('fs')
// const refreshCache = require('./refreshCache')
module.exports = function (config) {
// get mode
const mode = process.argv[process.argv.length - 1] // 当前bucket
const currentBucket = config.bucket[mode]
// 根据环境获取bucket
config.ossConfig.bucket = currentBucket.name const client = new OSS(config.ossConfig)
const root = path.resolve(__dirname, `./${config.path}`)
const files = [] //取出所有文件夹下所有文件的路径
function readDirSync(p) {
const pa = fs.readdirSync(p)
pa.forEach((e) => {
const cur_path = `${p}/${e}`
const info = fs.statSync(cur_path)
if (info.isDirectory()) {
readDirSync(cur_path)
} else {
files.push(cur_path)
}
})
}
readDirSync(root)
//上传文件
co(function* () {
// co(function () {
const successFile = [] // 保存上传的成功的文件
// eslint-disable-next-line no-unused-vars
let indexFile = null
const projectRootPath = currentBucket.projectPath ? currentBucket.projectPath : ''
for (let i = 0; i < files.length; i++) {
const file = files[i]
//文件名取root后面的,添加项目文件夹,默认为空 if (file.replace(root, projectRootPath) == '/index.html') {
// indexFile = file.replace(root, projectRootPath)
indexFile = file
// console.log(file.replace(root, projectRootPath))
continue
}
const result = yield client.multipartUpload(file.replace(root, projectRootPath), file, {
progress: function (p) { //progress is generator
console.log(`正在上传 [${file.replace(root, '')}] 文件: ${parseInt(p*100)} %'`)
}
})
//上传成功后返回的message
// console.log(result)
successFile.push(result.name) // // 所有文件都上传成功后, 最后再上传index.html, 不然少一个文件,部署就容易出致命bug
if ((files.length - 1) === successFile.length) {
// console.log('最后再上传index')
const result = yield client.multipartUpload(indexFile.replace(root, projectRootPath), indexFile, {
progress: function (p) { //progress is generator
console.log(`正在上传 [${indexFile.replace(root, '')}] 文件: ${parseInt(p*100)} %'`)
}
})
//上传成功后返回的message
// console.log(result)
successFile.push(result.name)
}
}
// 刷新缓存
// if (currentBucket.refreshPath) {
// refreshCache({
// accessKeyId: config.ossConfig.accessKeyId,
// secretAccessKey: config.ossConfig.accessKeySecret,
// }, currentBucket.refreshPath)
// }
console.log('')
console.log('================================================================')
console.log(`总共 ${files.length} 个文件, 成功上传 ${successFile.length} 个文件`)
if (files.length === successFile.length) {
console.log('部署成功')
} else {
console.log('文件上传不完整,请再试一次')
}
console.log('================================================================')
}).catch(function (err) {
console.log(err)
console.log('')
console.log('=================================================================')
console.log('部署失败')
console.log('=================================================================')
})
}

oss 配置文件(deployConfit.js)

/**
* ===================================================================
* 这个文件不要上传到代码仓库
* ===================================================================
*/ module.exports.depConfig = {
region: 'XXXX',
accessKeyId: 'XXXXXXXXXX',
accessKeySecret: 'XXXXXXXXXXXXXXXXX',
bucket: 'XXXXXXXXXX',
testBucket: XXXXXXXXXXXXXXXX',
}

调用

const config = require('./deployConfit.js')
const deploy = require('./deploy') deploy({
path: '../dist', // 改为自己的静态资源目录
ossConfig: { // oss配置参数
region: config.depConfig.region,
accessKeyId: config.depConfig.accessKeyId,
accessKeySecret: config.depConfig.accessKeySecret,
},
bucket: {
pro: {
name: config.depConfig.bucket, // 桶名
// name: '', // 桶名
refreshPath: '', // 可选,deploy后刷新缓存,必需保证url正确
},
test: {
name: config.depConfig.testBucket, // 桶名
projectPath: '', // 可选,添加项目文件夹(需修改webpack的baseUrl,以保证资源文件路径正确),不填默认为空
},
}
})

在package.json中配命令

  "scripts": {
"serve": "vue-cli-service serve --open",
"build": "vue-cli-service build",
"deploy": "node ./deploy/index.js pro", // 正式线
"deploy:test": "node ./deploy/index.js test" // 测试线上的
} npm run deploy
npm run deploy:test

前端 OSS 自动化部署脚本的更多相关文章

  1. 设置ssh免密码登录脚本(hadoop自动化部署脚本一)

    设置ssh免密码登录脚本(hadoop自动化部署脚本一) 设置ssh免密码登录脚本(飞谷云大数据自动化部署脚本一) 1.#!/bin/sh2.#important note:this script i ...

  2. Jenkins持续集成-自动化部署脚本的实现

    要实现Jenkins端的持续集成,其实在CI服务配置端很容易,难点呢?就是如何实现自动化的部署.我的脚本设计就是为了解决以下难题: 难点一.如何使得自动化部署脚本更通用 我用的脚本,依赖依赖一个配置文 ...

  3. MySQL5.7多实例自动化部署脚本

    一.安装说明 ------------------------------------------------------ mysql5.7.10_onekey_install.sh自动化部署脚本支持 ...

  4. 《转载》Jenkins持续集成-自动化部署脚本的实现《python》

    本文转载自慕课网 读者须知:1.本手记本着记续接前面的两张手记内容整理2.本手记针对tomcat部署测试环境实现 最近工作比较繁忙,导致这章一直拖延,没有太抽出时间来总结.要实现Jenkins端的持续 ...

  5. 自动化部署脚本--linux执行sh脚本

    自动化部署脚本文件目录: 运行主程序:./install.sh #!/bin/bash SCRIPTPATH=$(cd "$(dirname "$0")"; p ...

  6. 前端 Jenkins 自动化部署

    这两天折腾了一下 Jenkins 持续集成,由于公司使用自己搭建的 svn 服务器来进行代码管理,因此这里 Jenkins 是针对 svn 服务器来进行的配置,Git 配置基本一致,后面也介绍了下针对 ...

  7. python+paramiko库+svn写的自动化部署脚本

    第一篇博文 直接开门见山的说了. 这是件什么事?:每次部署都是复制本地的文件粘贴到服务器端,因为路径复杂,所以费时且手工容易出漏洞. 一直在想有什么办法可以解决这种,因为以前在微软的一个牛人同事做过一 ...

  8. Mysql安装及自动化部署脚本方案

    一.简介 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库, 每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据. 我们也可以将数据存储在文件中,但是 ...

  9. Web系统自动化部署脚本

    Web开发的项目,除了在本地直接运行外,还可能经常需要在服务器上部署. 写了个自动化部署的脚本,仅供参考. 不少地方需要配置路径,个人建议使用绝对路径,不用依赖执行脚本时所在的路径. #!/bin/s ...

随机推荐

  1. 骨牌摆放方案数n*m(状压DP)

    题意:https://www.nitacm.com/problem_show.php?pid=1378 如题. 思路: 从第一行for到最后一行,枚举每一行的所有状态,进行转移,注意答案是dp[最后一 ...

  2. linux的安装和配置

    转载:https://www.cnblogs.com/hhaahh/p/10404093.html 1.VMware简介 此软件是一个虚拟的pc机软件,可以在现有操作系统中虚拟出一个新的硬件环境,以此 ...

  3. Neo4j WARNING: Max 1024 open files allowed, minimum of 40 000 recommended. See the Neo4j manual

    you can add a line in /etc/default/neo4j: NEO4J_ULIMIT_NOFILE=60000 to set the ulimit setting (60000 ...

  4. 小白学 Python 爬虫(25):爬取股票信息

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...

  5. Js中去除数组中重复元素的6种方法

    方法一: Array.prototype.method1 = function(){ var arr=[]; //定义一个临时数组 for(var i = 0; i < this.length; ...

  6. 【Git的基本操作九】ssh免密登录

    SSH免密登录 1. 进入用户家目录 cd ~ 2. 删除原有的 .ssh 目录 rm -r .ssh 3. 运行命令生成 .ssh 目录 ssh-keygen -t rsa -C github或gi ...

  7. 4 java 笔记

    1 javadoc工具默认只处理以public,protected修饰的类,接口,方法,成员变量,构造器和内部类之前的文档注释 2 文档注释以斜线后紧跟两个星号开始/**,以星号后紧跟一个斜线结束*/ ...

  8. 【Spring Cloud】 总结

    一.Spring Cloud简介 简单来说,Spring Cloud 就是致力于分布式系统.微服务等的一套在目前非常火热的框架.但它的本身也是一系列框架的有序集合(由多个模块组成). 相比较于Dubb ...

  9. 单点登录系统SSO实现

    前些天被问到单点登录了,而据我当时做的这个模块两年了,现在重新温习并记录下,方便以后快速回忆起来 一.什么是单点登录系统 SSO全称Single Sign On.SSO是用户只需要登录一次就可以访问所 ...

  10. 制作linux云主机镜像

    目录 制作linux云主机镜像 1.物理机环境准备 2.安装kvm虚拟机 3.操作虚拟机 4.在物理机上处理镜像 5.拷贝制作好的raw格式的镜像 6.发布镜像到云平台 制作linux云主机镜像 1. ...