基于 abapGit 和 abaplint 的 ABAP 持续集成的一个例子

这是 Jerry 2021 年的第 61 篇文章,也是汪子熙公众号总共第 338 篇原创文章。


短歌行

曹操


对酒当歌,人生几何!


譬如朝露,去日苦多。


慨当以慷,忧思难忘。


何以解忧?唯有杜康。


青青子衿,悠悠我心。


但为君故,沉吟至今。


呦呦鹿鸣,食野之苹。


我有嘉宾,鼓瑟吹笙。


明明如月,何时可掇?


忧从中来,不可断绝。


越陌度阡,枉用相存。


契阔谈讌,心念旧恩。


月明星稀,乌鹊南飞。


绕树三匝,何枝可依?


山不厌高,海不厌深。


周公吐哺,天下归心。

基于 abapGit 和 abaplint 的 ABAP 持续集成的一个例子

Jerry 之前写过一篇文章,使用 abapGit 在 ABAP On-Premises 系统和 SAP 云平台 ABAP 环境之间进行代码传输,介绍了 abapGit 这个开源工具的基本用法。


本文 Jerry 介绍基于 abapGit 和另一个开源工具,abaplint,实现 ABAP 持续集成的一个具体场景:当有新的代码提交到 ABAP 代码仓库时,自动触发 ABAP 代码检测。


当然,持续集成指的是,只要有新的代码提交,就自动运行构建和测试,反馈运行结果。仅当能确保新提交的代码符合预期,再将新代码集成到主干。因此本文介绍的例子,只是 ABAP 持续集成中的一个小步骤而已。


我们首先来简单了解一下 abaplint.使用 SAP UI5 开发的朋友们,想必都接触过 ESLint,一款 JavaScript 代码检测工具。


Jerry 每天用 Angular 开发 SAP Commerce Cloud UI,也借助了 Visual Studio Code 名为 TSLint 的扩展,来对 TypeScript 代码进行检测。

基于 abapGit 和 abaplint 的 ABAP 持续集成的一个例子

同样,abaplint 也是一款对 ABAP 代码根据指定的规则进行检测的开源工具,基于 TypeScript 编写。


下面是它的一个 demo 网站:


https://playground.abaplint.org/


其中 abaplint.json 是配置文件,定义了检测规则。违反规则的代码,会通过红色波浪线高亮出来:

基于 abapGit 和 abaplint 的 ABAP 持续集成的一个例子基于 abapGit 和 abaplint 的 ABAP 持续集成的一个例子注意,abaplint 对代码的检测和 ABAP 服务器上的代码语法检查(Syntax Check)完全是两回事。后者由位于 ABAP 内核的 Compiler 完成,而前者只是 TypeScript 实现的基于源代码文本级别的检测,abaplint 本身并不能从语法层面识别 ABAP 语言,只是机械地基于文本静态分析,完成 abaplint.json 里定义的检测任务而已。


下面介绍如何配置 abapGit 和 abaplint 实现最简单的 ABAP 持续集成。这个例子不需要任何开发,仅仅包含一些配置工作,不超过半小时即可完成。


(1) 创建一个 Github 仓库存放 ABAP 代码。我选择把所有的 ABAP 代码放置在 src 文件夹内。


注意:abaplint 只能扫描特殊格式的 ABAP 代码文件,即经过 abapGit 提交的 ABAP 代码。

基于 abapGit 和 abaplint 的 ABAP 持续集成的一个例子基于 abapGit 和 abaplint 的 ABAP 持续集成的一个例子基于 abapGit 和 abaplint 的 ABAP 持续集成的一个例子

这个 abaplint.yml 文件,负责指定当该代码仓库有新的代码提交时,通过 Github Workflow 执行的操作内容。其中第2行开始的 on 指令,告诉 Github,当 main 分支有 push 或者 pull request 到来时,执行名为 abaplint 的 job. 而后者的工作内容,其具体步骤从第14行的 steps 指令开始定义。


第15行的 uses 指令,意思是重用 Github 自带的名为 setup-node action,完成 Node.js 运行环境的准备。


setup-node 这个 action 实现于如下的 Github 仓库:


https://github.com/actions/setup-node

基于 abapGit 和 abaplint 的 ABAP 持续集成的一个例子

而 run 命令里维护的如下命令行,意思是 Node.js 运行环境准备好之后,安装 abaplint 命令行工具并执行。


npm -g install @abaplint/cli

abaplint


(2) 根目录下新建 abaplint.json,定义 ABAP 代码检测规则。为了演示起见,我只启用了如下图所示的几条简单规则。关于 abaplint.json 支持的所有检测规则,请查阅这个链接:


https://github.com/abapGit/abapGit/blob/main/abaplint.json


基于 abapGit 和 abaplint 的 ABAP 持续集成的一个例子基于 abapGit 和 abaplint 的 ABAP 持续集成的一个例子基于 abapGit 和 abaplint 的 ABAP 持续集成的一个例子基于 abapGit 和 abaplint 的 ABAP 持续集成的一个例子基于 abapGit 和 abaplint 的 ABAP 持续集成的一个例子基于 abapGit 和 abaplint 的 ABAP 持续集成的一个例子基于 abapGit 和 abaplint 的 ABAP 持续集成的一个例子基于 abapGit 和 abaplint 的 ABAP 持续集成的一个例子

上一篇:Gradle 发布 Jar 到 Archiva 时提示不能 Overwriting released artifacts is not allowed


下一篇:[Android Studio] Android Studio使用教程(二)