Jenkinsfile與Json的轉換


前段時間調研了下青雲的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語法,之后才發現到這款插件,不再需要重復造輪子,總體上,如果規划設計的好的話,應該可以表面上媲美雲效這款產品。

阿里雲雲效


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM