首页 > 解决方案 > 如何使自定义命令始终使用`when:always`运行

问题描述

我有一个圈配置,其中包括以下自定义命令:

  remove-circle-ip:
    description: "remove current Circle CI box IP from inbound security group rules for DB"
    steps:
      - aws-white-list-circleci-ip/remove:
          tag-key: circleci
          tag-value: whitelistmeplease
          port: 5432

我在工作中使用如下:

jobs:
  test:
    docker:
      - image: nikolaik/python-nodejs:python3.8-nodejs12
        environment:
          AWS_DEFAULT_REGION: us-east-2
    steps:
      - setup
      - install-python-deps
      - add-circle-ip
      - run:
          name: run tests
          command: |
            poetry run coverage run --source='.' manage.py test 
      - run:
          name: remove circle IP
          command:  remove-circle-ip
          when: always

即使在它之前运行的测试失败,我也希望运行删除圈子 IP 的步骤。我似乎无法弄清楚这个的语法。以前,我只是用来- remove-circle-ip运行命令而不是放置run块,即:

jobs:
  test:
    docker:
      ...
    steps:
      - setup
      - ...
      - add-circle-ip
      - ...
      - remove-circle-ip

但不知道如何指定when: always我是否这样做。

但是现在,当切换到将我的命令作为run块的一部分调用时,它失败了"remove-circle-ip: command not found"

那么,即使之前的步骤失败,我怎样才能让这个命令始终运行呢?

标签: circleci

解决方案


我对 CircleCI 还很陌生,所以可能有更好的方法可以做到这一点,或者根本不应该这样做,但是(在我加入之前)我正在从事的项目已经做过类似的事情。它是通过使每一步都报告成功来实现的,无论它实际上是成功还是失败,这允许最后的命令始终运行。这些命令都是终端命令,所以它们只是|| true在最后。我不确定您将如何使用更复杂的命令或使用内置命令来实现这一目标。

在我们的例子中,可能失败的步骤是可选的,我们不在乎它们是否真的失败了。但是,如果您想报告失败,我认为您应该能够将上一步的失败存储在某处,并添加报告它的最后一步。


推荐阅读