• 配置管理员招聘 at 2015年06月16日

    为什么招人的都在北京。。。顶一下

  • 怎么从 svn 迁移都 git? 我用 git svn clone https://XXXXX/svn/one -T trunk -t tags 结果只能 clone 出来 trunk 下的内容,tags 取不出来.one 库里面没有 branches...

  • 配置管理能做什么事情 at 2014年08月05日

    除了这些外呢?

  • 为什么又木有我,说说奖品是什么,让我羡慕下~~~

  • 奖品还是杯子咩杯具的杯~

  • jenkins 邮件模板 at 2014年03月06日

    使用 email-ext 替换 Jenkins(Hudson) 的默认邮件通知

    简述 众所周知,Jenkins(Hudson) 默认提供了一个邮件通知,能在构建失败、构建不稳定等状态后发送邮件。但是它本身有很多局限性,比如它的邮件通知无法提供详细的邮件内容、无法定义发送邮件的格式、无法定义灵活的邮件接收配置等等。在这样的情况下,我们找到了 Jenkins Email Extension Plugin。该插件能允许你自定义邮件通知的方方面面,比如在发送邮件时你可以自定义发送给谁,发送具体什么内容等等。本文不会告诉你如何安装该插件,关于插件的安装请参考这里。

    功能概要 该插件扩展了 Hudson 构建默认的邮件通知功能,并赋予你更多更灵活的控制。它能在如下三块区域来自定义:

    Triggers -指定发送一封邮件通知应有的前置条件。 Content - 指定每封触发邮件的标题和正文的内容。 Recipients -.指定一封邮件触发后发送给谁来接收 (邮件)。 配置 它主要包含两个部分:基本配置和项目配置。

    公共配置 当然,在一个项目中应用 email-ext 插件之前,您必须做一些公共的配置。现在先跳转到 Hudson 的 “系统配置” 页面,如下图:

    找到标题为 “Extended E-mail Notification” 的片段,你就能配置一些公共的 email-ext 属性。这些属性必须匹配你 SMTP 邮件服务器的设置。这一节不仅能配置成 Hudson 原有邮件通知的镜像 (虽然有很多配置是一样的,但这是个不同的扩展点),而且还增加了一些额外的功能。输入框中名为 Default Subject 和 Default Content 的项允许你在公共级别配置邮件的内容。这样做的话,可以使您为所有的项目按您的需求做更好的、更简单的配置。如下图。

    根据帮助文档,我们可以了解到一些公共属性,下面我解释一下常用的属性。 属性详解:

    Override Global Settings 如果不选,该插件将使用默认的 E-mail Notification 通知选项。反之,您可以通过指定不同于 ( 默认选项) 的设置来进行覆盖。 Default Content Type 指定构建后发送邮件内容的类型,有 Text 和 HTML 两种. Use List-ID Email Header 为所有的邮件设置一个 List-ID 的邮件信头,这样你就可以在邮件客户端使用过滤。它也能阻止邮件发件人大部分的自动回复 (诸如离开办公室、休假等等)。你可以使用你习惯的任何名称或者 ID 号,但是他们必须符合如下其中一种格式 (真实的 ID 必须要包含在<和>标记里): Build Notifications “Build Notifications” 关于更详细的 List-ID 说明请参阅 RFC-2919. Default Subject 自定义邮件通知的默认主题名称。该插件能在邮件的主题字段中替换一些令牌,这样你就可以从构建中包含指定的输出信息。 Default Content 自定义邮件通知的默认内容主体。该插件能在邮件的内容主体中替换一些令牌,这样你就可以从构建中包含指定的输出信息。 Content Token Reference[公共配置] 所有的参数都是可选的,每个令牌的参数可以如下表示,字符串类型使用 name=“value”,而布尔型和数字型使用 name=value。如果{和}标记里面没有参数,则不会被解析。 示例:$TOKEN, ${TOKEN}, ${TOKEN, count=100}, ${ENV, var=” PATH”} 可用令牌 ${BUILD_LOG, maxLines, escapeHtml} -显示最终构建日志。 maxLines – 显示该日志最多显示的行数,默认 250 行。 escapeHtml -如果为 true,格式化 HTML。默认 false。 ${BUILD_LOG_REGEX, regex, linesBefore, linesAfter, maxMatches, showTruncatedLines, substText, escapeHtml, matchedLineHtmlStyle} -按正则表达式匹配显示构建日志的行数。 匹配符合该正则表达式的行数。参阅 java.util.regex.Pattern,默认 “(?i)\b(error|exception|fatal|fail(ed|ure)|un(defined|resolved))\b”。 linesBefore -包含在匹配行之前的行编号。行数会与当前的另一个行匹配或者 linesAfter 重叠,默认 0。 linesAfter -包含在匹配行之后的行编号。行数会与当前的另一个行匹配或者 linesBefore 重叠,默认 0。 maxMatches -匹配的最大数量,如果为 0,则包含所有匹配。默认为 0。 showTruncatedLines -如果为 true,包含 [...truncated ### lines...] 行。默认为 true。 substText -如果非空,把这部分文字插入该邮件,而不是整行。默认为空。 escapeHtml -如果为 true,格式化 HTML。默认 false。 matchedLineHtmlStyle -如果非空,输出 HTML。匹配的行数将变为 html escaped matched line 格式。默认为空。 ${BUILD_NUMBER} -显示当前构建的编号。 ${BUILD_STATUS} -显示当前构建的状态 (失败、成功等等) ${BUILD_URL} -显示当前构建的 URL 地址。 ${CHANGES, showPaths, format, pathFormat} -显示上一次构建之后的变化。 showPaths – 如果为 true,显示提交修改后的地址。默认 false。 format – 遍历提交信息,一个包含%X 的字符串,其中%a 表示作者,%d 表示日期,%m 表示消息,%p 表示路径,%r 表示版本。注意,并不是所有的版本系统都支持%d 和%r。如果指定 showPaths 将被忽略。默认 “[%a] %m\n”。 pathFormat -一个包含 “%p” 的字符串,用来标示怎么打印字符串。 ${CHANGES_SINCE_LAST_SUCCESS, reverse, format, showPaths, changesFormat, pathFormat} -显示上一次成功构建之后的变化。 reverse -在顶部标示新近的构建。默认 false。 format -遍历构建信息,一个包含%X 的字符串,其中%c 为所有的改变,%n 为构建编号。默认” Changes for Build #%n\n%c\n”。 showPaths, changesFormat, pathFormat – 分别定义如 ${CHANGES}的 showPaths、format 和 pathFormat 参数。 ${CHANGES_SINCE_LAST_UNSTABLE, reverse, format, showPaths, changesFormat, pathFormat} -显示显示上一次不稳固或者成功的构建之后的变化。 reverse -在顶部标示新近的构建。默认 false。 format -遍历构建信息,一个包含%X 的字符串,其中%c 为所有的改变,%n 为构建编号。默认” Changes for Build #%n\n%c\n”。 showPaths, changesFormat, pathFormat -分别定义如 ${CHANGES}的 showPaths、format 和 pathFormat 参数。 ${ENV, var} – 显示一个环境变量。 var – 显示该环境变量的名称。如果为空,显示所有,默认为空。 ${FAILED_TESTS} -如果有失败的测试,显示这些失败的单元测试信息。 ${JENKINS_URL} -显示 Jenkins 服务器的地址。(你能在 “系统配置” 页改变它)。 ${HUDSON_URL} -不推荐,请使用 $JENKINS_URL ${PROJECT_NAME} -显示项目的名称。 ${PROJECT_URL} -显示项目的 URL。 ${SVN_REVISION} -显示 SVN 的版本号。 ${CAUSE} -显示谁、通过什么渠道触发这次构建。 ${JELLY_SCRIPT, template} -从一个 Jelly 脚本模板中自定义消息内容。有两种模板可供配置:HTML 和 TEXT。你可以在 $JENKINS_HOME/email-templates 下自定义替换它。当使用自动义模板时,” template” 参数的名称不包含 “.jelly”。 template -模板名称,默认” html”。 ${FILE, path} -包含一个指定文件的内容 path -文件路径,注意,是工作区目录的相对路径。 ${TEST_COUNTS, var} -显示测试的数量。 var – 默认 “total”。 total -所有测试的数量。 fail -失败测试的数量。 skip -跳过测试的数量。 项目配置 要想在一个项目中使用 email-ext 插件,你首先必须在项目配置页激活它。在” Post-build Actions” 选项中勾选” Editable Email Notification” 标签。

    项目基本配置 当插件激活后你就能编辑如下三个字段:

    Global Recipient List -这是一个以逗号 (或者空格) 分隔的可接受邮件的邮箱地址列表。允许您为每封邮件指定单独的列表。 Default Subject -允许你配置令牌,这样就可以在项目中更容易地配置所有邮件的主题。 Default Content -跟 Default Subject 的作用一样,但是是把主题替换内容主体。 项目高级配置 要查看插件的高级配置,请点击” Advanced” 按钮。该选项允许您各种类型的邮件触发器指定接收者。默认情况下,唯一使用的触发器配置是” Failure” 触发器。要增加更多的触发器,选择 “Add a Trigger” 旁边下拉列表中的类型,它会增加到控件上面的列表中。一旦你增加了一个触发器,你就可以对它做一些选择。如果你点击一个触发器旁边的”?” 号,它将告诉你你在什么前置条件中来触发邮件发送。如下图。

    Send to Recipient List -如果勾选,邮件将发送到” Global Recipient List” 中的所有邮件地址。 Send to Committers -该邮件会发给上次构建时检查过代码的人员,该插件会基于提交者的 ID 和追加 Jenkins 配置页面的 (default email suffix) 默认邮件后缀来生成一个邮件地址。譬如,上次提交代码的人是” first.last”, 默认的电子邮件后缀为 “@somewhere.com”,那么电子邮件将被发送到 “first.last@ somewhere.com”。 Send To Requester -如果勾选,邮件将发送给构建触发者。 Include Culprits -如果勾选,而且 “Send To Committers” 勾选,邮件将包含最后成功构建的提交者。 More Configuration -通过单击”+(expand)” 链接您能为每个邮件触发器作更多单独的设置。 Recipient List -这是一个以逗号 (或者空格) 分隔的可接受邮件的邮箱地址列表。如果触发就发送邮件到该列表。该列表会追加在” Global Recipient List” 里。 Subject – 指定选择邮件的主题。注意:高级选项中的邮件触发器类型可覆盖对它的配置。 Content -指定选择邮件的内容主体。注意:高级选项中的邮件触发器类型可覆盖对它的配置。 Remove -通过单击指定触发器当前行的” Delete” 按钮,你可以删除该触发器。 项目邮件令牌 email-ext 插件使用令牌来允许动态数据插入到邮件的主题和内容主体中。令牌是一个以 $(美元符号) 开始,并以空格结束的字符串。当一个邮件触发时,主题和内容主体字段的所有令牌都会通过真实的值动态地替换。同样,令牌中的 “值” 能包含其它的令牌,那将被替换成真实的内容。比如, $DEFAULT_SUBJECT 令牌能通过从公共配置页面的 Default Subject 字段中的文本 (或者其它令牌) 替换。同理, $PROJECT_DEFAULT_SUBJECT 令牌也能通过项目配置页面的 Default Subject 字段中值替换。

    一旦你的项目中激活 email-ext 插件,它会使用默认值设置邮件的内容字段。项目配置页的默认主题和主体内容字段分别对应的是 DEFAULT_SUBJECT 和 DEFAULT_CONTENT,因此它会自动地使用全局的配置。同理,每个触发器中的内容分别对应的是 $PROJECT_DEFAULT_SUBJECT 和 $PROJECT_DEFAULT_CONTENT,所以它也会自动地使用项目的配置。由于令牌中的 “值” 能包含其它的令牌,这样一来,您就能为令牌快速地创建不同的切入点:全局级别 (所有项目),专属级别 (单一项目),通用级别 (两者之间)。

    如果你要查看所有可用的令牌,你可以点击项目配置页的 Content Token Reference 的?号获取详细的信息。

    根据帮助文档,我们可以了解到一些公共属性,下面我解释一下常用的属性。 属性详解:

    1、触发器类型

    注意:所有的触发器都只能配置一次。

    Failure:即时发送构建失败的邮件。如果” Still Failing” 触发器已配置,而上一次构建的状态是” Failure”,那么” Still Failing” 触发器将发送一封邮件来替代 (它)。 Unstable:即时发送构建不稳固的邮件。如果” Still Unstable” 触发器已配置,而上一次构建的状态是” Unstable”,那么” Still Unstable” 触发器将发送一封邮件来替代 (它)。 Still Failing:如果两次或两次以上连续构建的状态为” Failure”,发送该邮件。 Success:如果构建的状态为” Successful” 发送邮件。如果” Fixed” 已配置,而上次构建的状态为 “Failure” 或 “Unstable”,那么” Fixed” 触发器将发送一封邮件来替代 (它)。 Fixed:当构建状态从 “Failure” 或 “Unstable” 变为” Successful” 时发送邮件。 Still Unstable:如果两次或两次以上连续构建的状态为” Unstable “,发送该邮件。 Before Build:当构建开始时发送邮件。

    2、Content Token Reference[项目配置]

    注意:这里只解释系统配置页面中缺少的令牌。

    ${DEFAULT_SUBJECT} -这是 Jenkins 系统配置页面默认配置的邮件主题 ${DEFAULT_CONTENT} -这是 Jenkins 系统配置页面默认配置的邮件内容主体 ${PROJECT_DEFAULT_SUBJECT} – 这是项目的默认邮件主题。高级配置中使用该令牌的结果要优先于 Default Subject 字段。警告:不要在 Default Subject 或者 Default Content 中使用该令牌,它会产生一个未知的结果。 ${PROJECT_DEFAULT_CONTENT} -这是项目的默认邮件内容主体。高级配置中使用该令牌的结果要优先于 Default Content 字段。警告:不要在 Default Subject 或者 Default Content 中使用该令牌,它会产生一个未知的结果。 Jelly 脚本 从 Jenkins(Hudson) 2.9 版本开始我们可以使用 Jelly 脚本。Jelly 脚本跟 Hudson 的 API 挂钩,能获得你想要的任何信息,所以它很强大。插件有两个打包后的 Jelly 脚本,当然你也可以自定义 (脚本)。

    关于插件中默认的两个 Jelly 脚本:一个用来设计 HTML 格式邮件,另一个则是定义 TEXT 格式邮件。通过上面的截图看到它们的样子。你能通过使用模板参数指定插件调用哪一个脚本。它们的使用方法如下:

    文本格式: ${JELLY_SCRIPT,template=” text”} HTML 格式: ${JELLY_SCRIPT,template=” html”} 你也能编写属于自己的 Jelly 脚本。Jelly 脚本能跟 Hudson 的 API(包括 hudson.model.AbstractBuild 和 hudson.model.AbstractProject) 挂钩,因而特别强大。如果你打算这么做,你可以先参考现有的 html 和 text 脚本一探究竟。

    值得注意的是,拥有 Hudson 管理员权限是使用自定义 Jelly 脚本 (该脚本没有跟 email-ext 打包) 的前提。脚本的生成步骤本身其实相对简单:

    创建 Jelly 脚本。脚本的名称应该是<名称>.jelly。名称以.jelly 结尾是很重要的。 让你的 Hudson 管理员把脚本存放在 HUDSON_HOME\email-templates 文件夹里。 使用 Jelly 令牌,让 template 匹配你的脚本名称 (不要包含后缀)。比如,脚本的名称为 foobar.jelly,则邮件内容中应该是 ${JELLY_SCRIPT,template=” foobar”}。 下面两个图就是就是使用 Jelly 脚本生成的邮件(最新版 Email-ext 新增 html_gamil 模板,它跟 html 模板类似,所以这里不再显示它的截图):

    总结 以上就是我介绍的 Email-ext 插件,由于自己的局限,对于它的使用没有更深的了解。参考资料 [2] 中还有关于它的扩展,你也可以自行扩充它的功能。如果您有关于该插件以及 Jenkins 使用的更多更好的感受,我期待与您一起分享。

    参考资料 [1]《Maven 实战》第 11 章 11.9 邮件反馈。

    [2] https://wiki.jenkins-ci.org/display/JENKINS/Email-ext+plugin

  • ant 学习笔记 at 2014年02月28日

    我想问下,怎么写 ant junit report? 然后在 jenkins 里面把单元测试报告体现出来?

  • 谢谢,谢谢,多谢

  • 谢谢,明白了。

  • TeamForge at 2014年01月24日

    teamforge 是个什么类型的软件,只知道是收费的!

  • 支持下,买本看看~~

  • AIX 下安装 subversion at 2013年05月28日

    总结.贴: AIX 6.1 系统安装 subversion.安装的那是一个波折哇! 出现上面的错误原因是:把 GCC 卸载掉,用 AIX 默认的编译器安装 zlib,zlib 就可以安装成功了。 或者直接安装 zlib 的 rpm 包 安装完成之后还会报其他错误的,还会报 main 文件错误和头文件的错误,总之必须给系统打补丁~~~ 如果有的人的机器运气好,不需要打补丁,安装完 apr,apr-util,zlib,expat,neon,sqlite,然后安装 subversion 就会安装成功。

    所以还是用 rpm 安装方便:只是需要下载的 rpm 包比较多而已,需要 29 个包~~~ 1 apr-1.4.6-1.aix5.2.ppc.rpm
    2 apr-devel-1.4.6-1.aix5.2.ppc.rpm
    3 db4-4.7.25-2.aix5.1.ppc.rpm
    4 openssl-0.9.8u-1.aix5.1.ppc.rpm 5 apr-util-1.4.1-1.aix5.1.ppc.rpm
    6 expat-2.0.1-3.aix5.1.ppc.rpm
    7 apr-util-db4-1.4.1-1.aix5.1.ppc.rpm
    8 expat-devel-2.0.1-3.aix5.1.ppc.rpm
    9 pkg-config-0.25-2.aix5.1.ppc.rpm 10 apr-util-devel-1.4.1-1.aix5.1.ppc.rpm
    11 file-libs-5.05-1.aix5.1.ppc.rpm
    12 povray-3.6.1-1.aix5.1.ppc.rpm 13 apr-util-freetds-1.4.1-1.aix5.1.ppc.rpm
    14 gettext-0.17-1.aix5.1.ppc.rpm
    15 python-magic-5.14-2.aix5.1.ppc.rpm 16 apr-util-gdbm-1.4.1-1.aix5.1.ppc.rpm
    17 gettext-devel-0.17-1.aix5.1.ppc.rpm
    18 readline-6.2-3.aix5.1.ppc.rpm 19 apr-util-ldap-1.4.1-1.aix5.1.ppc.rpm
    20 libgcc-4.2.2-1.aix5.1.ppc.rpm
    21 sqlite-3.7.9-1.aix5.1.ppc.rpm 22 apr-util-odbc-1.4.1-1.aix5.1.ppc.rpm
    23 mod_dav_svn-1.7.3-1.aix5.1.ppc.rpm
    24 subversion-1.7.3-1.aix5.1.ppc.rpm
    25 subversion-devel-1.7.3-1.aix5.1.ppc.rpm 26 apr-util-sqlite-1.4.1-1.aix5.1.ppc.rpm
    27 neon-0.29.5-1.aix5.1.ppc.rpm
    28 neon-devel-0.29.5-1.aix5.1.ppc.rpm 29 zlib-1.2.6-1.aix5.1.ppc.rpm

    网上找到的资料没有安装 python-magic-5.14-2.aix5.1.ppc.rpm 和 libgcc 所以安装过程中会报错,错误没记下来,但是解决方法就是安装 python-magic-5.14-2.aix5.1.ppc.rpm

  • AIX 下安装 subversion at 2013年05月27日

    出现这个原因是:AIX 系统缺少补丁,必须打补丁才能解决这个问题。 打补丁太麻烦,所有换用了,rpm 的安装

  • AIX 下安装 subversion at 2013年05月27日

    必须在 AIX 上装~~~~~~ 现在已经解决了安装上了~~

  • Jenkins 入门 at 2012年12月13日

    顶一下,学习学习

  • 把 doc 下一系列目录内的文档和 src 目录下的代码导入到 excel 表格中。。。 我模版怎么传不上去~你先将就看下下面的目录~

    doc 01-售前与合同 XX 合同V1.0.0 02-项目立项 03-需求阶段 XX 项目需求说明书_V1.0.0 04-设计阶段 src ...

  • 可以实现导出 excle 表格的这种功能吗?

  • 不是这样的~呜呜~

  • 额~~~~~~~~~~~

  • 嘿嘿,现在正需要的东西,谢谢了,谢谢了!!!

  • 求软件 at 2012年07月26日

    哦哦,谢谢 laofo

  • 公司打算用 git,我来研究研究,下载了,谢了!

  • 公司现受控的有五个项目,其中四个,公司 QA,上传的文档进行修改,再次 commit 时,会报错 当然是常见的错误,403 错误

    刚开始的时候,以为是路径错误,把大写改为小写再次修改并 commit,还是不行,然后把小写改为大写,还是不行。然后看权限,但是依然不行

    无奈之下,1. 把各个项目文档全部删除,重新获取 checkout 2. checkout 的时候,把小写的路径全能换为大写,还是不行 3. 最后将出错的文件夹删除,单独 checkout,然后将路径改为大写,现在 BPBJ 的项目已经可以了,其他三个还在修改中。。。

  • Subversion 删除被锁文件 at 2010年05月27日

    建立了那个账号,也赋予了相同的权限。 那怎么还不行啊,如何用他的账户删除啊?

  • 那个中文路径是我本地路径