让詹金斯(Cloudbees)只建立在特定分支的变化上

时间:2013-10-19 14:03:27

标签: git jenkins bitbucket cloudbees

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

我在Jenkins的工作中写了一个shell脚本,基本上可以为我做一切。我把它作为BitBucket中的post-commit钩子触发了。

问题是,目前,它经常执行所有操作,我只希望在我的主分支中进行提交时运行此作业。现在,如果没有检测到任何变化,它也会建立。

有没有办法:

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

2 个答案:

答案 0 :(得分:2)

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

我认为现在是jenkins社区创建bitbucket插件的时候了。我将在业余时间对此进行调查。

答案 1 :(得分:1)

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

  1. 创建一个不签出任何SCM项目的单独检查器作业,可以由URL触发,并在完成后运行部署作业如果成功。
  2. 使用以下脚本,更改
  3. 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进行部署,则可以将当前主哈希写入生产计算机上的文件系统,并检查其内容以查看构建是否需要更新。

相关问题