Open6

chocott-backstageをちょこっと試す

daylightdaylight

Backstageとは

社内の開発者向けポータル(IDP: Internal Developer Prtal)を構築できるツール。
Spotifyが自社プロダクトの管理用に作成し、OSSとなった。
現在開発しているサービスの構成情報・担当チームのカタログ表示や技術ドキュメントの集約が可能。また、コンポーネントテンプレートを作成することでArgoCDやGIthubなどと連携しアプリ基盤の共通化、ゴールデンパスの利用ができる。
昨今のPlatform Engineringの需要拡大と共に再注目されている。

chocott-backstage

Backstageはカスタマイズ性の高さ故に、初期セットアップがやや手間である。
そこで、AP CommunicationさんがBackstageを試すために準備してくれたリポジトリテンプレートがあるためこちらを元にBackstageを試してみる。
https://github.com/ap-communications/chocott-backstage

上記のテンプレートを元に以下のリポジトリを作成した。
https://github.com/daylight55/chocott-backstage-example

daylightdaylight

Github連携の準備

Getting Startedに従う

Backstage用のGithub Appsを作る。
なんとGithub Appsの作り方まで丁寧に書いてくれている!

GithubのAppsページから作成。

Private keyも使用するため作成。

一通り必要な環境変数を展開する。

export AUTH_GITHUB_CLIENT_ID="<Client IDの文字列>"
export AUTH_GITHUB_CLIENT_SECRET="<Secretの文字列>"
export GITHUB_CREDENTIAL_FILE="/<put your folder name>/github-credentials.yaml"

また、パーソナルアカウントを利用しているため以下コメントアウト。

$ diff app-config.local.yaml.sample app-config.local.yaml
31,34c31,34
<     githubOrg:
<       id: 'github-local'
<       orgs:
<       - ${GITHUB_ORG}
---
>     #githubOrg:
>     #  id: 'github-local'
>     #  orgs:
>     #  - ${GITHUB_ORG}

Backstage用Credentialファイルの作成

https://github.com/ap-communications/chocott-backstage/blob/main/chocott-contents/docs/integration/index.md#backstage用credentialファイルの作成

appId: app id
clientId: client id
clientSecret: client secret
webhookSecret: webhook-secret
privateKey: |
  -----BEGIN RSA PRIVATE KEY-----
  ...Key content...
  -----END RSA PRIVATE KEY-----

先ほど作成したGithub Appsの値で埋める。
webhookSecretはWebhookを使用しない場合は仮文字列としてwebhook-secretで設定しておく。

daylightdaylight

Backstageの起動準備

chocott-backstageはdocker-composeで起動できるようになってます。
しかし、compose.yamlで指定しているイメージはM1 MacのCPUアーキテクチャに対応しておらず起動できませんでした。

そこで、M1 Mac上でイメージビルドして使えるようにします。

M1 Macで使えるようにする

こちらのコミットのようにcompose.yamlのディレクトリをトップに移動し、Dockerfileでビルドできるようにしました。
https://github.com/daylight55/chocott-backstage-example/commit/12d8a02e2444255f35773dd99ce3193254c5785d

--- a/chocott-contents/deploy/docker-compose/compose.yaml
+++ b/compose.yaml
@@ -2,11 +2,15 @@ version: '3'

 services:
   backstage:
-    image: ghcr.io/ap-communications/chocott-backstage:1.5.0
+    #image: ghcr.io/ap-communications/chocott-backstage:1.5.0
+    image: backstage:latest
+    build:
+      context: .
+      dockerfile: ./packages/backend/Dockerfile
     volumes:
-      - "../app-config.chocott.yaml:/app/config/app-config.yaml"
+      - "./app-config.local.yaml:/app/config/app-config.yaml"
       - "${GITHUB_CREDENTIAL_FILE}:/app/config/github-credentials.yaml"
-    command:
+    command:
       - "--config"
       - "/app/config/app-config.yaml"
     ports:
daylightdaylight

Backstageサーバーの起動

$ export GITHUB_CREDENTIAL_FILE="./github-credentials.yaml"
$ dc up -d
WARN[0000] The "GITHUB_ORG" variable is not set. Defaulting to a blank string.
[+] Building 0.0s (0/0)                                                                                                                      docker:desktop-linux
[+] Running 3/3
 ✔ Network chocott-backstage-example_backend        Created                                                                                                  0.0s
 ✔ Container chocott-backstage-example-db-1         Started                                                                                                  0.0s
 ✔ Container chocott-backstage-example-backstage-1  Started                                                                                                  0.0s

$ dc ps
WARN[0000] The "GITHUB_ORG" variable is not set. Defaulting to a blank string.
NAME                                    IMAGE              COMMAND                                                                                                                     SERVICE     CREATED         STATUS         PORTS
chocott-backstage-example-backstage-1   backstage:latest   "node packages/backend --config app-config.yaml --config app-config.production.yaml --config /app/config/app-config.yaml"   backstage   3 seconds ago   Up 2 seconds   0.0.0.0:7007->7007/tcp
chocott-backstage-example-db-1          postgres:14        "docker-entrypoint.sh postgres"                                                                                             db          3 seconds ago   Up 2 seconds   0.0.0.0:5432->5432/tcp

http://localhost:7007 にアクセスしログイン。表示確認ができた。

daylightdaylight

ソフトウェアカタログ機能の検証

サンプルカタログのimport

こちらの資料に沿って試す。

今回作ったリポジトリで試しに追加。

importできた。