如何以 Sonar 为例创建一个适用与所有企业的测试步骤
云效 Flow 中一个流水线运行的镜像被称为一个“步骤”,步骤是有一段描述 yaml 和一个 docker 镜像组成的一个最小运行单元,云效流水线 Flow中 CLI 工具作为自定义步骤的进阶,以 Sonar 为例创建一个用于测试/扫描的步骤,并开放给所有企业。
准备
一个公网可访问的 Sonar 服务。
一个用于测试的代码库,以 maven 项目为例,确保 pom 文件中引入了 sonar 插件:
本地开发
参照 Flow cli 搭建好开发环境,初始化一个步骤:
sona-qubeBash 目录下会有三个文件
Dockerfile 用于构建步骤镜像,Dockerfile 中的基础镜像为云效提供的基础镜像,里面已经内置了一些软件,尽量不要更改基础镜像,如需更改基础镜像,请确保新的基础镜像中安装了 jq.
step.sh 为在步骤中执行的脚本
step.yaml 用户描述步骤信息
端
编辑 sonar-qube 文件夹下面的 step.yaml:
注意:image 需要改成用户自己的镜像地址,且必须为公开 pull 权限
name 用于定义步骤名称
sign 步骤唯一标识,全局唯一
category 步骤分类
image 步骤镜像地址,image 需要改成用户自己的镜像地址,且必须为公开 pull 权限
items: 步骤语言描述 请参考步骤语言 Yaml 描述。
校验 Yaml,在 sonar-qube 文件夹下执行:
没有任何输出表示校验通过。
后端
编辑 Dockerfile:
请确保基础镜像中已经安装jq。
编辑sonar-qube
文件夹下面的step.sh
:
set -e 表示运行过程中遇到任何错误步骤即错误退出,随机流水线也会中断运行
cd $PROJECT_DIR 表示进入代码库所在路径
mvn install -DskipTests 安装 maven 依赖
mvn sonar:sonar -Dsonar.host.url=$STEP_SONAR_HOST 执行 Sonar 扫描
redline ... 影响前端显示,最终会在日志里形成下列输出:
日志
左侧每一个元素对应右侧三行输出,分别为:
STATE_NAME_xxx: 字段名称
STATE_VALUE_xxx:字段值
STATE_STYLE_xxx:字段样式(Error: 红色,Warning: 橙色,Default: 灰色)
STATE_URL___REPORT 为报告链接,在前端显示为报告按钮,点击调整到值对应的 Url。
redline 这个方法主要作用是将输入结构简单化,并会自动解析红线。以空格为分隔,每段字符包含<key>:<name>:<value>:<style> ,报告格式为: Report:<url>。
如果想上传本地文件生成报告链接,可以在自定义步骤后追加“报告上传”步骤。
本地运行
步骤的本质是一个容器镜像,因此可以在本地运行,flow cli 帮助在本地模拟一个和流水线上运行相似的环境,包括挂载代码路径、缓存以及一些流水线上下文环境变量。在 sonar-qube 文件夹下执行:
输入 STEP_SONAR_HOST,CHECK_REDLINES 和 workspace 三个变量,步骤即可在本地运行。
CHECK_REDLINES 举例:
identifier 为步骤唯一标识,可以是随机字符串,key 为待校验字段,type 为枚举字段,分别标识:LE: 实际值小于等于期望值;GE: 实际值大于等于期望值;EQ 实际值等于期望值;thredshold 为期望值。
你可以通过日志输出观察运行情况以及在 $WORK_SPACE/params 里是否得到预期的返回。
这个命令会执行 docker build, docker run 两个命令以在本地运行步骤。
输入的参数会换存到 sonar-qube/params.env 文件内,无需每次输出。
多次运行 maven 依赖会缓存到本地~/.m2。
运行时输入的 workspace 对应到本地的一个绝对路径,会被 mount 到容器中 /root/workspace/code 路径下,这个路径在流水线运行时为可变路径,可以在 step.sh 中使用 $PROJECT_DIR 变量获得
企业内使用
在sonar-qu
be 文件夹下执行:
该命令会执行 docker build, docker push 两个命令以发布步骤镜像,同时将步骤信息(yaml)同步到企业下的步骤列表。执行以下命令查看列表
同时进入企业流水线编辑页面,可以在添加步骤->自定义步骤中看到 SonarQube 这个步骤。
这个步骤可以和系统提供的其他步骤一样使用:
跨企业共享步骤
开放步骤给所有 Flow 的企业,在 sonar-cube 所在目录下执行:
跨企业共享步骤 1
可以看到 sonar-cube 步骤的状态变为了PORCESSING
,这个时候需要等待云效的工作人员进行人工审核,一段时间后步骤状态再次变为 PRIVATE,使用命令flow step search
可以查看到一个sonar-qube-<regionId>
的步骤说明步骤被成功公开,如果审核不通过,会在云效页面右上角的通知栏里告知审核未通过原因。
步骤公开成功后得到两个步骤,一个为企业内可见的自定义步骤,sign 为sonar-qube
,一个为公开步骤,sign 为sonar-qube-<regionId>
,如果想要更新线上步骤,需要再执行一次flow step public
,所有步骤历史版本都会保留,通过flow step version <sign>
可以查看步骤版本,flow step get <sign> -v <version>
可以查看该步骤历史版本详细信息。
sonar-qube 显示在步骤编辑页中自定义步骤栏,sonar-qube-<regionId>
显示类别位置由 step.yaml 中的 category 字段决定:
云效 Flow 中一个流水线运行的镜像被称为一个“步骤”,步骤是有一段描述 yaml 和一个 docker 镜像组成的一个最小运行单元,云效流水线 Flow中 CLI 工具作为自定义步骤的进阶,以 Sonar 为例创建一个用于测试/扫描的步骤,并开放给所有企业。
关于我们
更多关于云效 DevOps 的干货及云效动态,可微信搜索关注【云效】公众号~
彩蛋:公众号后台回复【指南】,可获得《阿里巴巴 DevOps 实践指南》&《10 倍研发效能提升案例集》~
看完觉得对您有所帮助别忘记点赞、收藏和关注呦~
版权声明: 本文为 InfoQ 作者【阿里云云效】的原创文章。
原文链接:【http://xie.infoq.cn/article/faf52f4147debca450da0eeb1】。文章转载请联系作者。
评论