はじめに
Red Hat OpenShift Container Platform(OCP) には GitHubなどのリポジトリにあるソースコードからコンテナイメージをビルド&デプロイしてくれるSource-to-Image(S2I)や、Webhookを使ってGitHubへのpushをトリガーに自動でビルド&デプロイする機能が備わっており、動作も簡単に確認することが可能です。
気になる方は こちらのハンズオン をお試しください。
しかし、開発目的などでローカルPCで実行可能な Red Hat OpenShift Local(旧Red Hat CodeReady Containers)でWebhookを試したい場合、 GitHubからOpenShift Local(localhost)にPOSTリクエストを送信できない(宛先不明になる)ため一手間加える必要があります。
本記事ではWebhookのパブリックエンドポイントを開発環境に簡単に設定できる UltraHook を用いて解決をしていきます。
1. 環境構築
Macの場合は Terminal 、Windowsの場合は PowerShell 7 で動作確認をしています。
特にWindowsを利用している方はPowerShelのバージョンに注意して実施ください。(5系でUltraHookの動作確認をした際、文字のエンコーディングの違いによるエラーが発生しました)
UltraHookを利用するために、まずはRuby環境を用意し、gemでUltraHookをインストールします。
既にRuby環境がある方はRubyの章をスキップしてください。
環境があるかわからない場合は下記コマンドを実行し、以下の様にRubyのバージョンが表示されるかを確認してください。
# 例)v2.6.8の出力結果
$ ruby -v
ruby 2.6.8p205 (2021-07-07 revision 67951) [universal.x86_64-darwin21]
1-1. Ruby
Windowsの場合は、RubyInstallerのインストーラーをダウンロードして実行してください。
Macの場合は、下記コマンドを実行してください。
$ brew install rbenv
$ rbenv install -l
2.6.10
2.7.6
3.0.4
3.1.2
jruby-9.3.9.0
mruby-3.1.0
picoruby-3.0.0
rbx-5.0
truffleruby-22.3.0
truffleruby+graalvm-22.3.0
Only latest stable releases for each Ruby implementation are shown.
Use 'rbenv install --list-all / -L' to show all local versions.
$ rbenv install x.x.x # x.x.xは一番大きな数字のバージョンを選択 > 3.1.2
$ rbenv global x.x.x # x.x.xはinstallと同じバージョンを指定 > 3.1.2
1-2. UltraHook
下記コマンドを実行してください。
$ sudo gem install ultrahook
以上で環境構築は完了です。
2. UltraHookの設定
https://www.ultrahook.com/register にサインアップし、UltraHookのAPI Keyを取得します。

表示されるコマンドecho "api_key: xxxxxxxxx" > ~/.ultrahookを実行します。

3. UltraHookの起動
OpenShift Localのコンソール画面でS2Iを試した後、Developer > ビルド > ビルド名のリンク とクリックし、シークレットの使用によるURLのコピーをクリックします。

下記コマンドでUltraHookを起動します。
%1には好きな名前(今回はsample)
%2には先ほどコピーした シークレット付きのWebhook URL
$ ultrahook %1 %2
# 例)
# ultrahook sample https://api.crc.testing:6443/apis/build.openshift.io/v1/namespaces/test/buildconfigs/openshift-s-2-i-lab-git/webhooks/xxxxxxx/github
起動できると以下の様に https://xxx-yyy.ultrahook.com -> シークレット付きのWebhook URL と表示されるので https://xxx-yyy.ultrahook.com の部分をコピーします。
Authenticated as qiitasample
Forwarding activated...
https://qiitasample-sample.ultrahook.com -> https://api.crc.testing:6443/apis/build.openshift.io/v1/namespaces/test/buildconfigs/openshift-s-2-i-lab-git/webhooks/xxxxxxx/github
# https://qiitasample-sample.ultrahook.com をコピー
GitHubのWebhook追加画面に移動し、Payload URLに先ほど UltraHookにて生成されたURL、Content typeに application/jsonを設定し、Add webhookをクリックします。

以上で設定は完了です。
実際にリポジトリを更新し、それをトリガーにOpenShift Local上のビルドが走っていることを確認しましょう!
4. UltraHookの停止
コマンドラインでctrl + cを実行するとUltraHookを停止することができます。