Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CircleCI 中 workflows 检测 tag 的坑点 #34

Open
yyzclyang opened this issue Jun 15, 2019 · 0 comments
Open

CircleCI 中 workflows 检测 tag 的坑点 #34

yyzclyang opened this issue Jun 15, 2019 · 0 comments

Comments

@yyzclyang
Copy link
Owner

yyzclyang commented Jun 15, 2019

在使用 Circleci 做自动化测试发布时,有一种使用场景。

我要求每次 push 代码时都进行测试,但只有 push 一个 tag 时才自动发布包,这要怎么做呢?

这种情况很容易想到要这样写

workflows:
  version: 2
  build_accept_deploy:
    jobs:
      - test
      - deploy:
          requires:
            - test
          filters:
            tags:
              only: /^v[0-9]+(\.[0-9]+)*/
          branches:
            ignore: /.*/

理所当然的想,这样设置的话,每次都会执行 test,但只有 push 一个 tag 时,才会执行完 test 之后才去执行 deploy。那如果这么想,那么恭喜你,入坑了。

这样设置的结果是哪样呢?来看一下上传一个 tag 的结果。

纳尼?deploy 去哪了?

我们来做一个测试,写这样的一个规则,并上传一个 tag

workflows:
  version: 2
  build_accept_deploy:
    jobs:
      - prepare:
          filters:
            tags:
              only: /^v[0-9]+(\.[0-9]+)*/
          branches:
            ignore: /.*/
      - test:
          requires:
            - prepare
      - build
      - deploy:
          requires:
            - build
          filters:
            tags:
              only: /^v[0-9]+(\.[0-9]+)*/
            branches:
              ignore: /.*/

结果确是这样的。

我们可以看到,只要 preparebuild 执行了,其他两个命令都没有执行。

由此我们可以推测:

  1. Circleciworkflows 只会在需要判断 tag 时才会去检测 tag,也就是 prepare 检测到了 tag v0.0.41,而 build 却是 master
  2. 如果 jobrequires 依赖,那么它只能依赖和自身 tag 情况一致的 job,也就造成了 testdeploy 所依赖的 preparebuild 都执行了,但是由于依赖的 jobtag 情况与自身不一致(一个有 tag,另一个没有),所以不能产生正确依赖。

这个规则真反人类。

@yyzclyang yyzclyang changed the title Circle 中 workflows 检测 tag 的坑点 CircleCI 中 workflows 检测 tag 的坑点 Jun 21, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant