pipeline语法之environment,dir(),deleteDir()方法,readJSON,writeJSON

一 environment指令指定一系列键值对,这些对值将被定义为全部步骤的环境变量或阶段特定步骤java

environment{…}, 大括号里面写一些键值对,也就是定义一些变量并赋值,这些变量就是环境变量。环境变量的做用范围,取决你environment{…}所写的位置,你能够写在顶层环境变量,让全部的stage下的step共享这些变量,也能够单独定义在某一个stage下,只能供这个stage去调用变量,其余的stage不能共享这些变量。通常来讲,咱们基本上上定义全局环境变量,若是是局部环境变量,咱们直接用def关键字声明就能够,不必放environment{…}里面。node

//全局
pipeline { agent any environment { unit_test
= true } stages { stage('Example') { steps { script{ if(unit_test == true){ println "变量为真 " } }} } } }

 二 dir ,deleteDirjson

dir()方法:就是改变当前的工做目录,在dir语句块里执行的其余路径或者相对路径ide

deleteDir()方法:默认递归删除WORKSPACE下的文件和文件夹,没有参数,使用这个方法会留下一个后遗症:this

       执行这个job的时候,你以前已经在这个工做目录下面,你再建一个目录就会报错:mkdir: 没法建立目录"testdata": 没有那个文件或目录,这是个很矛盾的报错spa

       解决方法:使用cd从新切换到当前目录,再执行mkdir操做插件

举例以下:code

pipeline{
    
    agent any
    stages{
        stage("deleteDir") {
            steps{
                script{
                    println env.WORKSPACE
                    dir("${env.WORKSPACE}/testdata"){   //切换到当前工做目录下的testdata目录
                       sh "pwd"                         //sh命令能够 sh "command..." 也能够 sh("command....")
                    }
                    sh("ls -al ${env.WORKSPACE}")
                    deleteDir()  // clean up current work directory   //清空目录
                    sh("ls -al ${env.WORKSPACE}")
                }
            }
        }
    }
}

执行结果对象

