日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Jenkins Pipeline 配置企业微信通知(try-catch捕获build failed)

發布時間:2023/12/14 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Jenkins Pipeline 配置企业微信通知(try-catch捕获build failed) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 1 消息推送代碼及實現原理
  • 2 try-catch捕獲build failed

目前 Jenkins 有自帶的 qy-wechat-notification-plugin這個插件可以直接配置企業微信機器人的 Webhook 地址,即可實現build之后進行企業微信通知的功能。但是這個插件只能在 Freestyle project 等帶有 Post build actionProject中調用,如下圖:

若 Project 為 Pipeline ,那么是無法直接調用此插件,原因是Pipeline中沒有Post-build Actions這個參數,如下圖:

為了解決這個問題,搜索了好多資料,最后找到了一篇文章,參考文章如下,稍加修改即可實現try-catch捕獲build failed

持續集成之企業微信通知:5:在Jenkins中向企業微信推送消息

下邊開始詳細說下

1 消息推送代碼及實現原理

send_message.sh

#!/bin/sh # 此腳本可實現jenkins往企業微信和釘釘推送消息usage(){echo "usage: $0 TYPE TITLE CONTENT [URL]"echo " TYPE: wechat|dingtalk" }TYPE="$1" TITLE="$2" CONTENT="$3" URL="$4"CHAT_CONTENT_TYPE='Content-Type: application/json' DEFAULT_PIC_URL="https://img-blog.csdnimg.cn/20191227152859635.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9saXVtaWFvY24uYmxvZy5jc2RuLm5ldA==,size_16,color_FFFFFF,t_70" DINGTALK_DEFAULT_WORDS=" [LiuMiaoMsg]" if [ $# -lt 3 ]; thenusageexit 1 fiif [ _"${TYPE}" = _"wechat" ]; thenCHAT_WEBHOOK_URL='https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key' elif [ _"${TYPE}" = _"dingtalk" ]; thenCHAT_WEBHOOK_URL='https://oapi.dingtalk.com/robot/send?access_token' elseusageexit 1 fiif [ _"${CHAT_WEBHOOK_KEY}" = _"" ]; thenecho "please make sure CHAT_WEBHOOK_KEY has been exported as environment variable"usageexit 1 fiif [ _"${URL}" = _"" ]; thenURL="https://blog.csdn.net/Mr_rsq/article/details/110956983" fiecho "## send message for : ${TYPE}" if [ _"${TYPE}" = _"wechat" ]; thencurl "${CHAT_WEBHOOK_URL}=${CHAT_WEBHOOK_KEY}" \-H "${CHAT_CONTENT_TYPE}" \-d '{"msgtype": "news","news": {"articles" : [{"title" : "'"${TITLE}"'","description" : "'"${CONTENT}"'","url" : "'"${URL}"'","picurl" : "'"${DEFAULT_PIC_URL}"'"}]}}' elif [ _"${TYPE}" = _"dingtalk" ]; thencurl "${CHAT_WEBHOOK_URL}=${CHAT_WEBHOOK_KEY}" \-H "${CHAT_CONTENT_TYPE}" \-d '{"msgtype": "link", "link": {"text": "'"${CONTENT}${DINGTALK_DEFAULT_WORDS}"'", "title": "'"${TITLE}"'", "picUrl": "'"${DEFAULT_PIC_URL}"'", "messageUrl": "'"${URL}"'"}}' elseusageexit 1 fi

實現原理:
其實原理很簡單,就是通過使用curl命令的-d和-H參數去模擬json格式的post請求,通過往send_message.sh腳本中傳入titlepicUrl等參數,從而實現企業微信通知的功能。

腳本使用:
(1)在使用send_message腳本之前需要先配置CHAT_WEBHOOK_KEY

export CHAT_WEBHOOK_KEY=xxxxxxxxxx

(2)然后直接執行腳本

bash send_message.sh wechat "rsq_test" "This is a test messages."

(3)企業微信中查看:

2 try-catch捕獲build failed

我這邊使用的的腳本化pipeline而不是聲明式pipeline,為了配置好也費了一番功夫,搜索了一大堆資料。
代碼如下:

