当前位置:首页 > 技术 > 正文内容

基于 Jenkins Webhook 与 Docker 的 .NET Core 自动化发布进阶实践

访客 技术 2026年11月3日 1

在实现了基础的 Jenkins 自动化部署后,为了进一步提升研发效率和流水线的可靠性,我们需要引入 Webhook 触发机制、自定义邮件通知以及条件化构建等高级特性。本文将深入探讨如何基于 Jenkins 与 Docker 实现 .NET Core 项目的进阶持续集成与持续部署(CI/CD)。

一、配置 Webhook 自动化触发机制

通过 Webhook,代码托管平台(如 Gitee、GitHub 或 GitLab)可以在开发者提交代码时自动通知 Jenkins 启动构建任务,无需人工干预。

1. 插件准备

在 Jenkins 插件管理中安装 Gitee 或 Gogs 插件,根据你使用的 Git 托管平台而定。安装完成后,在 Jenkins 项目配置中会看到相应的触发器选项。

2. 生成安全令牌

为了保证通信安全,在 Jenkins 项目的"构建触发器"部分,勾选"Gitee WebHook",点击"生成"按钮获取 Secret Token。这个令牌将用于代码仓库的身份验证。

Jenkins Secret Token 配置

3. 代码平台回调设置

登录你的 Gitee 仓库,进入"管理" -> "WebHooks",点击"添加 WebHook"。

  • URL:填写 Jenkins 项目提供的回调地址。
  • 密码/令牌:填写上一步生成的 Secret Token。
  • 触发事件:通常选择"Push"事件。

配置完成后,每次 git push 都会触发 Jenkins 自动执行流水线。

二、自定义可视化邮件通知

基础的邮件通知过于简单,通过安装 Email Extension 插件,我们可以自定义 HTML 模板,将构建编号、状态、分支、提交摘要及日志链接通过邮件发送给团队成员。

1. 扩展邮件配置

在 Jenkins 系统配置的"Extended E-mail Notification"中设置 SMTP 服务器地址、用户名及密码。随后可定义全局的 HTML 邮件模板。

2. HTML 邮件模板参考


<html>
<body>
    <h2>项目构建报告:${PROJECT_NAME}</h2>
    <table border="1" cellspacing="0" cellpadding="5">
        <tr><td>构建编号</td><td>第 ${BUILD_NUMBER} 次构建</td></tr>
        <tr><td>构建状态</td><td><b style="color:red">${BUILD_STATUS}</b></td></tr>
        <tr><td>触发原因</td><td>${CAUSE}</td></tr>
        <tr><td>控制台日志</td><td><a href="${BUILD_URL}console">点击查看</a></td></tr>
    </table>
</body>
</html>

三、进阶 Jenkinsfile 流水线设计

以下是一个重构后的 Jenkinsfile,支持 Docker 镜像版本化管理、远程 SSH 部署以及构建结果邮件推送。


def targetServer = [:]
targetServer.name = 'ProductionServer'
targetServer.host = '192.168.1.100'
targetServer.user = 'admin'
targetServer.password = 'your-password'
targetServer.allowAnyHosts = true

pipeline {
    agent any

    environment {
        APP_NAME = "core-web-api"
        DOCKER_REGISTRY = "registry.cn-hangzhou.aliyuncs.com"
        REGISTRY_CREDS = credentials('docker-hub-secret')
        PUB_DIR = "${WORKSPACE}/out"
    }

    stages {
        stage('Restore & Build') {
            steps {
                sh "dotnet restore"
                sh "dotnet build --configuration Release"
            }
        }

        stage('Publish Artifacts') {
            steps {
                sh "dotnet publish -c Release -o ${PUB_DIR}"
            }
        }

        stage('Containerize') {
            steps {
                script {
                    sh "docker login -u ${REGISTRY_CREDS_USR} -p ${REGISTRY_CREDS_PSW}"
                    sh "docker build -t ${APP_NAME}:${BUILD_NUMBER} ${PUB_DIR}"
                    sh "docker tag ${APP_NAME}:${BUILD_NUMBER} ${DOCKER_REGISTRY}/${APP_NAME}:${BUILD_NUMBER}"
                    sh "docker push ${DOCKER_REGISTRY}/${APP_NAME}:${BUILD_NUMBER}"
                }
            }
        }

        stage('Remote Deployment') {
            steps {
                sshCommand remote: targetServer, command: """
                    docker pull ${DOCKER_REGISTRY}/${APP_NAME}:${BUILD_NUMBER}
                    docker stop ${APP_NAME} || true
                    docker rm ${APP_NAME} || true
                    docker run -d --name ${APP_NAME} -p 8080:80 ${DOCKER_REGISTRY}/${APP_NAME}:${BUILD_NUMBER}
                """
            }
        }
    }

    post {
        always {
            emailext (
                subject: "构建通知: ${PROJECT_NAME} - Build #${BUILD_NUMBER}",
                body: '${DEFAULT_CONTENT}',
                to: "dev-team@example.com"
            )
        }
    }
}

四、按需触发:基于 Commit Message 的构建过滤

在某些场景下,我们不希望每一次代码提交都触发正式环境的发布。可以通过配置 Gitee 插件的策略,设置"正则过滤"。

例如,在 Jenkins 项目配置中设置:只有当 Commit Message 包含 [release] 关键字时才触发流水线。这样,开发者在日常提交(如修复拼写错误)时,不会造成昂贵的构建资源浪费,只有在确定需要发布时才手动加入关键字触发 CI/CD。

Jenkins 触发器正则过滤配置
返回列表

上一篇:基于 Vite 与 Vue 3 构建现代化前端工程

没有最新的文章了...

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。