【问题标题】:Circleci: How to deploy depending on git tagCircleci:如何根据 git 标签进行部署
【发布时间】:2015-06-13 10:43:54
【问题描述】:

有没有办法限制在具有特定 git 标签的检查上部署 circleci?

目前我正在使用这个

...
deployment:
  dockerhub:
    branch: master
    commands:
      - docker login -e $DOCKER_EMAIL -u $DOCKER_USER -p $DOCKER_PASS
      - docker push abcdef

我想写tag: /release_.*/之类的东西,而不是branch: master

背景:我想根据 git 标签设置 docker 标签。例如,每当有东西提交给 master 时,一个带有 latest 标签的新 docker 镜像就会被创建并推送。每当设置一个特殊的 git 标签(例如release_1.0_2015-06-13)时,就会创建并推送一个带有标签1.0 的新 docker 镜像。

替代方案是根据不同的标签只使用不同的分支。但是我想用标签来标记一个特定的版本。

【问题讨论】:

    标签: git circleci git-tag


    【解决方案1】:

    It looks like this was added Kim 回答后。

    通常,推送标签不会运行构建。如果有一个带有tag 属性的部署配置与您创建的标签的名称相匹配,我们将运行匹配的构建和部署部分。

    在下面的示例中,推送名为release-v1.05 的标签将触发构建和部署。推送标签qa-9502 不会触发构建。

    deployment:
      release:
        tag: /release-.*/
        owner: circleci
        commands:
          - ./deploy_master.sh
    

    【讨论】:

    • 有没有办法在构建中获取标签名称? CIRCLE_BRANCH 有一个环境变量,但我没有看到 CIRCLE_TAG 的环境变量
    • 如果构建是通过推送新标签触发的,则有 CIRCLE_TAG 而不是 CIRCLE_BRANCH。
    • 这似乎在“部署”部分不起作用。我有一个带有key_pattern: builds/{TAG}-{BUILD_NUM}.zipkey_pattern: builds/{CIRCLE_TAG}-{BUILD_NUM}.zips3_location 部分。两者都不填写{tag}
    • tag: /regexp/ 功能不起作用的原因有一个:circle 上的 git checkout 步骤没有得到标签……我认为这是一个错误。但它很容易解决:将git fetch --tags 添加为 pre 步骤。
    • lalyos,你指的是哪个前置步骤?
    【解决方案2】:

    我是 CircleCI 的 Kim。

    要归档你想做的事情,我认为你必须能够在将新标签推送到 Github 时触发构建。但是,只有新的提交才会触发构建,所以目前看来这是不可行的。对不起!

    更新:此功能现已实现:https://circleci.com/docs/configuration/#tags

    【讨论】:

    • 这是回归吗?基于标签的构建在最近得到了明确的支持,用户也分享了他们的使用经验。
    • 该功能是在 Kim 做出此回答后添加的。 @Dean 的答案链接到正确的资源。
    【解决方案3】:

    我把这个放在这里给那些关注documentation 但没有让它工作的人。如果您的常规设置中有 branch only 配置,CircleCI 似乎完全忽略了标签。这样,标记的提交将显示为“未运行”。

    要仅在特定分支上构建并在特定标签上部署,请使用 branchignore 选项以及负前瞻正则表达式:

    # circle.yml
    general:
      branches:
        ignore:
          - /^(?!master).*$/
    deployment:
      beta:
        tag: /v[0-9]+(\.[0-9]+)*(-.*)*/
        owner: mediafreakch
        commands:
          - deploy.sh
    

    这将构建对master 的每个提交,并在它是标记提交时进行部署。要标记提交,我使用npm version

    【讨论】:

    • 不管怎样,如果您目前处于 bitbucket 测试版中,那么标签在任何情况下都不起作用。我在这里尝试过同样的方法,但在 bitbucket 中,Circle 不执行任何部署命令。
    • @Jack 你如何命名你的标签?您是否使用 git tag -a 标志(这就是 npm version 所做的)添加注释标签?
    • 不,使用非注释标志。这是否会影响 $CIRCLE_TAG 是否存在?我会尝试一个带注释的标签,看看是否有区别,然后在这里报告。好电话@mediafreakch
    • 不,仍然没有工作。似乎$CIRCLE_TAG 不存在。我敢打赌这是一个有点桶(测试版)的错误。我现在正在解决这个问题,只需运行一个脚本,确定是否有一个与正则表达式匹配的标签,然后跳过所有内容(exit 0),或者继续进行部署。感谢 mediafreakch 的想法,但标签不存在(注释与否)。
    • 带注释的标签对 github 也没有影响
    猜你喜欢
    • 2021-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-05
    • 2014-03-06
    • 2018-01-03
    • 2012-03-26
    • 2015-04-06
    相关资源
    最近更新 更多