前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Jenkins 声明式流水线的语法错误检查

Jenkins 声明式流水线的语法错误检查

作者头像
Peter Shen
发布2020-06-12 15:45:42
2.6K0
发布2020-06-12 15:45:42
举报
文章被收录于专栏:持续集成持续集成

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

为了减少这种因为语法错误而需要频繁像代码库去提交的情况,最好还是在提交之前进行“编译”检查,来查看当前的 Pipeline 是否存在语法错误。

经过调查发现 Jenkins 本身提供了这样的 REST API,可以直接使用这个 API 来对 Pipeline 声明式进行语法校验,这个方式需要执行一长串的 curl 命令,看起来似乎很麻烦,如果能在 IDE 里直接运行就好了。VS Code 作为当前当前最流行 IDE 工具,不负期望,果然是有插件的。

本文介绍了两种方式来实现如何对 Jenkins 声明式流水线在 Jenkins 构建执行前进行语法错误检查,这两种方式的原理都是通过调用 Jenkins REST API 来实现的。

❝注:当前只有声明式流水线支持语法校验,脚本式流水线不支持。如果使用 Jenkins 回放功能或是使用 Jenkins Web 页面开发 Pipeline 不存在上述问题。❞

REST API

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

代码语言:javascript
复制
# 如何使用
# 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 Jenkinsfile

代码语言:javascript
复制
$ sh linter.sh Jenkinsfile
Errors encountered validating Jenkinsfile:
WorkflowScript: 161: Expected a stage @ line 161, column 9.
           stages {
           ^

果然当 Pipeline 写的很长的时候,总是很难发现有什么地方写的不对。继续修改,直到再次执行没有错误为止。

代码语言:javascript
复制
Jenkinsfile successfully validated.

Jenkins Pipeline Linter Connector 插件

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

安装插件

在 VSCode 插件里搜索 Jenkins Pipeline Linter Connector

配置插件

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

运行插件

右键 -> Command Palette -> Validate Jenkinsfile

执行快捷键 Shift + Alt + V

执行效果

总结

如果使用 VSCode 作为开发工具,推荐使用 Jenkins Pipeline Linter Connector 插件;如果是 Jenkins Shared Libraries 仓库不妨可以创建一个 shell 脚本,通过执行脚本来进行校验。当然,如果只是简单的使用 Jenkinfile 也可以在 Jenkins Web Pipeline 页面里编写,那里自带语法检查。

如果您还有别的方式,欢迎留言分享。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DevOps攻城狮 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • REST API
  • Jenkins Pipeline Linter Connector 插件
    • 安装插件
      • 配置插件
        • 运行插件
          • 执行效果
          • 总结
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档