<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 7323字,需瀏覽 15分鐘

           ·

          2021-05-14 15:14


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

          下載配置相關依賴插件

          相關環(huán)境:

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

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

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

          找到 Jenkins 首頁 >> 系統(tǒng)管理 >> 釘釘,我的配置如下圖

          image-20210426164341273

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

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

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

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

          創(chuàng)建配置共享庫

          編寫Groovy腳本

          項目目錄結構如下:

          $ tree jenkinslibrary
          jenkinslibrary
          ├── README.md
          └── src
              └── org
                  └── devops
                      └── dingmes.groovy

          3 directories, 2 files

          dingme.groovy文件內(nèi)容如下

          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}**",
                          "> - 構建發(fā)起:**${env.BUILD_USER}**",
                          "> - 持續(xù)時間:**${currentBuild.durationString}**",
                          "> - 構建日志:[點擊查看詳情](${env.BUILD_URL}console)",
                          "### 更新記錄:",
                          "${changeString}"
                      ],
                      at: [
                          'xxxxxxxxxxx'
                      ]
                  )
              }
          }

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

          在 Jenkins 中配置將共享庫

          找到 Jenkins 首頁 >> 系統(tǒng)管理 >> 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/


          點擊下方“閱讀原文”查看更多

          瀏覽 55
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  免费 国产 无码99久久久 | 色中色在线视频 | 91丨人妻丨偷拍 | 干逼特写| 亚洲自拍中文 |