Skip to content

Git CI/CD

作者:江月迟迟
发表于:2024-12-10
字数统计:836 字
预计阅读3分钟

什么是Pipeline

什么是Pipeline

GitLab Runner

花了两天,搞了Gitlab-Runner CI/CD实现自动化部署,可比Jenkins香太多啦!!!!_gitlab的cicd取代jenkens-CSDN博客

GitLab Runner全解析:深入了解构建、测试和部署的关键执行者-阿里云开发者社区 (aliyun.com)

Gitlab-Runner原理与实现_gitlab runner-CSDN博客

[好好学GitLab:GitLab Runner入门篇 | 好好学习的郝 (voidking.com)](https://www.voidking.com/dev-gitlab-runner-start/#:~:text=GitLab是老板,会去查看需求单(.gitlab-ci.yml),建立一张又一张有先后顺序的工单(CI Pipeline)。 GitLab Runner 是执行,CI Job 的工人,定期去询问老板(GitLab)现在有分配给自己的工作(CI Job)吗? 如果拿到工作,就开始执行,并在执行过程中将进度即时写在工单上。)

Docker

Docker - Docker Image及Image命令详解

Docker - Docker Image及Image命令详解

Docker - 这应该就是你想要的Docker架构分析

Docker - 这应该就是你想要的Docker架构分析-CSDN博客

vue-resize

Object元素

aria-hidden - 无障碍 | MDN (mozilla.org)

vue-resize深度解读 - 掘金 (juejin.cn)

Vue单元测试

Webpack热更原理揭秘 (qq.com)

URI

今天,彻底弄懂什么是URI-CSDN博客

什么是RFC?-腾讯云开发者社区-腾讯云 (tencent.com)

异常处理

js
//vue中使用
//在main.js文件中
window.addEventListener("unhandledrejection", function (e) {
throw e.reason
})
window.addEventListener("error",
function (e) {
console.log('捕获到异常', e)
// console.log(e.target);
let { message, filename, lineno, colno } = e
const data = {
message: message,
filename: filename,
lineno: lineno,
colno: colno,
// errorMessge: e.error.message,
// errorStack: e.error.stack
}
console.log(data);
upload(data)
},
true // 捕获阶段
)

Vue.config.errorHandler = function (err, vm, info) {
console.log('vue错误', err, vm, info);
}

function upload(data) {
const info = JSON.stringify(data)
new Image().src ='//www.yemaozi.online:5111/error'+ '?info=' + info
}

//上传.map文件
//vue.config.js文件中
productionSourceMap: true, // 控制webpack是否生成map文件
configureWebpack: {
plugins: [
new SourceMapUploader({url: "http://www.yemaozi.online:5111/error/upload"})
],
}

source-map-upload.js
const fs = require("fs");
const http = require("http");
const path = require("path");
class SourceMapUploader {
constructor(options) {
this.options = options;
}


apply(compiler) {
if (process.env.NODE_ENV == "production") {
// hooks,done表示在打包完成之后
compiler.hooks.done.tap("sourcemap-uploader", async (status) => {
// console.log(status.compilation.outputOptions.path);
// 读取目录下的map后缀的文件
let dir = path.join(status.compilation.outputOptions.path, "/js/"); // tatus.compilation.outputOptions就是打包的dist文件
let chunks = fs.readdirSync(dir);
console.log(chunks);
let map_file = chunks.filter((item) => {
return item.match(/\.js\.map$/) !== null;
});
// 上传sourcemap
while (map_file.length > 0) {
let file = map_file.shift();
await this.upload(this.options.url, path.join(dir, file));
}
});
}
}

//调用upload接口,上传文件
upload(url, file) {
return new Promise((resolve) => {
let req = http.request(`${url}?name=${path.basename(file)}`, {
method: "POST",
headers: {
"Content-Type": "application/octet-stream",
Connection: "keep-alive",
},
});

let fileStream = fs.createReadStream(file);
fileStream.pipe(req, { end: false });
fileStream.on("end", function() {
req.end();
resolve();
});
});
}
}
module.exports = SourceMapUploader;

//服务器端
//安装npm install source-map -S
//Sourcemap 本质上是一个信息文件,里面储存着代码转换前后的对应位置信息。

//接收.map文件
router.post('/upload', async function (req, res, next) {
const filename = req.query.name;
let dir = path.join(__dirname, "source-map");
//判断source文件夹是否存在
if (!fs.existsSync(dir)) {
fs.mkdirSync(dir);
}
let target = path.join(dir, filename);
const ws = fs.createWriteStream(target);
let str = ''
req.on('data', (d) => {
str += d
})
req.on('end', (d) => {
ws.write(str);
})
console.log('ok');
})

router.get('/', async function (req, res, next) {
let obj = JSON.parse(req.query.info)
let fileUrl = obj.filename.split("/").pop() + ".map"; // map文件路径
// 解析sourceMap
let consumer = await new sourceMap.SourceMapConsumer(
fs.readFileSync(path.join(__dirname, "source-map/" + fileUrl), "utf8")
);
// 解析原始报错数据
let result = consumer.originalPositionFor({
line: obj.lineno, // 压缩后的行号
column: obj.colno, // 压缩后的列号
});
console.log(result);
res.json(result)
});

你不知道的前端异常处理(万字长文,建议收藏) - 掘金 (juejin.cn)

浏览器事件循环

javascript - 一文看懂浏览器事件循环 - 脑洞前端 - SegmentFault 思否

IFARME

blog/iframe引入页面与主页面的viewport设置冲突问题探讨.md at master · yaojijiayou/blog (github.com)

ERP

erp管理系统-生产管理系统-仓库管理系统-采购管理系统 (jiandaoyun.com)

                    console.log(result[index + 1].items[0].link);
                } else {
                  // 如果不是目录,直接呈现以文档形式
                  result[index + 1].items && delete result[index + 1].items
                  result[index + 1].link = `/${entry}/${element}/${child}`
                  console.log(result[index + 1].link);

随便提交