使用 POST COMMIT 挂钩在 SVN 存储库上提交代码时自动触发 Jenkins 作业

2024-01-24

我正在尝试使用 Jenkins 、 docker 和 Ansible 来实现 CI/CD 管道。我正在为我的版本控制系统使用 SVN 代码存储库。对于部署和 SVN 代码存储库,我使用 AWS EC2。部署和代码存储库位于单独的虚拟机中。

我的要求

当我将代码提交到 SVN 存储库时,我需要触发一项 Jenkins 作业。该作业将调用 ansible playbook。稍后它将构建项目、构建 Docker 映像并部署到 EC2 中。因此,对于我的 SVN 代码存储库的任何更改,我需要构建 Jenkins 作业。

我目前的尝试

我在 $repo/hooks 文件夹下的 post-commit.tmpl 文件中添加了以下脚本。

REPOS="$1"
REV="$2"
UUID=`svnlook uuid $REPOS`
/usr/bin/wget \
  --header "Content-Type:text/plain;charset=UTF-8" \
  --post-data "`svnlook changed --revision $REV $REPOS`" \
  --output-document "-" \
  --timeout=2 \
  http://server/subversion/${UUID}/notifyCommit?rev=$REV

以下是截图

并检查了“Jenkins Job 中的 Poll SCM 选项”:

NB:我不想从回购协议中获取分钟/小时/周的时间表。相反,我正在寻找何时有代码更改,然后我需要构建 Jenkins 项目。所以我没有添加任何时间表。

但我仍然没有在詹金斯中获得最新的代码。如何找出与我的配置相关的问题?

更新了 post-commit.tmpl 文件


就像 @bahrep 所说,很难解决这样的问题,但我的猜测是,由于“防止跨站点请求伪造漏洞”Jenkins 安全选项(您已确认已启用它),您的提交后挂钩不起作用。

来自詹金斯维基 https://wiki.jenkins.io/display/JENKINS/Subversion+Plugin#SubversionPlugin-Windowsspecificpostcommithook:

如果您的 Jenkins 使用“防止跨站请求伪造漏洞” 安全选项,上述请求将被拒绝并出现 403 错误 (“不包含有效的面包屑”)。此请求中所需的面包屑可以 从URL中获取http://服务器/crumbIssuer/api/xml http://server/crumbIssuer/api/xml(或者 /api/json)。这可以包含在上面的 wget 调用中 像这样:

--header `wget -q --output-document - \
  'http://server/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)'`

确认此安全选项是否导致问题的最简单方法是禁用它并尝试提交后挂钩是否有效。如果是,再次启用并尝试使用 crumb 配置钩子。 (最后,你希望事情安全:))

还要确保 Jenkins 已启用匿名读取访问:

为此,您的 Jenkins 必须允许匿名读取访问 (具体来说,“作业 > 读取”访问)到系统。如果访问控制 对你的 Jenkins 来说更具限制性,你可能需要指定 用户名和密码,取决于您的身份验证方式 配置。

Edit

我认为出现问题是因为您没有提供 Jenkins 实例地址。在您的网络钩子示例中,您有:

http://server/subversion/${UUID}/notifyCommit?rev=$REV

你应该改变server到您的 Jenkins 实例地址(IP、域或 IP 和端口。这取决于您的配置。)。

http://yourjenkins.com/subversion/${UUID}/notifyCommit?rev=$REV

http://<IP>:<Port>/subversion/${UUID}/notifyCommit?rev=$REV

http://<IP>/subversion/${UUID}/notifyCommit?rev=$REV

或者,如果您在本地运行所有内容(包括 svn repo):

http://localhost:8080/subversion/${UUID}/notifyCommit?rev=$REV

但请记住:

  • “防止跨站点请求伪造漏洞”安全选项已禁用(稍后您将创建 Webhook 来使用此选项,现在我们想要找到根本原因)
  • 启用“允许匿名读取访问”安全选项

我认为钩子脚本工作得很好,但它被发送到任何地方。通过记录您的钩子脚本可以轻松检查这一点。只需在钩子末尾添加:

echo "`$REPOS` change to revision `$REV` triggered @ `date`" >> ${REPOS}/post-commit-hook.log

