如何生成变更日志:自上次 Hudson 构建以来的 git 日志?

2023-11-26

我正在使用 Phing 在 Hudson 中执行构建后任务。

我想生成包含自上次成功构建 Hudson 以来的所有提交的变更日志。但看起来 Hudson 和 Hudson 的 Git 插件都不提供%last_build_time%多变的。

这将是令人满意的解决方案,(但如何获得时间?):

git log --pretty="%s" --since="%last_build_time%"

我目前看到的唯一方法是从作业 xml 文件中提取它,但我不知道 Phing 是否可以。

您如何生成更改日志?


如果您有权访问 build.xml 文件,@takeshin 的答案就很好,但这可能会中断,特别是如果您在从节点上构建(因为从节点没有引用的 build.xml)。

不用担心,因为您可以使用 Jenkins 的远程访问 API 直接通过 Jenkins 访问此信息:

https://wiki.jenkins-ci.org/display/JENKINS/Remote+access+API

例如:

http://<host>/jenkins/job/<job_name>/lastSuccessfulBuild/api/xml

(将为您提供 xml 内容...例如,您可以将 xml 替换为 json 以获取 json 内容而不是 XML)。

请注意,如果您已将 Jenkins 实例设置为需要身份验证,则可能需要使用身份验证。再次强调,不要害怕:https://wiki.jenkins-ci.org/display/JENKINS/Authenticating+scripted+clients

然后,解析 XML 以获得您想要的内容就很简单了。也许是这样的:

curl --silent --user $USER:$API_TOKEN $URL | grep "<lastBuiltRevision>" | sed 's|.*<lastBuiltRevision>.*<SHA1>\(.*\)</SHA1>.*<branch>.*|\1|'

因此,将所有内容放在一起,您最终可以得到一个(相对)简单的 shell 脚本来从 Jenkins 检索最后一个好的修订版本哈希:

#!/bin/sh
GIT_LOG_FORMAT="%ai %an: %s"
USER=<username>
API_TOKEN=<api_token>

LAST_SUCCESS_URL_SUFFIX="lastSuccessfulBuild/api/xml"
#JOB_URL gets populated by Jenkins as part of the build environment
URL="$JOB_URL$LAST_SUCCESS_URL_SUFFIX"

LAST_SUCCESS_REV=$(curl --silent --user $USER:$API_TOKEN $URL | grep "<lastBuiltRevision>" | sed 's|.*<lastBuiltRevision>.*<SHA1>\(.*\)</SHA1>.*<branch>.*|\1|')
# Pulls all commit comments since the last successfully built revision
LOG=$(git log --pretty="$GIT_LOG_FORMAT" $LAST_SUCCESS_REV..HEAD)
echo $LOG

Cheers,

