【IBM Application Gateway】IBM CloudにGitLabのリポジトリーを作成&利用してみる

# はじめに
今回はIBM Cloud上にGitlabのリポジトリを作成し、[IBM Application Gateway Deployment Asset](https://github.com/jonpharry/iag) のファイルを保管、IBM Application Gatewayをデプロイするといった流れを試しました。

# 1.Gitlabのリポジトリ作成

以下の記事通りにリポジトリを作成します。iagというプライベートリポジトリを作成しました。
[IBM Cloud上のGitLabのレポジトリを作成する](https://qiita.com/kawada2017/items/1f7063c60dd13021ea99)

![qiita (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/f6205bee-4005-38aa-523f-de68c0a3c36d.png)

# 2. IBM Application Gateway Deployment AssetsをGitlabに連携する。

[IBM Application Gateway Deployment Assets](https://github.com/jonpharry/iag)のファイルがローカルにあるところから始めました。

README.mdに従ってVerifyの構成や証明書ファイルの発行、 config.propertiesファイルの作成を行ってください。

次に、openshift\iag-build-template.yamlファイルの中にあるGITHUB＿REPOの値は、GitLabのURLに書き換えます。

```
  - displayName: GitHub Repository
    description: GitHub repository where configuration is stored
    name: GITHUB_REPO
    value: https://jp-tok.git.cloud.ibm.com/E30020/iag
```

Gitlab上に、ローカルにあるデータをアップロードする手順が表示されていました。この手順通りに実施していきます。

```
Push an existing folder
cd existing_folder
git init --initial-branch=main
git remote add origin https://jp-tok.git.cloud.ibm.com/E30020/iag.git
git add .
git commit -m "Initial commit"
git push -u origin main
```

ファイルの保管ディレクトリに移動
```
> cd C:\temp-openshift\iag-gitlab\
```

Gitのリポジトリを作成。
```
> git init --initial-branch=main
warning: re-init: ignored --initial-branch=main
Reinitialized existing Git repository in C:/temp-openshift/iag-gitlab/.git/
```

リモートリポジトリを追加
```
> git remote add origin https://jp-tok.git.cloud.ibm.com/E30020/iag.git
```

カレントディレクトリのファイルを追加対象に設定
```
> git add .
```

変更をCommit
```
> git commit -m "Initial commit"
```

ローカルリポジトリの内容をリモートリポジトリに送信。ダイアログが表示されるため、IBMID/PWDを入力してみる

```
> git push -u origin main
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/2418f687-16a7-b76a-66da-4f832ae2de6a.png)



認証が失敗しました。Personal Access Tokenが必要とあるため作成します。
```
> git push -u origin main
remote: HTTP Basic: Access denied
remote: You must use a personal access token with 'read_repository' or 'write_repository' scope for Git over HTTP.
remote: You can generate one at https://jp-tok.git.cloud.ibm.com/-/profile/personal_access_tokens
fatal: Authentication failed for 'https://jp-tok.git.cloud.ibm.com/E30020/iag.git/'
```

任意の名前、有効期間、および、write_repositoryにチェックをして、アクセストークンを作成します。
![qiita (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/81b0ed92-94a1-000f-7a57-e133c4abbb9d.png)

作成されたアクセストークンは一度しか表示されないため、コピー/保管します。
![qiita (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/b7ba789d-abaf-c0c8-2e02-e2c418807235.png)


ローカルリポジトリの内容をリモートリポジトリに送信します。
表示されたダイアログでパスワード欄にアクセストークンを指定しました。
```
> git push -u origin main
Enumerating objects: 970, done.
Counting objects: 100% (970/970), done.
Delta compression using up to 8 threads
Compressing objects: 100% (424/424), done.
Writing objects: 100% (970/970), 506.22 KiB | 6.33 MiB/s, done.
Total 970 (delta 588), reused 701 (delta 423), pack-reused 0
remote: Resolving deltas: 100% (588/588), done.
To https://jp-tok.git.cloud.ibm.com/E30020/iag.git
 * [new branch]      main -> main
Branch 'main' set up to track remote branch 'main' from 'origin'.
```

![qiita (4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/0b30441c-5683-0fcf-2625-eece8d353414.png)

Gitlab上にファイルがアップロードされたことを確認します。
![qiita (5).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/0a09357e-b800-0315-e742-bfc597a29e85.png)




# 3. IBM Application Gatewayをデプロイする


プロジェクトを作成します。
```
> oc new-project <project名>
```

付属のシェルでSecret/Configmapを登録します。
```
 .\openshift\create-iag-assets.sh
```

テンプレートを登録します。
```
> oc create -f .\openshift\iag-build-template.yaml
template.template.openshift.io/ibm-app-gateway-build created
```

アプリケーションをデプロイします。
```
oc new-app ibm-app-gateway-build
```

プライベートリポジトリで作成したため、公開リポジトリと同様にデプロイするとエラーになりました。
```
> oc logs -f bc/iag
Cloning "https://jp-tok.git.cloud.ibm.com/E30020/iag" ...
error: failed to fetch requested repository "https://jp-tok.git.cloud.ibm.com/E30020/iag" with provided credentials
```

プライベートリポジトリを利用するためには、SSHキーを利用する方式と、Personal Access Tokenを利用する方式がありました。今回は、Personal Access Tokenの方式を試しました。
https://cloud.redhat.com/blog/private-git-repositories-part-4-hosting-repositories-gitlab?extIdCarryOver=true&sc_cid=701f2000001OH7EAAW

シークレットを登録します。
```
oc create secret generic user-at-gitlab --from-literal=username=<userid> --from-literal=password=<token>  --type=kubernetes.io/basic-auth
secret/user-at-gitlab created
```

IBM Application Gateway を　ビルドするサービスアカウントにSecretをリンクさせます。
```
oc secrets link default user-at-gitlab
```

デプロイしたアプリを削除
```
> oc delete all -l app=iag
service "iag" deleted
deploymentconfig.apps.openshift.io "iag" deleted
buildconfig.build.openshift.io "iag" deleted
imagestream.image.openshift.io "iag" deleted
route.route.openshift.io "iag" deleted
```

アプリケーションをデプロイする際に、「--source-secret 」でSecretを指定します。
```
oc new-app ibm-app-gateway-build --source-secret user-at-gitlab
```

アプリケーションにアクセスするためのURLを取得します。
```
2> oc get route
NAME   HOST/PORT                                                                                                   PATH   SERVICES   PORT   TERMINATION            WILDCARD
iag    iag-test.~~~.appdomain.cloud          iag        iag    passthrough/Redirect   None
```

IBM Security Verifyで認証した後に、IBM Application Gatewayの画面が表示されることを確認します。
![qiita (6).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/cbc7a423-09f4-e707-abf3-e63df579b097.png)

# 最後に
今回は、Gitlabを利用したIBM Application Gatewayのデプロイ方法についてご紹介しました。