2

我在 BitBucket 中托管了一个 rails 项目,我使用 CloudBees 作为测试和部署环境。

我在 Jenkins 工作中编写了一个 shell 脚本,它基本上为我完成了所有工作。我将它作为 BitBucket 中的提交后挂钩触发。

问题是,目前,它做的一切都太频繁了,我只希望在我的主分支中进行提交时运行这个作业。现在,如果未检测到更改,它也会构建。

有没有办法:

  • 仅当对特定分支进行更改时才使用 BitBucket 挂钩?
  • 如果没有发现任何更改,Jenkins 是否会中止由 URL 触发的构建?
  • 是否让我的 shell 脚本处理它,以一种告诉 Jenkins 丢弃并删除构建的方式退出?
4

2 回答 2

2

Github 插件支持这个用例,因为它使用传入的通知有效负载来检测新的提交,找到受影响的作业并触发它们。BitBucket 上没有这样的选项,因为触发器只是运行特定的作业,没有上下文信息。

我认为 jenkins 社区是时候创建一个 bitbucket 插件了。将在我的空闲时间对此进行调查。

于 2013-10-20T12:56:40.733 回答
1

我为这个问题创建了一个有点麻烦但仍然令人满意的解决方案:一个单独的作业,检查是否应该触发部署作业。

  1. 创建一个不签出任何 SCM 项目的单独检查器作业,可以由 URL 触发,并在完成后在成功时运行部署作业。
  2. 使用以下脚本,更改

詹金斯外壳脚本

[ $(git ls-remote git@bitbucket.org:a/b.git master | cut -f1) == $(git ls-remote git@heroku.com:c.git master | cut -f1) ] && exit 1
exit 0

这会比较 SCM 和生产中的版本,而无需检查任何源代码。

如果您不使用 Git 进行部署,您可以将当前主哈希写入生产机器上的文件系统,并检查其内容以查看您的构建是否需要更新。

于 2013-10-20T22:19:19.627 回答