Levi

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何生成变更日志:自上次 Hudson 构建以来的 git 日志? 的相关文章

  • 如何从“git log”中查看 Git 中的特定版本?

    My git log显示为 enter code here git trial git log commit 4c5bc66ae50780cf8dcaf032da98422aea6e2cf7 Author king lt email pro
  • git rebase -i ——为什么它改变提交哈希值?

    所以我或多或少熟悉变基的工作原理 但直到最近我通常只做了一个git rebase i HEAD 20 并修改了需要修改的内容 我很惊讶地发现这将修改所有 20 个提交的哈希值 即使我采取的唯一操作是压缩最后两个提交 我不确定是什么导致其他
  • 将终端颜色扩展到行尾

    我有一个生成 motd 的 bash 脚本 问题取决于某些终端设置 我不确定颜色是否会延伸到行尾 其他时候则不然 e g v s IIRC 一个只是普通的 gnome 终端 另一个是我的 tmux 术语 所以我的问题是如何才能将其扩展到 8
  • 如何更改 Bitbucket 中的 git 提交消息?

    我需要更改 Bitbucket 中的旧 git 提交消息 我试过git rebase i并重写了我的消息 但是当我拉取并提交时 它只是将旧消息保留在 Bitbucket 中并合并了我的更改 这基本上是 4 个步骤的过程 但如果多个团队成员在
  • 将更改恢复到特定提交

    我为自己创建了一个新分支 现在我需要一次将多个提交从主分支恢复到特定提交 我知道有一个安全的命令可以使用git revert no commit COMMIT TO REVERT FROM COMMIT TO REVERT TO 这给了我e
  • 如何复制每个扩展名为 X 的文件,同时保留原始文件夹结构? (类Unix系统)

    我正在尝试将每个 HTML 文件从 src 文件夹复制到 dist 文件夹 但是 我想保留原始文件夹结构 如果 dist 文件夹不存在 我想创建一个新文件夹 如果文件夹不存在则创建 d dist mkdir dist 复制每个文件 cp R
  • Bash:循环遍历字符串数组后无法读出带空格的字符串

    我正在使用循环读取数组的内容 该数组包含名为 music 的目录层次结构中的所有目录和文件 内容是 find 命令先前输出的字符串 这个想法是根据流派 艺术家和标题将 directory contents 中每个数组元素的完整目录路径分成子
  • 有没有一种方法可以非交互地压缩大量提交?

    我正在尝试压缩一系列提交 HEAD 到 HEAD 3 有没有一种快速的方法可以做到这一点 或者我需要使用 rebase interactive 确保你的工作树是干净的 然后 git reset soft HEAD 3 git commit
  • 如何在 git 中删除 subversion 远程?

    我有一个最初使用 git svn 创建的 git 存储库 现在我有一个推送到的 git 服务器 但 svn 存储库已丢失 我可以删除 svn 远程吗 如何 您可以编辑 git config文件并删除与要删除的遥控器关联的部分 您要删除的行可
  • 如何在 mac 中使用“getopt”命令让 bash 处理长参数?

    我想让我的 bash 脚本处理长参数 我发现getopt 但 OS X 不支持它 谁能告诉我为什么getoptBSD 实现了 GNU 没有实现 我尝试构建getopt在 GNU C lib 中 但由于我对 Linux 的技能不佳而失败了 有
  • `docker run` 输出到 bash 变量 - 奇怪的行为

    我看到一些奇怪的行为从docker run到 bash 变量中 简单的例子 bin bash PWD docker run rm ti ubuntu pwd 2 gt 1 also tried with PWD docker run wit
  • 如何从 powershell 中设置 bash 的环境变量?

    使用powershell我该如何设置 https askubuntu com q 1205227 45156 the 环境 https stackoverflow com q 5327495 262852变量 这里 特别 https sta
  • 当我进行部署槽交换时,为什么 azure 会重新启动网站?

    我有一个在 Azure 网站上运行的 net 4 5 网站 我已经设置了暂存部署 我预热两个站点 然后运行交换过程 从 azure 门户和 Azure powershell 无论我尝试什么 交换过程都会重新启动我的网站 两个 并且它们需要大
  • 是否可以在一次 git 调用中取消设置多个 git 配置值,而不是逐一取消设置?

    我需要自动取消全局 git 配置文件中的许多别名 diff difftool merge mergetool 设置 现在我正在打电话git config global unset对于他们每个人来说 这有点慢 嗯 相对而言 大约需要 3 秒
  • 从 Ruby 运行 shell 命令:在显示输出时捕获输出?

    我有个问题 我想从另一个 ruby 脚本运行一个 ruby 脚本并捕获它的输出信息 同时让它也输出到屏幕上 runner usr bin env ruby print Enter your password password gets ch
  • Git 拉回 master 中的提交?

    一位同事 我们称之为亚伦 被指派翻新网站的一部分作为长期项目 他创建了一个新的 Git 分支 名为aaron 他所有的改变都是在这个分支上进行的 当他工作时 我继续维护整个网站 将我的更改提交给master 最终 Aaron 将他的分支合并
  • 由于合并而不允许 git revert 但未给出 -m 选项

    我正在尝试使用 revert 命令恢复到 git 中的某个 哈希 号 我正在使用以下命令 git revert c14609d74eec3ccebafc73fa875ec58445471765 但是 我得到以下返回 错误 提交 c14609
  • git-svn --忽略路径

    我现在在 git svn 的 ignore paths 选项上挣扎了几个小时 试图从大型存储库中仅获取某些标签 我想在 dev 处开始获取 看起来像 gt svn ls http 192 168 0 2 svn repo corporati
  • 如何在 bash 中结合超时和 eval 命令

    为了执行存储在变量中的命令eval使用命令 gt a echo e a nb wc l gt eval a 2 但如何才能与它结合起来呢 timeout命令 我尝试过以下操作 这给了我错误的输出 gt timeout 10 a a b wc
  • 将数组传递给函数名称冲突

    Specs GNU bash 版本 3 1 17 无法升级 Premise 我一直在摆弄数组 我想知道是否有任何方法可以让函数的本地变量与所述函数外部的数组同名 Example 在下面的示例中 我将尝试显示该问题 Working bin b

