CircleCIでYAML Anchors & Aliasesを使う

CircleCIのYAMLを書くときに、同じ記述をjob毎に書くのがめんどうだったのでYAML Anchors & Aliasesを使ってみました。 参考 https://circleci.com/blog/ci […]

広告ここから
広告ここまで

目次

    CircleCIのYAMLを書くときに、同じ記述をjob毎に書くのがめんどうだったのでYAML Anchors & Aliasesを使ってみました。

    参考

    https://circleci.com/blog/circleci-hacks-reuse-yaml-in-your-circleci-config-with-yaml

    背景

    Docker Hubが匿名でのImage Pullに対して回数制限を設定するようになりました。

    https://www.docker.com/pricing/resource-consumption-updates

    Circle CI側でも認証付きでのpullを推奨するとのことなので、これをjobごとに設定しています。

    2020年11月1日から、Docker Hub で匿名ユーザーに対する発信元 IP に基づいたプル回数制限が導入されます。運用中のサービスでの混乱を避けるために、Docker Hub から認証付きでプル操作を行うようにすることをお勧めします。認証は設定ファイルで行えます(Docker の認証付きプルの使用を参照)。

    https://circleci.com/docs/ja/2.0/docker-hub-pull-through-mirror/

    YAML Anchors & Aliasesを使わない場合

    docker部分に認証まわりを足したために、コードが冗長になってきます。

    jobs:
      setup:
      working_directory: ~/repo
      docker:
        # specify the version you desire here
        - image: circleci/node:lts
          auth:
            username: $DOCKERHUB_USERNAME
            password: $DOCKERHUB_PASSWORD
        steps:
          - checkout
          - restore_cache:
              name: Restore Yarn Package Cache
              keys:
                - yarn-packages-{{ checksum "yarn.lock" }}
          - run: yarn
          - save_cache:
              name: Save Yarn Package Cache
              key: yarn-packages-{{ checksum "yarn.lock" }}
              paths:
                - ~/.cache/yarn
          - persist_to_workspace:
              root: ~/repo
              paths:
                - ./*
      
      test:
      working_directory: ~/repo
      docker:
        # specify the version you desire here
        - image: circleci/node:lts
          auth:
            username: $DOCKERHUB_USERNAME
            password: $DOCKERHUB_PASSWORD
        steps:
          - attach_workspace:
              at: ~/repo
          - run:
              name: Run Unit test
              command: yarn run test:ci

    YAML Anchors & Aliasesを使った場合

    docker working_directoryを1箇所にまとめることができました。

    defaults: &defaults
      working_directory: ~/repo
      docker:
        # specify the version you desire here
        - image: circleci/node:lts
          auth:
            username: $DOCKERHUB_USERNAME
            password: $DOCKERHUB_PASSWORD
    
    jobs:
      setup:
        <<: *defaults
        steps:
          - checkout
          - restore_cache:
              name: Restore Yarn Package Cache
              keys:
                - yarn-packages-{{ checksum "yarn.lock" }}
          - run: yarn
          - save_cache:
              name: Save Yarn Package Cache
              key: yarn-packages-{{ checksum "yarn.lock" }}
              paths:
                - ~/.cache/yarn
          - persist_to_workspace:
              root: ~/repo
              paths:
                - ./*
      
      test:
        <<: *defaults
        steps:
          - attach_workspace:
              at: ~/repo
          - run:
              name: Run Unit test
              command: yarn run test:ci

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark