JS - DangerJs运用

news2025/5/25 4:37:53

JS - DangerJs运用

  • 前言
  • 一. 前期准备
    • 1.1 创建私有 Token
    • 1.2 Git 设置对应的 Token 以及 Host 环境变量
    • 1.3 项目安装 dangerJs
  • 二. 测试

前言

在开源社区中,DangerJs可以拿来自动判断每个人提交的代码合并请求(github中叫Pull Request,简称PRgitlab中叫Merge Request,下文简称MR)是否符合规范,自动化一些费时费力的人工检查,从而保证代码质量,是项目管理的利器。

一. 前期准备

1.1 创建私有 Token

拥有自己的github账号,最好是一个共用的机器人账号。以github为例,我们创建自己的私有Token。地址。备注:如果是gitlab,就去gitlab上创建。

如图:
在这里插入图片描述
创建好后,记得备份生成的秘钥:只会生成一次。后续看不到了。
在这里插入图片描述

1.2 Git 设置对应的 Token 以及 Host 环境变量

Gitlab为例(内网):

  1. 记得将机器人账号加入到项目A中。
  2. 进入项目A中,点击左侧的Settings --> CI/CD
    在这里插入图片描述
  3. 选择Variables,添加环境变量。点击添加两个K-V
    在这里插入图片描述

如下:

  • DANGER_GITLAB_API_TOKEN:第一步生成的token值。
    在这里插入图片描述
  • DANGER_GITLAB_HOSTToken的一个私有服务器,填你内网的Git域名即可。
    在这里插入图片描述

1.3 项目安装 dangerJs

npm i danger --save-dev

在项目根目录下创建文件:dangerfile.ts

import { message, danger, fail } from 'danger';
const {
  git: { created_files: createdFiles, modified_files: modifiedFiles, deleted_files: deletedFiles },
} = danger;

const fileChanges = [ ...modifiedFiles, ...createdFiles, ...deletedFiles ];
message(`This MR contains ${fileChanges.length} files (${createdFiles.length} created, ${modifiedFiles.length} modified, ${deletedFiles.length} deleted)`);

然后我们可以在package.json中添加一个脚本命令:

{
	"scripts": {
		"danger": "npx danger ci --failOnErrors --verbose"
	}
}

最后我们在CICD上,配置下流水线,可以自定义跑一个脚本命令,仅当提交MR的时候触发执行。执行脚本npm run danger。它会自动去根目录下寻找dangerfile.js/ts文件(默认是根目录),然后执行它。

添加--failOnErrors参数的目的:

  1. 当我们自定义一些规则,发现代码不满足的时候 ,如果我们调用了fail函数,并且添加了--failOnErrors参数,那么CICD流程就会中断失败。

二. 测试

比如我写一个规则,禁止代码里出现console.log

import { message, danger, fail } from 'danger';
const {
  git: { created_files: createdFiles, modified_files: modifiedFiles, deleted_files: deletedFiles },
} = danger;

const fileChanges = [ ...modifiedFiles, ...createdFiles, ...deletedFiles ];
// 检测console.log
const checkConsole = async () => {
  const consoleLogRegex = /console\.log/g;

  // 获取本次提交的代码变化
  for (const file of fileChanges) {
    const diff : any = await danger.git.diffForFile(file);
    if (diff && (consoleLogRegex.test(diff.added) || consoleLogRegex.test(diff.modified))) {
      // 判断代码变化中是否包含 console.log
      fail('The code contains console.log, please delete it and submit it');
    }
  }
};

checkConsole();

然后我程序里面随便写一个console.log,提交merge的时候就会有如下评论:
在这里插入图片描述

对应的流水线就会强制失败:
在这里插入图片描述
好处:

  1. 我们可以通过DangerJs给每个MR添加对应的标签。如上图的web标签。
  2. 提交MR的时候,MR列表里面就可以观察到有人评论,也就是右上角在这里插入图片描述
  3. 如果提交了不符合规范的代码,流程就会强制中断,做到拦截。
  4. 如果配合Gitlabmerge_request_templates模板使用,就会更加合规合理。比如我们在模板里面写一写CheckList。比如开发人员提交MR的时候,是否自己review过代码?如果做过了,就将这个CheckList打钩。否则我们可以通过DangerJs,编写规则,让其不通过。
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/601830.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(学习日记)2023.04.24

写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈。 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录&a…

MKS SERVO4257D 闭环步进电机_系列1 产品简述

第1部分 产品概述 1.1 产品介绍 MKS SERVO 28D/35D/42D/57D 系列闭环步进电机是创客基地为满足市场需求而自主研发的一款产品。具备脉冲接口,RS485接口和CAN接口,内置高效FOC矢量算法,采用高精度编码器,通过位置反馈&#xff0c…

C语言—文件操作

文件操作 什么是文件文件的打开和关闭文件指针文件的打开和关闭fopenfclose 文件的顺序读写fputcfgetcfputsfgetsfprintffscanffwritefread经典面试题sscanfsprintf 文件的随机读写fseekftellrewind 文本文件和二进制文件文件读取结束的判定文件缓冲区 前言 在写完通讯录的程序…

Android 14新功能全面概述

Android 14有什么新功能:全面概述 Android 14带来了大量的新功能和更新,从前台服务和闹钟的改进到语法屈折和字体缩放,Android 14为每位开发者都提供了一些东西。我在下面列出了一些最重要的更改。让我们深入探讨一下这个最新版本的新功能。 …

