CircleCI Удерживайте шаг - PullRequest
0 голосов
/ 06 мая 2020

Я пытаюсь добавить задание удержания в рабочий процесс в файле config.yml CircleCI, но не могу заставить его работать, и я почти уверен, что это действительно простая ошибка с моей стороны (я просто не вижу ее! ).

При проверке с помощью CLI CircleCI локально выполняется следующая команда

circleci config validate:

Я получаю следующую ошибку:

Error: Job 'hold' requires 'build-and-test-service', which is the name of 0 other jobs in workflow 'build-deploy'

Это config.yml (обратите внимание, что это для приложения Serverless Framework, но это не должно иметь никакого значения)

version: 2.1
jobs:
  build-and-test-service:
    docker:
      - image: timbru31/java-node
    parameters:
      service_path:
        type: string
    steps:
      - checkout
      - serverless/setup:
          app-name: serverless-framework-orb
          org-name: circleci
      - restore_cache:
          keys:
            - dependencies-cache-{{ checksum "v2/shared/package-lock.json" }}-{{ checksum "package-lock.json" }}-{{ checksum "<< parameters.service_path >>/package-lock.json" }}
            - dependencies-cache
      - run:
          name: Install dependencies
          command: |
            npm install
            cd v2/shared
            npm install
            cd ../../<< parameters.service_path >>
            npm install
      - run:
          name: Test service
          command: |
            cd << parameters.service_path >>
            npm run test:ci
      - store_artifacts:
          path: << parameters.service_path >>/test-results/jest
          prefix: tests
      - store_artifacts:
          path: << parameters.service_path >>/coverage
          prefix: coverage
      - store_test_results:
          path: << parameters.service_path >>/test-results
  deploy:
    docker:
      - image: circleci/node:lts
    parameters:
      service_path:
        type: string
      stage_name:
        type: string
      region:
        type: string
    steps:
      - run:
          name: Deploy application
          command: |
            cd << parameters.service_path >>
            serverless deploy --verbose --stage << parameters.stage_name >> --region << parameters.region >>
      - save_cache:
          paths:
            - node_modules
            - << parameters.service_path >>/node_modules
          key: dependencies-cache-{{ checksum "package-lock.json" }}-{{ checksum "<< parameters.service_path >>/package-lock.json" }}
orbs:
  serverless: circleci/serverless-framework@1.0.1
workflows:
  version: 2
  build-deploy:
    jobs:
      # non-master branches deploys to stage named by the branch
      - build-and-test-service:
          name: Build and test campaign
          service_path: v2/campaign
          filters:
            branches:
              only: develop
      - hold:
          name: hold
          type: approval
          requires:
            - build-and-test-service
      - deploy:
          service_path: v2/campaign
          stage_name: dev
          region: eu-west-2
          requires:
            - hold

Очевидно, что ошибка относится к шагу hold ( в нижней части конфигурации) не может найти build-and-test-service чуть выше него, но build-and-test-service действительно существует, поэтому я в тупике на этом этапе.

1 Ответ

0 голосов
/ 07 мая 2020

Для всех, кто читал, я понял, почему это не работает.

По сути, я использовал неверную ссылку на свойство под ключом requires:

workflows:
  version: 2
  build-deploy:
    jobs:
      # non-master branches deploys to stage named by the branch
      - build-and-test-service:
          name: Build and test campaign
          service_path: v2/campaign
          filters:
            branches:
              only: develop
      - hold:
          name: hold
          type: approval
          requires:
            - build-and-test-service

Правильная ссылка на свойство в этом случае должно было быть name предыдущего шага, т.е. Build and test campaign, поэтому я просто изменил это имя на build-and-test-service.

Я обнаружил, что документы CircleCI не очень ясны по этому поводу, но, возможно, это было потому, что в их примерах, связанных с ручным утверждением, указано, что свойство requires должно указывать на ключ root задания, например build-and-test-service.

Полагаю, мне тоже следовало быть более бдительным при чтении ошибок , там также упоминалось name.

...