こんにちは!開発現場の自動化を進める中で、「コードを書いたら、一瞬でサーバーに反映されてほしい……」と思ったことはありませんか?
毎回のテスト実行や、手動でのサーバーへのアップロード作業。これらはエンジニアの集中力を奪い、時には「あ、デプロイし忘れた!」というヒューマンエラーを引き起こします。
今回は、世界中の開発現場で愛用されているCI/CDツール「Jenkins」と、ソースコード管理の絶対王者「GitHub」を連携させ、「コードをプッシュした瞬間に、自動でテストとデプロイが走る(プッシュ即デプロイ)」仕組みの作り方を解説します。
これをマスターすれば、あなたの開発体験は劇的に変わり、面倒な作業から解放されますよ。一緒に一歩ずつ進めていきましょう!
—
1. そもそも「Jenkins」と「Webhook」ってなに?
まずは、今回主役となるツールたちの役割を、直感的に理解していきましょう。
- Jenkins(ジェンキンス):
「自動化の執事」のような存在です。あなたが寝ている間も、コードが書き換えられたらすぐに起き出して、「テスト、動かしますね!」「問題ないので、サーバーにデプロイしておきました!」と文句一つ言わずに働いてくれます。
- Webhook(ウェブフック):
「イベント通知の伝書鳩」です。GitHub上で「コードがプッシュされたよ!」という大きな出来事(イベント)が起きたとき、GitHubがJenkinsのURLに向かって「おい、仕事の時間だぞ!」と自動で通知を送る仕組みのことです。
この2つを組み合わせることで、「人が何もしなくても、GitHubのプッシュをトリガーにJenkinsが全自動で動き出すパイプライン」が完成します。
—
2. 全体像:プッシュ即デプロイの裏側の流れ
設定に入る前に、今回構築する仕組みの「流れ」を頭にイメージしておきましょう。
[開発者]
│ (1. git push)
▼
[GitHub]
│ (2. WebhookでJenkinsへ通知)
▼
[Jenkins]
│ (3. 自動でリポジトリを取得)
│ (4. 自動テストを実行)
│ (5. 本番サーバーへデプロイ)
▼
[完了!]
非常にシンプルですが、これが自動化の第一歩であり、最も強力な基本形です。
—
3. Jenkins側の準備:まずは「挨拶(HelloWorld)」から
まずはJenkins側で、GitHubからの通知を受け取るための「受け皿(ジョブ)」を作ります。
ステップ1: ジョブの新規作成
1. Jenkinsの管理画面にログインします。
2. 左メニューの「新規ジョブ作成」をクリック。
3. アイテム名(例:`my-first-deploy-job`)を入力し、「フリースタイル・プロジェクトのビルド」を選択して「OK」をクリックします。
ステップ2: GitHub連携の有効化
ジョブの設定画面が開いたら、以下の設定を行います。
1. 「General」セクション:
- 「GitHub プロジェクト」にチェックを入れ、「プロジェクト URL」にあなたのGitHubリポジトリのURLを入力します(例: `https://github.com/your-username/your-repo/`)。
2. 「ビルド・トリガー」セクション:
- 「GitHub hook trigger for GITScm polling」にチェックを入れます。
(※これが、GitHubからのWebhookを受け取るための魔法のスイッチです)
3. 「ビルの手順」セクション(最初のHelloWorld):
- 「ビルド手順の追加」から「シェルの実行」を選択し、以下のスクリプトを入力します。
Jenkinsが正しくコードを受け取って動いているか確認するスクリプト
echo “==========================================”
echo ” 🚀 GitHubからプッシュを検知しました!”
echo ” 自動テストとデプロイを開始します…”
echo “==========================================”
現在の日時と、動いている環境の確認
date
whoami
4. 画面一番下の「保存」をクリックします。
これで、Jenkins側の準備は完了です!
—
4. GitHub側の設定:伝書鳩(Webhook)を飛ばす
次は、GitHub側からJenkinsに対して「コードをプッシュしたよ」と知らせる設定を行います。
ステップ1: Webhookの設定画面を開く
1. ブラウザでGitHubの対象リポジトリを開きます。
2. 上部メニューの「Settings(設定)」をクリック。
3. 左サイドバーの「Webhooks」をクリックし、右上の「Add webhook」をクリックします(パスワードを求められたら入力してください)。
ステップ2: Webhookのパラメータを入力する
ここでJenkinsのURLと連携のルールを指定します。
- Payload URL:
JenkinsのURLの末尾に `/github-webhook/` を追加したものを入力します。
(例: `http://あなたのJenkinsのドメインまたはIP/github-webhook/`)
> ⚠️注意: Jenkinsがローカル環境(localhost)にある場合、GitHubから直接アクセスできません。テストには `ngrok` などのトンネリングツールを使うか、クラウド上のJenkinsを利用してください。
- Content type:
`application/json` を選択します。
- Which events would you like to trigger this webhook?:
「Just the push event(プッシュイベントのみ)」を選択します。
- Active:
チェックが入っていることを確認します。
入力できたら、一番下の「Add webhook」をクリック!
これで、GitHubとJenkinsが一本のパイプで結ばれました。
—
5. 動作確認:いよいよ「プッシュ即デプロイ」を体感する!
さあ、すべての準備が整いました。実際にコードをプッシュして、自動化の魔法を体験してみましょう。
1. 手元のローカルPCで、先ほど連携したGitHubリポジトリのプロジェクトを開きます。
2. 適当なファイルを少しだけ編集するか、新しくREADMEなどに文字を追加します。
3. いつも通り、Gitでコミットしてプッシュします!
git add .
git commit -m “feat: Webhookのテストと自動化の確認”
git origin main
プッシュが完了したら、すぐにブラウザでJenkinsの管理画面を開いてみてください。
どうでしょう?
あなたが `git push` キーを押した直後であるにもかかわらず、Jenkinsの該当ジョブが「ビルド中(青いアイコンやプログレスバー)」になっていませんか?
ジョブの「ビルド履歴」から「コンソール出力」を覗いてみてください。先ほど設定したメッセージが表示されているはずです。
Started by GitHub push by your-username
Running as SYSTEM
Building in workspace /var/jenkins_home/workspace/my-first-deploy-job
[my-first-deploy-job] $ /bin/sh -xe /tmp/jenkins…
+ echo ‘==========================================’
🚀 GitHubからプッシュを検知しました!
自動テストとデプロイを開始します…
+ echo ‘==========================================’
+ date
Sun Oct 21 12:00:00 UTC 2023
+ whoami
jenkins
Finished: SUCCESS
大成功です! これが「プッシュ即デプロイ」の基本形です。
—
6. 先輩エンジニアからのワンポイント・アドバイス
ここまでの基礎ができたら、次は「テストの自動実行」や「本番サーバーへの転送(scpやrsyncなど)」をシェルスクリプトに組み込んでいくだけです。
- 秘密情報の管理:
サーバーのパスワードやAPIキーをシェルに直接書かず、Jenkinsの「認証情報(Credentials)」機能を使って安全に管理しましょう。
- 通知の連携:
デプロイが成功したときや失敗したときに、SlackやDiscordに通知が飛ぶようにすると、チームの開発効率がさらに跳ね上がります。
面倒な定型作業はすべてJenkinsに任せて、私たちエンジニアは「新しい価値を生み出すコードを書くこと」に集中しましょう。
毎日の開発が劇的に楽になる感覚を、ぜひ楽しんでくださいね!