Circleci:如何根据 git 标签进行部署

Circleci: How to deploy depending on git tag

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

目前我正在使用这个

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

而不是 branch: master 我想写类似 tag: /release_.*/

的东西

背景:我想根据 git 标签设置 docker 标签。因此,例如,无论何时提交给 master,都会创建并推送带有 latest 标签的新 docker 图像。每当设置特殊的 git 标签(例如 release_1.0_2015-06-13)时,将创建并推送带有标签 1.0 的新 docker 图像。

另一种方法是根据不同的标签只使用不同的分支。但是我想用标签来标记特定的版本。

我是 CircleCI 的 Kim。

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

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

It looks like this was added 因为 Kim 回答了。

Normally, pushing a tag will not run a build. If there is a deployment configuration with a tag property that matches the name of the tag you created, we will run the build and the deployment section that matches.

In the below example, pushing a tag named release-v1.05 would trigger a build & deployment. Pushing a tag qa-9502 would not trigger a build.

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

我把它放在这里是为了那些追随 documentation 但没有让它发挥作用的人。如果您在常规设置中有 branch only 配置,CircleCI 似乎完全忽略标签。标记的提交将以这种方式显示为 "Not run"。

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

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

这将构建对 master 的每个提交并部署(如果它是标记的提交)。要标记提交,我使用 npm version.