mcpField
C
circleci

circleci

github.com/bagelholeクラウド・DevOps1.2k325 回インストール23 週間前に更新
リポジトリ

circleci について

CircleCI の CI/CD パイプライン設定を支援する開発者向けスキルです。orbs、キャッシュ、並列実行、承認、シークレット用コンテキストを扱います。

主な機能

  1. 01パイプラインと実行環境の設定
  2. 02orbs による設定の再利用
  3. 03キャッシュとワークスペース共有
  4. 04テストの並列実行
  5. 05ワークフローの承認とスケジュール
  6. 06コンテキストによるシークレット管理

活用シーン

  1. 01アプリの CI/CD 設定
  2. 02キャッシュと並列テストによるビルド時間短縮
  3. 03本番デプロイへの承認ゲート設定
  4. 04デプロイ環境ごとのシークレット分離

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/bagelhole/devops-security-agent-skills --skill circleci

インストール後、Claude Code で/circleciを入力して読み込まれたか確認します。

詳細

CircleCI

CircleCI のクラウドネイティブな CI/CD プラットフォームを使用して、アプリケーションをビルド、テスト、デプロイします。

このスキルを使用するタイミング

次の場合にこのスキルを使用します:

  • CircleCI で CI/CD パイプラインを設定するとき
  • 再利用可能な設定に orbs を使用するとき
  • キャッシュと並列処理でビルド時間を最適化するとき
  • CircleCI のワークフローと承認を設定するとき
  • CircleCI のコンテキストとシークレットを管理するとき

前提条件

  • リポジトリに接続された CircleCI アカウント
  • CircleCI ダッシュボードでプロジェクトが有効になっていること
  • YAML の基本的な知識

設定ファイル

.circleci/config.yml を作成します:

version: 2.1

orbs:
  node: circleci/[email protected]
  docker: circleci/[email protected]

executors:
  default:
    docker:
      - image: cimg/node:20.10
    working_directory: ~/project

jobs:
  build:
    executor: default
    steps:
      - checkout
      - node/install-packages:
          pkg-manager: npm
      - run:
          name: Build application
          command: npm run build
      - persist_to_workspace:
          root: .
          paths:
            - dist

  test:
    executor: default
    steps:
      - checkout
      - node/install-packages:
          pkg-manager: npm
      - run:
          name: Run tests
          command: npm test

  deploy:
    executor: default
    steps:
      - checkout
      - attach_workspace:
          at: .
      - run:
          name: Deploy
          command: ./deploy.sh

workflows:
  build-test-deploy:
    jobs:
      - build
      - test:
          requires:
            - build
      - deploy:
          requires:
            - test
          filters:
            branches:
              only: main

エグゼキューター

Docker エグゼキューター
executors:
  node:
    docker:
      - image: cimg/node:20.10
      - image: cimg/postgres:15.0
        environment:
          POSTGRES_USER: test
          POSTGRES_DB: testdb
    working_directory: ~/app
Machine エグゼキューター
executors:
  linux-machine:
    machine:
      image: ubuntu-2204:current
    resource_class: large
macOS エグゼキューター
executors:
  macos:
    macos:
      xcode: "15.0.0"
    resource_class: macos.m1.medium.gen1

キャッシュ

依存関係のキャッシュ
jobs:
  build:
    steps:
      - checkout
      - restore_cache:
          keys:
            - v1-deps-{{ checksum "package-lock.json" }}
            - v1-deps-
      - run: npm ci
      - save_cache:
          key: v1-deps-{{ checksum "package-lock.json" }}
          paths:
            - node_modules
複数キーのキャッシュ
- restore_cache:
    keys:
      - v1-{{ .Branch }}-{{ checksum "package-lock.json" }}
      - v1-{{ .Branch }}-
      - v1-main-
      - v1-

ワークスペース

データの永続化
jobs:
  build:
    steps:
      - checkout
      - run: npm run build
      - persist_to_workspace:
          root: .
          paths:
            - dist
            - node_modules

  deploy:
    steps:
      - attach_workspace:
          at: ~/project
      - run: ./deploy.sh

並列処理

テストの分割
jobs:
  test:
    parallelism: 4
    steps:
      - checkout
      - run:
          name: Run tests
          command: |
            TESTFILES=$(circleci tests glob "test/**/*.test.js" | circleci tests split --split-by=timings)
            npm test -- $TESTFILES
      - store_test_results:
          path: test-results

ワークフロー

ジョブの順次実行
workflows:
  pipeline:
    jobs:
      - build
      - test:
          requires:
            - build
      - deploy:
          requires:
            - test
