腾讯Coding平台学习笔记二:自定义团队插件的使用方法

目录

  • 一、前言
  • 二、系统环境
  • 三、工作目标
  • 四、流水线设置
  • 五、开发工具
    • 5.1 教程地址
    • 5.2 开发工具程序结构
    • 5.3 qciplugin.yml文件
    • 5.4 main.py文件
  • 六、插件的安装
    • 6.1 打包成zip
    • 6.2 上传zip包
    • 6.3 构建新插件
    • 6.4 质量门禁
  • 7、流水线设置
    • 7.1 添加质量管理阶段节点
    • 7.2 添加其它动作
  • 八、流水线运行效果
    • 8.1 质量门禁信息面板
    • 8.2 用户workspace
    • 8.3 查看通用报告
    • 8.4 result.json的生成路径问题

一、前言

本文主要内容是在腾讯Coding平台内使用自定义团队插件方法验证用户自己搭建代码扫描工具的可行性,作为Coding平台内置扫描能力的补充。该课题的起因是Coding平台的C#语言代码扫描能力较弱。因为目前没有找到合适的c#扫描工具,暂时用阿里的p3c做一下验证。

二、系统环境

操作系统:Windows10
Coding:高级版
测试项目为:maven项目
代码扫描插件:ali-p3c(下载地址)
开发环境:python3.7

三、工作目标

  1. 在Coding平台接入第三方代码扫描插件
  2. 在CI流水线部署该工具
  3. 生成可用的测试结果报告

四、流水线设置

在这里插入图片描述

五、开发工具

5.1 教程地址

Coding教程地址:https://coding.net/help/docs/ci/plugins/customize/overview.html

示例插件:https://e.coding.net/coding-public/cci/ci-plugin-demo.git

5.2 开发工具程序结构

  • my-plugin-project // 您的项目目录
    • my-script.xx // 构建插件执行脚本或入口文件,支持任意语言组织(需执行环境具备,如需特殊环境可使用容器)
    • qciplugin.yml // 构建插件声明文件,定义您的构建插件名称、版本、参数等信息

这里的my-script.xx文件就是你自己的入口文件,比如python你可以写成run.py

5.3 qciplugin.yml文件

插件文件需读取声明文件 qciplugin.yml,这个文件特别重要

  1. version版本号不能空必须填写。
  2. id不能重名,而且如果你之前导入过又删除了,这个名字也不能再用了。
  3. name是以后在coding平台里看到的名字,请按便于使用的原则命名。
  4. metrics是腾讯指导老师帮忙写的格式,直接套用。
# 插件版本, 用于定义插件包的版本, 做版本管理使用
version: '2.0'

# 插件ID
id: java_quality_p3c_rule_test8

# 插件中文名称
name: Java阿里开发规范插件

# 插件描述
description: Java阿里开发规范插件

# 插件分类
category: test

# 声明插件使用的参数
variables:
  []

