如何仅在标记的分支上运行gitlab-ci.yml作业?

如何仅在标记的分支上运行gitlab-ci.yml作业?,gitlab,gitlab-ci,gitlab-ci-runner,Gitlab,Gitlab Ci,Gitlab Ci Runner,如何仅在标记的主分支上运行.gitlab-ci.yml作业 job: script: - echo "Do something" only: - master - tags 如果存在以下任一条件,则将运行上述代码:主分支或标记的提交 我的目标是在生产部署中运行此操作,但这需要它位于主分支上,并对其进行标记(使用版本)。否则,如果缺少标记,我将有另一个作业推送到staging。gitlab ci还不支持此行为,尽管有添加它的方法 与此同时,我还听到一些轶事报道说 only:

如何仅在标记的主分支上运行.gitlab-ci.yml作业

job:
  script:
  - echo "Do something"
  only:
  - master
  - tags
如果存在以下任一条件,则将运行上述代码:主分支或标记的提交


我的目标是在生产部署中运行此操作,但这需要它位于主分支上,并对其进行标记(使用版本)。否则,如果缺少标记,我将有另一个作业推送到staging。

gitlab ci还不支持此行为,尽管有添加它的方法

与此同时,我还听到一些轶事报道说

only:
  - master
only:
  - tags

将完成工作(以及它不会完成的轶事报道)

此行为将在版本中引入

最近更新了:

Jason Lenny@jlenny将标题从{-Update.gitlab-ci.yml更改为 支持构建条件的连接逻辑-}到连接逻辑 对于构建条件,MVC·2天前

Jason Lenny@jlenny在两天前将里程碑更改为12.0

(祈求好运)

解决方案是使用
except
关键字排除所有分支,并结合
only
在标记上运行,这样您就可以只在主分支中的标记上运行管道:

  only:
    - tags
  except:
    - branches

我使用的是版本
11.3.4

我让它工作了,这是我的工作代码片段,所有其他的都不是为我工作的

only:
 - tags  # please mention the 's' compared to Sergio Tomasello's solution
except:
 - branches
我使用11.4.3

多亏了Matt Alioto这样的人,他发布了关于2019年产品愿景的帖子(标签为
Product Vision 2019
,希望他们能在今年完成)

针对卡尔森·科尔的问题,这将起作用:

job_for_master_no_tags:
  stage: deploy
  script:
  - echo "Release to Staging"
  only:
  - master

job_for_master_tags_only:
  stage: deploy
  script:
  - echo "Release to Production"
  only:
  - tags
  except:
  - /^(?!master).+@/    # Ruby RegEx for anything not starting with 'master'
  • 要了解这个正则表达式是如何工作的,请查看
  • 我在GitLab版本上测试了它,它可以正常工作
    • 注意:如果您尝试使用
      -/^(?master)。+/
      (没有
      @
      )它不起作用-了解到我的解决方案是困难的

      job:
        script:
        - echo "Do something"
        only: 
          refs:
            - master
            - tags
          variables:
            - $CI_COMMIT_BRANCH == "master"
      

      到目前为止,gitlab中还没有解决此问题的适当内置解决方案。为了跟踪正确解决方案的开发并保持工作环境的更新,我创建了:

      如何运行标签并检查标签是否属于脚本中的主分支?我认为它也应该与变量一起工作,并尝试使用
      规则:-if:$CI\u COMMIT\u tag!=null'&&$CI\u COMMIT\u BRANCH==“master”
      ,也仅与
      一起使用:refs:-测试变量:-$CI\u COMMIT\u标记!=null
      ,但没有成功…@Wolfson问题是,如果管道是由标记触发的,
      CI\u COMMIT\u分支
      没有定义,反之,我尝试过使用提交触发器和
      CI\u COMMIT\u标记
      ,但似乎没有任何区别。谢谢你关于这个公开问题的说明。我唯一能建议的是将正则表达式与用户正在试验的东西结合起来。我刚刚尝试了建议的解决方案,它确实有效@MattAlioto太糟糕了,链接不再存在,请始终尝试包含一个简短的示例,以防原始源消失;)由于11.9.4中的“危险”正则表达式,如负lookaheads(?!),不再起作用。请看,您可以手动启用它们。感谢大家提醒@SebastianSebaldI使用11.2版。在我的测试中,它应该以$结尾。最后的结果是
      /^(?master)。+$/
      。到目前为止,我测试了
      job\u for\u master\u tags\u only
      也将在其他标记的服务器上运行branches@kound您使用的是哪个版本的GitLab?这个问题似乎已经迁移到了-而且它错过了12.0,但该特性的开发仍在进行中,所以它可以在12.1中使用。如何仅在主分支上的标记上运行?我们不能标记任何分支吗?该示例还将在其他分支上运行,然后在受保护的分支上运行。欢迎使用StackOverflow。虽然这段代码可以解决这个问题,但如何以及为什么解决这个问题将真正有助于提高您的帖子质量,并可能导致更多的投票。请记住,您将在将来回答读者的问题,而不仅仅是现在提问的人,请编辑您的答案以添加解释,并说明适用的限制和假设。