こんにちは、Red HatでOpenShift関連のプリセールスをしている北村です。
これまでの記事では、Developer Hubのインストールから、GitHubやGitLabとの認証連携、さらにComponent
の登録方法について解説してきました。
今回はDeveloper Hub(Backstage)が提供するSoftware Template機能を使って、簡単なHello WorldアプリケーションをセルフサービスでOpenShiftにデプロイするまでの流れをご紹介します。
- 【第1回】Developer Hubをインストールしてみよう
- 【第2回】GitHubを使用した認証を実装しよう
- 【第3回】GitLabを使用した認証を実装しよう
- 【第4回】Componentを作成・登録しよう
- 【第5回】Software Templateを使ってアプリのデプロイをセルフサービス化しよう ←この記事
- 【第6回】TechDocsを作成・登録しよう
- 【第7回】Golden Pathの実装をマスターしよう - 前編
- 【第8回】Golden Pathの実装をマスターしよう - 後編
Software Templateとは?
Software Template は、Backstageの Scaffolder 機能を通じて実装される仕組みで、Gitリポジトリの生成やアプリケーションのデプロイをセルフサービス化するための機能です。以下のような活用シーンがあります。
- 新規アプリケーションの立ち上げ:テンプレート化された Skeleton Repository やディレクトリ構成を自動生成して、プロジェクトごとの初期設定にかかる時間を削減する
- チーム標準の構成適用:Linterやテストの設定など、組織として共通化したい設定をテンプレートに含めておくことで、属人化を防止する
- DevOpsツールチェーンとの連携:CI/CD、デプロイ、監視など、社内既定のパイプライン設定を自動で組み込む
Scaffolder はこのSoftware Templateを実行し、指定された手順どおりに「コード生成 → パラメータ置換 → GitリポジトリへのPush → デプロイ」などを行う“仕掛け”のことを指します。
また、テンプレートの定義自体は、template.yaml に記述し、Developer Hubに登録します。
Skeleton Repositoryとは?
Skeleton Repositoryとは、テンプレートのベースとなるソースコードを格納しているリポジトリを指します。 例えば、今回のように簡単なHello Worldアプリをデプロイするテンプレートでは、最低限のKubernetes/OpenShiftマニフェストやcatalog-info.yamlなどが入ったリポジトリが「Skeleton」となります。
ディレクトリ構成例
. ├── manifests │ ├── deployment.yaml │ ├── service.yaml │ ├── route.yaml │ ├── ... │ └── kustomization.yaml ├── catalog-info.yaml └── README.md
Software Template機能では、このSkeleton Repoをテンプレート実行時に取得し、ユーザーが入力したアプリ名やGitHubリポジトリ名などのパラメータを差し替えることで、独自のリポジトリを生成する仕組みを提供します。
Scaffolderとは?
Scaffolder は、Developer Hub (Backstage) におけるジョブエンジンのような存在で、template.yamlに記述した様々な自動化のステップ を順番に実行します。
Scaffolderのステップで実行可能なジョブには例として以下のようなものが存在します。
fetch:template
: Skeleton Repoからソースコードを取得し、ユーザーが入力したパラメータを代入するpublish:github
: fetch:templateで作成したソースコードをユーザー指定の新しいGitHubリポジトリにPushするargocd:create-resources
: 所定のGitリポジトリ及びBranchにおけるK8sマニフェストをデプロイするためのArgoCDApplication
CRをK8sにデプロイするcatalog:register
: Gitリポジトリ内のcatalog-info.yamlをDeveloper Hubに登録する
Template実行手順
とりあえず概念を書いてみましたが、おそらく全然イメージが沸かないと思うので、実際にTemplateを作成・実行していきましょう。
今回実現すること
今回は以下のような仕組みを作っていきます。
- 利用者はDeveloper Hubの画面で必要なパラメータを入力してTemplateを実行する
fetch:template
StepでSkeleton Repoからソースコードを取得し、ユーザーが入力したパラメータを代入するpublish:github
Stepで新しいGitHubリポジトリにPushするargocd:create-resources
StepでHello worldアプリ用のK8sマニフェストをデプロイするためのApplication
CRを作成するApplication
CRが新しいGitHubリポジトリ上のK8sマニフェストを検知してアプリをデプロイする
なお今回デプロイするHello worldアプリは、あらかじめQuay.ioに準備されているコンテナイメージを使います。
ArgoCDを準備する
Template作成の前に、ArgoCDそのものをOpenShift上にデプロイしていきます。
といってもデフォルトの設定のままOperatorをインストールするだけです。
Operator Hub
から"OpenShift GitOps"と検索して、"Red Hat OpenShift GitOps"を選択します。特に設定も変えずにインストールしましょう。
正常にインストールできると、OperatorとともにArgoCDの本体となるCRがopenshift-gitops
というNamespaceにデプロイされます。
このArgoCDにログインするためのadmin
ユーザーのパスワードがopenshift-gitops-cluster
というSecretに格納されているので、こちらの値を保存しておきます。このログイン情報は後ほどDeveloper Hubの設定に使用します。
次にArgoCDにアクセスするためのRouteのURLを確認します。こちらも後ほどDeveloper Hubの設定に使用するので保存しておきましょう。
実際にURLにアクセスして、admin
ユーザーでログインします。
ログイン後、開発者ツール(ChromeだとF12)を開いて、画面更新を行い一番上のリクエスト内にあるargocd.token=ey...
から始まるcookieの値を取得します。
あるいは以下のコマンドで該当の値を取得できます。
curl -sk -i \ -X POST \ -H "Content-Type: application/json" \ -d '{"username":"admin","password":"<adminのパスワード>"}' \ https://openshift-gitops-server-openshift-gitops.apps.rosa.<domain>/api/v1/session \ | grep 'argocd.token' \ | sed 's/^set-cookie: \(argocd\.token=[^;]*\).*/\1/'
最後に、ArgoCDのサービスアカウントに対してさまざまなリソースをデプロイするための権限を付与します。今回はcluster-admin
を付与しておきます。
oc adm policy add-cluster-role-to-user cluster-admin -z openshift-gitops-argocd-application-controller -n openshift-gitops
これでArgoCDの準備と、Developer Hubとの連携に必要な情報の取得が完了しました。
Developer HubとArgoCDを連携する
次にDeveloper HubとArgoCDを連携して、ScaffolderによってApplication
CRを実行するための準備を行います。ついでにArgoCDに関する画面をDeveloper Hubに表示するための準備も行います。
Dynamic Pluginをインストールする
Developer Hubとの連携といえばPluginです。ArgoCDとの連携に必要な各種Pluginをインストールするためにdynamic-plugins-rhdh.yaml
を修正します。
Dynamic Pluginもだんだん増えてきたので、少し整形しました。
dynamic-plugins-rhdh.yaml
kind: ConfigMap apiVersion: v1 metadata: name: dynamic-plugins-rhdh namespace: rhdh annotations: rhdh.redhat.com/backstage-name: developer-hub data: dynamic-plugins.yaml: | includes: - 'dynamic-plugins.default.yaml' plugins: # GitHub Plugins - package: ./dynamic-plugins/dist/backstage-plugin-catalog-backend-module-github-org-dynamic disabled: false - package: ./dynamic-plugins/dist/backstage-plugin-scaffolder-backend-module-github-dynamic disabled: false # Kubernetes Plugins - package: ./dynamic-plugins/dist/backstage-plugin-kubernetes-backend-dynamic disabled: false - package: ./dynamic-plugins/dist/backstage-plugin-kubernetes disabled: false # OpenShift Plugins - package: ./dynamic-plugins/dist/backstage-community-plugin-topology disabled: false # ArgoCD Plugins - package: ./dynamic-plugins/dist/roadiehq-backstage-plugin-argo-cd-backend-dynamic disabled: false - package: ./dynamic-plugins/dist/backstage-community-plugin-redhat-argocd disabled: false - package: ./dynamic-plugins/dist/roadiehq-scaffolder-backend-argocd-dynamic disabled: false
今回インストールするPluginは以下の4つです。
backstage-plugin-scaffolder-backend-module-github-dynamic
: GitHubへのScaffolder機能を提供するroadiehq-backstage-plugin-argo-cd-backend-dynamic
: ArgoCDとのBackend連携を実現するbackstage-community-plugin-redhat-argocd
: ArgoCDに関するユーザー用画面を提供するroadiehq-scaffolder-backend-argocd-dynamic
: ArgoCDへのScaffolder機能を提供する
app-configを変更する
app-config-rhdh.yaml
に以下のような設定を追記します。
app-config-rhdh.yaml
kind: ConfigMap apiVersion: v1 metadata: name: app-config-rhdh namespace: rhdh annotations: rhdh.redhat.com/backstage-name: developer-hub data: app-config-rhdh.yaml: | app: ...omit... backend: ...omit... auth: ...omit... integrations: ...omit... signInPage: github catalog: ...omit... enabled: kubernetes: true argocd: true # ここを追記 kubernetes: ...omit... # ここから下を追記 argocd: appLocatorMethods: - instances: - name: main password: ${ARGOCD_PASSWORD} url: ${ARGOCD_INSTANCE_URL} username: ${ARGOCD_USERNAME} type: config proxy: '/argocd/api': target: ${ARGOCD_INSTANCE_URL}/api/v1/ changeOrigin: true secure: false headers: Cookie: $env: ${ARGOCD_AUTH_TOKEN}
argocd
セクションでは、連携するArgoCDの情報を記述します。見てもらうとわかるように、ArgoCDのURL、ユーザー、パスワードが必要になります。
proxy
セクションとは、Developer Hubが外部サービス(ここではArgo CDのAPI)へアクセスするときのプロキシ設定を行う場所です。今回では、Argo CDのREST APIやgRPCエンドポイントに安全にリクエストを飛ばすために利用され、Cookie情報やArgoCDのAPI URLが求められます。
Secretを設定する
最後に、ArgoCD pluginの設定をapp-configに追記したので、必要な変数をSecretに設定していきます。
secrets-rhdh.yaml
apiVersion: v1 kind: Secret metadata: name: secrets-rhdh namespace: rhdh stringData: ...omit... ARGOCD_INSTANCE_URL: "https://<ArgoCDのURL>" ARGOCD_USERNAME: "admin" ARGOCD_PASSWORD: "<ArgoCDのadminユーザーのパスワード>" ARGOCD_AUTH_TOKEN: "argocd.token=ey....."
3つのファイルの反映
変更した3つのファイルをデプロイします。
oc apply -f app-config-rhdh.yaml -f secrets-rhdh.yaml -f dynamic-plugins-rhdh.yaml
これでArgoCDとの連携設定が完了しました。これでScaffolderの実行とArgoCD関連の画面生成ができるはずです。
Software Tempale機能を実行する
では今回の本題に入りましょう。実際にSoftware Template機能を使ってみます。
template.yamlとSkeleton Repositoryを準備
まずはtemplate.yamlとSkeleton Repositoryを準備します。おさらいですが、今回は以下のステップを実行します。
- 利用者はDeveloper Hubの画面で必要なパラメータを入力してTemplateを実行する
fetch:template
StepでSkeleton Repoからソースコードを取得し、ユーザーが入力したパラメータを代入するpublish:github
Stepで新しいGitHubリポジトリにPushするargocd:create-resources
StepでHello worldアプリ用のK8sマニフェストをデプロイするためのApplication
CRを作成するApplication
CRが新しいGitHubリポジトリ上のK8sマニフェストを検知してアプリをデプロイする
ファイルがいくつか必要なので、今回はこちらのリポジトリにソースコードを公開しました。まずはこちらから自身の環境にForkしてください。
Fork後、template.yaml
のspec.owner
の部分だけ書き換えてください。
template.yaml
apiVersion: scaffolder.backstage.io/v1beta3 kind: Template metadata: name: helloworld title: Hello world app description: シンプルなHelloWorldアプリをデプロイするためのテンプレート tags: - recommended spec: owner: user:default/skitamura7446 #ここを自分のDeveloper Hubユーザー名に書き換えてください。 type: website
このリポジトリのディレクトリ構成は以下のようになっています。
. ├── README.md ├── manifest-skeleton │ ├── argocd │ │ └── application.yaml │ ├── catalog-info.yaml │ └── manifests │ ├── deployment.yaml │ ├── kustomization.yaml │ ├── route.yaml │ └── service.yaml └── template.yaml
manifest-skeleton
: このディレクトリ配下がSkeleton Repositoryとしてfetch:template
Stepでコピーされます。argocd
: Developer Hubから実行するArgoCDのApplication CR が格納されています。catalog-info.yaml
: このテンプレート実行によって登録するComponent
情報が記載されています。manifests
: Hello worldアプリをデプロイするためのK8sマニフェストが格納されています。ArgoCD Applicationはこのディレクトリ配下をデプロイしにいきます。template.yaml
: 今回のテンプレートです。
テンプレートをDeveloper Hubに登録する
template.yamlやSkeleton Repositoryの中身を見ていく前に、まず一旦このtemplate.yamlをDeveloper Hubに登録していきましょう。
前回の記事で画面上から手動で登録する手順を紹介しましたが、今回はapp-config-rhdh.yaml
にこのファイルの読み込み設定を行い、自動でこのテンプレートを登録する状態にしてみます。
以下の部分を追記してみましょう。
app-config-rhdh.yaml
kind: ConfigMap apiVersion: v1 metadata: name: app-config-rhdh namespace: rhdh annotations: rhdh.redhat.com/backstage-name: developer-hub data: app-config-rhdh.yaml: | app: ...omit... backend: ...omit... auth: ...omit... integrations: ...omit... signInPage: github catalog: providers: ...omit... # ここから下を追記 locations: - type: url target: https://github.com/<GitHub Organization名>/helloworld-skeleton/blob/main/template.yaml # 先ほど作成→Pushしたtempalte.yamlを指定 schedule: frequency: PT60S initialDelay: PT30S timeout: PT120S # ここまで
これを適用します。
oc apply -f app-config-rhdh.yaml
しばらくするとDeveloper Hubが立ち上がり、テンプレートが登録されていることを確認できます。
テンプレートを実行する
このままテンプレートの実行までしていきましょう。画面とtemplate.yamlを見比べながら理解を深めていきます。
この画面に表示されている情報は、template.yamlの以下の部分です。
template.yaml(抜粋)
apiVersion: scaffolder.backstage.io/v1beta3 kind: Template metadata: name: helloworld title: Hello world app description: シンプルなHelloWorldアプリをデプロイするためのテンプレート tags: - recommended spec: owner: user:default/<Developer Hubにログイン中のユーザー名> type: website
metadata.name
: このテンプレートの名前です。画面には反映されませんが、URLのPathとして使われます。metadata.title
: このテンプレートのタイトルです。画面ではこちらがテンプレート名になります。metadata.description
: このテンプレートの説明です。こちらも画面で確認できます。metadata.tags
: このテンプレートを検索する際に活用できるキーワードを設定します。spec.owner
: このテンプレートの管理者の名前です。type
: このテンプレートの属性を定義できます。
次に"Choose"を選択して中身とtemplate.yamlを見比べてみましょう。
最初の画面は以下の通りです。
この画面を構成しているのはtemplate.yamlの以下の部分です。
template.yaml(抜粋)
parameters: - title: 作成するComponentの情報 required: - app_name - owner properties: app_name: title: アプリケーション名 description: 作成するアプリ名を指定してください。 type: string default: "helloworld" owner: title: オーナー type: string description: 作成するComponentのオーナーを選択してください。 ui:field: OwnerPicker ui:options: catalogFilter: kind: - Group - User
title
: Stepごとの入力画面のタイトルになります。required
: この入力画面で必須項目となるパラメータkeyを指定します。properties.xxx
: properties配下に入力項目を並べていきます。xxxの部分がパラメータkeyになります。xxx.title
: 画面に表示するパラメータ名です。xxx.type
: パラメータの型を定義します。xxx.description
: このパラメータの説明です。こちらは画面に表示されるため、パラメータの補足として利用します。xxx.default
: このパラメータのデフォルト値です。
上記までが一般的な記述内容になります。一方で、例えばすでにDeveloper Hubに登録済みのパラメータ(GroupやUser、Systemなど)を参照してプルダウン形式で選択させたい場合は、ui:field:
とui:options:
を活用します。
xxx.ui:field
: EntityPicker OwnerPicker RepoUrlPickerの3種類から選択できます。それぞれパラメータの属性に応じて適切なものを選択します。詳細はこちらを参照下さい。xxx.ui:field.OwnerPicker.catalogFilter
: ここでプルダウンで表示させる値をフィルタリングしています。ownerの場合はDeveloper Hub内に登録してあるGroupとUserがここに表示されることになります。
次の画面は以下になります。
この画面を構成しているのはtemplate.yamlの以下の部分です。
template.yaml(抜粋)
- title: GitHubリポジトリの情報 required: - git_repo_name - git_host_url - git_owner_name properties: git_repo_name: title: GitHubリポジトリ名 description: 生成するGitHubリポジトリ名を入力してください。 type: string default: helloworld git_host_url: title: GitHub URL description: GitHubリポジトリのURLを入力してください。 type: string default: github.com git_owner_name: title: GitHub Organization名 description: GitHubリポジトリを生成するGitHub Organization名を入力してください。 type: string default: rhdh-practice
ここは画面とyamlファイルの中身がある程度リンクしていることがわかります。
入力する値は自身の環境に合わせて適宜修正してください。(githubのURLやOrganization名など)
では実際に実行してみましょう。
実行すると画面のように各Stepが実行されます。
"Componentを開く"を選択すると、無事にComponentも登録されていることがわかります。
また、Links の App Repository を選択すると、テンプレート実行によって新規作成されたGitリポジトリにアクセスすることができます。
template.yamlとSkeleton Repositoryを読み解く
では、画面入力後から実行まで、なにが起こったのかを確認していきましょう。
template.yamlの中身をもう少し見てみると、以下のようにsteps
から始まる記述があります。
template.yaml(抜粋)
steps: - id: fetch name: Fetch skeleton action: fetch:template input: url: ./manifest-skeleton values: app_name: ${{ parameters.app_name }} owner: ${{ parameters.owner }} git_repo_name: ${{ parameters.git_repo_name }} git_host_url: ${{ parameters.git_host_url }} git_owner_name: ${{ parameters.git_owner_name }} targetPath: ./tenant
stepsでは、テンプレートの実行部分を記述します。このstepsはリスト形式で各処理を記述していき、その順番通りに実行されていきます。その実行される内容を指定しているのがactionになります。
たとえば、今回のテンプレートでは最初にfetch:template
というactionを実行します。
このfetch:template
では、先述した通りSkeleton Repoからソースコードを取得し、ユーザーが入力したパラメータを代入します。
上記のコードを見てみると、app_name: ${{ parameters.app_name }}
というように、parameters
でユーザーから入力された値を変数に格納していることがわかります。今回では、app_name
やgit_repo_name
といった変数に対して、Developer Hubの画面で入力された値を代入していることになります。
ではこの格納された変数はどのようにskeletonファイルに反映されるのでしょうか?
ここでmanifest-skeleton/manifests
配下にあるdeployment.yaml
を見てみましょう。
deployment.yaml
apiVersion: apps/v1 kind: Deployment metadata: labels: app: ${{ values.app_name }} name: ${{ values.app_name }} spec: replicas: 1 selector: matchLabels: app: ${{ values.app_name }} template: metadata: labels: app: ${{ values.app_name }} spec: containers: - image: quay.io/skitamur/hello-world:latest name: ${{ values.app_name }} ports: - containerPort: 3000 protocol: TCP
これは、Hello worldアプリをPodとしてデプロイするためのdeploymentのyamlファイルです。
例えばこれのmetadata.name
を見てみましょう。値が${{ values.app_name }}
となっています。このように、fetch:templateで渡された変数の値は、${{ values.app_name }}
のように記述されたところに代入されていきます。
今回で言うと、Developer HubのTemplate実行画面の"アプリケーション名"に入力した値がdeployment.yaml
のmetadata.name
に反映されることになります。
イメージとしては以下になります。
そのほかのパラメータについては以下のとおりです。
input.url
: 取得するテンプレートの相対パスになります。このtemplate.yamlはhelloworld-skeletonリポジトリ直下にあるため、そこからの相対パスとして./manifest-skeletonを指定しています。input.values
: この値が変数に代入するパラメータになります。input.targetPath
: これはローカル(Developer Hun Pod内)のワークスペースを指定します。ディレクトリがなければ/tmp配下に作成されます。今回はtenant
ディレクトリにmanifest-skeleton
配下のファイル群を一時的に格納します。
次のstepでは、変数を代入したファイル群を新しいGitリポジトリとしてPushするactionを実行しています。
template.yaml(抜粋)
- id: publish name: Push to GitHub action: publish:github input: repoUrl: ${{ parameters.git_host_url }}?owner=${{ parameters.git_owner_name }}&repo=${{ parameters.git_repo_name }} repoVisibility: public sourcePath: ./tenant defaultBranch: develop protectDefaultBranch: false
input.repoUrl
: Pushする先のGitHubのURLです。これでPushできるOrganizationは以前の記事で連携設定を行ったOrganizationに限られます。input.repoVisibility
: GitHubのリポジトリの公開設定です。PublicかPrivateを設定できます。input.sourcePath
: GitHubにPushするデータが格納されているパスを指定します。ここでは前のfetch:template
actionでskeletonから取得&変数代入を行った./tenant
を指定します。input.defaultBranch
: Pushする際のデフォルトのBranchになります。今回はdevelopをデフォルトのブランチとしています。input.protectDefaultBranch
: GitHubはデフォルトブランチが保護されています。今回はfalseにしています。
イメージは以下の通りです。
その次はargoCDのApplication CRをデプロイするActionです。
template.yaml(抜粋)
- id: argocd name: Deploy with ArgoCD action: argocd:create-resources input: appName: ${{ parameters.app_name }}-init argoInstance: main namespace: openshift-gitops repoUrl: https://${{ parameters.git_host_url }}/${{ parameters.git_owner_name }}/${{ parameters.git_repo_name }}.git path: 'argocd/'
input.appName
: このactionによってデプロイするArgoCDのApplication名です。input.argoInstance
: これはapp-configで設定したArgoCD instanceのNameを記述します。今回はmain
となります。input.namespace
: Applicationのデプロイ先のNamespaceです。input.repoUrl
: GitOpsの参照先となるGitのURLです。input.path
: GitのURLにおけるサブディレクトリを指定します。
ここを読み解くと、新しく作成(Push)されたリポジトリのargocd
ディレクトリ配下のK8sマニフェストをターゲットとしてGitOpsが行われることが分かります。
ここで鋭い人は、「なんで直接manifests
配下のK8sマニフェストを対象にしないの?」と思うかもしれません。
実際はそれでも動く時はありますが、このDeveloper Hubから実行可能なargocd:create-resources
actionでは、作成されるApplication CRの設定がかなり制限されます。Application名やターゲットパス以外のパラメータはほぼ変更できず、全てデフォルト値でデプロイされてしまいます。
そこで、「Application CRからApplication CRをデプロイする」という手法を使うことで、アプリ自体のGitOpsをする際の設定を細かく行えるようにしています。この階層構造でのデプロイを一般的に"App of apps pattern"と言います。なお、細かい設定の例として、例えばCreateNamespace=true
やAutoSync
などがあります。
ともあれこれによってアプリの自動デプロイまでが完了しました。
最後は、作成されたGitリポジトリ配下にあるcatalog-info.yaml
をDeveloper Hubに登録するactionです。
template.yaml(抜粋)
- id: register name: Register Catalog into Developer Hub action: catalog:register input: repoContentsUrl: ${{ steps['publish'].output.repoContentsUrl }} catalogInfoPath: "/catalog-info.yaml"
このcatalog:register
では、repoContentsUrl
とcatalogInfoPath
で指定されたファイルをDeveloper Hubに登録します。
catalog-info.yaml
は前回の記事の内容も参考にしながら、以下のような内容になっています。
catalog-info.yaml
apiVersion: backstage.io/v1alpha1 kind: Component metadata: name: ${{ values.app_name }} description: Hello Worldサービスです labels: app: ${{ values.app_name }} links: - url: https://${{ values.git_host_url }}/${{ values.git_owner_name }}/${{ values.git_repo_name }} title: App Repository icon: github annotations: backstage.io/kubernetes-label-selector: 'app=${{ values.app_name }}' backstage.io/kubernetes-namespace: ${{ values.app_name }} argocd/app-selector: app.kubernetes.io/instance=${{ values.app_name }}-init spec: type: website owner: ${{ values.owner }} lifecycle: production
一点新たにannotationsにargocd/app-selector: app.kubernetes.io/instance=${{ values.app_name }}-init
を追加しています。これを記載することで、app.kubernetes.io/instance=${{ values.app_name }}-init
のlabelを持つArgoCDのApplication情報をこのComponentに表示できるようになります。
Component画面を確認する
最後に今回作成されたアプリのComponent画面を確認してみましょう。
Topology
タブに移動すると、実際にPodが稼働していることが確認できます。
アイコン右上の"Open URL"にアクセスして、Hello world!が表示されることを確認しましょう。
また、新たに増えたCD
タブに移動してみると、今回デプロイされたArgoCDの情報が確認できます。リンクを選択することでArgoCDの画面にも遷移できます。
おわりに
今回はSoftware Template機能の基本的な概念と、template.yamlやSkeleton Repositoryの記述方法、そして実行方法について解説しました。
次回はTechdocs機能について触れていきます。乞うご期待!