try{node(LINUX) {stage('Build - Linux'){// build scripts ...} // stage} //node } //trycatch (e){// 捕獲錯誤,當Failed的時候給currentBuild.result賦值currentBuild.result = 'FAILURE' } //catchif(currentBuild.result == 'FAILURE') {node(env.BuildMachineLabel){stage("Post Build") {dir(env.ws_linux) {// 在使用send_message腳本之前需要先配置CHAT_WEBHOOK_KEYsh '''export CHAT_WEBHOOK_KEY=xxxxxxxxxxbash send_message.sh wechat "Linux %JOB_NAME% build failed." "URL: %BUILD_URL%" "%BUILD_URL%"'''} // dir} // stage} // node } // if

通過Jenkins的內置變量,最后可以直接推送build failed的Job_url,執行如下命令

bash send_message.sh wechat "Ubuntu %JOB_NAME% build failed." "URL: %BUILD_URL%" "%BUILD_URL%"

Jenkins內置變量

PS:try-catch支持的命令(略多)

acceptGitLabMR, addGitLabMRComment, archive, bat, build, catchError, checkout, container, containerLog, deleteDir, dir, dockerFingerprintFrom, dockerFingerprintRun, dockerNode, echo, emailext, emailextrecipients, envVarsForTool, error, fileExists, findBuildScans, getContext, git, gitlabBuilds, gitlabCommitStatus, httpRequest, input, isUnix, junit, library, libraryResource, load, lock, mail, milestone, node, p4, p4approve, p4publish, p4sync, p4tag, p4unshelve, parallel, podTemplate, powershell, properties, publishHTML, pwd, pwsh, readFile, readTrusted, resolveScm, retry, script, sh, sleep, stage, stash, step, svn, timeout, timestamps, tm, tool, unarchive, unstable, unstash, updateGitlabCommitStatus, validateDeclarativePipeline, waitUntil, warnError, withContext, withCredentials, withDockerContainer, withDockerRegistry, withDockerServer, withEnv, wrap, writeFile, ws] or symbols [all, allOf, allure, always, ant, antFromApache, antOutcome, antTarget, any, anyOf, apiToken, approve, architecture, archiveArtifacts, artifactManager, attach, authorizationMatrix, autoClean, batchFile, bitbucket, booleanParam, branch, brokenBuildSuspects, brokenTestsSuspects, buildButton, buildDescription, buildDiscarder, buildName, buildTimestamp, buildTimestampExtraProperties, buildingTag, caseInsensitive, caseSensitive, certificate, changeRequest, changelog, changeset, checkoutToSubdirectory, choice, choiceParam, cleanWs, cleanup, clientSpec, clock, cloud, command, configMapVolume, containerEnvVar, containerLivenessProbe, containerTemplate, credentials, cron, crumb, culprits, default, defaultView, demand, depotSource, developers, disableConcurrentBuilds, disableResume, docker, dockerCert, dockerfile, downloadSettings, downstream, dumb, durabilityHint, dynamicPVC, emptyDirVolume, emptyDirWorkspaceVolume, envVar, envVars, environment, equals, expression, file, fileParam, filePath, fingerprint, fishEye, flushOnly, forceClean, frameOptions, freeStyle, freeStyleJob, fromScm, fromSource, git, gitBranchDiscovery, gitHubBranchDiscovery, gitHubBranchHeadAuthority, gitHubForkDiscovery, gitHubSshCheckout, gitHubTagDiscovery, gitHubTrustContributors, gitHubTrustEveryone, gitHubTrustNobody, gitHubTrustPermissions, gitLabConnection, gitTagDiscovery, github, githubPush, gitlab, globalLib, gradle, graphClean, graphSource, headRegexFilter, headWildcardFilter, hostPathVolume, hostPathWorkspaceVolume, hyperlink, hyperlinkToModels, incremental, inheriting, inheritingGlobal, installSource, isRestartedRun, jdk, jdkInstaller, jgit, jgitapache, jnlp, jobName, kubernetes, label, lastDuration, lastFailure, lastGrantedAuthorities, lastStable, lastSuccess, legacy, legacySCM, list, local, location, logRotator, loggedInUsersCanDoAnything, manualSpec, masterBuild, matrix, maven, maven3Mojos, mavenErrors, mavenMojos, mavenWarnings, merge, modernSCM, multiBranch, multiGraph, multiStreams, multiSwarm, myView, never, newContainerPerStage, nfsVolume, nfsWorkspaceVolume, node, nodeProperties, nonInheriting, none, not, note, onFailure, openGrok, override, overrideIndexTriggers, p4Trigger, p4Web, p4cleanup, p4groovy, p4sync, paneStatus, parallel, parallelsAlwaysFailFast, parameterizedCron, parameters, password, pathFilter, pattern, perforce, permanent, persistentVolumeClaim, persistentVolumeClaimWorkspaceVolume, pipeline-model, pipelineTriggers, plainText, plugin, podAnnotation, podEnvVar, podLabel, pollSCM, portMapping, preserveStashes, previewOnly, projectNamingStrategy, proxy, publish, queueItemAuthenticator, quietPeriod, qyWechatNotification, rateLimitBuilds, recipients, requestor, run, runParam, sSHLauncher, schedule, scmRetryCount, scriptApproval, scriptApprovalLink, search, secretEnvVar, secretVolume, security, shell, shelve, skipDefaultCheckout, skipStagesAfterUnstable, slave, sourceRegexFilter, sourceWildcardFilter, specFileSpec, ssh, sshUserPrivateKey, stackTrace, standard, staticSpec, status, streamSource, streamSpec, string, stringParam, submit, swapSpace, swarm, syncOnly, tag, templateSource, templateSpec, text, textParam, ticket, ticketMode, tmpSpace, toolLocation, triggeredBy, trust, unsecured, unshelve, upstream, upstreamDevelopers, user, userFilter, userSeed, usernameColonPassword, usernamePassword, viewFilter, viewPattern, viewsTabBar, weather, withAnt, zfs, zip] or globals [currentBuild, docker, env, params, pipeline, scm]

總結

以上是生活随笔為你收集整理的Jenkins Pipeline 配置企业微信通知(try-catch捕获build failed)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。