成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

初探 Backstage:快速上手指南

開發(fā) 開發(fā)工具
Backstage 更適合被定義為一個開發(fā)者門戶而不是一個全面的開發(fā)者平臺。它本質(zhì)上是一個靈活的框架,而非一個即開即用的全套解決方案。為了充分發(fā)揮其潛力,平臺團隊需要深入了解開發(fā)人員的需求,并通過引入或開發(fā)專門的插件來定制 Backstage,從而實現(xiàn)真正的自服務(wù)能力。

Backstage 簡介

Backstage 是一個用于構(gòu)建開發(fā)人員門戶的開放平臺,統(tǒng)一了所有基礎(chǔ)設(shè)施工具、服務(wù)和文檔,以創(chuàng)建端到端的簡化開發(fā)環(huán)境,由 Spotify 開源并捐贈給 CNCF[2]。Backstage 提供了開箱即用的幾個核心功能:

軟件目錄

軟件目錄[3](Software Catalog)是一個集中式系統(tǒng),用于跟蹤生態(tài)系統(tǒng)中所有軟件(服務(wù)、網(wǎng)站、庫、數(shù)據(jù)管道等)的所有權(quán)和元數(shù)據(jù)。開發(fā)人員提供軟件的實體信息,Backstage 根據(jù)實體的信息與已有實體建立關(guān)聯(lián),并生成最終版本的軟件實體保存在目錄中。

從 Backstage 倉庫的軟件目錄示例中可以找到 多種類型的實體定義[4]。

軟件模板

軟件模板[5] (Software Template)是一個可以幫助開發(fā)在 Backstage 中創(chuàng)建組件的工具。默認(rèn)情況下,它能夠加載代碼骨架、帶有變量中的模板,然后將模板發(fā)布到某些位置,例如 GitHub 或 GitLab。

技術(shù)文檔

技術(shù)文檔[6](TechDocs) 是 Spotify 自行開發(fā)的直接內(nèi)置于 Backstage 中的類文檔代碼解決方案。開發(fā)人員在與代碼一起存在的 Markdown 文件中編寫文檔 - 只需很少的配置即可在 Backstage 中獲得一個漂亮的文檔站點。

插件支持

插件支持[7](Plugins)Backstage 本身是一個由一組插件組成的單頁面應(yīng)用程序,通過插件平臺開發(fā)人員可以將幾乎任何類型的基礎(chǔ)設(shè)施或軟件開發(fā)工具作為 Backstage 中的功能公開。

我覺得插件是 Backstage 的最大亮點,通過 插件生態(tài)系統(tǒng)[8] 極大增強的可定制性,目前 Backstage 有 5 個核心插件以及近 200 個第三方插件。

圖片圖片

要運行 Backstage 可以直接在本地運行,也可以進行容器化部署。

本地運行

為了在本地運行 Backstage,需要 NodeJS 18、yarn 1.22 和 npx 環(huán)境。以下是啟動 Backstage 的步驟:

創(chuàng)建 Backstage App

執(zhí)行下面的命令,并根據(jù)提示輸入應(yīng)用名創(chuàng)建 Backstage 應(yīng)用。也可以使用 我創(chuàng)建的[9]。

npx @backstage/create-app@latest

默認(rèn)情況下,本地運行使用 better-sqlite3 來作為軟件目錄的存儲。啟動之前需要執(zhí)行下面的命令:

npm rebuild better-sqlite3

啟動 Backstage

之后就可以執(zhí)行 yarn dev 啟動 Backstage,在瀏覽器中打開 http://localhost:3000 就能訪問 Backstage 了。

圖片圖片

當(dāng)然 Backstage 也支持?jǐn)?shù)據(jù)庫進行持久化,比如 PostgreSQL??梢栽?nbsp;app-config.yaml 中,將數(shù)據(jù)庫配置為下面:

backend:
  database:
    # client: better-sqlite3
    # connection: ':memory:'  
    client: pg
    connection:
      host: ${POSTGRES_SERVICE_HOST}
      port: ${POSTGRES_SERVICE_PORT}
      user: ${POSTGRES_USER}
      password: ${POSTGRES_PASSWORD}

修改配置后,添加環(huán)境變量并重新執(zhí)行命令。

export POSTGRES_SERVICE_HOST=127.0.0.1 
export POSTGRES_SERVICE_PORT=5432 
export POSTGRES_USER= backstage 
export POSTGRES_PASSWORD=backstage
yarn dev

添加軟件實體

我在已有的一個 Java 項目中,添加了 `catalog-info.yaml`[10] 并添加了軟件實體信息。

圖片圖片

在軟件目錄的頁面上依次點擊 CREATE 和 REGISTER EXISTING COMPONENT,在表單中填入上面的 catalog-info.yaml 的地址 https://github.com/addozhang/tekton-demo/blob/main/catalog-info.yaml,然后點擊 ANALYZE 和 IMPORT。

