iT邦幫忙

2022 iThome 鐵人賽

DAY 11
2
DevOps

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

第十一天 Jenkins 之旅:For loop

  • 分享至 

  • xImage
  •  

前言

今天來讓我們介紹在 Jenkinsfile 中 for loop 的實現方式。

範例需求

現在有一個 A 服務,我們需要監控 A 服務穩定性,而他的穩定性取決於他後面的 API (a server, b server, c server) 是否同時存活。判斷 server 的存活以 curl 每台 server /healthz 的回傳是否正常為主。

依照之前介紹過的語法我們可以寫出類似下面的 Jenkinsfile

pipeline{
    agent any
    stages{
        stage('check a server'){
            steps{
                sh 'curl http://a-server:8000/healthz'
            }
        }
        stage('check b server'){
            steps{
                sh 'curl http://b-server:8000/healthz'
            }
        }
        stage('check c server'){
            steps{
                sh 'curl http://c-server:8000/healthz'
            }
        }        
    }
}

但是應該可以簡單發現,上面的範例 Jenkinsfile 實在是寫的太冗長,且大部分行為都是相同的,故讓我們引入 for loop 的概念來改善 Jenkinsfile 吧。

將我們的 server 清單抽出成一個 list server_list = ['a', 'b', 'c'],再將主要 health check 的邏輯抽成下列function, input(list) 為 server 清單,output 為多個 stage

def check_server_status(list) {
    for (int i = 0; i < list.size(); i++) {
        stage("${list[i]} server status"){
            sh "curl http://${list[i]}-server:8000/healthz"
            // testing
            //echo "curl http://${list[i]}-server:8000/healthz"
        }
    }
}

最後整合成新的 pipeline 如下

server_list = ['a', 'b', 'c']

pipeline{
    agent any
    stages{
        stage('check service status') {
            steps{
                check_server_status(server_list)
            }
        }
    }
}


def check_server_status(list) {
    for (int i = 0; i < list.size(); i++) {
        stage("${list[i]} server status"){
            sh "curl http://${list[i]}-server:8000/healthz"
            // testing
            //echo "curl http://${list[i]}-server:8000/healthz"
        }
    }
}

https://ithelp.ithome.com.tw/upload/images/20220911/20151613P2EkEKhhKq.png

for loop screen shot

小結

今天我們成功的將冗長的 Jenkinsfile 以更加精簡的方式修改,明天稍微變化一下今天的需求,再來看看要怎麼修改我們的 Pipeline 吧~

Github 專案連結

ithome-jenkins

參考資料

https://gist.github.com/oifland/ab56226d5f0375103141b5fbd7807398


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

尚未有邦友留言

立即登入留言