CircleCI Orb 테스트를 자동화합시다.

7547 단어 CircleCItestorb
CircleCI의 Orb 무려 테스트 쓸 수 있습니다만, 문서를 읽어도 자동화까지 꽤 멀었으므로 써 남겨 둡니다.

Orb 테스트를 작성하는 기사이므로 Orb는 이미 작성한 전제로 작성합니다.
circleci/[email protected] 에서 동작 확인되었습니다.
h tps : // / rc ぇ시. 이 m/오 rbs/레기 스트리/오 rb/시 rcゔぇ시온 = 9.0.0

이전 준비



CircleCI의 Personal API Tokens



Orb를 게시하기 위해 CircleCI API Token을 내고 환경 변수 CIRCLE_TOKEN로 설정합니다. 프로젝트별로 Token을 발행하는 것이 번거롭기 때문에, Contexts에 세트 해 두면 편리합니다.
그건 그렇고, 프로젝트의 API Token에서는 움직이지 않았습니다.

테스트 작성



테스트를 .circleci/config.yml에 씁니다.circleci/orb-tools 에 편리한 Job이 갖추어져 있으므로, 이것을 활용해 써 갑니다.
h tps : // / rc ぇ시. 코 m / rbs / 레기 스트리 / rb / shi rc ぇ시 / rb 및 ols

거친 흐름으로는
  • orb pack ( orb-tools/pack )
  • dev:alpha 로 Orb Registry에 publish ( orb-tools/publish-dev )
  • run-integration-tests Pipeline Parameter를 true로 하여 orb의 테스트가 쓰여진 workflow를 kick한다 ( orb-tools/trigger-integration-tests-workflow )
  • 테스트 단계를 흘리기 ( orb-tools/test-in-builds )

  • 요점은 테스트하고 싶은 orb publish와 실제 테스트는 workflow가 분리되어 있고 publish 후 테스트의 workflow가 kick하고 있다는 것입니다.
    workflow가 로드된 시점에서 orb를 읽어들여지고 있기 때문에, workflow 실행중에 덧쓰기해도, 그 dev:alpha (은)는 전회 Publish한 것을 사용해 버립니다.
    version: 2.1
    
    orbs:
      orb-tools: circleci/[email protected]
      # For test
     <orb-name>-alpha: <namespace/orb-name>@dev:alpha
    
    # https://circleci.com/docs/2.0/pipeline-variables/
    parameters:
      run-integration-tests:
        type: boolean
        default: false
      dev-orb-version:
        type: string
        default: "dev:alpha"
    
    workflows:
      version: 2
      dev:
        # これを書かないと無限ループする
        unless: << pipeline.parameters.run-integration-tests >>
        jobs:
          - orb-tools/pack:
              name: pack-dev
          - orb-tools/publish-dev:
              name: publish-dev
          # Contextsを使う場合
              # もしくは環境変数`CIRCLE_TOKEN`が設定がされていればOK
              context: orb-publishing
              requires: [pack-dev]
              orb-name: <namespace/orb-name>
              publish-token-variable: CIRCLE_TOKEN
              validate: true
              checkout: false
              attach-workspace: true
          # このjob内で pipeline.parameters.run-integration-tests がtrueに変わる
          - orb-tools/trigger-integration-workflow:
              name: trigger-integration-workflow-dev
          # Contextsを使う場合
              # もしくは環境変数`CIRCLE_TOKEN`が設定がされていればOK
              context: orb-publishing
              requires: [publish-dev]
    
      integration_dev:
        when: << pipeline.parameters.run-integration-tests >>
        jobs:
          - orb-tools/pack:
              name: pack-integration_dev
          - orb-tools/test-in-builds:
              name: test-in-builds-integration_dev
              requires: [pack-integration_dev]
              orb-name: <orb-name>-alpha
              attach-workspace: true
              test-steps:
                - run: echo "ここにテストを書く"
    

    개인의 취향이 나오는 곳을 조금만 보충해 두면,
    workflow중에서 orb를 사용한 job에 일부러 name를 붙이고 있는 것은, job명이 중복했을 때에 orb-tools/pack-1라든지 나오는 것이 싫기 때문입니다. name 로 고유한 job명을 붙여 두는 것으로, 외형이 깨끗이 하고(아직 이것을 하지 않아 피해를 입은 적은 없지만) GitHub의 「Require status checks to pass before merging」의 브런치의 설정이 어긋나는 걱정도 없기 때문에 안심합니다.



    참고


    orb-tools 의 구현은 매우 참고가 됩니다.
    htps : // 기주 b. 이 m/시 rc ㎇ 푸 bぃc/오 rb와 ls오 rb/bぉb/에 302710073 또는 365243bf990b 3dfb66573843 아1/. 시 rc㎇시 / 곤후 g. yml

    ↑를 참고로 스스로 만들어 본 orb입니다.
    htps : // 기주 b. 코 m / 사와다 쇼타 / 엔 vsu bst-rb

    좋은 웹페이지 즐겨찾기