# 执行入口配置, 声明如何运行插件脚本
entry:


  # 插件启动入口
  start: $QCI_PLUGIN_EXECUTABLE $QCI_PLUGIN_RUNTIME/code_check_0223/main.py

  # 插件状态文件
  status: $QCI_PLUGIN_RUNTIME/status.json


  metrics:                           # 声明将会上报的元数据
    - key: 'total_warn'            # 元数据 key 值
      label: '警告数量'                      # 元数据 label 值, 必填,需有可读性
      desc: ''                       # 元数据描述信息, 非必填
      value_type: NUMBER             # 元数据的数据类型,必填,质量门禁暂只支持 NUMBER
      group: "当前分支问题量"            # 指标分组,非必填
      indicator:
        available_op: 'LT,LE,EQ,GE,GT'             # 指标支持的操作符,必填,可选操作LT,LE,EQ,GE,GT,多个操作以英文逗号分隔
        default_op: 'LE'               # 指标默认操作符, 非必填
        default_threshold: 50      # 指标默认阈值,非必填
    - key: 'total_error'            # 元数据 key 值
      label: '错误数量'                      # 元数据 label 值, 必填,需有可读性
      desc: ''                       # 元数据描述信息, 非必填
      value_type: NUMBER             # 元数据的数据类型,必填,质量门禁暂只支持 NUMBER
      group: "当前分支问题量"            # 指标分组,非必填
      indicator:
        available_op: 'LT,LE,EQ,GE,GT'             # 指标支持的操作符,必填,可选操作LT,LE,EQ,GE,GT,多个操作以英文逗号分隔
        default_op: 'LE'               # 指标默认操作符, 非必填
        default_threshold: 10      # 指标默认阈值,非必填
    - key: 'count_warn'            # 元数据 key 值
      label: '提示'                      # 元数据 label 值, 必填,需有可读性
      desc: ''                       # 元数据描述信息, 非必填
      value_type: NUMBER             # 元数据的数据类型,必填,质量门禁暂只支持 NUMBER
      group: "本次扫描问题量"            # 指标分组,非必填
      indicator:
        available_op: 'LT,LE,EQ,GE,GT'             # 指标支持的操作符,必填,可选操作LT,LE,EQ,GE,GT,多个操作以英文逗号分隔
        default_op: 'LE'               # 指标默认操作符, 非必填
        default_threshold: 40      # 指标默认阈值,非必填
    - key: 'count_error'            # 元数据 key 值
      label: '致命错误'                      # 元数据 label 值, 必填,需有可读性
      desc: ''                       # 元数据描述信息, 非必填
      value_type: NUMBER             # 元数据的数据类型,必填,质量门禁暂只支持 NUMBER
      group: "本次扫描问题量"            # 指标分组,非必填
      indicator:
        available_op: 'LT,LE,EQ,GE,GT'             # 指标支持的操作符,必填,可选操作LT,LE,EQ,GE,GT,多个操作以英文逗号分隔
        default_op: 'LE'               # 指标默认操作符, 非必填
        default_threshold: 3      # 指标默认阈值,非必填

5.4 main.py文件

主程序入口文件,该文件在qciplugin.yml文件里有过声明,启动的时候就会来这里找入口开始运行
test_c.sh就是程序执行脚本,扫描结果收集到result对象里。


# 规则1: 对文件就行判断是否 符合阿里p3c - 缺少包含@author的注释信息
print("当前执行的目录是:",file_path)
scan_files_result = os.popen("cd {} && cd code_check_0223/pmd_p3c_resource && sh test_c.sh {}".format(path, file_path)).readlines()
print("当前的结果是:",scan_files_result)

# 收集规则1扫描结果:
temp_author_data_list = check_java_obj.class_must_have_author_rule(listvar=scan_files_result, file_path=file_path)
author_data_list += temp_author_data_list

# .... ... ...
# 规则n, 其他的规则

result = [
    # 2, 获取符合阿里p3c - 缺少包含@author的注释信息 处理结果
    *author_data_list
]
print("当前执行阿里p3c result.json中的值:", result)

        
# 备份详细的扫描结构
 with open(os.path.join(path, 'result.json'), "w") as fp:
     json.dump(result, fp, indent=2, ensure_ascii=False)

六、插件的安装

6.1 打包成zip

在这里插入图片描述

6.2 上传zip包

在这里插入图片描述

6.3 构建新插件

在这里插入图片描述

6.4 质量门禁

在质量门禁里添加刚才上传的插件,管控流水线必须要设置,不然后面看不到质量门禁输出信息。
在这里插入图片描述

7、流水线设置

7.1 添加质量管理阶段节点

在这里插入图片描述

7.2 添加其它动作

添加shell脚本只是为了查看一下路径和文件是否存在(非必须)。
添加收集通用报告比较有必要,因为如果不收集报告的话检查结果只显示在日志中,不便使用。
在这里插入图片描述

八、流水线运行效果

8.1 质量门禁信息面板

在这里插入图片描述

8.2 用户workspace

result.json放在固定目录下便于形成通用报告
在这里插入图片描述

