継続的インテグレーション(CI)
開発者が頻繁にコードをリポジトリに統合(マージ)し、そのたびに自動でビルドおよびテストを行うプロセス。
メリット
- 早期のバグ検出と修正
- 一貫性のあるビルドプロセス
- 新機能の迅速な統合
継続的デリバリー(CD)
コードを自動的にテスト環境やステージング環境にデプロイし、本番環境へのデプロイを手動で承認するプロセスです。
メリット
- ステージング環境での準備が整ったコードを迅速に本番環境にリリースできる準備が整う
- 自動化されたデプロイメントにより、人為的ミスが減少する
- デプロイプロセスの自動化により手動作業が削減される
CI/CDのワークフロー
コードのコミット
:
開発者が変更をローカルリポジトリにコミット。
ビルドプロセスのトリガー
:
コードがリポジトリにプッシュされると、CIツールがビルドプロセスを開始。
自動テスト
:
単体テスト、統合テストが自動で実行。
デプロイ
:
テストに合格したビルドがステージング環境、本番環境に自動でデプロイ。
GitHub Actionsを使ったCI/CD
1.リポジトリのセットアップ:
- GitHubでリポジトリを作成。
2.ワークフローファイルの作成:
- .github/workflows/ci.ymlという名前でワークフローファイルを作成。
name: CI
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Node.js
uses: actions/setup-node@v2
with:
node-version: '14'
- name: Install dependencies
run: npm install
- name: Run tests
run: npm test
name
: ワークフローの名前を指定します。
ここでは「CI」として、継続的インテグレーション(CI)プロセスであることを示しています。
on
: ワークフローがトリガーされるイベントを指定します。
push
: コードがリポジトリにプッシュされたときにこのワークフローが実行されます。
pull_request
: プルリクエストが作成または更新されたときにもこのワークフローが実行されます。
jobs
: ワークフロー内で実行するジョブを定義します。
ここでは「build」という名前のジョブを設定しています。
runs-on
: ジョブが実行される環境を指定します。
ここでは「ubuntu-latest」、つまり最新のUbuntuの環境で実行されることを意味します。
steps
: ジョブ内で実行されるステップのリストです。
ここでは一連のステップが定義されています。
uses
: GitHub Actionsのアクションを利用して特定の操作を実行します。
ここでは actions/checkout@v2 を使用して、リポジトリのコードをクローン(チェックアウト)しています。
name
: ステップの名前を指定します。
「Set up Node.js」という名前がついています。
uses
: actions/setup-node@v2 アクションを使用してNode.jsの設定を行います。
with
: アクションに渡すパラメーターです。
ここでは node-version: '14' によってNode.jsのバージョン14を指定しています。
name
: ステップの名前を指定します。
「Install dependencies」という名前がついています。
run
: 指定したコマンドを実行します。
ここでは npm install コマンドが実行され、プロジェクトの依存関係がインストールされます。
name
: ステップの名前を指定します。
「Run tests」という名前がついています。
run
: 指定したコマンドを実行します。
ここでは npm test コマンドが実行され、プロジェクトのテストが実行されます。
3.パイプラインの実行:
- コードをプッシュすると、ワークフローが自動で実行され、ビルドおよびテストが行われる。
まとめ
CI/CDは、コードの変更を自動的にビルド、テスト、デプロイするプロセスです。
継続的インテグレーション(CI)はコードの統合を頻繁に行い、継続的デプロイメント(CD)は変更を自動的に本番環境にリリースします。
これにより、開発の効率と品質が向上します。