Red Hat OpenShift LocalでWebhooksの機能を試す

# はじめに

**Red Hat OpenShift Container Platform**(OCP) には GitHubなどのリポジトリにあるソースコードからコンテナイメージをビルド&デプロイしてくれるSource-to-Image(S2I)や、Webhookを使ってGitHubへのpushをトリガーに自動でビルド＆デプロイする機能が備わっており、動作も<font color="Red">簡単に</font>確認することが可能です。

:::note info
気になる方は [こちらのハンズオン](https://github.com/IBMDeveloperTokyo/openshift-s2i-lab) をお試しください。
:::

しかし、開発目的などでローカルPCで実行可能な **Red Hat OpenShift Local**(旧Red Hat CodeReady Containers)でWebhookを試したい場合、 <font color="Red">GitHubからOpenShift Local(localhost)にPOSTリクエストを送信できない(宛先不明になる)ため一手間加える必要があります。</font> 

本記事ではWebhookのパブリックエンドポイントを開発環境に簡単に設定できる **[UltraHook](https://www.ultrahook.com/)** を用いて解決をしていきます。

## 1. 環境構築

:::note warn
Macの場合は Terminal 、Windowsの場合は PowerShell 7 で動作確認をしています。
特にWindowsを利用している方はPowerShelのバージョンに注意して実施ください。(5系でUltraHookの動作確認をした際、文字のエンコーディングの違いによるエラーが発生しました)
:::

UltraHookを利用するために、まずはRuby環境を用意し、gemでUltraHookをインストールします。
既にRuby環境がある方はRubyの章をスキップしてください。

環境があるかわからない場合は下記コマンドを実行し、以下の様にRubyのバージョンが表示されるかを確認してください。
```cmd
# 例)v2.6.8の出力結果
$ ruby -v
ruby 2.6.8p205 (2021-07-07 revision 67951) [universal.x86_64-darwin21]
```

### 1-1. Ruby

Windowsの場合は、[RubyInstaller](https://rubyinstaller.org/)のインストーラーをダウンロードして実行してください。
Macの場合は、下記コマンドを実行してください。
```cmd
$ 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

下記コマンドを実行してください。
```cmd
$ sudo gem install ultrahook
```

以上で環境構築は完了です。

## 2. UltraHookの設定

https://www.ultrahook.com/register にサインアップし、UltraHookのAPI Keyを取得します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118463/e6546182-c9ad-8b7b-05db-cd461171559c.png)
表示されるコマンド`echo "api_key: xxxxxxxxx" > ~/.ultrahook`を実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118463/50bf3d88-5962-0ad1-6b48-fb03db5f8f83.png)

## 3. UltraHookの起動

OpenShift Localのコンソール画面でS2Iを試した後、Developer > ビルド > ビルド名のリンク とクリックし、`シークレットの使用によるURLのコピー`をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118463/e472869c-a5b8-0295-ea00-e774c4f5fdf2.png)
下記コマンドでUltraHookを起動します。
%1には**好きな名前**(今回はsample)
%2には先ほどコピーした **シークレット付きのWebhook URL**
```cmd
$ 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` の部分をコピーします。
```cmd
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をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118463/dd06998d-9809-fdc2-d05f-2dff9204ae9b.png)

以上で設定は完了です。
実際にリポジトリを更新し、それをトリガーにOpenShift Local上のビルドが走っていることを確認しましょう！

## 4. UltraHookの停止

コマンドラインで`ctrl + c`を実行するとUltraHookを停止することができます。