并查看提交日志文件是否创建后。如果是,则意味着wget请求发送不正确。

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

使用 POST COMMIT 挂钩在 SVN 存储库上提交代码时自动触发 Jenkins 作业 的相关文章

  • 让 subclipse 在 Ubuntu 64 和 Indigo 上工作 - 加载了不兼容的 JavaHL 库。需要 1.7.x 或更高版本

    我该如何解决 我在 ubuntu 64 上使用 Eclipse indigo 我安装了http subclipse tigris org update 1 8 x http subclipse tigris org update 1 8 x
  • Jenkins - 配置 Jenkins 以轮询 SCM 中的更改

    我正在与 jenkins 合作 当 svn 存储库发生更改时 我想运行 Maven 目标 我附上了一张我当前配置的图片 我知道每 5 分钟检查一次存储库是疯狂的 我想只有当有新的变化时才运行它 但我找不到方法 无论如何 它不会检查存储库 我
  • Nexus 和 SVN 有什么区别?

    SVN 和 Nexus 都广泛用作开发和集成过程中的源代码存储库 也就是说 当我们可以通过 SVN 设置存储库时 为什么我们真的需要使用 Nexus 甚至 SVN 也有适当的版本控制架构并广受好评 通过谷歌浏览 但似乎没有什么提供明显的区别
  • svn 提交失败:找不到文件:事务 »52-1r«

    最小可重现故障如下 gt mkdir test cd test gt svn co https svn server com repo gt vim php main php gt svn commit Sending php main p
  • 如何使用 git-svn 切换 svn 存储库?

    我有许多使用 git svn 创建为 SVN 存储库克隆的 git 项目 我们已将 SVN 存储库迁移到新的提供商 因此 URL 现在已更改 如何更新 git 克隆的远程 SVN URL 一种可能性是我从新的 SVN 存储库重新克隆 但我不
  • 在 PHP 页面中嵌入 svn 修订号的简单方法?

    注意到这个页面的右下角有 SVN 修订 ID 了吗 我假设这是动态的 我很乐意将其添加到我的一些网站中 就像源代码中的注释一样 以确保代码推送顺利进行 注意 您还可以假设相关站点的工作目录是相关存储库的 svn checkout Edit
  • Jenkins 插件 ssh-agent 显示“错误:无法运行 ssh-add”

    我收到错误 错误 无法运行 ssh add 我正在尝试 ssh 进入远程机器 所以 SSH credential are set Pipeline script is calling ssh agent On executing the j
  • JobDSL - 如果 Jenkins 中尚不存在则创建一个新作业

    我创建了这个 Groovy JobDSLs 脚本来生成新的 Jenkins 作业 List screen AAA Description AAA Description for item in screen job item 0 descr
  • 使用 teamcity 在 svn 中自动分支

    我想知道是否可以使用 Teamcity 进行自动分支 目前 我使用 web 部署自动发布 Web 应用程序 唯一剩下的就是分支 因为我们通常在 svn 中创建一个分支 然后发布下一个版本 任何人都可以建议是否可能以及如何做 打开您的发布版本
  • 加载了不兼容的 JavaHl 库

    我在使用 Subclipse 和 JavaHL 库时遇到问题 Subclipse 它给出了错误 加载了不兼容的 JavaHL 库 需要 1 8 x 或更高版本 我使用的是 Ubuntu 桌面 12 04 32 位 Subclipse 1 1
  • Jenkins v2.212:创建扩展解析器类时出错:找不到类

    将 Jenkins 升级到 v2 212 并安装许多可用的插件更新后 某些作业开始失败并出现以下错误 12 43 35 WS CLEANUP Deleting project workspace 12 43 35 WS CLEANUP De
  • Jenkins 并行管道中的顺序阶段

    我在 Jenkins 中有一个动态脚本化管道 它有许多并行阶段 但在每个阶段内都有多个串行步骤 我已经浪费了好几天的时间试图让它工作 无论我尝试什么 所有串行子阶段都集中到一个阶段 这是我现在所拥有的 node stage Parallel
  • 如何配置hudson忽略指定SVN文件夹下的更改?

    我正在寻找一种方法来忽略 Hudson 中指定 SVN 文件夹下的更改 这与 TeamCity 中的排除文件夹和 CC Net 中的过滤器相同 我在SVN GUI配置下没有找到任何配置选项 在 Hudson 1 334 中 在构建配置中的
  • 如何跳过 Maven 存储库中的发布或特定模块

    Heyho 我有一个具有以下结构的 Maven 项目 parent 项目清单 API模块 module2 module5 test 分配 组装 所以首先我运行父模块 然后运行构建 api 的模块 然后运行依赖于 api 的模块 然后运行一个
  • Jenkins 文本参数 - 特殊字符乱码(不需要的变量替换)

    我在 Jenkins Linux 下 有一份工作构建参数 https wiki jenkins ci org display JENKINS Parameterized Build类型为 文本 我使用参数来形成在构建过程中使用的文件的内容
  • tmatesoft.svn.core.SVNAuthenticationException:svn:E170001

    我们正在一个遗留项目 maven 中工作来设置devop 詹金斯首发 Jenkins 构建现在没有问题 但是 在将 sonarqube 与 jenkins 集成时 我们收到以下错误 ERROR Error during SonarQube
  • 如何避免开发人员将凭证推送到 bitbucket?

    我们有一个应用程序 它使用 JSON 文件来定义数据库和其他 API 的连接字符串和凭据 理想情况下 这些凭证作为变量添加到 bitbucket 存储库中 并在 Jenkins 的构建期间进行替换 开发商在当地与他们合作时更换了他们 我们需
  • 使用 Subversion 进行部分提交

    鉴于我做的案例两个独立的变化 in one文件 例如 添加了一个新方法并更改了另一个方法 我经常不想提交这两项更改 因为one提交 但作为two独立承诺 在 git 存储库上我会使用互动模式 of git 添加 1 http linux d
  • Gitlab 合并请求事件不触发 Jenkins 多分支管道

    我正在尝试在合并请求事件上使用 GitLab Webhook 触发 Jenkins 多分支管道作业 当我测试 Webhook 时 我收到以下消息 Hook 执行成功但返回 HTTP 409 当我设置不同的 GitLab Webhook 例如
  • TeamCity 将功能分支推送到主分支

    有没有办法将成功构建的功能分支推送到另一个分支 我想要这样的东西 Git 存储库 Gitorious GitHub 等 分支机构 master 当前项目的代码 质量保证 代码等待 QA 的分支 功能分支 许多远程分支 开发人员可以在其中开发

