【问题标题】:Docker Hub builds branch regex match not masterDocker Hub 构建分支正则表达式匹配非主
【发布时间】:2019-07-10 05:10:24
【问题描述】:

我正在使用 Docker Hub 自动构建来创建图像。我想要的行为是将所有对master 的提交标记为latest,这很容易,并且还使用分支名称作为标记标记所有分支。

我有以下构建规则配置:

------------------------------------------
|Build Rules|Source          |Docker Tag |
------------------------------------------
|Branch     |master          |latest     |
------------------------------------------
|Branch     |/^(?!master$).*/|{sourceref}|
------------------------------------------

主分支构建良好,但其他分支不会触发构建。有谁知道实现这一目标的方法?

【问题讨论】:

    标签: build regex-lookarounds dockerhub


    【解决方案1】:

    不幸的是,使用的正则表达式匹配器不支持负前瞻 (?!)。

    这里有一个关于在默认 Go 正则表达式引擎中不支持前瞻的决定:https://groups.google.com/forum/#!topic/golang-nuts/7qgSDWPIh_E

    不幸的是,我想不出任何解决方法,除了遵循使用像 _ 这样的公共前缀的约定

    正则表达式是<prefix>.*,所以如果你最终使用_,那么它将是_.*

    PS:复制自Why doesnt this regex match this string in docker automated builds

    【讨论】:

    • 感谢您的指点。您知道如何在没有负前瞻的情况下实现这一目标吗?
    • 可能使用所有其他分支都以_ 或一些通用前缀开头的约定?
    • 不是一个很好的解决方案,但我想不出另一个。您能否更新您的答案以包含该解决方案或实际解决方案然后我会接受。
    • 谢谢塔伦。我已经接受了你的回答。如果可能,您能否添加适用于建议前缀的正则表达式?
    【解决方案2】:

    虽然正则表达式匹配器不支持否定前瞻,但您只需要更详细一点。用正则表达式剥猫皮的方法有 1000 种,正如那句老话,“如果不能在正则表达式中完成,那就做不到。”

    /^([^m].....|.[^a]....|..[^s]...|...[^t]..|....[^e].|.....[^r]|.{0,5}|.{7,})$/
    

    您可以在此处使用正则表达式:https://regexr.com/56v52

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-13
      相关资源
      最近更新 更多