iT邦幫忙

2022 iThome 鐵人賽

DAY 13
2
DevOps

從零開始的 Jenkins 之旅系列 第 13

第十三天 Jenkins 之旅:Parameter

  • 分享至 

  • xImage
  •  

前言

在 Jenkins 使用當中,是否有遇到兩個 pipeline 只差了一點點的呢? 在 Jenkinsfile 中我們可以引入 parameter 來解決這個困擾。

// A pipeline
pipeline{
    agent any
    stages{
        stage('Sample'){
            steps{
                echo "This is ithome speaking."
            }
        }
    }
}
// B pipeline
pipeline{
    agent any
    stages{
        stage('Sample'){
            steps{
                echo "This is jenkins speaking."
            }
        }
    }
}

使用 Parameter

The parameters directive provides a list of parameters that a user should provide when triggering the Pipeline. The values for these user-specified parameters are made available to Pipeline steps via the params object, see the Parameters, Declarative Pipeline for its specific usage.
(https://www.jenkins.io/doc/book/pipeline/syntax/#parameters)

依照官網,我們可以先將常見 parameter 分成下列幾種

  1. Boolean Parameter:可以配合 script 中的 if else,作為外部決定單一區塊是否執行的依據。
pipeline{
    parameters {
        booleanParam(name: 'POC', defaultValue: false)
    }
    ......
    script{
        if (params.POC){
            // do poc processing
        } else{
            ......
        }
    }
}
  1. String Parameter:可以配合 script 中的 if else,作為外部決定單一區塊是否執行的依據。
pipeline{
    parameters {
        text(name: 'env', defaultValue: 'testing')
    }
    ......
    script{
        if (params.env == "testing"){
            // do testing processing
        } else if (params.env == "poc"){
            // do poc processing
        } else if (params.env == "prod"){
            // do production processing
        } else {
            // error handling
        }
    }
}
  1. Choice Parameter:可以配合 script 中的 if else,作為外部決定單一區塊是否執行的依據,但是可以限制 parameter 的傳入值。
pipeline{
    parameters {
        choice(name: 'env', choices: ['testing', 'poc', 'prod'])
    }
    ......
    script{
        if (params.env == "testing"){
            // do testing processing
        } else if (params.env == "poc"){
            // do poc processing
        } else if (params.env == "prod"){
            // do production processing
        }
    }
}
  1. Password Parameter:可以進行敏感資訊的注入,不會在 console 顯示密碼內容。
pipeline{
    parameters {
        password(name: 'db_passwd')
    }
    ......
    script{
        sh "psql postgresql://root:${params.db_passwd}@127.0.0.1:5432/sample-db"
    }
}

建議用 Credentials Binding Plugin 取代。


所以今天一開始提到的範例我們可以用 String Parameter 來做優化。

pipeline{
    parameters {
        text(name: 'Who', defaultValue: '')
    }
    agent any
    stages{
        stage("Sample"){
            steps{
                echo "This is ${params.Who} speaking."
            }
        }
    }
}

參考資料

https://blog.johnwu.cc/article/jenkins-pipeline-job-boolean-parameter.html
https://www.jenkins.io/doc/book/pipeline/syntax/#parameters


上一篇
第十二天 Jenkins 之旅: Parallel
下一篇
第十四天 Jenkins 之旅:When
系列文
從零開始的 Jenkins 之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言