This documentation is for a release that is no longer maintained
See documentation for the latest supported version.Red Hat Developer Hub 入门
摘要
前言
作为开发者,您可以使用 Red Hat Developer Hub 体验简化的开发环境。Red Hat Developer Hub 由集中软件目录驱动,为您的微服务和基础架构提供效率。它使您的产品团队能够在没有任何影响的情况下提供质量代码。
Red Hat Developer Hub 支持
如果您在执行本文档所述的某个流程时遇到问题,请访问红帽客户门户。您可以使用红帽客户门户网站进行以下目的:
- 搜索或浏览红帽知识库,了解有关红帽产品的技术支持文章。
- 为红帽全球支持服务(GSS)创建支持问题单。https://access.redhat.com/support/cases/#/case/new/get-support?caseCreate=true要创建支持问题单,请选择 Red Hat Developer Hub 作为产品,然后选择适当的产品版本。
第 1 章 Red Hat Developer Hub 概述
Red Hat Developer Hub (Developer Hub)充当专为构建开发人员门户而设计的开放开发人员平台,并基于 backstage 项目。通过开发人员 Hub,工程团队可以访问统一平台,以简化开发流程,并提供各种工具和资源,以便有效地构建高质量的软件。
Developer Hub 的目标是通过以下方式解决与创建和持续开发人员门户相关的困难:
- 中央化仪表板,用于查看所有可用的开发人员工具和资源,以提高生产力
- 自助服务功能以及 guardrails,适用于符合企业级最佳实践的云原生应用程序开发
- 对整个企业的所有开发人员进行适当的安全性和监管
Red Hat Developer Hub 通过提供开发人员体验来简化对内部批准的工具、编程语言以及自助管理门户网站中各种开发人员资源的决策。这种方法有助于加速应用程序开发和维护代码质量,同时促进创新。
第 2 章 Red Hat Developer Hub 的大小要求
Red Hat Developer Hub 的可扩展性需要大量资源分配。下表列出了安装和运行 Red Hat Developer Hub 的大小要求,包括 Developer Hub 应用程序和 Developer Hub 数据库组件。
组件 | Red Hat Developer Hub 应用程序 | Red Hat Developer Hub 数据库 |
---|---|---|
中央处理单元(CPU) | 4 vCPU | 2 vCPU |
内存 | 16 GB | 8 GB |
存储大小 | 2 GB | 20 GB |
Replicas | 2 或以上 | 3 或以上 |
第 3 章 Red Hat Developer Hub 支持的配置
本节论述了访问 Red Hat Developer Hub 所需的配置,包括:
- 自定义应用程序配置
- Developer Hub 目录的源控制配置
3.1. 在 Red Hat OpenShift Container Platform 中添加自定义应用程序配置文件
要访问 Red Hat Developer Hub,您必须在 Red Hat OpenShift Container Platform 中添加自定义应用程序配置文件。在 OpenShift Container Platform 中,您可以使用以下内容作为基础模板,创建名为 app-config-rhdh
的 ConfigMap:
kind: ConfigMap apiVersion: v1 metadata: name: app-config-rhdh data: app-config-rhdh.yaml: | app: title: {product}
kind: ConfigMap
apiVersion: v1
metadata:
name: app-config-rhdh
data:
app-config-rhdh.yaml: |
app:
title: {product}
您可以使用以下方法之一将自定义应用程序配置文件添加到 OpenShift Container Platform 中:
- Red Hat Developer Hub Operator
- Red Hat Developer Hub Helm Chart。
3.1.1. 使用 Helm Chart 将自定义应用程序配置文件添加到 OpenShift Container Platform 中
您可以使用 Red Hat Developer Hub Helm Chart 将自定义应用程序配置文件添加到 OpenShift Container Platform 实例中。
先决条件
- 您已创建了 Red Hat OpenShift Container Platform 帐户。
流程
- 在 OpenShift Container Platform Web 控制台中,选择 ConfigMaps 选项卡。
- 点 Create ConfigMap。
- 在 Create ConfigMap 页面中,选择 Configure via 中的 YAML view 选项,并根据需要更改该文件。
- 点 Create。
- 进入 Helm 选项卡查看 Helm 发行版本列表。
- 点击您要使用的 Helm 发行版本的 overflow 菜单,然后选择 Upgrade。
使用 Form view 或 YAML 视图 来编辑 Helm 配置。
使用 Form view
- 展开 Root Schema → Backstage chart schema → Backstage parameters → Extra app 配置文件到内联到命令参数 中。
- 点 Add Extra app 配置文件以内联到命令参数 链接。
在以下字段中输入值:
-
configMapRef:
app-config-rhdh
-
filename:
app-config-rhdh.yaml
-
configMapRef:
- 单击 Upgrade。
使用 YAML 视图
设置
upstream.backstage.extraAppConfig.configMapRef
和upstream.backstage.extraAppConfig.filename
参数的值,如下所示:... other Red Hat Developer Hub Helm Chart configurations ... other Red Hat Developer Hub Helm Chart configurations
# ... other Red Hat Developer Hub Helm Chart configurations upstream: backstage: extraAppConfig: - configMapRef: app-config-rhdh filename: app-config-rhdh.yaml # ... other Red Hat Developer Hub Helm Chart configurations
Copy to Clipboard Copied! - 单击 Upgrade。
3.1.2. 使用 Operator 将自定义应用程序配置文件添加到 OpenShift Container Platform 中
自定义应用程序配置文件是一个 ConfigMap
对象,可用于更改 Red Hat Developer Hub 实例的配置。如果要在 Red Hat OpenShift Container Platform 上部署 Developer Hub 实例,您可以使用 Red Hat Developer Hub Operator 将自定义应用程序配置文件添加到 OpenShift Container Platform 实例,方法是创建 ConfigMap
对象并在 Developer Hub 自定义资源(CR)中引用它。
自定义应用配置文件包含一个名为 BACKEND_SECRET
的敏感环境变量。此变量包含一个强制的后端身份验证密钥,Developer Hub 用来引用 OpenShift Container Platform secret 中定义的环境变量。您必须创建一个名为 'secrets-rhdh' 的 secret,并在 Developer Hub CR 中引用它。
您需要保护 Red Hat Developer Hub 安装不受外部和未授权访问的影响。像管理任何其他机密一样管理后端身份验证密钥。满足强的密码要求,不要在任何配置文件中公开它,仅将其作为环境变量注入配置文件中。
先决条件
- 您有一个活跃的 Red Hat OpenShift Container Platform 帐户。
- 您的管理员已在 OpenShift Container Platform 中安装了 Red Hat Developer Hub Operator。如需更多信息,请参阅安装 Red Hat Developer Hub Operator。
- 您已在 OpenShift Container Platform 中创建 Red Hat Developer Hub CR。
流程
- 从 OpenShift Container Platform Web 控制台中的 Developer 视角,选择 Topology 视图,然后点击 Developer Hub pod 上的 Open URL 图标来识别 Developer Hub 外部 URL: < RHDH_URL>。
- 从 OpenShift Container Platform Web 控制台中的 Developer 视角,选择 ConfigMaps 视图。
- 点 Create ConfigMap。
在 Configure via 中选择 YAML view 选项,并使用以下示例作为基础模板来创建
ConfigMap
对象,如app-config-rhdh.yaml
:kind: Backstage apiVersion: rhdh.redhat.com/v1alpha1 metadata: name: app-config-rhdh data: "app-config-rhdh.yaml": | app: title: Red Hat Developer Hub baseUrl: <RHDH_URL> backend: auth: keys: - secret: "${BACKEND_SECRET}" baseUrl: <RHDH_URL> cors: origin: <RHDH_URL>
kind: Backstage apiVersion: rhdh.redhat.com/v1alpha1 metadata: name: app-config-rhdh data: "app-config-rhdh.yaml": | app: title: Red Hat Developer Hub baseUrl: <RHDH_URL>
1 backend: auth: keys: - secret: "${BACKEND_SECRET}"
2 baseUrl: <RHDH_URL>
3 cors: origin: <RHDH_URL>
4 Copy to Clipboard Copied! - 点 Create。
- 选择 Secrets 视图。
- 点 Create Key/value Secret。
-
创建名为
secrets-rhdh
的 secret。 添加名为
BACKEND_SECRET
的键,并将 base64 编码字符串作为值。为每个 Red Hat Developer Hub 实例使用唯一值。例如,您可以使用以下命令从终端生成密钥:node -p 'require("crypto").randomBytes(24).toString("base64")'
node -p 'require("crypto").randomBytes(24).toString("base64")'
Copy to Clipboard Copied! - 点 Create。
- 选择 Topology 视图。
点您要使用的 Red Hat Developer Hub 实例的 overflow 菜单,然后选择 Edit Backstage 来加载 Red Hat Developer Hub 实例的 YAML 视图。
在 CR 中,输入自定义应用程序配置配置映射的名称作为
spec.application.appConfig.configMaps
字段的值,并输入 secret 的名称作为spec.application.extraEnvs.secrets
字段的值。例如:apiVersion: rhdh.redhat.com/v1alpha1 kind: Backstage metadata: name: developer-hub spec: application: appConfig: mountPath: /opt/app-root/src configMaps: - name: app-config-rhdh extraEnvs: secrets: - name: secrets-rhdh extraFiles: mountPath: /opt/app-root/src replicas: 1 route: enabled: true database: enableLocalDb: true
apiVersion: rhdh.redhat.com/v1alpha1 kind: Backstage metadata: name: developer-hub spec: application: appConfig: mountPath: /opt/app-root/src configMaps: - name: app-config-rhdh extraEnvs: secrets: - name: secrets-rhdh extraFiles: mountPath: /opt/app-root/src replicas: 1 route: enabled: true database: enableLocalDb: true
Copy to Clipboard Copied! - 点击 Save。
- 返回到 Topology 视图,并等待 Red Hat Developer Hub pod 启动。
- 点 Open URL 图标使用 Red Hat Developer Hub 平台以及配置更改。
其他资源
- 如需有关 Developer Hub 中的角色和职责的更多信息,请参阅 Red Hat Developer Hub 中的基于角色的访问控制(RBAC)。
3.2. 在 Red Hat Developer Hub 中为目录添加源控制
要填充 Red Hat Developer Hub 中的 Catalog,您需要添加软件模板并添加模板,您必须启用受支持的源控制,如 GitHub。
先决条件
- 您有一个 GitHub 帐户。
- 在 Red Hat OpenShift 集群上有一个帐户。
- 已安装 Developer Hub,否则 GitHub 登录失败。
有关安装的更多信息,请参阅在 OpenShift Container Platform 上安装 Red Hat Developer Hub。
3.2.1. 配置 GitHub 身份验证
需要 GitHub 身份验证配置,才能在 Developer Hub 中启用 GitHub OAuth 登录。
流程
- 在 Red Hat OpenShift 集群中,导航到您要创建 OAuth 应用程序的 GitHub 机构的主页面。
- 点 Settings → Developer Settings → OAuth Apps → Register an application
-
输入应用程序名称作为
Developer Hub
。 将以下 URL 添加为 Homepage URL :
https://developer-hub-<NAMESPACE_NAME>.<OPENSHIFT_ROUTE_HOST>/
将以下 URL 添加为 授权回调 URL :
https://developer-hub-<NAMESPACE_NAME>.<OPENSHIFT_ROUTE_HOST>/api/auth/github/handler/frame
- 清除 Enable Device Flow 复选框。
- 点 Register application 创建 OAuth 应用程序。
- 创建应用程序后,点 Generate a new client secret 并复制生成的客户端 secret。
- 在 OpenShift 中,单击 ConfigMaps。
使用提供的环境变量作为键,生成名为 'github-secrets' 的键/值 secret,然后输入您为 GitHub OAuth 应用程序生成的值:
- 在 Red Hat OpenShift 中,进入 Secrets 选项卡,再点 Create。
- 选择 Key/value secret。
-
输入 Secret 名称作为
github-secrets
。 将环境变量添加为 Key 和 Value,再单击 Create。
表 3.1. 环境变量 键 value GITHUB_OAUTH_CLIENT_ID
来自 OAuth 应用程序的客户端 ID
GITHUB_OAUTH_CLIENT_SECRET
OAuth 应用程序的客户端 Secret
修改
app-config-rhdh
ConfigMap 使其包含 GitHub 身份验证配置,如下所示:kind: ConfigMap apiVersion: v1 metadata: name: app-config-rhdh data: app-config-rhdh.yaml: | app: title: Red Hat Developer Hub auth: # see https://backstage.io/docs/auth/ to learn about auth providers environment: development providers: github: development: clientId: ${GITHUB_OAUTH_CLIENT_ID} clientSecret: ${GITHUB_OAUTH_CLIENT_SECRET}
kind: ConfigMap apiVersion: v1 metadata: name: app-config-rhdh data: app-config-rhdh.yaml: | app: title: Red Hat Developer Hub auth: # see https://backstage.io/docs/auth/ to learn about auth providers environment: development providers: github: development: clientId: ${GITHUB_OAUTH_CLIENT_ID} clientSecret: ${GITHUB_OAUTH_CLIENT_SECRET}
Copy to Clipboard Copied! - 点击 Save。
- 进入 Helm 选项卡并选择 Upgrade。
使用以下视图之一编辑 Helm 配置:
使用 Form view
- 展开 Root Schema → Backstage Chart Schema → Backstage Parameters → Backstage container 环境变量。
- 从现有的 Secrets 链接点 Add Backstage 容器环境变量。
-
输入
github-secrets
作为值。 - 单击 Upgrade。
使用 YAML 视图
将
upstream.backstage.extraEnvVarsSecrets
的值设置为github-secrets
,如下例所示:other Red Hat Developer Hub Helm Chart configurations
# other Red Hat Developer Hub Helm Chart configurations upstream: backstage: # other Red Hat Developer Hub Helm Chart configurations extraEnvVarsSecrets: - github-secrets # other Red Hat Developer Hub Helm Chart configurations
Copy to Clipboard Copied! - 单击 Upgrade。
3.2.2. 配置 GitHub 集成
在 Developer Hub 中启用 GitHub 插件需要配置 GitHub。
流程
- 在 Red Hat OpenShift 集群中,导航到您要创建 OAuth 应用程序的 GitHub 机构的主页面。
- 点 Settings → Developer Settings → GitHub Apps → New GitHub App。
-
输入应用程序名称作为
Developer Hub
。 将以下 URL 添加为 Homepage URL :
https://developer-hub-<NAMESPACE_NAME>.<OPENSHIFT_ROUTE_HOST>/
将以下 URL 添加为 授权回调 URL :
https://developer-hub-<NAMESPACE_NAME>.<OPENSHIFT_ROUTE_HOST>/api/auth/github/handler/frame
- 取消选择 Webhook URL → Active。
- 在 可以安装此 GitHub 应用程序的位置下,请确保只选择此帐户。
- 点击 Register application。
- 创建应用程序后,点 Generate a new client secret 并复制生成的客户端 secret。
- 点页面底部的 Generate a私钥 并下载生成的文件。
- 在 OpenShift 中,单击 ConfigMaps。
使用提供的环境变量作为键,生成名为 'github-secrets' 的键/值 secret,然后输入您为 GitHub OAuth 应用程序生成的值:
- 在 Red Hat OpenShift 中,进入 Secrets 选项卡,再点 Create。
- 选择 Key/value secret。
-
输入 Secret 名称作为
github-secrets
。 - 将环境变量添加为 Key 和 Value,再单击 Create。
表 3.2. 环境变量 键 value GITHUB_APP_APP_ID
来自 GitHub 应用程序的应用程序 ID
GITHUB_APP_CLIENT_ID
来自 GitHub 应用程序的客户端 ID
GITHUB_APP_CLIENT_SECRET
GitHub 应用程序的客户端 Secret
GITHUB_APP_WEBHOOK_URL
输入 "none"
GITHUB_APP_WEBHOOK_SECRET
输入 "none"
GITHUB_APP_PRIVATE_KEY
上传下载的私钥
修改
app-config-rhdh
ConfigMap 使其包含 GitHub 集成配置,如下所示:kind: ConfigMap apiVersion: v1 metadata: name: app-config-rhdh data: app-config-rhdh.yaml: | app: title: Red Hat Developer Hub integrations: github: - host: github.com apps: - appId: ${GITHUB_APP_APP_ID} clientId: ${GITHUB_APP_CLIENT_ID} clientSecret: ${GITHUB_APP_CLIENT_SECRET} webhookUrl: ${GITHUB_APP_WEBHOOK_URL} webhookSecret: ${GITHUB_APP_WEBHOOK_SECRET} privateKey: | ${GITHUB_APP_PRIVATE_KEY}
kind: ConfigMap apiVersion: v1 metadata: name: app-config-rhdh data: app-config-rhdh.yaml: | app: title: Red Hat Developer Hub integrations: github: - host: github.com apps: - appId: ${GITHUB_APP_APP_ID} clientId: ${GITHUB_APP_CLIENT_ID} clientSecret: ${GITHUB_APP_CLIENT_SECRET} webhookUrl: ${GITHUB_APP_WEBHOOK_URL} webhookSecret: ${GITHUB_APP_WEBHOOK_SECRET} privateKey: | ${GITHUB_APP_PRIVATE_KEY}
Copy to Clipboard Copied! - 点 Toplogy → developer hub → Actions (drop-down)→ Restart rollout。
3.2.3. 在 Red Hat Developer Hub 中启用 GitHub 发现
您可以为 Developer Hub 中的组件启用 GitHub 发现功能,如包含 catalog-info.yaml
文件的任何存储库。
先决条件
- 您已设置 GitHub 集成。如需更多信息,请参阅 第 3.2.2 节 “配置 GitHub 集成”。
流程
- 在 OpenShift Container Platform Web 控制台的 Developer 视角中,进入 Helm 选项卡。
- 点 Helm 发行版本的 overflow 菜单并选择 Upgrade。
使用以下视图之一编辑 Helm 配置:
使用 Form view
- 展开 Root Schema → global → Dynamic plugins configuration → 在 backstage 应用中安装的动态插件列表。
- 单击 backstage 应用链接中应安装的动态插件的 Add List。
在要安装的动态插件的 Package 规格中。它应该可以被
npm pack
命令使用。 字段,添加以下值:./dynamic-plugins/dist/backstage-plugin-catalog-backend-module-github-dynamic
- 单击 Upgrade。
使用 YAML 视图
将
global.dynamic.plugins.package
参数的值设置为./dynamic-plugins/dist/backstage-plugin-catalog-backend-module-github-dynamic
,如下例所示:global: dynamic: # other Red Hat Developer Hub Helm Chart configurations plugins: - disabled: false package: >- ./dynamic-plugins/dist/backstage-plugin-catalog-backend-module-github-dynamic # other Red Hat Developer Hub Helm Chart configurations
global: dynamic: # other Red Hat Developer Hub Helm Chart configurations plugins: - disabled: false package: >- ./dynamic-plugins/dist/backstage-plugin-catalog-backend-module-github-dynamic # other Red Hat Developer Hub Helm Chart configurations
Copy to Clipboard Copied! - 单击 Upgrade。
在 ConfigMap 中添加以下代码:
kind: ConfigMap apiVersion: v1 metadata: name: app-config-rhdh data: app-config-rhdh.yaml: | ... catalog: providers: github: providerId: organization: '${GITHUB_ORG}' schedule: frequency: minutes: 30 initialDelay: seconds: 15 timeout: minutes: 3 ...
kind: ConfigMap apiVersion: v1 metadata: name: app-config-rhdh data: app-config-rhdh.yaml: | ... catalog: providers: github: providerId: organization: '${GITHUB_ORG}' schedule: frequency: minutes: 30 initialDelay: seconds: 15 timeout: minutes: 3 ...
Copy to Clipboard Copied! 在前面的代码中,将
${GITHUB_ORG}
替换为您要发现组件的 GitHub 组织。另外,如果只有一个供应商,可以在 ConfigMap 中添加以下代码:kind: ConfigMap apiVersion: v1 metadata: name: app-config-rhdh data: app-config-rhdh.yaml: | ... catalog: providers: github: organization: ${GITHUB_ORG} schedule: frequency: { minutes: 1 } timeout: { minutes: 1 } initialDelay: { seconds: 100 } ...
kind: ConfigMap apiVersion: v1 metadata: name: app-config-rhdh data: app-config-rhdh.yaml: | ... catalog: providers: github: organization: ${GITHUB_ORG} schedule: frequency: { minutes: 1 } timeout: { minutes: 1 } initialDelay: { seconds: 100 } ...
Copy to Clipboard Copied! 当存在列表时,需要前面的代码中的
providerId
来识别提供程序。- 点击 Save。
3.2.4. 在 Red Hat Developer Hub 中启用 GitHub 机构成员发现
您还可以为 GitHub 组织的成员启用 GitHub 发现功能。
先决条件
- 您已设置 GitHub 集成。如需更多信息,请参阅 第 3.2.2 节 “配置 GitHub 集成”。
流程
- 在 OpenShift Container Platform Web 控制台的 Developer 视角中,进入 Helm 选项卡。
- 点 Helm 发行版本的 overflow 菜单并选择 Upgrade。
使用以下视图之一编辑 Helm 配置:
使用 Form view
- 展开 Root Schema → global → Dynamic plugins configuration → 在 backstage 应用中安装的动态插件列表。
- 单击 backstage 应用链接中应安装的动态插件的 Add List。
在要安装的动态插件的 Package 规格中。它应该可以被
npm pack
命令使用。 字段,添加以下值:./dynamic-plugins/dist/backstage-plugin-catalog-backend-module-github-org-dynamic
- 单击 Upgrade。
使用 YAML 视图
将
global.dynamic.plugins.package
参数的值设置为./dynamic-plugins/dist/backstage-plugin-catalog-backend-module-github-org-dynamic
,如下例所示:global: dynamic: # other Red Hat Developer Hub Helm Chart configurations plugins: - disabled: false package: >- ./dynamic-plugins/dist/backstage-plugin-catalog-backend-module-github-org-dynamic # other Red Hat Developer Hub Helm Chart configurations
global: dynamic: # other Red Hat Developer Hub Helm Chart configurations plugins: - disabled: false package: >- ./dynamic-plugins/dist/backstage-plugin-catalog-backend-module-github-org-dynamic # other Red Hat Developer Hub Helm Chart configurations
Copy to Clipboard Copied! - 单击 Upgrade。
在 ConfigMap 中添加以下代码:
kind: ConfigMap apiVersion: v1 metadata: name: app-config-rhdh data: app-config-rhdh.yaml: | ... catalog: providers: githubOrg: id: production githubUrl: "${GITHUB_URL}" orgs: [ "${GITHUB_ORG}" ] ...
kind: ConfigMap apiVersion: v1 metadata: name: app-config-rhdh data: app-config-rhdh.yaml: | ... catalog: providers: githubOrg: id: production githubUrl: "${GITHUB_URL}" orgs: [ "${GITHUB_ORG}" ] ...
Copy to Clipboard Copied! 其中:
${GITHUB_URL}
- 表示必须替换为 GitHub URL 的变量。
${GITHUB_ORG}
- 表示必须替换为您要从中嵌套用户的 GitHub 组织的变量。
- 点击 Save。
第 4 章 自定义 Red Hat Developer Hub 中的主页
要访问 Red Hat Developer Hub 中的 Home 页面,基本 URL 必须包含 /developer-hub
代理。您可以通过将数据作为代理传递给 app-config.yaml
文件来配置 Home 页面。您可以在以下源的 Home 页面中提供数据:
- 托管在 GitHub 或 GitLab 上的 JSON 文件。
- 使用 API 以 JSON 格式提供 Home 页面数据的专用服务。
4.1. 使用托管的 JSON 文件向学习路径提供数据
先决条件
已使用 Operator 或 Helm Chart 安装 Red Hat Developer Hub。
如需更多信息,请参阅在 OpenShift Container Platform 上安装 Red Hat Developer Hub。
流程
要从 JSON 文件中访问数据,请完成以下步骤:
将以下代码添加到
app-config.yaml
文件中:proxy: endpoints: # Other Proxies # customize developer hub instance '/developer-hub': target: <DOMAIN_URL> # i.e https://raw.githubusercontent.com/ pathRewrite: '^/api/proxy/developer-hub': <path to json file> # i.e /janus-idp/backstage-showcase/main/packages/app/public/homepage/data.json changeOrigin: true secure: true # Change to "false" in case of using self hosted cluster with a self-signed certificate headers: <HEADER_KEY>: <HEADER_VALUE> # optional and can be passed as needed i.e Authorization can be passed for private GitHub repo and PRIVATE-TOKEN can be passed for private GitLab repo
proxy: endpoints: # Other Proxies # customize developer hub instance '/developer-hub': target: <DOMAIN_URL> # i.e https://raw.githubusercontent.com/ pathRewrite: '^/api/proxy/developer-hub': <path to json file> # i.e /janus-idp/backstage-showcase/main/packages/app/public/homepage/data.json changeOrigin: true secure: true # Change to "false" in case of using self hosted cluster with a self-signed certificate headers: <HEADER_KEY>: <HEADER_VALUE> # optional and can be passed as needed i.e Authorization can be passed for private GitHub repo and PRIVATE-TOKEN can be passed for private GitLab repo
Copy to Clipboard Copied!
4.2. 使用专用服务向学习路径提供数据
在使用专用服务时,您可以执行以下操作:
- 使用相同的服务向所有可配置的 Developer Hub 页面提供数据,或者为每个页面使用不同的服务。
-
使用
red-hat-developer-hub-customization-provider
作为示例服务,它为 Home 和 Tech Radar 页面提供数据。red-hat-developer-hub-customization-provider
服务提供与默认的 Developer Hub 数据相同的数据。如果需要,您可以从 GitHub 中 forkred-hat-developer-hub-customization-provider
服务存储库,并使用您自己的数据进行修改。 -
在同一集群中部署
red-hat-developer-hub-customization-provider
服务和 Developer Hub Helm Chart。
先决条件
- 已使用 Helm Chart 安装 Red Hat Developer Hub。如需更多信息,请参阅使用 Helm Chart 在 OpenShift Container Platform 上安装 Red Hat Developer Hub。
流程
要使用单独的服务提供 Home 页面数据,请完成以下步骤:
- 从 Red Hat OpenShift Container Platform Web 控制台中的 Developer 视角,点 +Add > Import from Git。
在 Git Repo URL 字段中输入 Git 存储库的 URL。
要使用
red-hat-developer-hub-customization-provider
服务,请添加 red-hat-developer-hub-customization-provider 存储库的 URL 或包含您的自定义的存储库分叉。- 在 General 选项卡中,在 Name 字段中输入 red-hat-developer-hub-customization-provider,然后单击 Create。
在 Advanced Options 选项卡中,从 Target Port 复制值。
注意Target Port 会自动生成 Kubernetes 或 OpenShift Container Platform 服务以与之通信。
将以下代码添加到
app-config-rhdh.yaml
文件中:proxy: endpoints: # Other Proxies # customize developer hub instance '/developer-hub': target: ${HOMEPAGE_DATA_URL} changeOrigin: true # Change to "false" in case of using self-hosted cluster with a self-signed certificate secure: true
proxy: endpoints: # Other Proxies # customize developer hub instance '/developer-hub': target: ${HOMEPAGE_DATA_URL} changeOrigin: true # Change to "false" in case of using self-hosted cluster with a self-signed certificate secure: true
Copy to Clipboard Copied! 其中
HOMEPAGE_DATA_URL
定义为http://<SERVICE_NAME>:8080
,例如http://rhdh-customization-provider:8080
。注意red-hat-developer-hub-customization-provider
服务默认包含 8080 端口。如果使用自定义端口,您可以使用app-config-rhdh.yaml
文件中的 'PORT' 环境变量指定它。-
将 URL 添加到
rhdh-secrets
或直接在自定义 ConfigMap 中替换它,替换HOMEPAGE_DATA_URL
。 - 删除 Developer Hub pod,以确保正确载入新配置。
验证
要查看该服务,请导航到 OpenShift Container Platform Web 控制台中的 Administrator 视角,然后点 Networking > Service。
注意您还可以在 Topology 视图中查看 Service Resources。
确保 Home 页面提供的 API URL 以 JSON 格式返回数据,如下例所示:
[ { "title": "Dropdown 1", "isExpanded": false, "links": [ { "iconUrl": "https://imagehost.com/image.png", "label": "Dropdown 1 Item 1", "url": "https://example.com/" }, { "iconUrl": "https://imagehost2.org/icon.png", "label": "Dropdown 1 Item 2", "url": "" } ] }, { "title": "Dropdown 2", "isExpanded": true, "links": [ { "iconUrl": "http://imagehost3.edu/img.jpg", "label": "Dropdown 2 Item 1", "url": "http://example.com" } ] } ]
[ { "title": "Dropdown 1", "isExpanded": false, "links": [ { "iconUrl": "https://imagehost.com/image.png", "label": "Dropdown 1 Item 1", "url": "https://example.com/" }, { "iconUrl": "https://imagehost2.org/icon.png", "label": "Dropdown 1 Item 2", "url": "" } ] }, { "title": "Dropdown 2", "isExpanded": true, "links": [ { "iconUrl": "http://imagehost3.edu/img.jpg", "label": "Dropdown 2 Item 1", "url": "http://example.com" } ] } ]
Copy to Clipboard Copied! 注意如果请求调用失败或没有配置,Developer Hub 实例会回退到默认的本地数据。
-
如果镜像或图标没有加载,那么通过将您的镜像或图标主机 URL 添加到自定义 ConfigMap 中的内容安全策略(csp)
img-src
来列出它们,如下所示:
kind: ConfigMap apiVersion: v1 metadata: name: app-config-rhdh data: app-config-rhdh.yaml: | app: title: Red Hat Developer Hub backend: csp: connect-src: - "'self'" - 'http:' - 'https:' img-src: - "'self'" - 'data:' - <image host url 1> - <image host url 2> - <image host url 3> # Other Configurations
kind: ConfigMap
apiVersion: v1
metadata:
name: app-config-rhdh
data:
app-config-rhdh.yaml: |
app:
title: Red Hat Developer Hub
backend:
csp:
connect-src:
- "'self'"
- 'http:'
- 'https:'
img-src:
- "'self'"
- 'data:'
- <image host url 1>
- <image host url 2>
- <image host url 3>
# Other Configurations
第 5 章 在 Red Hat Developer Hub 中自定义 Tech Radar 页面
在 Red Hat Developer Hub 中,技术 Radar 页面由 tech-radar
动态插件提供,该插件默认为禁用。有关在 Red Hat Developer Hub 中启用动态插件的详情,请参考 在 Red Hat Developer Hub 中配置插件。
在 Red Hat Developer Hub 中,您可以通过将数据作为代理传递给 app-config.yaml
文件来配置学习路径。基础技术 Radar URL 必须包含 /developer-hub/tech-radar
代理。
由于将重叠的 pathRewrite
用于
和 tech-radar
homepage
快速访问代理,因此您必须在创建 主页
配置(^api/proxy/developer-hub/tech-radar
)前创建 tech-radar 配置(^/api/proxy/developer-hub
)。
有关在 Red Hat Developer Hub 中自定义 Home 页面的更多信息,请参阅 Red Hat Developer Hub 中的自定义 Home 页面。
您可以从以下源向 Tech Radar 页面提供数据:
- 托管在 GitHub 或 GitLab 上的 JSON 文件。
- 使用 API 以 JSON 格式提供 Tech Radar 数据的专用服务。
5.1. 使用托管 JSON 文件向 Tech Radar 页面提供数据
先决条件
已使用 Operator 或 Helm Chart 安装 Red Hat Developer Hub。如需更多信息,请参阅在 OpenShift Container Platform 上安装 Red Hat Developer Hub。
流程
要从 JSON 文件中访问数据,请完成以下步骤:
将以下代码添加到
app-config.yaml
文件中:proxy: endpoints: # Other Proxies # customize developer hub instance '/developer-hub': target: <DOMAIN_URL> # i.e https://raw.githubusercontent.com/ pathRewrite: '^/api/proxy/developer-hub/tech-radar': <path to json file> # i.e /janus-idp/backstage-showcase/main/packages/app/public/tech-radar/data-default.json '^/api/proxy/developer-hub': <path to json file> # i.e /janus-idp/backstage-showcase/main/packages/app/public/homepage/data.json changeOrigin: true secure: true # Change to "false" in case of using self hosted cluster with a self-signed certificate headers: <HEADER_KEY>: <HEADER_VALUE> # optional and can be passed as needed i.e Authorization can be passed for private GitHub repo and PRIVATE-TOKEN can be passed for private GitLab repo
proxy: endpoints: # Other Proxies # customize developer hub instance '/developer-hub': target: <DOMAIN_URL> # i.e https://raw.githubusercontent.com/ pathRewrite: '^/api/proxy/developer-hub/tech-radar': <path to json file> # i.e /janus-idp/backstage-showcase/main/packages/app/public/tech-radar/data-default.json '^/api/proxy/developer-hub': <path to json file> # i.e /janus-idp/backstage-showcase/main/packages/app/public/homepage/data.json changeOrigin: true secure: true # Change to "false" in case of using self hosted cluster with a self-signed certificate headers: <HEADER_KEY>: <HEADER_VALUE> # optional and can be passed as needed i.e Authorization can be passed for private GitHub repo and PRIVATE-TOKEN can be passed for private GitLab repo
Copy to Clipboard Copied!
5.2. 使用专用服务向 Tech Radar 页面提供数据
在使用专用服务时,您可以执行以下操作:
- 使用相同的服务向所有可配置的 Developer Hub 页面提供数据,或者为每个页面使用不同的服务。
-
使用
red-hat-developer-hub-customization-provider
作为示例服务,它为 Home 和 Tech Radar 页面提供数据。red-hat-developer-hub-customization-provider
服务提供与默认的 Developer Hub 数据相同的数据。如果需要,您可以从 GitHub 中 forkred-hat-developer-hub-customization-provider
服务存储库,并使用您自己的数据进行修改。 -
在同一集群中部署
red-hat-developer-hub-customization-provider
服务和 Developer Hub Helm Chart。
先决条件
- 已使用 Helm Chart 安装 Red Hat Developer Hub。如需更多信息,请参阅使用 Helm Chart 在 OpenShift Container Platform 上安装 Red Hat Developer Hub。
流程
要使用单独的服务来提供 Tech Radar 数据,请完成以下步骤:
将以下代码添加到
app-config-rhdh.yaml
文件中:proxy: endpoints: # Other Proxies '/developer-hub/tech-radar': target: ${TECHRADAR_DATA_URL} changeOrigin: true # Change to "false" in case of using self hosted cluster with a self-signed certificate secure: true
proxy: endpoints: # Other Proxies '/developer-hub/tech-radar': target: ${TECHRADAR_DATA_URL} changeOrigin: true # Change to "false" in case of using self hosted cluster with a self-signed certificate secure: true
Copy to Clipboard Copied! 其中
TECHRADAR_DATA_URL
定义为http://<SERVICE_NAME>/tech-radar
,例如http://rhdh-customization-provider/tech-radar
。注意您可以通过将其添加到
rhdh-secrets
或直接将其替换为自定义 ConfigMap 中的值来定义TECHRADAR_DATA_URL
。- 删除 Developer Hub pod,以确保正确载入新配置。
第 6 章 在 Red Hat Developer Hub 中自定义学习路径
在 Red Hat Developer Hub 中,您可以通过将数据作为代理传递给 app-config.yaml
文件来配置学习路径。基本 URL 必须包含 /developer-hub/learning-paths
代理。
由于对 learning-path
和 主页快速访问代理使用重叠的
配置(pathRewrites
,因此您必须在创建主页^api/proxy/developer-hub)之前创建
配置(learning-paths
^api/proxy/developer-hub
)。
有关在 Red Hat Developer Hub 中自定义 Home 页面的更多信息,请参阅 Red Hat Developer Hub 中的自定义 Home 页面。
您可以将数据提供给以下源的学习路径:
- 托管在 GitHub 或 GitLab 上的 JSON 文件。
- 使用 API 以 JSON 格式提供学习路径数据的专用服务。
6.1. 使用托管的 JSON 文件向学习路径提供数据
先决条件
已使用 Operator 或 Helm Chart 安装 Red Hat Developer Hub。如需更多信息,请参阅在 OpenShift Container Platform 上安装 Red Hat Developer Hub。
流程
要从 JSON 文件中访问数据,请完成以下步骤:
将以下代码添加到
app-config.yaml
文件中:proxy: endpoints: '/developer-hub': target: https://raw.githubusercontent.com/ pathRewrite: '^/api/proxy/developer-hub/learning-paths': '/janus-idp/backstage-showcase/main/packages/app/public/learning-paths/data.json' '^/api/proxy/developer-hub/tech-radar': '/janus-idp/backstage-showcase/main/packages/app/public/tech-radar/data-default.json' '^/api/proxy/developer-hub': '/janus-idp/backstage-showcase/main/packages/app/public/homepage/data.json' changeOrigin: true secure: true
proxy: endpoints: '/developer-hub': target: https://raw.githubusercontent.com/ pathRewrite: '^/api/proxy/developer-hub/learning-paths': '/janus-idp/backstage-showcase/main/packages/app/public/learning-paths/data.json' '^/api/proxy/developer-hub/tech-radar': '/janus-idp/backstage-showcase/main/packages/app/public/tech-radar/data-default.json' '^/api/proxy/developer-hub': '/janus-idp/backstage-showcase/main/packages/app/public/homepage/data.json' changeOrigin: true secure: true
Copy to Clipboard Copied!
6.2. 使用专用服务向学习路径提供数据
在使用专用服务时,您可以执行以下操作:
- 使用相同的服务向所有可配置的 Developer Hub 页面提供数据,或者为每个页面使用不同的服务。
-
使用
red-hat-developer-hub-customization-provider
作为示例服务,它为 Home 和 Tech Radar 页面提供数据。red-hat-developer-hub-customization-provider
服务提供与默认的 Developer Hub 数据相同的数据。如果需要,您可以从 GitHub 中 forkred-hat-developer-hub-customization-provider
服务存储库,并使用您自己的数据进行修改。 -
在同一集群中部署
red-hat-developer-hub-customization-provider
服务和 Developer Hub Helm Chart。
先决条件
- 已使用 Helm Chart 安装 Red Hat Developer Hub。如需更多信息,请参阅在 OpenShift Container Platform 上安装 Red Hat Developer Hub。
流程
要使用专用服务来提供学习路径数据,请完成以下步骤:
将以下代码添加到
app-config-rhdh.yaml
文件中:proxy: endpoints: # Other Proxies '/developer-hub/learning-paths': target: ${LEARNING_PATH_DATA_URL} changeOrigin: true # Change to "false" in case of using self hosted cluster with a self-signed certificate secure: true
proxy: endpoints: # Other Proxies '/developer-hub/learning-paths': target: ${LEARNING_PATH_DATA_URL} changeOrigin: true # Change to "false" in case of using self hosted cluster with a self-signed certificate secure: true
Copy to Clipboard Copied! 其中
LEARNING_PATH_DATA_URL
定义为http://<SERVICE_NAME>/learning-paths
,例如http://rhdh-customization-provider/learning-paths
。注意您可以通过将
LEARNING_PATH_DATA_URL
添加到rhdh-secrets
,或将其替换为自定义 ConfigMap 中的值来定义 LEARNING_PATH_DATA_URL。- 删除 Developer Hub pod,以确保正确载入新配置。
第 7 章 自定义 Red Hat Developer Hub 实例的外观
Red Hat Developer Hub 有以下默认主题配置:
- Red Hat Developer Hub 主题
- 默认主题配置使开发人员门户像一个标准的 Red Hat Developer Hub 实例。如需更多信息,请参阅 第 7.7 节 “默认 Red Hat Developer Hub 主题”。
- Backstage 主题
- 使开发人员门户成为标准 Backstage 实例的默认主题配置。如需更多信息,请参阅 第 7.8 节 “默认阶段主题”。
您可以通过修改 app-config-rhdh.yaml
文件来更改或禁用特定参数。在 app-config-rhdh.yaml
文件中,您可以自定义常见的主题组件,包括:
- 公司名称和徽标
- 字体颜色、大小和样式,以段落、标题、标头和按钮形式
- 标头颜色、科学和形成
- 按钮颜色
- 导航指示器颜色
您还可以从 Developer Hub GUI 自定义一些组件,如主题模式(Light Theme,Dark Theme, 或 Auto)。
7.1. 为 Developer Hub 实例自定义主题模式
在 Developer Hub 中,主题配置用于更改不同 UI 组件的外观和感觉。因此,您可能会注意到不同 UI 组件的更改,如按钮、选项卡、侧边栏、卡和表,以及一些背景颜色和字体更改,用于 RHDH 页面。
您可以为 Developer Hub 实例选择以下主题模式之一:
- 辅助主题
- dark 主题
- auto
默认主题模式是 Auto,它会根据您的系统首选项自动设置 light 或 dark 主题。
先决条件
- 已登陆到 Developer Hub web 控制台。
流程
- 在 Developer Hub web 控制台中点 Settings。
在 Appearance 面板中,单击 LIGHT THEME、DARK THEME 或 AUTO 以更改主题模式。
7.2. 自定义 Developer Hub 实例的品牌徽标
您可以通过配置 app-config-rhdh.yaml
文件 的品牌
部分来自定义 Developer Hub 实例的品牌徽标,如下例所示:
app: branding: fullLogo: ${BASE64_EMBEDDED_FULL_LOGO} iconLogo: ${BASE64_EMBEDDED_ICON_LOGO}
app:
branding:
fullLogo: ${BASE64_EMBEDDED_FULL_LOGO}
iconLogo: ${BASE64_EMBEDDED_ICON_LOGO}
其中:
您还可以通过为品牌部分中的 fullLogoWidth
字段设置值来自定义 品牌
徽标的宽度,如下例所示:
app: branding: fullLogoWidth: 110px # ...
app:
branding:
fullLogoWidth: 110px
# ...
- 1
- 徽标宽度的默认值为
110px
。支持以下单位:整数
,px
,em
,rem
, , percentage.
7.3. 为 Developer Hub 实例自定义应用程序标题
您可以通过为 title 字段设置值来自定义应用程序 标题
文本,如下例所示:
app: title: My custom developer hub # ...
app:
title: My custom developer hub
# ...
7.4. 为您的 Developer Hub 实例自定义主题模式颜色面板
您可以通过配置 app-config-rhdh.yaml
文件的 branding.palette 部分的 light.palette
和 dark.palette
参数来自定义 Developer Hub 实例中 light 和 dark theme
模式的颜色面板,如下例所示:
app: branding: theme: light: palette: primary: main: <light_primary_color> navigation: indicator: <light_indicator_color> pageTheme: default: backgroundColor: [<light_background_color_1>, <light_background_color_2>] dark: palette: primary: main: <dark_primary_color> navigation: indicator: <dark_indicator_color> pageTheme: default: backgroundColor: [<dark_background_color_1>, <dark_background_color_2>] # ...
app:
branding:
theme:
light:
palette:
primary:
main: <light_primary_color>
navigation:
indicator: <light_indicator_color>
pageTheme:
default:
backgroundColor: [<light_background_color_1>, <light_background_color_2>]
dark:
palette:
primary:
main: <dark_primary_color>
navigation:
indicator: <dark_indicator_color>
pageTheme:
default:
backgroundColor: [<dark_background_color_1>, <dark_background_color_2>]
# ...
- 1
- light color palette 的主要颜色,例如:":
ffffff
或white
- 2
- light color palette 的导航指示符颜色,它是一个垂直栏,它表示导航面板中的所选标签页,如
#FF0000
或red
- 3
- light color palette 的默认页面主题的背景颜色,例如:":
ffffff
或white
- 4
- dark color palette 的主要颜色,例如:
#000000
或black
- 5
- dark color palette 的导航指示符颜色,它是一个垂直栏,代表导航面板中的所选标签页,例如
#FF0000
或red
- 6
- dark color palette 的默认页面主题的背景颜色,例如
#000000
或black
7.5. 为 Developer Hub 实例自定义页面主题标头
您可以通过修改 app-config-rhdh.yaml
文件的 branding.theme
部分来自定义 Developer Hub 实例中 light 和 dark 的标头颜色。您还可以为其他 Developer Hub 页面自定义页面标头,如 Home、Catalog 和 API 页面。
app: branding: theme: light: palette: {} pageTheme: default: backgroundColor: "<default_light_background_color>" fontColor: "<default_light_font_color>" shape: none apis: backgroundColor: "<apis_light_background_color>" fontColor: "<apis_light_font_color>" shape: none dark: palette: {} pageTheme: default: backgroundColor: "<default_dark_background_color>" fontColor: "<default_dark_font_color>" shape: none # ...
app:
branding:
theme:
light:
palette: {}
pageTheme:
default:
backgroundColor: "<default_light_background_color>"
fontColor: "<default_light_font_color>"
shape: none
apis:
backgroundColor: "<apis_light_background_color>"
fontColor: "<apis_light_font_color>"
shape: none
dark:
palette: {}
pageTheme:
default:
backgroundColor: "<default_dark_background_color>"
fontColor: "<default_dark_font_color>"
shape: none
# ...
7.6. 为 Developer Hub 实例自定义字体
您可以配置 app-config-rhdh.yaml
文件的 typography
部分,以更改页面文本的默认字体系列和大小,以及每个标题级别的字体系列和大小,如下例所示:
app: branding: theme: light: typography: fontFamily: "Times New Roman" htmlFontSize: 11 # smaller is bigger h1: fontFamily: "Times New Roman" fontSize: 40 h2: fontFamily: "Times New Roman" fontSize: 30 h3: fontFamily: "Times New Roman" fontSize: 30 h4: fontFamily: "Times New Roman" fontSize: 30 h5: fontFamily: "Times New Roman" fontSize: 30 h6: fontFamily: "Times New Roman" fontSize: 30 dark: typography: fontFamily: "Times New Roman" htmlFontSize: 11 # smaller is bigger h1: fontFamily: "Times New Roman" fontSize: 40 h2: fontFamily: "Times New Roman" fontSize: 30 h3: fontFamily: "Times New Roman" fontSize: 30 h4: fontFamily: "Times New Roman" fontSize: 30 h5: fontFamily: "Times New Roman" fontSize: 30 h6: fontFamily: "Times New Roman" fontSize: 30 # ...
app:
branding:
theme:
light:
typography:
fontFamily: "Times New Roman"
htmlFontSize: 11 # smaller is bigger
h1:
fontFamily: "Times New Roman"
fontSize: 40
h2:
fontFamily: "Times New Roman"
fontSize: 30
h3:
fontFamily: "Times New Roman"
fontSize: 30
h4:
fontFamily: "Times New Roman"
fontSize: 30
h5:
fontFamily: "Times New Roman"
fontSize: 30
h6:
fontFamily: "Times New Roman"
fontSize: 30
dark:
typography:
fontFamily: "Times New Roman"
htmlFontSize: 11 # smaller is bigger
h1:
fontFamily: "Times New Roman"
fontSize: 40
h2:
fontFamily: "Times New Roman"
fontSize: 30
h3:
fontFamily: "Times New Roman"
fontSize: 30
h4:
fontFamily: "Times New Roman"
fontSize: 30
h5:
fontFamily: "Times New Roman"
fontSize: 30
h6:
fontFamily: "Times New Roman"
fontSize: 30
# ...
7.7. 默认 Red Hat Developer Hub 主题
您可以使用默认的 Red Hat Developer Hub 主题配置使 Developer Hub 实例类似于标准的 Red Hat Developer Hub 实例。您还可以修改 app-config-rhdh.yaml
文件以自定义或禁用特定参数。
7.7.1. 默认 Red Hat Developer Hub 主题颜色面板
app-config-rhdh.yaml
文件对默认的 Red Hat Developer Hub 颜色面板使用以下配置:
app: branding: theme: light: variant: "rhdh" mode: "light" palette: background: default: "#F8F8F8" paper: "#FFFFFF" banner: closeButtonColor: "#FFFFFF" error: "#E22134" info: "#2E77D0" link: "#000000" text: "#FFFFFF" warning: "#FF9800" border: "#E6E6E6" bursts: backgroundColor: default: "#7C3699" fontColor: "#FEFEFE" gradient: linear: "linear-gradient(-137deg, #4BB8A5 0%, #187656 100%)" slackChannelText: "#ddd" errorBackground: "#FFEBEE" errorText: "#CA001B" gold: "#FFD600" highlight: "#FFFBCC" infoBackground: "#ebf5ff" infoText: "#004e8a" link: "#0A6EBE" linkHover: "#2196F3" mode: "light" navigation: background: "#222427" indicator: "#0066CC" color: "#ffffff" selectedColor: "#ffffff" navItem: hoverBackground: "#3c3f42" submenu: background: "#222427" pinSidebarButton: background: "#BDBDBD" icon: "#181818" primary: main: "#0066CC" secondary: main: "#8476D1" status: aborted: "#757575" error: "#E22134" ok: "#1DB954" pending: "#FFED51" running: "#1F5493" warning: "#FF9800" tabbar: indicator: "#9BF0E1" textContrast: "#000000" textSubtle: "#6E6E6E" textVerySubtle: "#DDD" warningBackground: "#F59B23" warningText: "#000000" text: primary: "#151515" secondary: "#757575" rhdh: general: disabledBackground: "#D2D2D2" disabled: "#6A6E73" searchBarBorderColor: "#E4E4E4" formControlBackgroundColor: "#FFF" mainSectionBackgroundColor: "#FFF" headerBottomBorderColor: "#C7C7C7" cardBackgroundColor: "#FFF" sideBarBackgroundColor: "#212427" cardBorderColor: "#C7C7C7" tableTitleColor: "#181818" tableSubtitleColor: "#616161" tableColumnTitleColor: "#151515" tableRowHover: "#F5F5F5" tableBorderColor: "#E0E0E0" tableBackgroundColor: "#FFF" tabsBottomBorderColor: "#D2D2D2" contrastText: "#FFF" primary: main: "#0066CC" focusVisibleBorder: "#0066CC" secondary: main: "#8476D1" focusVisibleBorder: "#8476D1" cards: headerTextColor: "#151515" headerBackgroundColor: "#FFF" headerBackgroundImage: "none" dark: variant: "rhdh" mode: "dark" palette: background: default: "#333333" paper: "#424242" banner: closeButtonColor: "#FFFFFF" error: "#E22134" info: "#2E77D0" link: "#000000" text: "#FFFFFF" warning: "#FF9800" border: "#E6E6E6" bursts: backgroundColor: default: "#7C3699" fontColor: "#FEFEFE" gradient: linear: "linear-gradient(-137deg, #4BB8A5 0%, #187656 100%)" slackChannelText: "#ddd" errorBackground: "#FFEBEE" errorText: "#CA001B" gold: "#FFD600" highlight: "#FFFBCC" infoBackground: "#ebf5ff" infoText: "#004e8a" link: "#9CC9FF" linkHover: "#82BAFD" mode: "dark" navigation: background: "#0f1214" indicator: "#0066CC" color: "#ffffff" selectedColor: "#ffffff" navItem: hoverBackground: "#3c3f42" submenu: background: "#0f1214" pinSidebarButton: background: "#BDBDBD" icon: "#404040" primary: main: "#1FA7F8" secondary: main: "#B2A3FF" status: aborted: "#9E9E9E" error: "#F84C55" ok: "#71CF88" pending: "#FEF071" running: "#3488E3" warning: "#FFB84D" tabbar: indicator: "#9BF0E1" textContrast: "#FFFFFF" textSubtle: "#CCCCCC" textVerySubtle: "#727272" warningBackground: "#F59B23" warningText: "#000000" rhdh: general: disabledBackground: "#444548" disabled: "#AAABAC" searchBarBorderColor: "#57585a" formControlBackgroundColor: "#36373A" mainSectionBackgroundColor: "#0f1214" headerBottomBorderColor: "#A3A3A3" cardBackgroundColor: "#292929" sideBarBackgroundColor: "#1b1d21" cardBorderColor: "#A3A3A3" tableTitleColor: "#E0E0E0" tableSubtitleColor: "#E0E0E0" tableColumnTitleColor: "#E0E0E0" tableRowHover: "#0f1214" tableBorderColor: "#515151" tableBackgroundColor: "#1b1d21" tabsBottomBorderColor: "#444548" contrastText: "#FFF" primary: main: "#1FA7F8" focusVisibleBorder: "#ADD6FF" secondary: main: "#B2A3FF" focusVisibleBorder: "#D0C7FF" cards: headerTextColor: "#FFF" headerBackgroundColor: "#0f1214" headerBackgroundImage: "none"
app:
branding:
theme:
light:
variant: "rhdh"
mode: "light"
palette:
background:
default: "#F8F8F8"
paper: "#FFFFFF"
banner:
closeButtonColor: "#FFFFFF"
error: "#E22134"
info: "#2E77D0"
link: "#000000"
text: "#FFFFFF"
warning: "#FF9800"
border: "#E6E6E6"
bursts:
backgroundColor:
default: "#7C3699"
fontColor: "#FEFEFE"
gradient:
linear: "linear-gradient(-137deg, #4BB8A5 0%, #187656 100%)"
slackChannelText: "#ddd"
errorBackground: "#FFEBEE"
errorText: "#CA001B"
gold: "#FFD600"
highlight: "#FFFBCC"
infoBackground: "#ebf5ff"
infoText: "#004e8a"
link: "#0A6EBE"
linkHover: "#2196F3"
mode: "light"
navigation:
background: "#222427"
indicator: "#0066CC"
color: "#ffffff"
selectedColor: "#ffffff"
navItem:
hoverBackground: "#3c3f42"
submenu:
background: "#222427"
pinSidebarButton:
background: "#BDBDBD"
icon: "#181818"
primary:
main: "#0066CC"
secondary:
main: "#8476D1"
status:
aborted: "#757575"
error: "#E22134"
ok: "#1DB954"
pending: "#FFED51"
running: "#1F5493"
warning: "#FF9800"
tabbar:
indicator: "#9BF0E1"
textContrast: "#000000"
textSubtle: "#6E6E6E"
textVerySubtle: "#DDD"
warningBackground: "#F59B23"
warningText: "#000000"
text:
primary: "#151515"
secondary: "#757575"
rhdh:
general:
disabledBackground: "#D2D2D2"
disabled: "#6A6E73"
searchBarBorderColor: "#E4E4E4"
formControlBackgroundColor: "#FFF"
mainSectionBackgroundColor: "#FFF"
headerBottomBorderColor: "#C7C7C7"
cardBackgroundColor: "#FFF"
sideBarBackgroundColor: "#212427"
cardBorderColor: "#C7C7C7"
tableTitleColor: "#181818"
tableSubtitleColor: "#616161"
tableColumnTitleColor: "#151515"
tableRowHover: "#F5F5F5"
tableBorderColor: "#E0E0E0"
tableBackgroundColor: "#FFF"
tabsBottomBorderColor: "#D2D2D2"
contrastText: "#FFF"
primary:
main: "#0066CC"
focusVisibleBorder: "#0066CC"
secondary:
main: "#8476D1"
focusVisibleBorder: "#8476D1"
cards:
headerTextColor: "#151515"
headerBackgroundColor: "#FFF"
headerBackgroundImage: "none"
dark:
variant: "rhdh"
mode: "dark"
palette:
background:
default: "#333333"
paper: "#424242"
banner:
closeButtonColor: "#FFFFFF"
error: "#E22134"
info: "#2E77D0"
link: "#000000"
text: "#FFFFFF"
warning: "#FF9800"
border: "#E6E6E6"
bursts:
backgroundColor:
default: "#7C3699"
fontColor: "#FEFEFE"
gradient:
linear: "linear-gradient(-137deg, #4BB8A5 0%, #187656 100%)"
slackChannelText: "#ddd"
errorBackground: "#FFEBEE"
errorText: "#CA001B"
gold: "#FFD600"
highlight: "#FFFBCC"
infoBackground: "#ebf5ff"
infoText: "#004e8a"
link: "#9CC9FF"
linkHover: "#82BAFD"
mode: "dark"
navigation:
background: "#0f1214"
indicator: "#0066CC"
color: "#ffffff"
selectedColor: "#ffffff"
navItem:
hoverBackground: "#3c3f42"
submenu:
background: "#0f1214"
pinSidebarButton:
background: "#BDBDBD"
icon: "#404040"
primary:
main: "#1FA7F8"
secondary:
main: "#B2A3FF"
status:
aborted: "#9E9E9E"
error: "#F84C55"
ok: "#71CF88"
pending: "#FEF071"
running: "#3488E3"
warning: "#FFB84D"
tabbar:
indicator: "#9BF0E1"
textContrast: "#FFFFFF"
textSubtle: "#CCCCCC"
textVerySubtle: "#727272"
warningBackground: "#F59B23"
warningText: "#000000"
rhdh:
general:
disabledBackground: "#444548"
disabled: "#AAABAC"
searchBarBorderColor: "#57585a"
formControlBackgroundColor: "#36373A"
mainSectionBackgroundColor: "#0f1214"
headerBottomBorderColor: "#A3A3A3"
cardBackgroundColor: "#292929"
sideBarBackgroundColor: "#1b1d21"
cardBorderColor: "#A3A3A3"
tableTitleColor: "#E0E0E0"
tableSubtitleColor: "#E0E0E0"
tableColumnTitleColor: "#E0E0E0"
tableRowHover: "#0f1214"
tableBorderColor: "#515151"
tableBackgroundColor: "#1b1d21"
tabsBottomBorderColor: "#444548"
contrastText: "#FFF"
primary:
main: "#1FA7F8"
focusVisibleBorder: "#ADD6FF"
secondary:
main: "#B2A3FF"
focusVisibleBorder: "#D0C7FF"
cards:
headerTextColor: "#FFF"
headerBackgroundColor: "#0f1214"
headerBackgroundImage: "none"
另外,您可以使用 app-config-rhdh.yaml
文件中的以下 变体
和模式
值应用以前的默认配置:
app: branding: theme: light: variant: "rhdh" mode: "light" dark: variant: "rhdh" mode: "dark"
app:
branding:
theme:
light:
variant: "rhdh"
mode: "light"
dark:
variant: "rhdh"
mode: "dark"
7.7.2. 默认 Red Hat Developer Hub 页主题
默认 Developer Hub 标头颜色在 light mode 和 black in dark 模式中是白色的,如以下 app-config-rhdh.yaml
文件配置中所示:
app: branding: theme: light: palette: {} defaultPageTheme: default pageTheme: default: backgroundColor: "#ffffff" dark: palette: {} defaultPageTheme: default pageTheme: default: backgroundColor: "#0f1214"
app:
branding:
theme:
light:
palette: {}
defaultPageTheme: default
pageTheme:
default:
backgroundColor: "#ffffff"
dark:
palette: {}
defaultPageTheme: default
pageTheme:
default:
backgroundColor: "#0f1214"
7.8. 默认阶段主题
您可以使用默认的 Backstage 主题配置使 Developer Hub 实例类似于标准 Backstage 实例。您还可以修改 app-config-rhdh.yaml
文件以自定义或禁用特定参数。
7.8.1. 默认回阶段主题颜色面板
app-config-rhdh.yaml
文件对默认的 Backstage color palette 使用以下配置:
app: branding: theme: light: variant: "backstage" mode: "light" palette: background: default: "#F8F8F8" paper: "#FFFFFF" banner: closeButtonColor: "#FFFFFF" error: "#E22134" info: "#2E77D0" link: "#000000" text: "#FFFFFF" warning: "#FF9800" border: "#E6E6E6" bursts: backgroundColor: default: "#7C3699" fontColor: "#FEFEFE" gradient: linear: "linear-gradient(-137deg, #4BB8A5 0%, #187656 100%)" slackChannelText: "#ddd" errorBackground: "#FFEBEE" errorText: "#CA001B" gold: "#FFD600" highlight: "#FFFBCC" infoBackground: "#ebf5ff" infoText: "#004e8a" link: "#0A6EBE" linkHover: "#2196F3" navigation: background: "#171717" color: "#b5b5b5" indicator: "#9BF0E1" navItem: hoverBackground: "#404040" selectedColor: "#FFF" submenu: background: "#404040" pinSidebarButton: background: "#BDBDBD" icon: "#181818" primary: main: "#1F5493" status: aborted: "#757575" error: "#E22134" ok: "#1DB954" pending: "#FFED51" running: "#1F5493" warning: "#FF9800" tabbar: indicator: "#9BF0E1" textContrast: "#000000" textSubtle: "#6E6E6E" textVerySubtle: "#DDD" warningBackground: "#F59B23" warningText: "#000000" dark: variant: "backstage" mode: "dark" palette: background: default: "#333333" paper: "#424242" banner: closeButtonColor: "#FFFFFF" error: "#E22134" info: "#2E77D0" link: "#000000" text: "#FFFFFF" warning: "#FF9800" border: "#E6E6E6" bursts: backgroundColor: default: "#7C3699" fontColor: "#FEFEFE" gradient: linear: "linear-gradient(-137deg, #4BB8A5 0%, #187656 100%)" slackChannelText: "#ddd" errorBackground: "#FFEBEE" errorText: "#CA001B" gold: "#FFD600" highlight: "#FFFBCC" infoBackground: "#ebf5ff" infoText: "#004e8a" link: "#9CC9FF" linkHover: "#82BAFD" mode: "dark" navigation: background: "#424242" color: "#b5b5b5" indicator: "#9BF0E1" navItem: hoverBackground: "#404040" selectedColor: "#FFF" submenu: background: "#404040" pinSidebarButton: background: "#BDBDBD" icon: "#404040" primary: dark: "#82BAFD" main: "#9CC9FF" secondary: main: "#FF88B2" status: aborted: "#9E9E9E" error: "#F84C55" ok: "#71CF88" pending: "#FEF071" running: "#3488E3" warning: "#FFB84D" tabbar: indicator: "#9BF0E1" textContrast: "#FFFFFF" textSubtle: "#CCCCCC" textVerySubtle: "#727272" warningBackground: "#F59B23" warningText: "#000000"
app:
branding:
theme:
light:
variant: "backstage"
mode: "light"
palette:
background:
default: "#F8F8F8"
paper: "#FFFFFF"
banner:
closeButtonColor: "#FFFFFF"
error: "#E22134"
info: "#2E77D0"
link: "#000000"
text: "#FFFFFF"
warning: "#FF9800"
border: "#E6E6E6"
bursts:
backgroundColor:
default: "#7C3699"
fontColor: "#FEFEFE"
gradient:
linear: "linear-gradient(-137deg, #4BB8A5 0%, #187656 100%)"
slackChannelText: "#ddd"
errorBackground: "#FFEBEE"
errorText: "#CA001B"
gold: "#FFD600"
highlight: "#FFFBCC"
infoBackground: "#ebf5ff"
infoText: "#004e8a"
link: "#0A6EBE"
linkHover: "#2196F3"
navigation:
background: "#171717"
color: "#b5b5b5"
indicator: "#9BF0E1"
navItem:
hoverBackground: "#404040"
selectedColor: "#FFF"
submenu:
background: "#404040"
pinSidebarButton:
background: "#BDBDBD"
icon: "#181818"
primary:
main: "#1F5493"
status:
aborted: "#757575"
error: "#E22134"
ok: "#1DB954"
pending: "#FFED51"
running: "#1F5493"
warning: "#FF9800"
tabbar:
indicator: "#9BF0E1"
textContrast: "#000000"
textSubtle: "#6E6E6E"
textVerySubtle: "#DDD"
warningBackground: "#F59B23"
warningText: "#000000"
dark:
variant: "backstage"
mode: "dark"
palette:
background:
default: "#333333"
paper: "#424242"
banner:
closeButtonColor: "#FFFFFF"
error: "#E22134"
info: "#2E77D0"
link: "#000000"
text: "#FFFFFF"
warning: "#FF9800"
border: "#E6E6E6"
bursts:
backgroundColor:
default: "#7C3699"
fontColor: "#FEFEFE"
gradient:
linear: "linear-gradient(-137deg, #4BB8A5 0%, #187656 100%)"
slackChannelText: "#ddd"
errorBackground: "#FFEBEE"
errorText: "#CA001B"
gold: "#FFD600"
highlight: "#FFFBCC"
infoBackground: "#ebf5ff"
infoText: "#004e8a"
link: "#9CC9FF"
linkHover: "#82BAFD"
mode: "dark"
navigation:
background: "#424242"
color: "#b5b5b5"
indicator: "#9BF0E1"
navItem:
hoverBackground: "#404040"
selectedColor: "#FFF"
submenu:
background: "#404040"
pinSidebarButton:
background: "#BDBDBD"
icon: "#404040"
primary:
dark: "#82BAFD"
main: "#9CC9FF"
secondary:
main: "#FF88B2"
status:
aborted: "#9E9E9E"
error: "#F84C55"
ok: "#71CF88"
pending: "#FEF071"
running: "#3488E3"
warning: "#FFB84D"
tabbar:
indicator: "#9BF0E1"
textContrast: "#FFFFFF"
textSubtle: "#CCCCCC"
textVerySubtle: "#727272"
warningBackground: "#F59B23"
warningText: "#000000"
另外,您可以使用 app-config-rhdh.yaml
文件中的以下 变体
和模式
值应用以前的默认配置:
app: branding: theme: light: variant: "backstage" mode: "light" dark: variant: "backstage" mode: "dark"
app:
branding:
theme:
light:
variant: "backstage"
mode: "light"
dark:
variant: "backstage"
mode: "dark"
7.8.2. 默认 Backstage 页主题
默认的 Backstage 标头颜色在 light mode 和 black in dark 模式中是白色的,如以下 app-config-rhdh.yaml
文件配置中所示:
app: branding: theme: light: palette: {} defaultPageTheme: default pageTheme: default: backgroundColor: ['#005B4B'] # teal fontColor: '#ffffff' shape: wave documentation: backgroundColor: ['#C8077A', '#C2297D'] # pinkSea fontColor: '#ffffff' shape: wave2 tool: backgroundColor: ['#8912CA', '#3E00EA'] # purpleSky fontColor: '#ffffff' shape: round service: backgroundColor: ['#006D8F', '#0049A1'] # marineBlue fontColor: '#ffffff' shape: wave website: backgroundColor: ['#0027AF', '#270094'] # veryBlue fontColor: '#ffffff' shape: wave library: backgroundColor: ['#98002B', '#8D1134'] # rubyRed fontColor: '#ffffff' shape: wave other: backgroundColor: ['#171717', '#383838'] # darkGrey fontColor: '#ffffff' shape: wave app: backgroundColor: ['#BE2200', '#A41D00'] # toastyOrange fontColor: '#ffffff' shape: shapes.wave apis: backgroundColor: ['#005B4B'] # teal fontColor: '#ffffff' shape: wave2 card: backgroundColor: ['#4BB8A5', '#187656'] # greens fontColor: '#ffffff' shape: wave dark: palette: {} defaultPageTheme: default pageTheme: default: backgroundColor: ['#005B4B'] # teal fontColor: '#ffffff' shape: wave documentation: backgroundColor: ['#C8077A', '#C2297D'] # pinkSea fontColor: '#ffffff' shape: wave2 tool: backgroundColor: ['#8912CA', '#3E00EA'] # purpleSky fontColor: '#ffffff' shape: round service: backgroundColor: ['#006D8F', '#0049A1'] # marineBlue fontColor: '#ffffff' shape: wave website: backgroundColor: ['#0027AF', '#270094'] # veryBlue fontColor: '#ffffff' shape: wave library: backgroundColor: ['#98002B', '#8D1134'] # rubyRed fontColor: '#ffffff' shape: wave other: backgroundColor: ['#171717', '#383838'] # darkGrey fontColor: '#ffffff' shape: wave app: backgroundColor: ['#BE2200', '#A41D00'] # toastyOrange fontColor: '#ffffff' shape: shapes.wave apis: backgroundColor: ['#005B4B'] # teal fontColor: '#ffffff' shape: wave2 card: backgroundColor: ['#4BB8A5', '#187656'] # greens fontColor: '#ffffff' shape: wave
app:
branding:
theme:
light:
palette: {}
defaultPageTheme: default
pageTheme:
default:
backgroundColor: ['#005B4B'] # teal
fontColor: '#ffffff'
shape: wave
documentation:
backgroundColor: ['#C8077A', '#C2297D'] # pinkSea
fontColor: '#ffffff'
shape: wave2
tool:
backgroundColor: ['#8912CA', '#3E00EA'] # purpleSky
fontColor: '#ffffff'
shape: round
service:
backgroundColor: ['#006D8F', '#0049A1'] # marineBlue
fontColor: '#ffffff'
shape: wave
website:
backgroundColor: ['#0027AF', '#270094'] # veryBlue
fontColor: '#ffffff'
shape: wave
library:
backgroundColor: ['#98002B', '#8D1134'] # rubyRed
fontColor: '#ffffff'
shape: wave
other:
backgroundColor: ['#171717', '#383838'] # darkGrey
fontColor: '#ffffff'
shape: wave
app:
backgroundColor: ['#BE2200', '#A41D00'] # toastyOrange
fontColor: '#ffffff'
shape: shapes.wave
apis:
backgroundColor: ['#005B4B'] # teal
fontColor: '#ffffff'
shape: wave2
card:
backgroundColor: ['#4BB8A5', '#187656'] # greens
fontColor: '#ffffff'
shape: wave
dark:
palette: {}
defaultPageTheme: default
pageTheme:
default:
backgroundColor: ['#005B4B'] # teal
fontColor: '#ffffff'
shape: wave
documentation:
backgroundColor: ['#C8077A', '#C2297D'] # pinkSea
fontColor: '#ffffff'
shape: wave2
tool:
backgroundColor: ['#8912CA', '#3E00EA'] # purpleSky
fontColor: '#ffffff'
shape: round
service:
backgroundColor: ['#006D8F', '#0049A1'] # marineBlue
fontColor: '#ffffff'
shape: wave
website:
backgroundColor: ['#0027AF', '#270094'] # veryBlue
fontColor: '#ffffff'
shape: wave
library:
backgroundColor: ['#98002B', '#8D1134'] # rubyRed
fontColor: '#ffffff'
shape: wave
other:
backgroundColor: ['#171717', '#383838'] # darkGrey
fontColor: '#ffffff'
shape: wave
app:
backgroundColor: ['#BE2200', '#A41D00'] # toastyOrange
fontColor: '#ffffff'
shape: shapes.wave
apis:
backgroundColor: ['#005B4B'] # teal
fontColor: '#ffffff'
shape: wave2
card:
backgroundColor: ['#4BB8A5', '#187656'] # greens
fontColor: '#ffffff'
shape: wave
7.9. Developer Hub 实例的自定义组件选项
您可以使用两个组件变体来自定义 Developer Hub 的不同组件:
- PatternFly
- MUI
除了在 light 或dark theme 模式配置中为每个参数分配组件变体外,您还可以切换 rippleEffect
或 off
。
以下代码显示了您可以在 app-config-rhdh.yaml
文件中使用的选项来为 Developer Hub 实例配置主题组件:
app: branding: theme: light: options: rippleEffect: off / on paper: patternfly / mui buttons: patternfly / mui inputs: patternfly / mui accordions: patternfly / mui sidebars: patternfly / mui pages: patternfly / mui headers: patternfly / mui toolbars: patternfly / mui dialogs: patternfly / mui cards: patternfly / mui tables: patternfly / mui tabs: patternfly / mui dark: options: rippleEffect: off / on paper: patternfly / mui buttons: patternfly / mui inputs: patternfly / mui accordions: patternfly / mui sidebars: patternfly / mui pages: patternfly / mui headers: patternfly / mui toolbars: patternfly / mui dialogs: patternfly / mui cards: patternfly / mui tables: patternfly / mui tabs: patternfly / mui
app:
branding:
theme:
light:
options:
rippleEffect: off / on
paper: patternfly / mui
buttons: patternfly / mui
inputs: patternfly / mui
accordions: patternfly / mui
sidebars: patternfly / mui
pages: patternfly / mui
headers: patternfly / mui
toolbars: patternfly / mui
dialogs: patternfly / mui
cards: patternfly / mui
tables: patternfly / mui
tabs: patternfly / mui
dark:
options:
rippleEffect: off / on
paper: patternfly / mui
buttons: patternfly / mui
inputs: patternfly / mui
accordions: patternfly / mui
sidebars: patternfly / mui
pages: patternfly / mui
headers: patternfly / mui
toolbars: patternfly / mui
dialogs: patternfly / mui
cards: patternfly / mui
tables: patternfly / mui
tabs: patternfly / mui
第 8 章 Red Hat Developer Hub 中的 ServiceNow Custom 操作
这些功能仅用于技术预览。红帽产品服务级别协议(SLA)不支持技术预览功能,且其功能可能并不完善,因此红帽不建议在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能的更多信息,请参阅 技术预览功能范围。
在 Red Hat Developer Hub 中,您可以访问 ServiceNow 自定义操作(自定义操作),以便在目录中获取和注册资源。
Developer Hub 中的自定义操作可让您促进和自动化记录管理。使用自定义操作,您可以执行以下操作:
- 创建、更新或删除记录
- 检索有关单个记录或多个记录的信息
8.1. 在 Red Hat Developer Hub 中启用 ServiceNow 自定义操作插件
在 Red Hat Developer Hub 中,ServiceNow 自定义操作作为预加载插件提供,该插件默认为禁用。您可以按照以下流程启用自定义操作插件。
先决条件
- Red Hat Developer Hub 已安装并运行。有关安装 Developer Hub 的更多信息,请参阅使用 Helm Chart 在 OpenShift Container Platform 上安装 Red Hat Developer Hub。
- 您已在 Developer Hub 中创建项目。
流程
要激活自定义操作插件,请使用插件名称
添加软件包
,并更新 Helm Chart 中的disabled
字段,如下所示:global: dynamic: includes: - dynamic-plugins.default.yaml plugins: - package: ./dynamic-plugins/dist/janus-idp-backstage-scaffolder-backend-module-servicenow-dynamic disabled: false
global: dynamic: includes: - dynamic-plugins.default.yaml plugins: - package: ./dynamic-plugins/dist/janus-idp-backstage-scaffolder-backend-module-servicenow-dynamic disabled: false
Copy to Clipboard Copied! 注意插件的默认配置从
dynamic-plugins.default.yaml
文件中提取,但您可以使用pluginConfig
条目来覆盖默认配置。在 Helm Chart 中设置以下变量来访问自定义操作:
servicenow: # The base url of the ServiceNow instance. baseUrl: ${SERVICENOW_BASE_URL} # The username to use for authentication. username: ${SERVICENOW_USERNAME} # The password to use for authentication. password: ${SERVICENOW_PASSWORD}
servicenow: # The base url of the ServiceNow instance. baseUrl: ${SERVICENOW_BASE_URL} # The username to use for authentication. username: ${SERVICENOW_USERNAME} # The password to use for authentication. password: ${SERVICENOW_PASSWORD}
Copy to Clipboard Copied!
8.2. Red Hat Developer Hub 中支持的 ServiceNow 自定义操作
ServiceNow 自定义操作可让您管理 Red Hat Developer Hub 中的记录。自定义操作支持以下 API 请求的 HTTP 方法:
-
GET
: 从指定资源端点检索指定信息 -
POST
:创建或更新资源 -
PUT
:修改资源 -
PATCH
:更新资源 -
DELETE
:删除资源
8.2.1. ServiceNow 自定义操作
- [GET] servicenow:now:table:retrieveRecord
从 Developer Hub 中的表检索指定记录的信息。
表 8.1. 输入参数 Name 类型 要求 描述 tableName
string
必填
要从中检索记录的表名称
sysId
string
必填
要检索的记录的唯一标识符
sysparmDisplayValue
enum("true", "false", "all")
选填
返回字段显示值,如
true
,实际值为false
,或两者。默认值为false
。sysparmExcludeReferenceLink
布尔值
选填
设置为
true
以排除参考字段的 Table API 链接。默认值为false
。sysparmFields
string[]
选填
响应中返回的字段数组
sysparmView
string
选填
根据指定的 UI 视图呈现响应。您可以使用
sysparm_fields
覆盖此参数。sysparmQueryNoDomain
布尔值
选填
如果授权,则设置为
true
以访问跨域的数据。默认值为false
。表 8.2. 输出参数 Name 类型 描述 result
record<PropertyKey, unknown>
请求的响应正文
- [GET] servicenow:now:table:retrieveRecords
从 Developer Hub 中的表检索有关多个记录的信息。
表 8.3. 输入参数 Name 类型 要求 描述 tableName
string
必填
要从中检索记录的表名称
sysparamQuery
string
选填
用于过滤结果的编码查询字符串
sysparmDisplayValue
enum("true", "false", "all")
选填
返回字段显示值,如
true
,实际值为false
,或两者。默认值为false
。sysparmExcludeReferenceLink
布尔值
选填
设置为
true
以排除参考字段的 Table API 链接。默认值为false
。sysparmSuppressPaginationHeader
布尔值
选填
设置为
true
以阻止分页标头。默认值为false
。sysparmFields
string[]
选填
响应中返回的字段数组
sysparmLimit
int
选填
每页返回的最大结果数。默认值为
10,000
。sysparmView
string
选填
根据指定的 UI 视图呈现响应。您可以使用
sysparm_fields
覆盖此参数。sysparmQueryCategory
string
选填
用于查询的查询类别的名称
sysparmQueryNoDomain
布尔值
选填
如果授权,则设置为
true
以访问跨域的数据。默认值为false
。sysparmNoCount
布尔值
选填
不要在表上执行 select count DomainMapping。默认值为
false
。表 8.4. 输出参数 Name 类型 描述 result
record<PropertyKey, unknown>
请求的响应正文
- [POST] servicenow:now:table:createRecord
在 Developer Hub 的表中创建记录。
表 8.5. 输入参数 Name 类型 要求 描述 tableName
string
必填
要保存记录的表的名称
requestBody
record<PropertyKey, unknown>
选填
在指定记录中定义的每个参数的字段名称和关联的值
sysparmDisplayValue
enum("true", "false", "all")
选填
返回字段显示值,如
true
,实际值为false
,或两者。默认值为false
。sysparmExcludeReferenceLink
布尔值
选填
设置为
true
以排除参考字段的 Table API 链接。默认值为false
。sysparmFields
string[]
选填
响应中返回的字段数组
sysparmInputDisplayValue
布尔值
选填
使用其显示值(如
true
或实际值)设置字段值,如false
。默认值为false
。sysparmSuppressAutoSysField
布尔值
选填
设置为
true
,以禁止自动生成系统字段。默认值为false
。sysparmView
string
选填
根据指定的 UI 视图呈现响应。您可以使用
sysparm_fields
覆盖此参数。表 8.6. 输出参数 Name 类型 描述 result
record<PropertyKey, unknown>
请求的响应正文
- [PUT] servicenow:now:table:modifyRecord
修改 Developer Hub 中表中的记录。
表 8.7. 输入参数 Name 类型 要求 描述 tableName
string
必填
要从中修改记录的表名称
sysId
string
必填
要修改的记录的唯一标识符
requestBody
record<PropertyKey, unknown>
选填
在指定记录中定义的每个参数的字段名称和关联的值
sysparmDisplayValue
enum("true", "false", "all")
选填
返回字段显示值,如
true
,实际值为false
,或两者。默认值为false
。sysparmExcludeReferenceLink
布尔值
选填
设置为
true
以排除参考字段的 Table API 链接。默认值为false
。sysparmFields
string[]
选填
响应中返回的字段数组
sysparmInputDisplayValue
布尔值
选填
使用其显示值(如
true
或实际值)设置字段值,如false
。默认值为false
。sysparmSuppressAutoSysField
布尔值
选填
设置为
true
,以禁止自动生成系统字段。默认值为false
。sysparmView
string
选填
根据指定的 UI 视图呈现响应。您可以使用
sysparm_fields
覆盖此参数。sysparmQueryNoDomain
布尔值
选填
如果授权,则设置为
true
以访问跨域的数据。默认值为false
。表 8.8. 输出参数 Name 类型 描述 result
record<PropertyKey, unknown>
请求的响应正文
- [PATCH] 服务现在:now:table:updateRecord
更新 Developer Hub 中的表中的记录。
表 8.9. 输入参数 Name 类型 要求 描述 tableName
string
必填
要更新记录的表的名称
sysId
string
必填
要更新的记录的唯一标识符
requestBody
record<PropertyKey, unknown>
选填
在指定记录中定义的每个参数的字段名称和关联的值
sysparmDisplayValue
enum("true", "false", "all")
选填
返回字段显示值,如
true
,实际值为false
,或两者。默认值为false
。sysparmExcludeReferenceLink
布尔值
选填
设置为
true
以排除参考字段的 Table API 链接。默认值为false
。sysparmFields
string[]
选填
响应中返回的字段数组
sysparmInputDisplayValue
布尔值
选填
使用其显示值(如
true
或实际值)设置字段值,如false
。默认值为false
。sysparmSuppressAutoSysField
布尔值
选填
设置为
true
,以禁止自动生成系统字段。默认值为false
。sysparmView
string
选填
根据指定的 UI 视图呈现响应。您可以使用
sysparm_fields
覆盖此参数。sysparmQueryNoDomain
布尔值
选填
如果授权,则设置为
true
以访问跨域的数据。默认值为false
。表 8.10. 输出参数 Name 类型 描述 result
record<PropertyKey, unknown>
请求的响应正文
- [DELETE] servicenow:now:table:deleteRecord
从 Developer Hub 中的表中删除记录。
表 8.11. 输入参数 Name 类型 要求 描述 tableName
string
必填
从中删除记录的表名称
sysId
string
必填
要删除的记录的唯一标识符
sysparmQueryNoDomain
布尔值
选填
如果授权,则设置为
true
以访问跨域的数据。默认值为false
。
第 9 章 Red Hat Developer Hub 中的审计日志
审计日志是记录用户活动、系统事件和数据更改的记录集,影响您的 Red Hat Developer Hub 用户、管理员或组件。管理员可以查看 OpenShift Container Platform Web 控制台中的 Developer Hub 审计日志,以监控构建器事件、对 RBAC 系统的更改,以及对 Catalog 数据库的更改。审计日志包括以下信息:
- 审计事件的名称
- 触发审计事件的操作者,如终端、端口、IP 地址或主机名
- 事件元数据,如日期、时间
-
事件状态,如
成功
,失败
-
严重性级别,如
info
、debug
、warn
、error
您可以使用审计日志中的信息来实现以下目标:
- 增强安全性
- 跟踪活动,包括由自动化系统和软件模板启动到其源的活动。了解何时执行软件模板,以及应用程序和组件安装、更新、配置更改和删除的详细信息。
- 自动化合规性
- 使用简化的流程查看指定时间点的日志数据,以满足审计目的或持续合规维护。
- 调试问题
- 使用访问记录和活动详情来修复软件模板或插件的问题。
默认情况下,审计日志不会转发到内部日志存储,因为这不提供安全存储。您需要自己确保转发审计日志的系统符合您所在机构及政府的相关要求,并具有适当的安全性。
9.1. 在 OpenShift Container Platform 上为 Developer Hub 配置审计日志
使用 OpenShift Container Platform Web 控制台将以下 OpenShift Container Platform 日志记录组件配置为使用 Developer Hub 的审计日志记录:
- 日志记录部署
- 配置日志记录环境,包括每个日志记录组件的 CPU 和内存限值。如需更多信息,请参阅 Red Hat OpenShift Container Platform - 配置日志记录部署。
- 日志记录收集器
-
配置
ClusterLogging
自定义资源(CR)中的spec.collection
小节,以使用支持的对日志收集器的修改,并从STDOUT
收集日志。如需更多信息,请参阅 Red Hat OpenShift Container Platform - 配置日志记录收集器。 - 日志转发
-
通过在
ClusterLogForwarder
CR 中指定输出和管道的组合,将日志发送到 OpenShift Container Platform 集群内部和外部的特定端点。如需更多信息,请参阅 Red Hat OpenShift Container Platform - 启用 JSON 日志转发 和 Red Hat OpenShift Container Platform - 配置日志转发。
9.2. 在 Developer Hub 中查看审计日志
管理员可以从 Red Hat OpenShift Container Platform Web 控制台查看、搜索、过滤和管理日志数据。您可以使用 isAuditLog
字段过滤其他日志类型的审计日志。
先决条件
- 在 OpenShift Container Platform Web 控制台中以管理员身份登录。
流程
- 从 OpenShift Container Platform Web 控制台的 Developer 视角中,点 Topology 选项卡。
- 在 Topology 视图中,点击您要查看审计日志数据的 pod。
- 在 pod 面板中点 Resources 选项卡。
- 在 Resources 选项卡的 Pods 部分中,单击 View logs。
-
在 Logs 视图中,在 Search 字段中输入
isAuditLog
,以过滤来自其他日志类型的审计日志。您可以使用箭头浏览包含isAuditLog
字段的日志。
9.2.1. 审计日志字段
Developer Hub 审计日志可以包括以下字段:
eventName
- 审计事件的名称。
行动者
包含触发审计事件的操作者信息的对象。包含以下字段:
actorId
-
关联的用户或服务的 name/id/
entityRef
。如果未经身份验证的用户访问端点并禁用默认的验证策略,则可以是null
。 ip
- 行动者的 IP 地址(可选)。
hostname
- 操作者的主机名(可选)。
client
- 行动者的用户代理(可选)。
stage
-
生成审计日志时事件的阶段,如启动
或完成
。
status
-
事件的状态,如
成功或失败
meta
-
包含事件特定数据的可选对象,如
taskId
。 Request (请求)
可选字段,其中包含发送到端点的 HTTP 请求信息。包含以下字段:
方法
- 请求的 HTTP 方法。
query
-
请求的
查询
字段。 params
-
请求的
params
字段。 正文(body)
-
请求正文
。创建任务时提供的secret
被重新设计,显示为*
。 url
- 请求的端点 URL。
响应
可选字段,其中包含从端点发送的 HTTP 响应的信息。包含以下字段:
status
- HTTP 响应的状态代码。
正文(body)
- 请求正文的内容。
isAuditLog
-
设置为
true
的标志,用于将审计日志与其他日志类型区分开。 errors
-
包含
名称
、消息
以及错误堆栈
字段的错误列表。只有当状态
失败
时才会出现。
9.2.2. Scaffolder 事件
Developer Hub 审计日志可以包括以下 scaffolder 事件:
ScaffolderParameterSchemaFetch
-
跟踪对
/v2/templates/:namespace/:kind/:name/parameter-schema
端点的GET
请求,该端点返回模板参数 schema ScaffolderInstalledActionsFetch
-
跟踪对
/v2/actions
端点的GET
请求,该端点获取已安装操作的列表 ScaffolderTaskCreation
-
跟踪对
/v2/tasks
端点的POST
请求,该端点创建 scaffolder 执行的任务 ScaffolderTaskListFetch
-
跟踪对
/v2/tasks
端点的GET
请求,该端点获取 scaffolder 中所有任务的详细信息。 ScaffolderTaskFetch
-
跟踪对
/v2/tasks/:taskId
端点的GET
请求,该端点获取指定任务:taskId
的详细信息 ScaffolderTaskCancellation
-
跟踪对
/v2/tasks/:taskId/cancel
端点的POST
请求,该端点取消正在运行的任务 ScaffolderTaskStream
-
跟踪
GET
请求到/v2/tasks/:taskId/eventstream
端点,该端点返回任务:taskId
的任务日志的事件流。 ScaffolderTaskEventFetch
-
跟踪对
/v2/tasks/:taskId/events
端点的GET
请求,该端点返回任务:taskId
的任务日志的快照 ScaffolderTaskDryRun
-
跟踪对
/v2/dry-run
端点的POST
请求,该端点会创建一个空运行任务。与空运行关联的事件的所有审计日志会将meta.isDryLog
标志设为true
。 ScaffolderStaleTaskCancellation
- 跟踪自动取消过时的任务
ScaffolderTaskExecution
-
跟踪实际构建器任务执行的启动和完成(空运行不会发生)
ScaffolderTaskStepExecution
-
跟踪
启动和完成
构建器任务步骤执行 ScaffolderTaskStepSkip
-
如果未满足条件,
则
跟踪跳过的步骤 ScaffolderTaskStepIteration
-
跟踪包含每个字段的任务步骤
执行的步骤
。
9.2.3. 目录事件
Developer Hub 审计日志可包括以下目录事件:
CatalogEntityAncestryFetch
-
跟踪对
/entities/by-name/:kind/:namespace/:name/ancestry
端点的GET
请求,该端点返回实体的ancestry CatalogEntityBatchFetch
-
跟踪
POST
请求到/entities/by-refs
端点,该端点返回批实体 CatalogEntityDeletion
-
跟踪对
/entities/by-uid/:uid
端点的DELETE
请求,该端点删除实体
如果已删除实体的父位置仍存在于目录中,则在下一个处理周期期间会在目录中恢复实体。
CatalogEntityFacetFetch
-
跟踪
GET
请求到/entity-facets
端点,该端点返回实体的挑战 CatalogEntityFetch
-
跟踪
GET
请求到/entities
端点,该端点返回实体列表 CatalogEntityFetchByName
-
跟踪
GET
请求到/entities/by-name/:kind/:namespace/:name
端点,该端点返回与指定实体引用匹配的实体,例如 <kind>:<namespace>/<name>
CatalogEntityFetchByUid
-
跟踪
GET
请求到/entities/by-uid/:uid
端点,该端点返回与指定实体的唯一 ID 匹配的实体 CatalogEntityRefresh
-
跟踪
POST
请求到/entities/refresh
端点,该端点调度指定的实体刷新 CatalogEntityValidate
-
跟踪对
/entities/validate
端点的POST
请求,该端点验证指定的实体 CatalogLocationCreation
-
跟踪对
/locations
端点的POST
请求,这将创建一个位置
位置是一种标记,引用其他位置来查找目录数据。
CatalogLocationAnalyze
-
跟踪对
/locations/analyze
端点的POST
请求,该端点分析指定的位置 CatalogLocationDeletion
-
跟踪对
/locations/:id
端点的DELETE
请求,该端点删除位置以及与其关联的所有子实体 CatalogLocationFetch
-
跟踪
GET
请求到/locations
端点,该端点返回位置列表 CatalogLocationFetchByEntityRef
-
跟踪
GET
请求到/locations/by-entity
端点,该端点返回与指定实体引用关联的位置列表 CatalogLocationFetchById
-
跟踪
GET
请求到/locations/:id
端点,该端点返回与指定位置 ID 匹配的位置 QueriedCatalogEntityFetch
-
将
GET
请求跟踪到/entities/by-query
端点,该端点返回与指定查询匹配的实体列表