1. <th id="orwrz"></th>
        <tbody id="orwrz"><pre id="orwrz"></pre></tbody>
      2. <rp id="orwrz"><object id="orwrz"></object></rp>
        首頁 運維干貨使用Jenkins擴展共享庫進行釘釘消息推送

        使用Jenkins擴展共享庫進行釘釘消息推送

        運維派隸屬馬哥教育旗下專業運維社區,是國內成立最早的IT運維技術社區,歡迎關注公眾號:yunweipai
        領取學習更多免費Linux云計算、Python、Docker、K8s教程關注公眾號:馬哥linux運維

        起因:執行完流水線后進行一定程度的消息推送,所以選擇釘釘進行jenkins構建結構的消息推送

        下載配置相關依賴插件

        相關環境:

        • Jenkins2.277.3,安裝文檔見上篇
        • DingTalk 插件 2.4.3
        • build user vars plugin 插件 1.7
        1. 在Jenkins中安裝釘釘插件DingTalk

        :warning: 請確保你的 Jenkins 版本 >= 2.176.4

        1. 釘釘機器人配置,說明文檔

        找到 Jenkins 首頁 >> 系統管理 >> 釘釘,我的配置如下圖

        image-20210426164341273

        :warning: ?注意手動輸入機器人的id,不要自動生成,否則重啟后,robot的id將發生變化

        1. 安裝build user vars plugin插件,插件可能有相關版本依賴,需要重啟一下 Jenkins 才能繼續安裝

        在流水線中,使用wrap,獲取BUILD_USER變量

        wrap([$class: 'BuildUser']) {
        }
        

        創建配置共享庫

        編寫Groovy腳本

        項目目錄結構如下:

        $ tree jenkinslibrary
        jenkinslibrary
        ├── README.md
        └── src
            └── org
                └── devops
                    └── dingmes.groovy
        
        3 directories, 2 files
        

        dingme.groovy文件內容如下

        package org.devops
        
        def GetChangeString() {
            MAX_MSG_LEN = 100
            def changeString = ""
            def changeLogSets = currentBuild.changeSets
            for (int i = 0; i < changeLogSets.size(); i++) {
                def entries = changeLogSets[i].items
                for (int j = 0; j < entries.length; j++) {
                    def entry = entries[j]
                    truncated_msg = entry.msg.take(MAX_MSG_LEN)
                    commitTime = new Date(entry.timestamp).format("yyyy-MM-dd HH:mm:ss")
                    changeString += "> - {truncated_msg} [{entry.author} {commitTime}]\n"
                }
            }
            if (!changeString) {
                changeString = "> - No new changes"
            }
            return changeString
        }
        
        def DingdingReq(RobotID, Status) {
            wrap([class: 'BuildUser']) {
                def changeString = GetChangeString()
                dingtalk (
                    robot: RobotID,
                    type: 'MARKDOWN',
                    title: '你有新的消息,請注意查收',
                    text: [
                        "### 構建信息",
                        "> - 應用名稱:**{env.JOB_NAME}**",
                        "> - 構建結果:**{Status}**",
                        "> - 當前版本:**{env.BUILD_NUMBER}**",
                        "> - 構建發起:**{env.BUILD_USER}**",
                        "> - 持續時間:**{currentBuild.durationString}**",
                        "> - 構建日志:[點擊查看詳情]({env.BUILD_URL}console)",
                        "### 更新記錄:",
                        "${changeString}"
                    ],
                    at: [
                        'xxxxxxxxxxx'
                    ]
                )
            }
        }
        

        文本中xxxxxxxxxxx請根據實際情況更換為釘釘群組里面,具體人的手機號,可以添加多個

        在 Jenkins 中配置將共享庫

        找到 Jenkins 首頁 >> 系統管理 >> Global Pipeline Libraries,我的配置如下圖

        image-20210426171913350

        在流水線中導入共享庫

        導入方法@Library('pipeline-library-demo')_,這樣就可以使用共享庫中的代碼了

        具體的 pipeline 腳本如下:

        #!groovy
        
        @Library('pipeline-library-demo')_
        
        //func from shareibrary
        def dingmes = new org.devops.dingmes()
        
        //env
        String branchName = "master"
        String gitlabCredentialsId = "xxx"
        String gitUrl = "http://xxx/xxx/jenkinslibrary.git"
        String robotId = "2e0e11c4-2211-4687-b317-cacf58197288"
        
        pipeline {
            agent any
        
            stages {
                stage('Git Clone') {
                    steps {
                        git branch: "{branchName}",
                        credentialsId: "{gitlabCredentialsId}",
                        url: "${gitUrl}"
                    }
                }
            }
            post {
                success {
                    script {
                        dingmes.DingdingReq(robotId, "構建成功 ?")
                    }
                }
                failure {
                    script {
                        dingmes.DingdingReq(robotId, "構建失敗 ?")
                    }
                }
            }
        }
        

        至此完成,構建效果如下圖:

        image-20210426172713667

        遇到的問題

        1. currentBuild.durationString的值傳遞不進去,一開始先用withEnv包裹一下

        后來找到原因 Groovy 在單引號的字符串里面是不支持插值的,所以要用雙引號

        單引號中的env.JOB_NAME會引用失敗,雙引號則引用成功

        單、雙引號引用JOB_NAME都引用成功

        推薦所有變量都用””雙引號

        三引號也是一樣,”’ 三單引號不支持插值,”””三雙引號支持插值

        參考鏈接:https://www.ssgeek.com/post/jenkinssharelibrary-shi-jian-zhi-zi-ding-yi-tong-zhi-qi/

        本文鏈接:http://www.abandonstatusquo.com/39879.html

        網友評論comments

        發表評論

        您的電子郵箱地址不會被公開。

        1. iMJMJ說道:

          來瞅瞅啦~~~~~

        Copyright ? 2012-2022 YUNWEIPAI.COM - 運維派 京ICP備16064699號-6
        掃二維碼
        掃二維碼
        返回頂部
        十分钟免费观看视频高清下载