随机推荐

  • d3.js 如何从 csv 或表生成树层次结构

    我有一个包含以下数据的 csv world country state World US CA World US NJ World INDIA OR World INDIA AP 我需要转换为树层次结构 如下所示 name World ch
  • 在 Rails 中显示 404 而不是 500

    在我的 Rails 应用程序中 我定义了路线 以便用户可以访问类似的记录http mydomain com qwe2 http mydomain com qwe2 但如果他们输入错误的 qwe2 他们会得到 500 页 我认为404会更合适
  • 从文本文件的行范围中删除 \n 字符

    假设我们有一个 1000 行的文本文件 我们如何删除第20行到第500行的新行字符 例如用空格替换它们 My try sed 20 500p N s n better not to say anything 所有其他行 1 19 501 1
  • 如何在没有 MANIFEST.in 文件的情况下包含 package_data?

    我怎样才能包括package data for sdist没有 MANIFEST in 文件 我的 setup py 看起来像这样 import setuptools setuptools setup name foo version 20
  • “MEIPASS”代表什么?

    PyInstaller 设置sys MEIPASS属性让应用程序知道在哪里可以找到其捆绑的资源 来源 这个答案 https stackoverflow com q 7674790 119527 我知道什么 MEIPASS does 名字是什
  • SQL 日期范围分割

    你能告诉我当日期范围重叠时分割日期范围的 SQL 吗 数据 具有日期范围和可能的其他列的示例数据 Col1 FromDate ToDate 1 1 1 1 2008 31 12 2010 2 1 1 1 2009 31 12 2012 3
  • 更改 UIButton 内的 SF 符号大小

    我声明一个这样的按钮 let menuButton UIButton 之后 我尝试更改它的参数并在 LBTATools 一个 pod 的帮助下通过以下函数设置他在视图上的位置 fileprivate func setMenuButtonUI
  • 如何使用 SimpleMembership 获取角色?

    我正在使用 SimpleMembership 开发 MVC4 应用程序 我有一个表 userInfo 其中存储用户的信息 例如姓名 电子邮件 地址 电话 角色等 当我注册用户时 数据存储在该表和webpages Membership 中 其
  • Three.js 立方体黑色但我添加了纹理?

    我尝试向使用 JS THREE JS 制作的立方体添加纹理 但是当我在浏览器中打开它时 它全黑了 这是我的代码
  • 如何使用 MongoDB compass 删除 MongoDB 集合中选定的多条记录

    我对 MongoDB 和 MongoDB Compass 非常陌生 我的客户集合中有大约 1000 条记录 如何通过 MongoDB compass 一次删除所有记录 非常感谢 您可以使用 MongoDB compass 提供的 Embed
  • C - /proc/pid/exe 上的 Lstat

    我正在尝试使用 lstat 获取 proc pid exe 文件的大小 以字节为单位 这是我的代码 int main int argc char argv struct stat sb char linkname ssize t r if
  • StackExchange.Redis如何订阅多个频道

    我如何订阅多个频道 据我了解 需要传递给 Subscribe 方法的 Channel 类支持模式或单通道订阅 是否可以通过一个命令订阅多个频道 例子 客户端在 3 个不同的频道上发布内容 ChannelA ChannelB 和 Channe
  • iOS 分发:将私钥/证书迁移到新机器

    我需要能够从不同于我用来提交原始文件的机器向我的应用程序提交更新 我按照文档中的说明进行操作 但是与往常一样 文档假设第一次一切正常 我尝试将我的开发人员配置文件从旧的导出到新的 但是当我提交时 应用程序加载器说它是无效签名 因此 我尝试生
  • 为根包生成 scaladoc

    我很好奇如何记录root包 显示为第一页scala 文档 http docs scala lang org 汇编 可以以某种方式创建一个引用根包的包对象 或者是否有任何配置选项 对此事的描述有些模糊 scaladoc 似乎有一个名为 doc
  • 清理 iPhone 模拟器

    在为 iPhone 模拟器构建时 是否有一种直接的方法来清理 xcode 部署应用程序的目录 我有一个 sqlite 数据库 如有必要 它会在启动时复制到 Documents 文件夹中 问题是我可能会更改我的架构 但新数据库不会被复制 因为
  • Visual Studio 2010 报告服务项目?

    因此 Visual Studio 2010 似乎不支持 SSRS 项目 至少不是旧的 有谁知道这种情况的状态是什么 以及是否可以使用 VS2010 编写新的 SSRS 报告 或者是否应该只使用 VS2008 BIDS SQL Server
  • 如何缩进 Python 列表推导式?

    列表推导式在某些情况下可能很有用 但读起来也可能相当糟糕 作为一个稍微夸张的例子 您将如何缩进以下内容 allUuids x id for x in self db query schema allPostsUuid execute tim
  • 如何在 Quickcheck 中使用修饰符(在我的例子中是积极的)

    我有一个功能 rev 它返回属于三个类型类的类型的一些值 rev Integral a Show a Read a gt a gt a rev read reverse show 我想用快速检查来测试它的一些属性 不过 我对测试 Integ
  • 相当于其他浏览器中 Firefox 的“错误控制台”

    其他浏览器中是否有与 Firefox 的 错误控制台 等效的功能 我发现错误控制台可以方便地查找 JavaScript 错误 但似乎没有一种等效的简单方法可以在其他浏览器上查看错误消息 我对 Internet Explorer Opera
  • 使用 POST COMMIT 挂钩在 SVN 存储库上提交代码时自动触发 Jenkins 作业

    我正在尝试使用 Jenkins docker 和 Ansible 来实现 CI CD 管道 我正在为我的版本控制系统使用 SVN 代码存储库 对于部署和 SVN 代码存储库 我使用 AWS EC2 部署和代码存储库位于单独的虚拟机中 我的要