此時就可以看到導(dǎo)入的實體信息以及根據(jù)信息創(chuàng)建的組件關(guān)系。

圖片圖片

除了展示軟件的信息,我們希望對項目進行構(gòu)建。我提前為其添加了一個 GitHub 工作流[11],接下來看看如何在 Backstage 上進行構(gòu)建。

配置 CI/CD

此時如果打開 CI/CD 卡片,可以彈窗要求對 Backstage 進行授權(quán)允許其訪問 GitHub 倉庫。由于配置認(rèn)證提供這,會看到如下錯誤。

圖片圖片

在 GitHub 開發(fā)者設(shè)置[12] 中填入信息創(chuàng)建一個應(yīng)用:

  • 應(yīng)用程序名稱:Backstage(或者其他名字)
  • 主頁網(wǎng)址:http://localhost:3000
  • 授權(quán)回調(diào) URL:http://localhost:7007/api/auth/github/handler/frame

創(chuàng)建成功后,可以獲取 CLIENT_ID 和 CLIENT_SECRET。

修改 Backstage 的配置文件 app-config.yaml,添加配置:

auth:
  environment: development
  providers:
    github:
      development:
        clientId: ${AUTH_GITHUB_CLIENT_ID}
        clientSecret: ${AUTH_GITHUB_CLIENT_SECRET}

其中

export POSTGRES_SERVICE_HOST=127.0.0.1 
export POSTGRES_SERVICE_PORT=5432 
export POSTGRES_USER= backstage 
export POSTGRES_PASSWORD=backstage
export AUTH_GITHUB_CLIENT_ID=e1c1fc80ec2014c91543
export AUTH_GITHUB_CLIENT_SECRET=0641e5e5af60c485a03f19f8bf63218d06ab7876
yarn dev

圖片圖片

Kubernetes 上運行

首先要有個 K8s 集群。在 Kubernetes 上我們這次使用 PostgreSQL 作為持久化存儲。

kubectl create namespace backstage

部署 PostgreSQL

創(chuàng)建 Secret 用于配置 PostgreSQL 的認(rèn)證信息。

kubectl apply -n backstage -f - <<EOF
apiVersion: v1
kind: Secret
metadata:
  name: postgres-secrets
type: Opaque
data:
  POSTGRES_USER: YmFja3N0YWdl
  POSTGRES_PASSWORD: YmFja3N0YWdl
EOF

使用本地磁盤創(chuàng)建 PVC 和 PVC。

kubectl apply -n backstage -f - <<EOF
apiVersion: v1
kind: PersistentVolume
metadata:
  name: postgres-storage
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 2G
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  hostPath:
    path: '/mnt/data'
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: postgres-storage-claim
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 2G
EOF

部署 PostgreSQL。

kubectl apply -n backstage -f - <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
  name: backstage
spec:
  replicas: 1
  selector:
    matchLabels:
      app: backstage
  template:
    metadata:
      labels:
        app: backstage
    spec:
      containers:
        - name: backstage
          image: addozhang/backstage
          imagePullPolicy: Always
          ports:
            - name: http
              containerPort: 7007
          envFrom:
            - secretRef:
                name: postgres-secrets
            - secretRef:
                name: github-oauth-secrets          
---
apiVersion: v1
kind: Service
metadata:
  name: backstage
spec:
  selector:
    app: backstage
  ports:
    - name: http
      port: 80
      targetPort: http
EOF

配置 GitHub OAuth 認(rèn)證信息

kubectl apply -n backstage -f - <<EOF
apiVersion: v1
kind: Secret
metadata:
  name: github-oauth-secrets
type: Opaque
data:
  AUTH_GITHUB_CLIENT_ID: <CLIENT_ID base64>
  AUTH_GITHUB_CLIENT_SECRET: <CLIENT_SECRET base64>
EOF

部署 Backstage

kubectl apply -n backstage -f - <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
  name: backstage
spec:
  replicas: 1
  selector:
    matchLabels:
      app: backstage
  template:
    metadata:
      labels:
        app: backstage
    spec:
      volumes:
        - name: config-volume
          configMap:
            name: bs-app-config
            items:
              - key: "app-config.production.yaml"
                path: "app-config.production.yaml"
      containers:
        - name: backstage
          image: addozhang/backstage:latest
          imagePullPolicy: Always
          ports:
            - name: http
              containerPort: 7007
          envFrom:
            - secretRef:
                name: github-oauth-secrets
            - secretRef:
                name: postgres-secrets
---
apiVersion: v1
kind: Service
metadata:
  name: backstage
spec:
  selector:
    app: backstage
  ports:
    - name: http
      port: 80
      targetPort: http
EOF

訪問 Backstage 頁面 http://localhost:7077。

kubectl port-forward --namespace=backstage svc/backstage 7007:80

