目的
實(shí)現(xiàn)思路
(第一次接觸OSS和SemaphoreCI,第一反應(yīng)是一臉懵逼眷唉,予颤。。冬阳。蛤虐。。)先了解SemaphoreCI和阿里云OSS是什么吧肝陪!
======== 實(shí)現(xiàn)腳本(上傳文件到哪里驳庭,怎么上傳,如何控制上傳文件的數(shù)量大小,) ======== 本地如何運(yùn)行腳本 ======== CI上部署
實(shí)現(xiàn)路徑
利用OSS的官方文檔查看API并提取目標(biāo)API(如本地上傳文件API)實(shí)現(xiàn)腳本饲常。阿里云OSS中包含各種API并支持各種編程語(yǔ)言蹲堂,可根據(jù)需求選擇(本次我們使用的是nodejs)。具體代碼如下所示:
const OSS = require('ali-oss');
const fs = require('fs');
const child_process = require('child_process');
// 目標(biāo)文件的相對(duì)路徑
const remoteResourcePath = './dist';
// OSS配置
const client = new OSS({
region: 'oss-cn-shenzhen',
accessKeyId: process.env.ALIYUN_ACCESS_KEY_ID,
accessKeySecret: process.env.ALIYUN_ACCESS_KEY_SECRET,
bucket: 'xunlugaokao-school',
});
client.useBucket('xunlugaokao-school');
function adjustUploadFilesOrder(filesArray) {
// 上傳所有文件
...
}
function uploadStaticResource(filesArray){
const version = child_process.execSync("git describe --tag",{shell:true,encoding:"utf8"}).replace(/[\r\n]/g,"");
filesArray && filesArray.forEach(e => {
const stat = fs.lstatSync(`./dist/${e}`);
// e是文件還是文件夾
if(stat.isDirectory()) {
// 讀static中的文件并依次上傳
const files = fs.readdirSync(`./dist/${e}`);
files.forEach(item => {
// 文件加上版本號(hào)
const newName = item.split('.').splice(-1).shift() === 'html'? `${item}`:`${version}/${e}/${item}`;
client.put(newName,`${remoteResourcePath}/${e}/${item}`);
})
}else {
const newName = e.split('.').splice(-1).shift() === 'html'? `${e}`:`${version}/${e}`;
client.put(newName,`${remoteResourcePath}/${e}`);
}
})
client.put(`index_${version}.html`,`${remoteResourcePath}/index.html`);
}
function deploy() {
try {
const filesArray = fs.readdirSync(remoteResourcePath);
const files = adjustUploadFilesOrder(filesArray)
uploadStaticResource(files);
} catch (err) {
console.log (err);
}
}
deploy()
腳本實(shí)現(xiàn)后贝淤,在本地運(yùn)行驗(yàn)證腳本成功柒竞。。播聪。朽基。
package.json中配置scripts命令,npm run deploy即可運(yùn)行腳本离陶。
"deploy": "node deploy.js"
進(jìn)入semaphoreCI官網(wǎng)踩晶,semaphoreCI是一個(gè)可以幫助你自動(dòng)運(yùn)行設(shè)置的命令的“小機(jī)器人”,添加project后按照文檔指示添加你需要運(yùn)行的命令枕磁。
CI部署渡蜻,參考deploy your application實(shí)現(xiàn)運(yùn)行腳本文件
感想
最開(kāi)始的時(shí)候,是在是不知道怎么下手计济,完成后回頭看呢茸苇,...。沦寂。学密。不過(guò)如此。传藏。腻暮。。毯侦。
- 遇到問(wèn)題哭靖,首先應(yīng)該明確目的,明確后一步一步來(lái)就沒(méi)想象中的那么難侈离。
- 多讀官方文檔试幽,仔細(xì),認(rèn)真卦碾。