前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >jenkins:实现Jenkinsfile与Json的转换

jenkins:实现Jenkinsfile与Json的转换

作者头像
charlieroro
发布2021-03-02 16:09:20
1.1K0
发布2021-03-02 16:09:20
举报
文章被收录于专栏:charlierorocharlieroro

实现Jenkinsfile与Json的转换

目录

最近在做个需求,需要支持Jenkinsfile和json的转换。

方法1:使用现有的jenkins插件

参考的是这篇文章。下面介绍一下将插件打包成镜像的步骤:

需要注意的是,本插件提供的转换API toJenkinsfile和toJson并不是万能的,只能支持jenkins标准的参数类型,例如对于gitParameter这样的参数就无法解析(扩展功能),一种解决方式是独立解析扩展的参数,然后将其插入解析好的标准JenkinsFile中;另外一个方式就是写一个jenkinsfile的解析器。

参考
  • mvn hpi的命令可以参考官方文档
  • 可以运行mvn hpi:hpi生成对应的hpi文件,如: /pipeline-model-definition-plugin/pipeline-model-definition/target/pipeline-model-definition.hpi

方法2:解析原生的jenkinsfile文件

在GitHub上有一个支持jenkinsfile解析的项目,该项目使用rust的pest crate来编写jenkinsfile的语法,支持对jenkinsfile的格式验证。Pest官方文档中给出了一个非常好的对json语法的解析例子,主要是使用递归的方式来解析语法。

pest官方提供了一个编辑器,可以使用该编辑器查看经过pest解析之后的字段,对了解pest的工作方式非常有用。如,使用jdp项目提供的pest文件解析如下jenkinsfile:

代码语言:javascript
复制
pipeline {
    agent {
        docker {
            reuseNode true
            image 'maven:3-alpine'
            label 'my-defined-label'
            args  '-v /tmp:/tmp'
            registryUrl 'https://myregistry.com/'
            registryCredentialsId 'myPredefinedCredentialsInJenkins'
        }
    }

    stages {
        stage('Build') {
            steps { sh 'make' }
        }
    }
}

对应的解析结果如下:

代码语言:javascript
复制
- preceeding_junk: ""
- opening_brace: "{"
- agentDecl > agentBlock
  - opening_brace: "{"
  - dockerAgent
    - opening_brace: "{"
    - bool: "true"
    - string > single_quoted
      - single_quote: "\'"
      - inner_single_str: "maven:3-alpine"
      - single_quote: "\'"
    - string > single_quoted
      - single_quote: "\'"
      - inner_single_str: "my-defined-label"
      - single_quote: "\'"
    - string > single_quoted
      - single_quote: "\'"
      - inner_single_str: "-v /tmp:/tmp"
      - single_quote: "\'"
    - string > single_quoted
      - single_quote: "\'"
      - inner_single_str: "https://myregistry.com/"
      - single_quote: "\'"
    - string > single_quoted
      - single_quote: "\'"
      - inner_single_str: "myPredefinedCredentialsInJenkins"
      - single_quote: "\'"
    - closing_brace: "}"
  - closing_brace: "}"
- stagesDecl
  - opening_brace: "{"
  - stage
    - string > single_quoted
      - single_quote: "\'"
      - inner_single_str: "Build"
      - single_quote: "\'"
    - opening_brace: "{"
    - stepsDecl
      - opening_brace: "{"
      - step > simple_step
        - IDENT: "sh"
        - args > string > single_quoted
          - single_quote: "\'"
          - inner_single_str: "make"
          - single_quote: "\'"
      - closing_brace: "}"
    - closing_brace: "}"
  - closing_brace: "}"
- closing_brace: "}"
- ending_junk: ""
- EOI: ""

Pest语法重点标注:

我尝试使用该项目解析jenkinsfile,但发现实现起来太过复杂,且rust和jenkinsFile的语法也是一言难尽。如下,当step中带括号和不带括号混用时会导致解析错误。

代码语言:javascript
复制
steps {
    echo 'test'
    dir('command') {
		sh "sh ./saas.sh ${params.channel} ${params.buildType} "
	}     
}

有精力的大神可以在此基础上实现解析JenkinsFile的功能。

参考
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-02-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实现Jenkinsfile与Json的转换
  • 方法1:使用现有的jenkins插件
    • 参考
    • 方法2:解析原生的jenkinsfile文件
      • 参考
      相关产品与服务
      容器服务
      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档