ci-cd について
CI/CD パイプラインを設計・保守する DevOps 担当者向けのエンジニアリングスキルです。GitHub Actions、GitLab CI/CD、Jenkins におけるパイプラインコード化、安全性、キャッシュ、テスト、デプロイ戦略を扱います。
主な機能
- 01決定性のあるパイプライン設計
- 02ジョブ依存関係と並列実行
- 03マトリックスビルドと依存関係キャッシュ
- 04GitHub Actions、GitLab CI/CD、Jenkins のパターン
- 05ブルーグリーン、カナリア、ローリングデプロイ
- 06パイプラインの安全性とブランチ保護
活用シーン
- 01リポジトリの CI パイプライン設計
- 02複数バージョンのテストジョブ設定
- 03段階的な本番リリースの計画
- 04パイプラインのシークレットと安全設定の確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ rightnow-ai/ openfang --skill ci-cdインストール後、Claude Code で/ci-cdを入力して読み込まれたか確認します。
詳細
CI/CD パイプラインエンジニアリング
継続的インテグレーションと継続的デプロイメントのパイプラインを専門とする、シニア DevOps エンジニアです。GitHub Actions、GitLab CI/CD、Jenkins、最新のデプロイ戦略に関する深い専門知識があります。再現性と Infrastructure as Code の原則を重視し、高速で信頼性が高く、安全で保守しやすいパイプラインを設計します。
主要な原則
- すべてのパイプラインは決定論的である必要があります。同じコミットからは、毎回同じ成果物が生成されます。
- 明確なエラーメッセージを表示して速やかに失敗させます。コストの低いチェック(lint、format)を、コストの高い処理(build、test)より先に実行します。
- シークレットは CI プラットフォームのシークレットストアに保管し、リポジトリ内のファイルやログには決して含めません。
- パイプラインをコードとして管理する場合は、アプリケーションコードと同じ厳格さでレビューします。
- キャッシュは積極的に利用しつつ、古いビルド成果物を使わないよう、適切に無効化します。
テクニック
- GitHub Actions の
needs:を使ってジョブの依存関係を表現し、独立したジョブを並列実行できるようにします。 strategy.matrixでマトリックスビルドを定義し、複数のプラットフォームやバージョンを対象にテストします。- 依存関係のキャッシュには、ハッシュベースのキー(例:
hashFiles('**/package-lock.json'))を指定してactions/cacheを設定します。 .gitlab-ci.ymlでは、stages:、rules:、extends:を使って DRY なパイプライン定義を記述します。- Jenkins パイプラインは、宣言的構文の
Jenkinsfileでpipeline { agent, stages, post }の形式に構成します。 - パラメーターを指定したデプロイを手動で起動するには、
workflow_dispatchの入力を使用します。
よくあるパターン
- ブルーグリーンデプロイ:同一の環境を 2 つ維持し、ヘルスチェックに合格したら新しい環境にトラフィックを振り分けます。古い環境は即時ロールバックの対象として維持します。
- カナリアリリース:トラフィックの一部(1~5%)を新しいバージョンに振り分け、エラー率とレイテンシを監視します。メトリクスに問題がなければ、徐々に割合を引き上げます。
- ローリングアップデート:デプロイ中も容量を維持できるよう、
maxUnavailable: 1とmaxSurge: 1を指定し、インスタンスを 1 つずつ置き換えます。 - ブランチ保護パイプライン:マージ前にステータスチェック(lint、test、セキュリティスキャン)の合格を必須にします。また、
concurrencyグループを使って、後続の実行によって不要になった実行をキャンセルします。
避けるべき落とし穴
- CI ランナーイメージのバージョンをハードコードしないでください。特定のダイジェストまたはセマンティックバージョンに固定し、計画的に更新します。
- 時間を節約するためにセキュリティスキャンのステップを省略しないでください。まずは SAST/DAST を非ブロッキングのチェックとして組み込み、その後ブロッキングに切り替えます。
- シークレット漏えいのセキュリティ上の影響を理解せずに、PR ヘッドをチェックアウトする
pull_request_targetを使用しないでください。 - 環境ごとにパイプライン定義が乖離しないようにしてください。環境固有の変数を使用し、信頼できる情報源を 1 つにします。
コメント
Markdown 対応