8.3 查看通用报告

在这里插入图片描述
在这里插入图片描述

8.4 result.json的生成路径问题

result.json默认是根据main.py里面的环境变量"QCI_PLUGIN_RUNTIME"生成路径,生成的路径是在tmp下的一个随机路径(机制不明),我们每次生成的时候将该文件copy一份到固定目录,这样就便于获取并生成通用报告了。
在这里插入图片描述

在python里添加下面这段代码,将result复制到workspace路径。

# 复制详细扫描结果作为通用报告
src_dir = path + '/result.json'
dst_dir = '/root/workspace/'
print("这里是result文件地址:"+src_dir)
shutil.copy(src_dir, dst_dir + 'result.json')          # 复制文件
print ("copy %s -> %s"%(src_dir, dst_dir + 'result.json'))

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

cookie和session的原理以及在Servlet中的应用

文章目录简介cookiecookie的实质及实现原理cookie在Servlet的应用sessionsession的实质及实现原理session在Servlet中的应用HttpServletRequest,Session,ServletContext简介 cookie保存在客户端,session保存在服务器端。二者均用于描述会话的…

【第十一届“泰迪杯”数据挖掘挑战赛】B题产品订单的数据分析与需求预测“解题思路“”以及“代码分享”

【第十一届泰迪杯B题产品订单的数据分析与需求预测产品订单的数据分析与需求预测 】第一大问代码分享(后续更新LSTMinformer多元预测多变量模型) PS: 代码全写有注释,通俗易懂,包看懂!!!&…

RK3568平台开发系列讲解(驱动基础篇)IO 模型的分类

🚀返回专栏总目录 文章目录 一、阻塞 IO二、非阻塞 IO三、IO 多路复用四、信号驱动五、异步 IO沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将针对IO模型进行分类。 假设有这样一个场景,从磁盘中循环读取 100M 的数据并处理,磁盘读取 100M 需要花费 20 秒的…

Transformer在计算机视觉中的应用-VIT、TNT模型

上期介绍了Transformer的结构、特点和作用等方面的知识,回头看下来这一模型并不难,依旧是传统机器翻译模型中常见的seq2seq网络,里面加入了注意力机制,QKV矩阵的运算使得计算并行。 当然,最大的重点不是矩阵运算&…

【数据结构】树的概念

Halo,这里是Ppeua。平时主要更新C语言,C,数据结构算法......感兴趣就关注我吧!你定不会失望。 🌈个人主页:主页链接 🌈算法专栏:专栏链接 我会一直往里填充内容哒! &…

网络基础认识

目录 一、计算机网络背景 1.1 网络发展 1.2 "协议"由来 二、网络协议初识 2.1 协议分层 2.2 OSI七层模型 2.3 TCP/IP五层模型 三、网络协议栈 四、数据包封装与分用 五、网络传输基本流程 5.1 同局域网的两台主机通信 5.2 跨网络的两台主机通信 六、网络…

MySQL高级第六篇:数据库性能分析与优化

MySQL高级第六篇:数据库性能分析与优化一、数据库服务器优化步骤概述二、慢查询日志:记录执行慢的SQL1. 开启慢查询日志2. 设置long_query_time3. 查看慢查询数与慢查询SQL三、分析查询语句:EXPLAIN1. 概述2.EXPLAIN各列的含义一、数据库服务…

【leetCode189】轮转数组

作者:日出等日落 专栏:leetCode刷题训练 要成功不需要什么特别的才能,只要把你能做的小事做得好就行了。 ——维龙 目录 题目: 第一种方法: 第二种方法: 第三种方法: 今…

UDP、TCP三次握手和四次挥手

-----UDP与TCP----- 相同点 tcp、udp都是工作在传输层进行数据传输(二进制标识文本或者视频或者图片) 不同点 tcp基于连接,保障传输的安全udp基于非连接,保障传输的速度 -----TCP的三次握手----- 过程 为什么不是两次握手&a…

