­

Jenkinsfile與Json的轉換

  • 2019 年 12 月 6 日
  • 筆記

前段時間調研了下青雲的kubesphere,意外的發現了一個插件,pipeline-model-definition-plugin,用了將jenkins的pipeline、json互相轉換的,以前可能關注過這個插件,但是沒怎麼注意,jenkins的plugin上面也沒有找到,不知道為什麼,所以,這裡簡單講解一下吧。

一、安裝

jenkins的plugin上面沒有提供,所以只能自己打包編譯,github上面也給出了打包的過程:cd pipeline-model-definition && mvn install && mvn hpi:run,然後將hpi文件上傳到插件即可。

二、主要api介面

2.1 獲取pipeline的json格式JSON Schema

URL: JENKINS_URL/pipeline-model-schema/json Info: 獲取json格式的jenkinsfile Returns: json

2.2 將jenkinsfile轉成json格式

URL: JENKINS_URL/pipeline-model-converter/toJson Parameters: jenkinsfile格式的文本 Info: 獲取jenkinsfile,然後將它轉換成json。 Returns: 如果成功,則返回json,否則返回報錯資訊

2.3 將json格式轉換成jenkinsfile

URL: JENKINS_URL/pipeline-model-converter/toJenkinsfile Parameters: json格式的文件 Info: 獲取json格式的文件,然後將它轉換成jenkinsfile Returns: 如果成功,返迴轉換後的jenkinsfile,如果失敗,返回報錯資訊。

還有一些其他的介面(如:驗證json,groovy語法轉換等)就不在講解了。

三、Demo

這裡將官網給出的最簡單的一個例子轉換成json,構建->單元測試->部署整個過程

pipeline {      agent any      stages {          stage(''Build'') {              steps {                  echo ''Building..''              }          }          stage(''Test'') {              steps {                  echo ''Testing..''              }          }          stage(''Deploy'') {              steps {                  echo ''Deploying....''              }          }      }  }

在postman提交請求:

即可獲得返回的結果:

{      "status": "ok",      "data": {          "result": "success",          "json": {              "pipeline": {                  "stages": [                      {                          "name": "Build",                          "branches": [                              {                                  "name": "default",                                  "steps": [                                      {                                          "name": "echo",                                          "arguments": [                                              {                                                  "key": "message",                                                  "value": {                                                      "isLiteral": true,                                                      "value": "Building.."                                                  }                                              }                                          ]                                      }                                  ]                              }                          ]                      },                      {                          "name": "Test",                          "branches": [                              {                                  "name": "default",                                  "steps": [                                      {                                          "name": "echo",                                          "arguments": [                                              {                                                  "key": "message",                                                  "value": {                                                      "isLiteral": true,                                                      "value": "Testing.."                                                  }                                              }                                          ]                                      }                                  ]                              }                          ]                      },                      {                          "name": "Deploy",                          "branches": [                              {                                  "name": "default",                                  "steps": [                                      {                                          "name": "echo",                                          "arguments": [                                              {                                                  "key": "message",                                                  "value": {                                                      "isLiteral": true,                                                      "value": "Deploying...."                                                  }                                              }                                          ]                                      }                                  ]                              }                          ]                      }                  ],                  "agent": {                      "type": "any"                  }              }          }      }  }

四、總結

之前發過一篇講解過如果使用jenkins x來製作一款類似阿里云云效的東西,但是之前沒有發現到這款插件,導致語法的轉換需要自行切割pipeline語法,之後才發現到這款插件,不再需要重複造輪子,總體上,如果規劃設計的好的話,應該可以表面上媲美雲效這款產品。