【问题标题】:Have Jenkins (Cloudbees) only build on change in specific branch让 Jenkins (Cloudbees) 仅基于特定分支的更改构建
【发布时间】:2013-10-21 06:19:19
【问题描述】:

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

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

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

有没有办法:

  • 只有在对特定分支进行更改时才使用 BitBucket 挂钩?
  • 如果未发现任何更改,Jenkins 是否会中止 URL 触发的构建?
  • 让我的 shell 脚本来处理它,通过退出的方式告诉 Jenkins 放弃并删除构建?

【问题讨论】:

    标签: git jenkins bitbucket cloudbees


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      Jenkins shell 脚本

      [ $(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 进行部署,您可以将当前主哈希写入生产机器上的文件系统,并检查其内容以查看您的构建是否需要更新。

      【讨论】:

        猜你喜欢
        • 2015-02-07
        • 2017-12-25
        • 1970-01-01
        • 1970-01-01
        • 2014-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-02
        相关资源
        最近更新 更多