随机推荐

  • 使用 python 从网页中提取所有链接

    在 Udacity 的计算机科学简介课程之后 我正在尝试制作一个 python 脚本来从页面中提取链接 下面是我使用的代码 我收到以下错误 NameError 名称 页面 未定义 这是代码 def get page page try imp
  • dicts 在 python 3 中不可排序?

    为什么字典在 python2 中是可排序的 但在 python3 中却不能 我在文档中找不到它 Python 3 3 4 default Feb 11 2014 16 14 21 gt gt gt sorted a a b b Traceb
  • mysqli 中的位标志使用 fetch_field_direct 意味着什么

    使用 mysqli 我可以获取有关字段的信息 如下所示 field mysqli fetch field direct result fieldCount 我可以使用从结果中获取字段标志 field gt flags PHP 手册说这会返回
  • ASP.NET MVC 2 RC 客户端验证不起作用

    我似乎无法在 MVC 2 RC 应用程序上进行任何客户端验证 我的模型有以下内容 public class ExampleModel Required ErrorMessage Test1 is required DisplayName T
  • 设置 Gradle 以在 Android Studio 中运行 Java 可执行文件

    所以事情是这样的 我使用的是 Android 版 ORMLite 它使用注释来在 Android 中进行映射 如您所知 Android 中的注释速度很慢 ORMLite 的开发者已经意识到这一点 因此他们添加了运行 java 可执行文件来生
  • 如何检查一个对象是列表还是元组(但不是字符串)?

    这是我通常所做的 以确定输入是list tuple 但不是str 因为很多次我偶然发现函数传递一个错误str错误地对象 并且目标函数确实for x in lst假如说lst实际上是一个list or tuple assert isinsta
  • Flutter Stack 更改深度

    我有一个带有 3 个定位小部件的堆栈 并且作为一个孩子有一个 GestureDetector 我可以拖动它们 但我也想在您单击它时将单击的那个带到前面 我尝试在父窗口小部件中调用更改状态 但这也交换了受影响的窗口小部件的位置 这是完整的示例
  • 将 jquery 对象链接/取消链接到元素

    我正在使用 jquery flowplayer 工具插件http flowplayer org tools tooltip html 1 我希望在用户单击某个元素时创建一个工具提示 2 当用户点击另一个元素时 旧的工具提示必须取消链接 删除
  • JavaScript 的简单(非安全)哈希函数? [复制]

    这个问题在这里已经有答案了 可能的重复 从 Javascript jQuery 中的字符串生成哈希 谁能建议一个用 浏览器兼容 JavaScript 编写的简单 即数十行代码 而不是数百行 哈希函数 理想情况下 我想要的东西是 当传递一个字
  • 用c#获取每个资源管理器窗口的路径

    我对 C 很陌生 我很无聊 有时我关闭一个窗口 几秒钟后我注意到我再次需要该窗口 并且重新打开 Windows 资源管理器并导航到该特定路径让我感到非常沮丧 所以我想创建一个小应用程序 允许我存储最后关闭的窗口的列表 使用快捷键可以一一恢复
  • MySQL 返回连接表的第一行

    我有两个表 国家和鸭子 其中国家 地区表包含世界上的每个国家 地区 鸭子表包含鸭子列表 其中包含用于链接到主要国家 地区的 Country id 字段 我正在尝试获取仅包含至少一只鸭子的国家 地区的列表 并从鸭子表中获取该国家 地区评价最高
  • Android - 单击一项后保持 ListView 的项目突出显示

    所以我有一个活动 2ListView小部件 当您在第一个小部件中选择一个值时 第二个小部件将填充与第一个小部件中的选择相关的值ListView 这个机制工作没有问题 但现在我希望用户选择保持突出显示 我已经阅读了大量与该主题相关的问题 似乎
  • 通用扩展和实现

    我不明白为什么Company编译 我以为它检查了extends但不是为了implements public interface Employee public class HourlyEmployee implements Employee
  • 向 HTML 文本区域添加行号

    我有一个
  • Scrapy中间件订单

    Scrapy 文档 says 首先 中间件是最接近的一个 发动机 最后一个更接近 到下载器 决定分配给哪个订单 你的中间件看到 DOWNLOADER MIDDLEWARES BASE 设置 并根据位置选择一个值 你想插入中间件 这 顺序很重
  • 为什么无法将 XDocument XDeclaration 编码类型设置为 iso-8859-1?

    为什么下面的代码没有设置XML声明编码类型 它始终将编码设置为 utf 16 我错过了一些非常明显的东西吗 var xdoc new XDocument new XDeclaration 1 0 iso 8859 1 null new XE
  • getRight、getLeft、getTop 返回零

    我正在使用以下代码 但所有方法都返回零值 我知道要获取视图的坐标 应该绘制我们的视图 这就是为什么我在 onResume 方法中使用代码但仍然不起作用 任何想法 Override public void onResume super onR
  • 为什么 Integer.MIN_VALUE 的绝对值等于 Integer.MIN_VALUE

    在java中当我说Integer i Math abs Integer MIN VALUE 我得到与答案相同的值 这意味着i包含Integer MIN VALUE 我也在 C 中验证了同样的情况 为什么会有这种行为 阅读 Joshua Bl
  • 无法从 shell 访问集合 - SyntaxError: Missing ;之前的语句(外壳):1

    我编写了一个脚本 使用 mongoimport 将 csv 文件加载到 mongodb 中 当我对两个相似的 csv 文件 同一类型 运行此命令时 两者都可以正常上传 但是我只能从 mongodb shell 访问其中一个 以下是 mong
  • 如何生成变更日志:自上次 Hudson 构建以来的 git 日志?

    我正在使用 Phing 在 Hudson 中执行构建后任务 我想生成包含自上次成功构建 Hudson 以来的所有提交的变更日志 但看起来 Hudson 和 Hudson 的 Git 插件都不提供 last build time 多变的 这将