使用 Jenkins 管道,您可以通过名为-env 的全局变量设置任何环境变量。
反过来,果冻模板使您能够访问 Jenkins API,包括hudson.model.AbstractBuild和hudson.model.AbstractProject对象。
以下是我使用的片段:
詹金斯档案:
node {
env.MYVAR = 'My variable'
emailext body: ${JELLY_SCRIPT, template="myTemplate"}, subject: 'MySubject', to: 'me'
}
Run Code Online (Sandbox Code Playgroud)
果冻模板(myTemplate):
<?jelly escape-by-default='true'?>
<!DOCTYPE html [
<!ENTITY nbsp "&#38;nbsp;">
]>
<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define">
<head>
<style>
body table, td, th, p, h1, h2 {
margin:0;
font:normal normal 100% Georgia, Serif;
background-color: #ffffff;
}
</style>
</head>
<body>
<j:set var="buildEnv" value="${build.getEnvironment(listener)}" />
<j:set var="myVar" value="${buildEnv.get('MYVAR')}" />
<table>
<tr>
<td>Variable</td> …Run Code Online (Sandbox Code Playgroud) Jenkins的Email-ext允许您编写Jelly电子邮件模板.如何在不触发构建的情况下每次编写和测试一个?基本上,我正在寻找1秒的迭代,我可以修改Jelly脚本,在浏览器上点击刷新,它将根据硬代码项目和构建结果自动呈现模板.
我找不到任何关于如何将自己的javascript包含在jenkins果冻文件中的地方.到目前为止,我已使用以下内容添加了jquery
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js"/>
Run Code Online (Sandbox Code Playgroud)
假设我在jenkins项目中有myPageScripts.js,无论如何我可以在那里用脚本src包含我自己的javascript文件吗?
我在不同的地方都看到过这样的询问,但没有找到真正的答案。
有谁知道如何使用html.jelly模板使显示在正文中的构建日志不是全部一起运行,并使用换行符实际分隔每行?
我很确定答案在于模板需要进行某种更改,但是我不知道从哪里开始。
现在,我在电子邮件中收到此信息:
[copy] Copying 1 file to /opt/hybris/hybris/bin/ext-channel/cscockpit/resources/localization [mkdir] Created dir: /opt/hybris/hybris/bin/platform/tomcat-6/work/Catalina/localhost/hmc [echo] [jspcompile] generating.. [echo] [jspcompile] touching jsp files [echo] [jspcompile] compiling.. /opt/hybris/hybris/bin/platform/tomcat-6/work/Catalina/localhost/hmc [yjavac] Compiling 209 source files to /opt/hybris/hybris/bin/platform/tomcat-6/work/Catalina/localhost/hmc [touch] Creating /opt/hybris/hybris/bin/platform/tomcat-6/work/Catalina/localhost/hmc/jspcompile_touch [stopwatch] [build: 36.436 sec] server: [echo] [echo] Configuring server at /opt/hybris/hybris/bin/platform/tomcat-6 [echo] Using config set at /opt/hybris/hybris/config/tomcat [echo] [copy] Copying 8 files to /opt/hybris/hybris/bin/platform/tomcat-6 [copy] Copying 6 files to /opt/hybris/hybris/bin/platform/tomcat-6 [copy] Copying 1 file to /opt/hybris/hybris/bin/platform/tomcat-6/lib [java] Process not found [java] shutting down hybris …Run Code Online (Sandbox Code Playgroud) 我正在为我公司的一些自定义报告创建一个构建后插件。我从这里提供的 Jenkins“hello world”示例开始:
https://wiki.jenkins-ci.org/display/JENKINS/Plugin+tutorial
这很好用。我能够加载插件并在我的 Jenkins 实例中使用它,没有任何问题。
为了让我的项目顺利进行,我能够将 HelloWorldBuilder 移动到另一个文件夹而不是 Jenkins HPI 设置创建、构建和上传这个插件的默认文件夹,没有问题。我还能够将其更改为从 hudson.tasks.Recorder 派生,并将 @Extension 更改为也从 BuildStepDescriptor 派生。这一切都很好,我能够将 hpi 文件上传到 Jenkins 没问题,并且能够按预期在构建后步骤中使用该插件。在这一点上,事情进展顺利,我错误地开始认为这将是轻而易举的。
当我尝试从“HelloWorldBuilder”重命名该类时,我开始遇到问题。我仍然将插件视为构建后步骤,但不再能够对其进行配置。我尝试将 config.jelly 类和相应的帮助 html 文件移动到基于新类名的新目录,但效果不佳。我已经尝试了几种基于其他论坛、其他插件存储库和我找到的文档的路径结构和命名约定的组合,但无济于事。
我不确定我在这里遗漏了什么,所以我的问题是:Jenkins 究竟如何根据为插件/类名称和目录结构的各种组合实现构建后插件的类来发现 config.jelly 文件?
我在 config.jelly 中使用以下几行
<f:entry title="${%Report file extension}" field="ReportExtension">
<select name="ReportBuilder.ReportExtension" selected = "${instance.ReportExtension}">
<option value="log" selected="${instance.ReportExtension=='log'}">log</option>
<option value="html" selected="${instance.ReportExtension=='html'}">html</option>
</select>
</f:entry>
Run Code Online (Sandbox Code Playgroud)
如果我更改 Jenkis 作业中的值并随后运行该作业,则会使用正确的值,但如果我再次编辑该作业,则不会保存选择并再次存储默认值。
有没有人见过这个?我尝试了几种不同的方法,但我无法让它发挥作用。