Patcher:用于精确医学图像分割的混合专家patch Transformers

文章目录 Patcher: Patch Transformers with Mixture of Experts for Precise Medical Image Segmentation摘要本文方法patcher块Mixture of Experts Decoder 实验结果 Patcher: Patch Transformers with Mixture of Experts for Precise Medical Image Segmentation 摘要 提…

内存泄漏检测工具Valgrind:C++代码问题检测的利器

Valgrind:C代码问题检测的利器 一、引言(Introduction)1.1 Valgrind的定义与功能(What is Valgrind and its functions)1.2 Valgrind的重要性(The importance of Valgrind)1.3 Valgrind的应用场…

分享一个国内免费的ChatGPT网站,手机电脑通用,免费无限制,支持AI绘画

背景 ChatGPT作为一种基于人工智能技术的自然语言处理工具,近期的热度直接沸腾🌋。 作为一个AI爱好者,翻遍了各大基于ChatGPT的网站,终于找到一个免费!免登陆!手机电脑通用!国内可直接对话的C…

真实有用的工作英语 高阶版英文邮件写作

PS:美国老师建议在邮件里最好不要用,下划线,斜体,加粗等花里胡哨的东西。 To whom it may concern. 给可能关心这件事的人。To anyone who is interested in this matter. 给对这件事感兴趣的人。To the relevant person(s). 给相…

dom阶段实战内容

window定时器方法 ◼ 目前有两种方式可以实现:  setTimeout 允许我们将函数推迟到一段时间间隔之后再执行。  setInterval 允许我们重复运行一个函数,从一段时间间隔之后开始运行,之后以该时间间隔连续重复运行该函数。 ◼ 并且通常情况…

使用 Kotlin 实现 SOLID 原则编写清晰易维护的代码

使用 Kotlin 实现 SOLID 原则编写清晰易维护的代码 在编写软件时,很容易陷入特定编程语言,库和工具的细节中。然而,良好的软件设计不是与任何特定技术相关联的;相反,它基于一组经过多年和多个项目证明有效的原则。其中…

量子计算:纠错码 量子算法

文章目录 量子纠错码Shor 码CSS 码Steane 码一般性错误容错量子计算 量子算法量子 Fourier 变换Shor 算法求阶问题(整数分解)求周期问题(离散对数) Grover 算法 量子纠错码 对于量子态的纠错,与经典信息论中的纠错有着…

ATTCK v13版本战术介绍——防御规避(七)

一、引言 在前几期文章中我们介绍了ATT&CK中侦察、资源开发、初始访问、执行、持久化、提权战术理论知识及实战研究、部分防御规避战术,本期我们为大家介绍ATT&CK 14项战术中防御规避战术第37-42种子技术,后续会介绍其他技术,敬请关…

2000-2020全要素生产率OP法+LP法+OLS和固定效应法三种方法合集含原始数据和计算过程Stata代码

2000-2020全要素生产率OP法LP法OLS和固定效应法三种方法合集含原始数据和计算过程Stata代码 1、时间:OP法:2008-2020年、LP法2000-2020年、OLS和固定效应法2000-2020年 2、数据内容:包括原始数据、计算结果和stata do文档 3、方法说明&…

node版本管理(Windows)

node版本管理(Windows),使用 nvm 进行node版本管理 1、如果电脑安装有node,需要先卸载 2、安装 nvm 管理工具,nvm 官网地址:https://github.com/coreybutler/nvm-windows/releases 3、将下载下来的压缩包…

双向链表详解

目录 一,双向链表的概念及结构 二,双向链表的方法及其实现 2.1 双向链表 2.2 addFirst(int data) - 头插法 2.3 addLast(int data) - 尾插法 2.4 size() - 链表长度 2.5 display() - 打印链表内容 2.6 clear() - 删除链表 2.7 addIndex(int in…

TOOM舆情监控与舆情传播:塑造有益信息环境

随着互联网和社交媒体的快速发展,舆情传播成为了影响社会舆论和公众意见的重要因素。然而,不可避免地,虚假信息、谣言和负面舆情也随之而来,对公众和社会造成了负面影响。在这样的背景下,舆情监控作为一种强有力的工具…

一出社会就在外包划水5年,已经废了

要不是女朋友和我提分手,我估计现在还没醒悟 本科大专,17年通过校招进入某软件公司做测试,干了接近5年的功能。 今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在…

uboot的使用

目录 串口调试 1.uboot模式 自启动模式: 交互模式 2.uboot帮助命令 3.uboot环境变量 4.uboot常用环境变量 5.uboot网络传输命令 6.uboot存储器访问命令 7.uboot自启动环境变量 串口调试 1.串口连接开发板,通过 "设备管理器" 获取对…

JavaWeb概述

WEB服务器软件: 从Browser端发送数据到server端,我们称为请求,request 从Server端向浏览器端发送数据,我们称为相应,英语单词,response 关于Tomcat服务器的目录: bin:这个目录是Tomcat服务器的命令文件存放的目录&…

[SpringBoot]MyBatis Plus框架使用selectCount

目录 MyBatis Plus介绍 CRUD操作使用 添加依赖: 接口应该继承自BaseMapper 在继承自BaseMapper的泛型实体类上使用TableName注解指定数据表的名称 在类中与主键对应的属性上使用TableId注解指定主键的值如何处理 另外,原本应该做的配置不变,例如在…