Started by user admin
Running in Durability level: MAX_SURVIVABILITY
[Pipeline] Start of Pipeline
[Pipeline] node
Running on Jenkins in /root/.jenkins/workspace/pipe-example
[Pipeline] {
[Pipeline] stage
[Pipeline] { (deleteDir)
[Pipeline] script
[Pipeline] {
[Pipeline] echo
/root/.jenkins/workspace/pipe-example     #println env.WORKSPACE
[Pipeline] dir Running in /root/.jenkins/workspace/pipe-example/testdata 
[Pipeline] { [Pipeline] sh
+ pwd /root/.jenkins/workspace/pipe-example/testdata [Pipeline] }
[Pipeline]
// dir
[Pipeline] sh + ls -al /root/.jenkins/workspace/pipe-example 总用量 4 drwxr-xr-x 4 root root 42 9月 4 11:33 . drwxr-xr-x 28 root root 4096 9月 4 11:24 .. drwxr-xr-x 2 root root 22 9月 4 11:28 testdata drwxr-xr-x 2 root root 6 9月 4 11:33 testdata@tmp [Pipeline] deleteDir [Pipeline] sh + ls -al /root/.jenkins/workspace/pipe-example 总用量 4 drwxr-xr-x 2 root root 6 9月 4 11:33 . drwxr-xr-x 28 root root 4096 9月 4 11:33 .. [Pipeline] } [Pipeline] // script [Pipeline] } [Pipeline] // stage [Pipeline] } [Pipeline] // node [Pipeline] End of Pipeline Finished: SUCCESS
 

 三 readJSON,writeJSONblog

要使用这两个方法,必须安装插件Pipeline Utility Steps,不然报错:java.lang.NoSuchMethodError: No such DSL method 'readJSON'

咱们先来使用readJSON

1 先建一个json文件,路径在工做目录的testdata/test_json.json

{
"NAME":"xinxin",
"AGE":30,
"CITY":"Beijing",
"GENDER":"male"
}

2 重写方法,有两种,路径放在工做目录下面的module/pipeline-demo-module.groovy

import hudson.model.*;
 
 
def find_files(filetype) {
    
    def files = findFiles(glob:filetype)
    for (file in files) {
        println file.name
    }
}
 
def read_json_file(file_path) {               //读取文件的状况
    def propMap = readJSON file : file_path
    propMap.each {
        println ( it.key + " = " + it.value )
    }
}
 
def read_json_file2(json_string) {           //读取字符串的状况
    def propMap = readJSON text : json_string
    propMap.each {
        println ( it.key + " = " + it.value )
    }
}
return this;

最后设置pipeline stage文件内容

import hudson.model.*;
 
println env.JOB_NAME
println env.BUILD_NUMBER
 
pipeline{
    
    agent any
    stages{
        stage("init") {
            steps{
                script{
                    model_test = load env.WORKSPACE + "/module/pipeline-demo-module.groovy" //采用路径的拼接来读取
                }
            }
        }
        stage("Parse json") {   //分别调用两种方式读取
            steps{
                script{
                    json_file = env.WORKSPACE + "/testdata/test_json.json"
                    model_test.read_json_file(json_file)
                    println "================================"
                    json_string = '{"NAME":"xinxin","AGE":30,"CITY":"Beijing","GENDER":"male"}'
                    model_test.read_json_file2(json_string)
                }
            }
        }
    }
}

 结果:

Started by user admin
Running in Durability level: MAX_SURVIVABILITY
[Pipeline] Start of Pipeline
[Pipeline] echo
pipe-example
[Pipeline] echo
58
[Pipeline] node
Running on Jenkins in /root/.jenkins/workspace/pipe-example
[Pipeline] {
[Pipeline] stage
[Pipeline] { (init)
[Pipeline] script
[Pipeline] {
[Pipeline] load
[Pipeline] { (/root/.jenkins/workspace/pipe-example/module/pipeline-demo-module.groovy)
[Pipeline] }
[Pipeline] // load
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Parse json)
[Pipeline] script
[Pipeline] {
[Pipeline] readJSON
[Pipeline] echo
NAME = xinxin
[Pipeline] echo
AGE = 30
[Pipeline] echo
CITY = Beijing
[Pipeline] echo
GENDER = male
[Pipeline] echo
================================
[Pipeline] readJSON
[Pipeline] echo
NAME = xinxin
[Pipeline] echo
AGE = 30
[Pipeline] echo
CITY = Beijing
[Pipeline] echo
GENDER = male
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS
View Code

 下面看看writeJSON

看名称就知道是是将json格式的文件或者字符串写入文件

wirteJSON方法有两个必须的字段,分别是json和file,

json是一个json对象,是你须要把这个json写入到文件的内容,

第二个file字段是一个文件的路径,这个文件确定在jenkins的workspace范围以内。

第三个字段pretty是可选,也就是能够选择把json对象插入到一个指定的位置。

1 修改module/pipeline-demo-module.groovy 

import hudson.model.*;
import groovy.json.*;  //这个省略,在使用JsonOutput类的时候必须导入
 
 
def find_files(filetype) {
    
    def files = findFiles(glob:filetype)
    for (file in files) {
        println file.name
    }
}
 
def read_json_file(file_path) {
    def propMap = readJSON file : file_path
    propMap.each {
        println ( it.key + " = " + it.value )
    }
}
 
def read_json_file2(json_string) {
    def propMap = readJSON text : json_string
    propMap.each {
        println ( it.key + " = " + it.value )
    }
}
def write_json_to_file(input_json, tofile_path) {   //增长的部分
    def input = ''
    if(input_json.toString().endsWith(".json")) {
        input = readJSON file : input_json
    }else {
        //def output = new JsonOutput()
                //def new_json_object = output.toJson(input_json)
        //input = new_json_object
                input = readJSON text : input_json
    }
    writeJSON file: tofile_path, json: input
}

return this;

2 修改pipeline stage文件内容

println env.JOB_NAME
println env.BUILD_NUMBER
 
pipeline{
    
    agent any
    stages{
        stage("init") {
            steps{
                script{
                    model_test = load env.WORKSPACE + "/module/pipeline-demo-module.groovy"
                }
            }
        }
        stage("write json") {
            steps{
                script{
                    json_file = env.WORKSPACE + "/testdata/test_json.json"
                    tojson_file = env.WORKSPACE + "/testdata/new_json.json"   //new_json.json文件能够事先不存在,它会自动建立
                    model_test.write_json_to_file(json_file,tojson_file)
                    println "================================"
                    json_string = '{"NAME":"xinxin","AGE":30,"CITY":"Beijing","GENDER":"male"}'
                    tojson_file = env.WORKSPACE + "/testdata/new_json1.json"
                    model_test.write_json_to_file(json_string,tojson_file)
                }
            }
        }
    }
}

执行结果

Started by user admin
Running in Durability level: MAX_SURVIVABILITY
[Pipeline] Start of Pipeline
[Pipeline] echo
pipe-example
[Pipeline] echo
65
[Pipeline] node
Running on Jenkins in /root/.jenkins/workspace/pipe-example
[Pipeline] {
[Pipeline] stage
[Pipeline] { (init)
[Pipeline] script
[Pipeline] {
[Pipeline] load
[Pipeline] { (/root/.jenkins/workspace/pipe-example/module/pipeline-demo-module.groovy)
[Pipeline] }
[Pipeline] // load
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (write json)
[Pipeline] script
[Pipeline] {
[Pipeline] readJSON
[Pipeline] writeJSON
[Pipeline] echo
================================
[Pipeline] readJSON
[Pipeline] writeJSON
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS
View Code

查看系统上面的文件

[root@localhost testdata]# ls
new_json1.json  new_json.json  test_json.json
[root@localhost testdata]# cat new_json.json 
{"NAME":"xinxin","AGE":30,"CITY":"Beijing","GENDER":"male"}[root@localhost testdata]# 
[root@localhost testdata]# cat new_json1.json 
{"NAME":"xinxin","AGE":30,"CITY":"Beijing","GENDER":"male"}[root@localhost testdata]# 
相关文章
相关标签/搜索