zoukankan      html  css  js  c++  java
  • DEVOPS技术实践_22:根据参数传入条件控制执行不同stage

    前面学习了参数的传递和调用,下面研究一下根据参数作为条件执行不同的stage

    使用叫when 和expression控制某一个stage的运行,

    运行场景例如写了多个stage,这个pipeline脚本执行执行冒烟测试,和集成测试。有时候,希望快速执行冒烟测试,想根据结果看看,不一定一上来就执行集成测试。为了达到这种控制效果,我们就需要使用逻辑控制。在pipeline中就使用when 和expression两个命令。例如,如果json文件中冒烟测试变量为true,我就只执行冒烟测试的stage,其他和冒烟测试无关的stage我就不去执行。如果冒烟测试变量值为false,也就是默认要跑集成测试(不跑冒烟测试)。下面分两个类型测试就好

    1 修改json文件

    {
    "NAME":"Lucy",
    "AGE":"18",
    "PHONE_NUMBER":"13912345678",
    "ADDRESS":"Haidian Beijing",
    "EMAIL":"lucy@demo.com",
    "GENDER":"male",
    "SMOKE":"false",
    "IS_MARRY":"false"
    }

    test.json文件基础上加了一个变量 SMOKE, 默认值是false。

    2 使用的jenkinsfile文件

     import hudson.model.*;
        pipeline{
        agent any
        environment {
        INPUT_JSON = "/tmp/test.json"
        }
        stages{
            stage("Hello Pipeline") {
                steps {
                    script {
                        println "Hello Pipeline!"
                        println env.JOB_NAME
                        println env.BUILD_NUMBER
                    }
                }
            }
     
        stage("Init paramters in json") {
            steps {
                script {
     
                    println "read josn input file"
                        json_file = INPUT_JSON? INPUT_JSON.trim() : ""
                        prop = readJSON file : json_file
                        name = prop.NAME? prop.NAME.trim() : ""
                        println "Name:" + name
                        age = prop.AGE? prop.AGE.trim() : ""
                        println "Age:" + age
                        phone = prop.PHONE_NUMBER? prop.PHONE_NUMBER.trim() : ""
                        println "Phone:" + phone
                        address = prop.ADDRESS? prop.ADDRESS.trim() : ""
                        println "Address:" + address
                        email = prop.EMAIL? prop.EMAIL.trim() : ""
                        println "Email:" + email
                        gender = prop.GENDER? prop.GENDER.trim() : ""
                        println "Gender:" + gender
                        is_marry = prop.IS_MARRY? prop.IS_MARRY.trim() : false
                        println "is_marry:" + is_marry
                        is_smoke = prop.SMOKE? prop.SMOKE : false
                        println "is_smoke:" + is_smoke
                    }
                }
            }
        stage("call a method") {
                steps {
                    script {
                        println "send the parameter as map type"
                        model_call = load env.JENKINS_HOME + "/moodlegroovy/model.groovy"
                        model_call.getUserInfo(name:name, age:age, phone:phone, address:address, email:email, gender:gender, is_marry:is_marry)
                    }
                }
            }
            stage("check serive up") {
                when {
                    expression { return  ("$is_smoke" == "true")}
                }
                steps {
                    script {
                        println "SMOKE TEST: check service startup"
                    }
                }
            }
    
            stage("check UI login") {
                when {
                    expression {
                        return ("$is_smoke" == "true")
                    }
                }
                steps {
                    script {
                        println "SMOKE TEST: check UI login success"
                    }
                }
            }
            
            stage("Integrate-ModelA") {
                when {
                    expression {
                        return ("$is_smoke" == "false")
                    }
                }
                steps {
                    script {
                        println "Integrate-ModelA"
                    }
                }
            }
            
            stage("Integrate-ModelB") {
                when {
                    expression {
                        return ("$is_smoke" == "false")
                    }
                }
                steps {
                    script {
                        println "Integrate-ModelB"
                    }
                }
            }
         }
    }

    3 执行打印输出

    控制台输出

    Started by user darren ning
    Obtained pipeline.jenkinsfile from git http://192.168.132.132/root/pipeline-parameter-test.git
    Running in Durability level: MAX_SURVIVABILITY
    [Pipeline] Start of Pipeline
    [Pipeline] node
    Running on Jenkins in /root/.jenkins/workspace/pipeline_parameter_project
    [Pipeline] {
    [Pipeline] stage
    [Pipeline] { (Declarative: Checkout SCM)
    [Pipeline] checkout
    No credentials specified
     > git rev-parse --is-inside-work-tree # timeout=10
    Fetching changes from the remote Git repository
     > git config remote.origin.url http://192.168.132.132/root/pipeline-parameter-test.git # timeout=10
    Fetching upstream changes from http://192.168.132.132/root/pipeline-parameter-test.git
     > git --version # timeout=10
     > git fetch --tags --progress http://192.168.132.132/root/pipeline-parameter-test.git +refs/heads/*:refs/remotes/origin/*
     > git rev-parse refs/remotes/origin/master^{commit} # timeout=10
     > git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=10
    Checking out Revision 6133dc99fd9f35fb7ccb6a3effb45cf1e96e76b0 (refs/remotes/origin/master)
     > git config core.sparsecheckout # timeout=10
     > git checkout -f 6133dc99fd9f35fb7ccb6a3effb45cf1e96e76b0
    Commit message: "Update pipeline.jenkinsfile"
     > git rev-list --no-walk ad52c819b4e74df5566cc767b8d580ccea363470 # timeout=10
    [Pipeline] }
    [Pipeline] // stage
    [Pipeline] withEnv
    [Pipeline] {
    [Pipeline] withEnv
    [Pipeline] {
    [Pipeline] stage
    [Pipeline] { (Hello Pipeline)
    [Pipeline] script
    [Pipeline] {
    [Pipeline] echo
    Hello Pipeline!
    [Pipeline] echo
    pipeline_parameter_project
    [Pipeline] echo
    91
    [Pipeline] }
    [Pipeline] // script
    [Pipeline] }
    [Pipeline] // stage
    [Pipeline] stage
    [Pipeline] { (Init paramters in json)
    [Pipeline] script
    [Pipeline] {
    [Pipeline] echo
    read josn input file
    [Pipeline] readJSON
    [Pipeline] echo
    Name:Lucy
    [Pipeline] echo
    Age:18
    [Pipeline] echo
    Phone:13912345678
    [Pipeline] echo
    Address:Haidian Beijing
    [Pipeline] echo
    Email:lucy@demo.com
    [Pipeline] echo
    Gender:male
    [Pipeline] echo
    is_marry:false
    [Pipeline] echo
    is_smoke:false
    [Pipeline] }
    [Pipeline] // script
    [Pipeline] }
    [Pipeline] // stage
    [Pipeline] stage
    [Pipeline] { (call a method)
    [Pipeline] script
    [Pipeline] {
    [Pipeline] echo
    send the parameter as map type
    [Pipeline] load
    [Pipeline] { (/root/.jenkins/moodlegroovy/model.groovy)
    [Pipeline] }
    [Pipeline] // load
    [Pipeline] echo
    
        Lucy come from Haidian Beijing, he is 18 old. he's phone number is
        13912345678, or you can contact he via lucy@demo.com, he is not marry yet.
        
    [Pipeline] }
    [Pipeline] // script
    [Pipeline] }
    [Pipeline] // stage
    [Pipeline] stage
    [Pipeline] { (check serive up)
    Stage "check serive up" skipped due to when conditional
    [Pipeline] }
    [Pipeline] // stage
    [Pipeline] stage
    [Pipeline] { (check UI login)
    Stage "check UI login" skipped due to when conditional
    [Pipeline] }
    [Pipeline] // stage
    [Pipeline] stage
    [Pipeline] { (Integrate-ModelA)
    [Pipeline] script
    [Pipeline] {
    [Pipeline] echo
    Integrate-ModelA
    [Pipeline] }
    [Pipeline] // script
    [Pipeline] }
    [Pipeline] // stage
    [Pipeline] stage
    [Pipeline] { (Integrate-ModelB)
    [Pipeline] script
    [Pipeline] {
    [Pipeline] echo
    Integrate-ModelB
    [Pipeline] }
    [Pipeline] // script
    [Pipeline] }
    [Pipeline] // stage
    [Pipeline] }
    [Pipeline] // withEnv
    [Pipeline] }
    [Pipeline] // withEnv
    [Pipeline] }
    [Pipeline] // node
    [Pipeline] End of Pipeline
    Finished: SUCCESS

    4 修改json文件,把smoke的值改为true

    {
    "NAME":"Lucy",
    "AGE":"18",
    "PHONE_NUMBER":"13912345678",
    "ADDRESS":"Haidian Beijing",
    "EMAIL":"lucy@demo.com",
    "GENDER":"male",
    "SMOKE":"false",
    "IS_MARRY":"false"
    } 

    5 点击构建测试

    在最后的的两个false没有输出,true输出

    控制台输出

    Started by user darren ning
    Obtained pipeline.jenkinsfile from git http://192.168.132.132/root/pipeline-parameter-test.git
    Running in Durability level: MAX_SURVIVABILITY
    [Pipeline] Start of Pipeline
    [Pipeline] node
    Running on Jenkins in /root/.jenkins/workspace/pipeline_parameter_project
    [Pipeline] {
    [Pipeline] stage
    [Pipeline] { (Declarative: Checkout SCM)
    [Pipeline] checkout
    No credentials specified
     > git rev-parse --is-inside-work-tree # timeout=10
    Fetching changes from the remote Git repository
     > git config remote.origin.url http://192.168.132.132/root/pipeline-parameter-test.git # timeout=10
    Fetching upstream changes from http://192.168.132.132/root/pipeline-parameter-test.git
     > git --version # timeout=10
     > git fetch --tags --progress http://192.168.132.132/root/pipeline-parameter-test.git +refs/heads/*:refs/remotes/origin/*
     > git rev-parse refs/remotes/origin/master^{commit} # timeout=10
     > git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=10
    Checking out Revision 6133dc99fd9f35fb7ccb6a3effb45cf1e96e76b0 (refs/remotes/origin/master)
     > git config core.sparsecheckout # timeout=10
     > git checkout -f 6133dc99fd9f35fb7ccb6a3effb45cf1e96e76b0
    Commit message: "Update pipeline.jenkinsfile"
     > git rev-list --no-walk 6133dc99fd9f35fb7ccb6a3effb45cf1e96e76b0 # timeout=10
    [Pipeline] }
    [Pipeline] // stage
    [Pipeline] withEnv
    [Pipeline] {
    [Pipeline] withEnv
    [Pipeline] {
    [Pipeline] stage
    [Pipeline] { (Hello Pipeline)
    [Pipeline] script
    [Pipeline] {
    [Pipeline] echo
    Hello Pipeline!
    [Pipeline] echo
    pipeline_parameter_project
    [Pipeline] echo
    92
    [Pipeline] }
    [Pipeline] // script
    [Pipeline] }
    [Pipeline] // stage
    [Pipeline] stage
    [Pipeline] { (Init paramters in json)
    [Pipeline] script
    [Pipeline] {
    [Pipeline] echo
    read josn input file
    [Pipeline] readJSON
    [Pipeline] echo
    Name:Lucy
    [Pipeline] echo
    Age:18
    [Pipeline] echo
    Phone:13912345678
    [Pipeline] echo
    Address:Haidian Beijing
    [Pipeline] echo
    Email:lucy@demo.com
    [Pipeline] echo
    Gender:male
    [Pipeline] echo
    is_marry:false
    [Pipeline] echo
    is_smoke:true
    [Pipeline] }
    [Pipeline] // script
    [Pipeline] }
    [Pipeline] // stage
    [Pipeline] stage
    [Pipeline] { (call a method)
    [Pipeline] script
    [Pipeline] {
    [Pipeline] echo
    send the parameter as map type
    [Pipeline] load
    [Pipeline] { (/root/.jenkins/moodlegroovy/model.groovy)
    [Pipeline] }
    [Pipeline] // load
    [Pipeline] echo
    
        Lucy come from Haidian Beijing, he is 18 old. he's phone number is
        13912345678, or you can contact he via lucy@demo.com, he is not marry yet.
        
    [Pipeline] }
    [Pipeline] // script
    [Pipeline] }
    [Pipeline] // stage
    [Pipeline] stage
    [Pipeline] { (check serive up)
    [Pipeline] script
    [Pipeline] {
    [Pipeline] echo
    SMOKE TEST: check service startup
    [Pipeline] }
    [Pipeline] // script
    [Pipeline] }
    [Pipeline] // stage
    [Pipeline] stage
    [Pipeline] { (check UI login)
    [Pipeline] script
    [Pipeline] {
    [Pipeline] echo
    SMOKE TEST: check UI login success
    [Pipeline] }
    [Pipeline] // script
    [Pipeline] }
    [Pipeline] // stage
    [Pipeline] stage
    [Pipeline] { (Integrate-ModelA)
    Stage "Integrate-ModelA" skipped due to when conditional
    [Pipeline] }
    [Pipeline] // stage
    [Pipeline] stage
    [Pipeline] { (Integrate-ModelB)
    Stage "Integrate-ModelB" skipped due to when conditional
    [Pipeline] }
    [Pipeline] // stage
    [Pipeline] }
    [Pipeline] // withEnv
    [Pipeline] }
    [Pipeline] // withEnv
    [Pipeline] }
    [Pipeline] // node
    [Pipeline] End of Pipeline
    Finished: SUCCESS

    实验完成


    参考文献:https://blog.csdn.net/u011541946/article/details/89322510 

  • 相关阅读:
    游览器保存密码和自动填充密码的困惑 (browser save password and auto fill password )
    SQL basic
    ui router digest 10 time
    HttpCookie
    web api 2 学习笔记 (OData Batch request)
    $provide.decorator
    Entity Framewor 学习笔记 (碎碎的东西)
    生活类App原型制作分享-AnyList
    2019年网页设计趋势前瞻,先睹为快!
    Mockplus3.5.0.1新增标注功能
  • 原文地址:https://www.cnblogs.com/zyxnhr/p/11872547.html
Copyright © 2011-2022 走看看