• <dd id="hdgin"><track id="hdgin"></track></dd>
  • <em id="hdgin"><tr id="hdgin"></tr></em>
  • <th id="hdgin"><track id="hdgin"><noframes id="hdgin"></noframes></track></th>
        <rp id="hdgin"><ruby id="hdgin"></ruby></rp>

        <legend id="hdgin"><noscript id="hdgin"><video id="hdgin"></video></noscript></legend>
          <dd id="hdgin"><track id="hdgin"></track></dd>
            首頁 運維干貨使用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://m.abandonstatusquo.com/39879.html

            網友評論comments

            發表評論

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

            1. iMJMJ說道:

              來瞅瞅啦~~~~~

            Copyright ? 2012-2022 YUNWEIPAI.COM - 運維派 京ICP備16064699號-6
            掃二維碼
            掃二維碼
            返回頂部
            久久久久亚洲国内精品|亚洲一区二区在线观看综合无码|欧洲一区无码精品色|97伊人久久超碰|一级a爱片国产亚洲精品