跳过正文
  1. Posts/

如何确保在提交 Jenkins Pipeline 前没有语法错误

·962 字·2 分钟· ·
沈显鹏
作者
沈显鹏
目录

我在做 Jenkins 声明式流水线开发时常会遇到的问题是:修改后的 Pipeline 看起来没有问题,当提交到代码仓库后进行 Jenkins 构建时发现原来有语法错误,然后再去修改、提交、构建,结果可能还有有其他没有注意到的语法问题。

为了减少这种因为语法错误而需要频繁像代码库去提交的情况,如果能在提交之前进行基本的语法校验,来检查当前的 Pipeline 是否存在语法错误就好了。

经过调查发现 Jenkins 本身提供了这样的语法检查 REST API,可以直接使用这个 API 来对 Pipeline 声明式进行语法校验,这个方式需要执行一长串的 curl 命令,看起来似乎很麻烦,如果能在 IDE 里直接运行就好了。

VS Code 作为当前当前最流行 IDE 工具,果然找到了相关的插件。

以下就介绍两种方法:针对 Jenkins 声明式流水线中的 Jenkinsfile 文件进行语法错误检查,这两种方式的原理都是通过调用 Jenkins REST API 来实现的。

注意:

当前只有声明式流水线支持语法校验,脚本式流水线不支持。

如果使用 Jenkins 回放功能或是使用 Jenkins Web 页面开发 Pipeline 不存在上述问题。

REST API
#

如果你的项目使用了 Jenkins Shared Libraries,为了方便使用 REST API,那么不妨在该仓库下面创建一个 linter.sh 文件,并将这个文件加到你的 .gitignore 里,这样你可以在这个文件里配置你的用户名和密码就不会意外的被提交到 Git 仓库中。

以下是 linter.sh 脚本内容如下,供参考。

# 如何使用
# sh linter.sh your-jenkinsfile-path

# 替换为你的 Jenkins 用户名
username=admin
# 替换为你的 Jenkins 密码
password=admin
# 替换为你的 Jenkins URL
JENKINS_URL=http://localhost:8080/

PWD=`pwd`
JENKINS_FILE=$1

curl --user $username:$password -X POST -F "jenkinsfile=<$PWD/$JENKINS_FILE" $JENKINS_URL/pipeline-model-converter/validate

让我们来测试一下效果 sh linter.sh your-jenkinsfile-path

实例 1

$ sh linter.sh Jenkinsfile
Errors encountered validating Jenkinsfile:
WorkflowScript: 161: Expected a stage @ line 161, column 9.
           stages {
           ^

实例 2

sh linter.sh Jenkinsfile
Errors encountered validating Jenkinsfile:
WorkflowScript: 60: Invalid condition "failed" - valid conditions are [always, changed, fixed, regression, aborted, success, unsuccessful, unstable, failure, notBuilt, cleanup] @ line 60, column 9.
           failed{
           ^
# 将 failed 改为 failure,再次执行,成功。
sh linter.sh Jenkinsfile
Jenkinsfile successfully validated.

当 Pipeline 写的很长的时候,总是很难发现有什么地方没有匹配或是缺了括号什么的。有了这个脚本就可以在提交之前检查是否有问题。

Jenkinsfile successfully validated.

Jenkins Pipeline Linter Connector 插件
#

第二种方式就是通用了,只要是声明式流水线,就可以使用这个插件去验证是否存在语法错误问题。

安装插件
#

在 VSCode 插件里搜索 Jenkins Pipeline Linter Connector

配置插件
#

打开 File -> Preferences -> Settings -> Extensions, 找到 Jenkins Pipeline Linter Connector,参考如下配置。

Jenkins pipeline linter 设置

运行插件
#

右键 -> Command Palette -> Validate Jenkinsfile

执行快捷键 Shift + Alt + V

执行效果
#

Example 1

总结
#

如果使用 VSCode 作为开发工具,推荐使用 Jenkins Pipeline Linter Connector 插件。

如果是 Jenkins Shared Libraries 仓库不妨可以创建一个 shell 脚本,通过执行脚本来进行校验。

当然,如果只是简单的使用 Jenkinfile 也可以在 Jenkins Web Pipeline 页面里编写,那里自带语法检查。

如果您还有别的方式,欢迎留言告诉我。

相关文章

Jenkins Linux Agent 配置
·353 字·1 分钟
本文提供了 Jenkins Linux Agent 的逐步配置指南,包括 Java 运行时的准备、节点创建以及常见问题的排查方法。
Jenkins Windows Agent 配置
·608 字·2 分钟
本文提供 Jenkins Windows Agent 的详细配置步骤,包括 Java 运行时准备、节点创建以及常见问题的排查方法。
如何将 Bitbucket 仓库同步到 GitHub
·1218 字·3 分钟
介绍如何通过 Jenkins 将 Bitbucket 仓库的 master 分支同步到 GitHub。
Jenkins 与 Bitbucket Webhooks 的配置和使用
·1303 字·3 分钟
本文介绍如何在 Jenkins 中配置 Bitbucket Webhooks,以便在创建 Pull Request 时自动触发 Jenkins 构建。
一款免费的 C/C++ 静态代码分析工具 Cppcheck 与 Jenkins 集成
·1563 字·4 分钟
本文介绍了 Cppcheck 的安装、使用以及与 Jenkins 的集成方法,旨在提升 C/C++ 代码质量和静态分析能力。
Jenkins Warnings Next Generation 插件
·7730 字·16 分钟
本文介绍了 Jenkins Warnings Next Generation 插件的功能和配置方法,包括如何收集编译器警告和静态分析工具报告的问题,并可视化结果。