circleci について
CircleCI の CI/CD パイプライン設定を支援する開発者向けスキルです。orbs、キャッシュ、並列実行、承認、シークレット用コンテキストを扱います。
主な機能
- 01パイプラインと実行環境の設定
- 02orbs による設定の再利用
- 03キャッシュとワークスペース共有
- 04テストの並列実行
- 05ワークフローの承認とスケジュール
- 06コンテキストによるシークレット管理
活用シーン
- 01アプリの CI/CD 設定
- 02キャッシュと並列テストによるビルド時間短縮
- 03本番デプロイへの承認ゲート設定
- 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 を使用します
- 積極的なキャッシュ戦略を実装します
- ジョブ間でデータを共有するにはワークスペースを使用します
- ビルドを高速化するため、並列処理でテストを分割します
- 環境固有のシークレットにはコンテキストを使用します
- 再利用可能なエグゼキューターを定義します
- 分析に役立つよう、テスト結果を保存します
関連スキル
- github-actions - GitHub CI/CD
- docker-management - コンテナのビルド
- aws-ecs-fargate - ECS のデプロイメント
コメント
Markdown 対応