iT邦幫忙

2022 iThome 鐵人賽

DAY 24
1
DevOps

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

第二十四天 Jenkins 之旅: 我的 BI 報表 Pipeline (4)

  • 分享至 

  • xImage
  •  

到昨天為止,我們已經大致完成我們的 CI/CD pipeline,接下來來說一下是如何串接他們的,這邊要再多介紹一個 Jenkins 的 Plugin Pipeline: Build Step,這個 plugin 可以讓我們在 Jenkinsfile 中藉由 function build 來讓兩個 pipeline 之間做串接。以我們這次的 CI/CD pipeline 為例子:

pipeline{
    ......
    stages{
        stage("Setup registry auth"){
            ......
        }

        stage("build and test the project") {
            ......
        }

        stage("Build"){
            ......
        }

        stage("Push"){
            ......
        }
        stage("Update Latest image"){
            ......
        }
        stage("Deploy to kubernetes"){
            when {
                tag "*"
            } 
            steps{
                build(
                    job: 'ithome-crawler-cd',
                    parameters: [
                        string(name: 'K8S_NAMESPACE', value: 'prod')
                        string(name: 'IMAGE_TAG', value: ${env.BRANCH_NAME}),
                        string(name: 'K8S_CRONJOB', value: '0 16 * * *'),
                    ]
                )
            }
        }
    }
    ......
}

我在最後新增了一個 stage - Deploy to kubernetes。宣告說當 branch 為 tag 時,會自動觸發 CD pipeline (ithome-crawler-cd) 執行,並且同時宣告此次觸發時的參數,包含 k8s_namespace (K8S_NAMESPACE)、此次 release 的 pod 要使用的 image tag (IMAGE_TAG) 以及 cronjob 執行頻率(K8S_CRONJOB)

再來,我們也同時在 CD pipeline 修改部分內容,將本來 K8S_NAMESPACE 是由 env 決定改為由 parameters 決定。

parameters {
    string(name: 'IMAGE_TAG')
    string(name: 'K8S_CRONJOB')
    string(name: 'K8S_NAMESPACE')
}

為了讓我們可以在每次的部署時,更簡易的在 UI 觀察部署資訊,這邊我們在 CD pipeline 執行時,新增一個 stage - Tag job 來更新 currentBuild.description 的內容:

stage("Tag job"){
    steps {
        script{
            currentBuild.description = """
                <ul>
                    <li>Release tag  @ ${params.IMAGE_TAG}</li>
                    <li>Deploy namespace @ ${params.K8S_NAMESPACE}</li>
                    <li>Cronjob @ ${params.K8S_CRONJOB}</li>
                </ul>
            """
        }
    }
}

這邊我已經將 Markup Formatter 由預設的 Plain text 改為 Safe HTML,所以在 currentBuild.description 中我寫的會是 html 的 tag。

可以到 Manage Jenkins >> Configure Global Security >> Markup Formatter 做更改。

實際效果,可以在執行結果下方的 description 看到部署相關資訊,亦可依照實際需求新增修改 description 的資訊。個人認為這是一個非常有幫助的功能,非常推薦大家在自己的 pipeline 中使用。
https://ithelp.ithome.com.tw/upload/images/20220924/20151613NjqEUa71LS.png

小結

此次的 CI/CD pipeline 其實還有很多需要優化的地方,但是因為時間有限,所以就先寫到這邊,剩下有興趣的人可以到 Github 持續追蹤,我有空的時候還是會持續更新...... 大概吧?
目前已基本完成 CI/CD 的自動化,我們也預留了當發生個什麼萬一需要手動更版的時候,也可以在 CD Pipline 中藉由 paramters 的傳入實現更版,並且在每次執行後,留下 description 以作為後續追查時使用。

參考資料

https://www.w3schools.com/html/html_lists.asp
https://opensource.triology.de/jenkins/pipeline-syntax/globals


上一篇
第二十三天 Jenkins 之旅: 我的 BI 報表 Pipeline (3)
下一篇
第二十五天 Jenkins 之旅: 我的 BI 報表 Pipeline (5)
系列文
從零開始的 Jenkins 之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言