当前位置: 首页 > news >正文

品牌网站开发动态模块wordpress单页留言板

品牌网站开发动态模块,wordpress单页留言板,wordpress 注册 邮件,wordpress做门户网文章目录1. 环境2. 用到的插件3. 流水线部署脚本1. 环境 Centos7Jenkins2.5.0JDKopen17阿里云仓库 注意:这个版本兼容需要特别注意,要不然会很麻烦 2. 用到的插件 Generic Webhook Trigger 3. 流水线部署脚本 兼容钩子部署(webhook&…

文章目录

  • 1. 环境
  • 2. 用到的插件
  • 3. 流水线部署脚本

1. 环境

  • Centos7
  • Jenkins2.5.0
  • JDKopen17
  • 阿里云仓库

注意:这个版本兼容需要特别注意,要不然会很麻烦

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: 'git@codeup.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 ?: 'webhook'def commitHash = sh(script: 'git rev-parse HEAD', returnStdout: true).trim()def committer = sh(script: 'git log -1 --pretty=format:"%an"', returnStdout: true).trim()def commitMessage = sh(script: 'git log -1 --pretty=format:"%s"', returnStdout: true).trim()def rawCommitTime = sh(script: 'git log -1 --pretty=format:"%cd" --date=iso', 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_token=your_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 状态码)}
}
http://www.dtcms.com/a/554321.html

相关文章:

  • 蓝桥杯高校新生编程赛第三场题解——Java
  • 网站多国语言设计东莞阿里巴巴代运营
  • 用 Gitea 给 StackEdit 搭一个「图床」- 详细步骤截图
  • ArcGIS图斑属性自动智能填写!告别手动低效输入
  • SSM房屋租售软件18fu9ew8(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 财务管理|基于SprinBoot+vue的个人财务管理系统(源码+数据库+文档)
  • 番禺网站制作技术如何建网站免费
  • 网站文字优化方案电子商务公司简介怎么写
  • #leetcode#
  • 上海做网站去哪里免费网站建设ppt
  • 已有网站域名 怎么做网站wordpress活动报名插件
  • 图的基本概述
  • [Dify 实战] 使用 Ollama + Dify 打造免费 GPT-4o 本地应用:离线智能助手全流程
  • 通知:大可Ai镜像版更名为 GPT-Mirrors
  • 配置Docker镜像源
  • 有视频接口怎么做网站wordpress获取指定图片大小
  • 洛阳网站推广方式广州住建厅官方网站
  • 专业网站建设全包中职学校网站建设的厂家
  • 《AMQP-CPP——轻量级的 RabbitMQ C++ 客户端库》
  • 《UniApp 页面配置文件pages.json》
  • SQLBot:基于大模型和RAG的智能问数系统
  • STM32程序下载/串口一键下载电路
  • 邯郸做网站的电话网站怎么做优化推广
  • 《Unity渲染工具协同进阶:跳出单一工具的局限》
  • 【SOA仿真】SOA增益饱和特性仿真2
  • COOKIE 数据提交注入测试 sqlilabs less 20
  • EasyExcel 流式处理中实现末尾行过滤的技术方案
  • 免费网址导航网站建设编程培训班学费是多少
  • 内推网站企业网站后台管理软件
  • 广州公司网站电脑全自动挂机赚钱