关键在于动态生成可点击的构建产物URL,需三步协同:归档产物(archiveArtifacts)、确保URL可达(配置权限与JENKINS_URL)、在HTML模板中用${BUILD_URL}artifact/等变量正确引用。

要在 Linux 环境下的 Jenkins 中利用 Email-Ext 插件发送含构建产物链接的发布通知,关键不是“发邮件”,而是让邮件内容能动态拼出指向最新构建产物(如 .jar、.zip、index.html 等)的可点击 URL。这需要三步协同:产物归档、URL 可达、模板中正确引用。
确保构建产物已归档并有稳定访问路径
Email-Ext 本身不生成或托管文件,它只负责发链接。所以第一步必须让产物在 Jenkins 内部或外部 Web 服务中可被 URL 访问:
- 在 Pipeline 中用
archiveArtifacts显式归档关键产物,例如:archiveArtifacts artifacts: 'target/*.jar, dist/**/*', allowEmptyArchive: true - 确认 Jenkins 主界面 → 项目页 → 左侧菜单有 “Last Successful Artifacts” 或 “Build Artifacts” 入口,说明归档成功
- 若产物需长期保留,建议搭配 Publish over SSH 或 Artifactory Plugin 推送到独立仓库,再在邮件里写该仓库的固定 URL(如
https://nexus.example.com/repository/releases/com/app/1.2.0/app-1.2.0.jar)
在邮件模板中用 Jenkins 内置变量构造产物链接
Email-Ext 支持 Token Macro 插件提供的变量,可直接拼出当前构建的归档地址。常用组合如下:
-
指向本次构建所有归档文件列表页:
${BUILD_URL}artifact/(例如http://jenkins.example.com/job/myapp/123/artifact/) -
指向某个具体产物(推荐):
${BUILD_URL}artifact/target/myapp-${BUILD_NUMBER}.jar
注意路径要与archiveArtifacts中声明的路径严格一致,且文件名中可使用${BUILD_NUMBER}等变量 - 如果用了 Build Timestamp Plugin,还可写成:
${BUILD_URL}artifact/dist/app-${BUILD_TIMESTAMP,format="yyyyMMdd-HHmm}.zip
在 pipeline 或全局模板中嵌入带链接的 HTML 内容
避免把链接硬编码在 emailext 的 body 参数里。推荐用 config-file-provider 管理 HTML 模板:
- 新建一个管理文件(ID 如
email-with-artifact-link),内容为标准 HTML,例如:
✅ 构建成功:${JOB_NAME} #${BUILD_NUMBER}
? 下载最新产物:
myapp-${BUILD_NUMBER}.jar
? 查看全部归档:
点击查看所有文件
- 在 Pipeline 中调用:
emailext subject: '[JENKINS] ${JOB_NAME} #${BUILD_NUMBER} 发布完成',<br>body: '''${SCRIPT, template="email-with-artifact-link"}''',<br>to: 'dev-team@example.com' - 确保
Default Content Type在系统配置中设为text/html,否则链接不会渲染为可点击
验证链接是否真实可用
别只看邮件渲染效果。务必手动打开邮件中的链接测试:
- 检查 Jenkins 是否启用匿名读取权限(Configure Global Security → Authorization → Matrix-based security → Anonymous → Read),否则未登录用户打不开
/artifact/页面 - 如果 Jenkins 运行在反向代理(如 Nginx)后,确认
JENKINS_URL系统属性已正确设置为对外可访问的完整域名(如https://jenkins.example.com),否则${BUILD_URL}会生成内网地址 - 临时关闭浏览器缓存或用隐身窗口测试,排除缓存导致的 404 误判


















