遵义网站开发哪家便宜,做网站推广好做吗,图片的制作方法,南宁企业宣传片制作文章目录1. 环境2. 用到的插件3. 流水线部署脚本1. 环境
Centos7Jenkins2.5.0JDKopen17阿里云仓库
注意#xff1a;这个版本兼容需要特别注意#xff0c;要不然会很麻烦
2. 用到的插件
Generic Webhook Trigger
3. 流水线部署脚本
兼容钩子部署#xff08;webhook这个版本兼容需要特别注意要不然会很麻烦
2. 用到的插件
Generic Webhook Trigger
3. 流水线部署脚本
兼容钩子部署webhook和手动参数化部署优先取钩子的推送参数没有的话取手动参数根据推送的分支进行不同的部署操作推送结果到钉钉通知
pipeline {agent any// 定义参数化构建parameters {string(name: MANUAL_BRANCH, defaultValue: , description: 手动指定要部署的分支如 master, dev, test)}triggers {GenericTrigger(genericVariables: [[key: ref, value: $.ref], // 获取分支信息[key: repository_name, value: $.repository.name] // 获取仓库名称],causeString: Triggered by push event on branch $ref,token: AZWSDD2555SSWS, // 自定义的TokenprintContributedVariables: true, // 打印传递的变量silentResponse: false,regexpFilterText: $ref, // 匹配分支名regexpFilterExpression: ^refs/heads/(dev|test)$ // 只处理特定分支)}stages {stage(Determine Branch) {steps {script {// 优先使用Webhook传递的分支信息if (env.ref) {env.BRANCH_NAME env.ref.tokenize(/)[-1]echo Using webhook-triggered branch: ${env.BRANCH_NAME}} // 如果没有Webhook信息检查是否有手动输入的分支else if (params.MANUAL_BRANCH?.trim()) {env.BRANCH_NAME params.MANUAL_BRANCH.trim()echo Using manually specified branch: ${env.BRANCH_NAME}} // 如果两者都没有抛出错误else {error No branch specified! Please provide a branch via manual input or webhook.}}}}stage(Checkout Code) {steps {git branch: env.BRANCH_NAME,url: gitcodeup.aliyun.com:test.git,credentialsId: jenkins密钥ID}}stage(Build and Deploy) {steps {echo Performing actions for branch: ${env.BRANCH_NAME}script {if (env.BRANCH_NAME master) {sh ssh 1.11.11.11 cd /home/test git pull} else if (env.BRANCH_NAME dev) {sh cd /home/dev git pull} else if (env.BRANCH_NAME test) {sh cd /home/test git pull} else {error Unsupported branch: ${env.BRANCH_NAME}. No deployment logic defined.}}}}}post {success {notifyDingTalk(SUCCESS) // 构建成功时通知}failure {notifyDingTalk(FAILURE) // 构建失败时通知}}
}// 定义通用的钉钉通知方法
def notifyDingTalk(String buildStatus) {script {// 获取构建信息def branchName env.BRANCH_NAMEdef duration currentBuild.durationStringdef executor currentBuild.getBuildCauses(hudson.model.Cause$UserIdCause)?.userId ?: webhookdef commitHash sh(script: git rev-parse HEAD, returnStdout: true).trim()def committer sh(script: git log -1 --prettyformat:%an, returnStdout: true).trim()def commitMessage sh(script: git log -1 --prettyformat:%s, returnStdout: true).trim()def rawCommitTime sh(script: git log -1 --prettyformat:%cd --dateiso, returnStdout: true).trim()def formattedCommitTime new java.text.SimpleDateFormat(yyyy-MM-dd HH:mm:ss).format(new java.text.SimpleDateFormat(yyyy-MM-dd HH:mm:ss Z).parse(rawCommitTime))// 获取变更内容修改的文件列表def changedFiles sh(script: git diff --name-only HEAD~1 HEAD, returnStdout: true).trim()// 动态生成标题和状态颜色def (statusTitle, statusColor) buildStatus SUCCESS ? [构建成功, #00FF00] : [构建失败, #FF0000]// 获取项目名从环境变量或静态配置中def projectName env.JOB_NAME ?: 未知项目// 构造钉钉消息内容def message ## Jenkins font color${statusColor}${statusTitle}/font通知
- **项目**: ${projectName}
- **分支**: ${branchName}
- **状态**: font color${statusColor}${buildStatus}/font
- **持续时间**: ${duration}
- **执行人**: ${executor}
- **代码推送人**: ${committer}
- **提交哈希**: ${commitHash}
- **提交时间**: ${formattedCommitTime}
- **提交信息**: ${commitMessage}
- **变更内容**: ${changedFiles ?: 无变更内容}
.stripIndent()// 钉钉机器人配置def dingtalkWebhookUrl https://oapi.dingtalk.com/robot/send?access_tokenyour_token// 使用 JsonOutput 生成 JSON 数据def payload groovy.json.JsonOutput.toJson([msgtype: markdown,markdown: [title: [${projectName}] Jenkins ${statusTitle}通知,text: message],at: [isAtAll: true]])httpRequest(url: dingtalkWebhookUrl,httpMode: POST,contentType: APPLICATION_JSON_UTF8, // 确保 UTF-8 编码requestBody: payload,validResponseCodes: 200:299 // 接受 200-299 状态码)}
}