PMP考试备考:你不知道的8个常考概念

PMP考试即将到来,为便于广大考生在考试前查漏补缺,给大家准备了PMP考试中常考的八个重要概念,包括敏感性分析、德尔菲技术等,快来看看吧。 01敏感性分析 敏感性分析有助于确定哪些风险对项目具有最大的潜在影响。它有助于理解项…

UWB芯片DW3000之双边双向测距法

目录 双边双向测距 使用四个信息 使用三个信息 双边双向测距 使用四个信息 双边双向测距(DS-TWR)是基本的单边双向测距的扩展,其中使用两次往返时间测量并结合给出飞行时间结果,即使在相当长的响应延迟情况下也能减少误差。 带有四个信息的双面双向…

安全多方计算之八:Mix-Match

Mix-Match1. 混合网络基于ElGamal加密方案的混合网络2. PET协议3. Mix-Match协议4. 百万富翁问题的Mix-Match解决方案M.Jakobsson和A.Juels提出了基于Mix-Match的安全多方计算协议构造方法,该类协议包括Mix与Match两个阶段: Mix阶段:通过构造…

详解LinkedHashSet和LinkedHashMap

目录 一.LinkedHashSet和LinkedHashMap 1.基本介绍 2.与HashSet和HashMap的区别 3.LinkedHashSet和LinkedHashMap具体的方法 1.LinkedHashSet 2.LinkedHashMap 二.模拟代码实现LinkedHashMap 三.具体应用 一.LinkedHashSet和LinkedHashMap 1.基本介绍 顾名思义,根据名…

gpt4国内可以使用吗-chatgpt国内使用的软件排行榜

gpt4国内怎么用? 目前 OpenAI 尚未正式发布 GPT-4 模型,因此目前尚无法直接使用它。预计当GPT-4发布时,将通过OpenAI平台提供API以供使用者调用,同时新的API接口可能需要在不同国家/地区进行不同程度的注册或许可等手续。 当Ope…

php 修改服务器文件上传大小限制

输入docker cp mlfnginx:/etc/nginx/conf.d/pl.conf .输入vimpl.conf 修改nginx配置文件移动到图中所示位置client_max_body_size 按键盘”i”对图中的xxM修改成需要的大小,然后按”esc”,在按”:wq”,最后按回车键输入docker cp ./pl.con…

寻找2020 (蓝桥杯) JAVA

题目描述 小蓝有一个数字矩阵,里面只包含数字0 和2。小蓝很喜欢2020,他想找到这个数字矩阵中有多少个2020 。 小蓝只关注三种构成2020 的方式: 同一行里面连续四个字符从左到右构成2020。 同一列里面连续四个字符从上到下构成2020。 在一条从…

南京邮电大学通达学院《数学实验》MATLAB实验答案

南京邮电大学通达学院《数学实验》MATLAB实验答案一 声明二 MATLAB下载三 南京邮电大学通达学院《数学实验》练习一1.11.21.31.41.51.61.71.81.91.101.11![请添加图片描述](https://img-blog.csdnimg.cn/a3d3a094f6ea4dff85c0fd0bf40bbb44.jpeg)四月维夏,六月徂暑。…

百度文心一言可以完胜ChatGPT的4点可能性

文心一言,百度全新一代知识增强大语言模型,文心大模型家族的新成员,能够与人对话互动,回答问题,协助创作,高效便捷地帮助人们获取信息、知识和灵感。但说实话,很多人拿他与ChatGPT相对比&#x…

项目经理注意!掌握这5个关键点,提升效率80%!

很多项目在刚接手时,遇到的问题种类多并且复杂,乍一看很令人头疼,但仔细梳理下来好像也没有那么难,只需要厘清以下5个关键点: 一、做好项目的五个关键 具体的思路就是: 明确事->找对人->排计划->定机制->…

Bulk vector export as SLD and GeoJson

QGIS插件,可以导出所有图层的GeoJson数据格式和SLD图层样式文件。 缺点:导出的文件名和图层名称不对应。