總結(jié)

通過這篇文章,我們了解了 Backstage 的基本概念和如何在不同環(huán)境中運行它。

我認(rèn)為,Backstage 更適合被定義為一個開發(fā)者門戶而不是一個全面的開發(fā)者平臺。它本質(zhì)上是一個靈活的框架,而非一個即開即用的全套解決方案。為了充分發(fā)揮其潛力,平臺團隊需要深入了解開發(fā)人員的需求,并通過引入或開發(fā)專門的插件來定制 Backstage,從而實現(xiàn)真正的自服務(wù)能力。

此外,Backstage 并不意味著要取代 DevOps。事實上,DevOps 更多是一種文化和實踐理念,而非具體的工具。Backstage 的框架加插件的組合方式,實際上是為了解決 DevOps 實踐中遇到的具體挑戰(zhàn),尤其是在其落地實施的最后階段。

總之,Backstage 為開發(fā)者提供了一個強大而靈活的工具集,通過集成多樣的功能和服務(wù),幫助團隊更好地實現(xiàn) DevOps 理念,提升開發(fā)效率和項目管理的效能。

參考資料

[1] Backstage: https://backstage.io

[2] Spotify 開源并捐贈給 CNCF: https://backstage.io/blog/2022/03/16/backstage-turns-two/#out-of-the-sandbox-and-into-incubation

[3] 軟件目錄: https://backstage.io/docs/features/software-catalog/

[4] 多種類型的實體定義: https://github.com/backstage/backstage/tree/master/packages/catalog-model/examples

[5] 軟件模板: https://backstage.io/docs/features/software-templates/

[6] 技術(shù)文檔: https://backstage.io/docs/features/techdocs/

[7] 插件支持: https://backstage.io/docs/plugins/

[8] 插件生態(tài)系統(tǒng): https://backstage.io/plugins/

[9] 我創(chuàng)建的: https://github.com/addozhang/backstage-quickstart

[10] catalog-info.yaml: https://github.com/addozhang/tekton-demo/blob/main/catalog-info.yaml

[11] GitHub 工作流: https://github.com/addozhang/tekton-demo/blob/main/.github/workflows/build.yml

[12] GitHub 開發(fā)者設(shè)置: https://github.com/settings/developers

責(zé)任編輯:武曉燕 來源: 云原生指北
相關(guān)推薦

2021-11-26 09:40:37

EclipseIDEA開發(fā)

2021-01-26 08:37:18

MobXVueReact

2014-06-24 09:41:56

Android Stu教程

2025-05-28 15:46:13

2013-12-04 13:27:56

Android SDK項目

2013-12-26 15:40:33

Android SDK項目

2013-12-04 14:44:41

Android SDK用戶交互

2016-06-20 10:20:22

Docker云計算

2014-01-22 10:00:10

Android SDKAndroid開發(fā)

2010-07-01 12:35:46

UML用例圖

2012-08-01 17:39:17

2025-01-07 08:28:22

2014-06-06 14:25:03

iOS 8SwiftWWDC2014

2013-12-26 15:14:38

Android SDK運行調(diào)試

2011-08-23 11:25:40

LUA函數(shù)TOC

2013-12-04 14:29:18

Android SDK應(yīng)用程序

2013-11-27 10:12:11

2013-12-26 15:47:59

Android SDK應(yīng)用程序

2021-01-19 06:16:05

前端Babel 技術(shù)熱點

2013-12-26 14:52:52

Android SDK物理設(shè)備
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 涩涩视频在线看 | 久草视频观看 | 麻豆视频在线免费看 | 国产区一区二区三区 | 国产清纯白嫩初高生视频在线观看 | 蜜臀久久99精品久久久久久宅男 | 麻豆av电影网 | 一区二区三区欧美大片 | 欧美黄色一区 | 亚洲欧洲视频 | 国产视频精品在线观看 | 中文字幕 国产 | 色网站在线 | 久在线| 亚洲国产激情 | 欧美日韩三级 | 久久亚洲视频 | 亚洲国产二区 | 国产精品欧美一区二区三区 | 一区二区三区四区av | 人操人人干人 | 免费观看一级特黄欧美大片 | 亚洲国产精品久久久久婷婷老年 | 国产亚洲精品一区二区三区 | 欧美日韩高清在线一区 | 国产农村妇女毛片精品久久麻豆 | 国产超碰人人爽人人做人人爱 | 欧美日韩在线免费 | 日韩欧美一区二区三区 | 精品一区二区三区在线观看 | 精品欧美一区二区精品久久久 | 国产精品久久亚洲 | 91视频官网 | 国产精品日韩在线观看 | 狠狠操你| 久在线| 999精品在线观看 | 欧美中文字幕在线观看 | 国户精品久久久久久久久久久不卡 | 日韩波多野结衣 | 国产精品视频在线免费观看 |