ジョブの並列実行
workflows:
  pipeline:
    jobs:
      - build
      - test-unit:
          requires:
            - build
      - test-integration:
          requires:
            - build
      - deploy:
          requires:
            - test-unit
            - test-integration
手動承認
workflows:
  deploy-prod:
    jobs:
      - build
      - test
      - hold:
          type: approval
          requires:
            - test
      - deploy-production:
          requires:
            - hold
スケジュールされたワークフロー
workflows:
  nightly:
    triggers:
      - schedule:
          cron: "0 2 * * *"
          filters:
            branches:
              only:
                - main
    jobs:
      - build
      - test
ブランチのフィルタリング
workflows:
  build-deploy:
    jobs:
      - build:
          filters:
            branches:
              only:
                - main
                - /feature-.*/
      - deploy:
          filters:
            branches:
              only: main
            tags:
              only: /^v.*/

Orbs

Orbs の使用
version: 2.1

orbs:
  aws-cli: circleci/[email protected]
  kubernetes: circleci/[email protected]

jobs:
  deploy:
    executor: aws-cli/default
    steps:
      - aws-cli/setup:
          aws_access_key_id: AWS_ACCESS_KEY_ID
          aws_secret_access_key: AWS_SECRET_ACCESS_KEY
      - kubernetes/install-kubectl
      - run: kubectl apply -f k8s/
一般的な Orbs
orbs:
  node: circleci/[email protected]              # Node.js
  docker: circleci/[email protected]          # Docker builds
  aws-cli: circleci/[email protected]        # AWS CLI
  aws-ecr: circleci/[email protected]        # ECR push
  aws-ecs: circleci/[email protected]        # ECS deploy
  gcp-cli: circleci/[email protected]        # GCP CLI
  kubernetes: circleci/[email protected]  # K8s deploy
  slack: circleci/[email protected]           # Notifications

Docker ビルド

version: 2.1

orbs:
  docker: circleci/[email protected]

jobs:
  build-and-push:
    executor: docker/docker
    steps:
      - setup_remote_docker:
          version: 20.10.24
      - checkout
      - docker/check
      - docker/build:
          image: myorg/myapp
          tag: $CIRCLE_SHA1
      - docker/push:
          image: myorg/myapp
          tag: $CIRCLE_SHA1

環境変数

プロジェクト変数

CircleCI の Project Settings > Environment Variables で設定します

コンテキスト
workflows:
  deploy:
    jobs:
      - deploy-staging:
          context: staging-secrets
      - deploy-production:
          context: production-secrets
変数の使用
jobs:
  deploy:
    steps:
      - run:
          name: Deploy
          command: |
            aws s3 sync dist/ s3://$S3_BUCKET
          environment:
            AWS_DEFAULT_REGION: us-east-1

成果物とテスト結果

jobs:
  test:
    steps:
      - run:
          name: Run tests
          command: npm test -- --coverage
      - store_test_results:
          path: test-results
      - store_artifacts:
          path: coverage
          destination: coverage-report

リソースクラス

jobs:
  build:
    docker:
      - image: cimg/node:20.10
    resource_class: large  # 4 vCPU, 8GB RAM
    steps:
      - checkout
      - run: npm run build

# Available classes:
# small: 1 vCPU, 2GB RAM
# medium: 2 vCPU, 4GB RAM (default)
# large: 4 vCPU, 8GB RAM
# xlarge: 8 vCPU, 16GB RAM

よくある問題

問題:キャッシュが復元されない

問題:ビルドのたびにキャッシュが見つかりません 解決策:キャッシュキーの形式を確認し、チェックサムファイルが変更されていないことを確認します

問題:ワークスペースのアタッチに失敗する

問題:永続化されたワークスペースが見つかりません 解決策:persist_to_workspace ジョブが完了していることを確認し、パスを確認します

問題:Docker レイヤーのキャッシュ

問題:Docker ビルドに時間がかかります 解決策:プロジェクト設定で Docker Layer Caching を有効にします(有料機能)

ベストプラクティス

  • 一般的なタスクには orbs を使用します
  • 積極的なキャッシュ戦略を実装します
  • ジョブ間でデータを共有するにはワークスペースを使用します
  • ビルドを高速化するため、並列処理でテストを分割します
  • 環境固有のシークレットにはコンテキストを使用します
  • 再利用可能なエグゼキューターを定義します
  • 分析に役立つよう、テスト結果を保存します

関連スキル

コメント