Skip to content

Commit

Permalink
Merge pull request #894 from zzzhangqi/241009
Browse files Browse the repository at this point in the history
feat: multi versions
  • Loading branch information
zzzhangqi authored Nov 21, 2024
2 parents 59ab01b + 8b37667 commit a8608ba
Show file tree
Hide file tree
Showing 704 changed files with 15,501 additions and 25,323 deletions.
53 changes: 36 additions & 17 deletions .github/workflows/main-actions.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,25 +5,44 @@ on:
- 'main'
jobs:
rainbond-docs-build:
name: build rainbond docs image and push image to dockerhub
runs-on: ubuntu-20.04
name: build rainbond docs
runs-on: ubuntu-latest
steps:
- name: clone rainbond-docs repo
uses: actions/checkout@main
uses: actions/checkout@v4

- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: '20.0.0'
cache: 'yarn'

- name: Install dependencies
run: yarn install

- name: Build
run: yarn build

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Cache node modules
uses: actions/cache@v3
- name: Login to Aliyun Container Registry
uses: docker/login-action@v3
with:
key: cache-node-modules
path: /node_modules
registry: registry.cn-hangzhou.aliyuncs.com
username: ${{ secrets.DOMESTIC_USERNAME }}
password: ${{ secrets.DOMESTIC_PASSWORD }}

- name: build and push Docker image
env:
RAINBOND_SECRET: ${{ secrets.RAINBOND_SECRET }}
RAINBOND_API: ${{ secrets.RAINBOND_API }}
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
DOMESTIC_USERNAME: ${{ secrets.DOMESTIC_USERNAME }}
DOMESTIC_PASSWORD: ${{ secrets.DOMESTIC_PASSWORD }}
VERSION: ${{ env.VERSION }}
run: ./release.sh
- name: Build and push
uses: docker/build-push-action@v6
with:
platforms: linux/amd64
context: .
file: Dockerfile
push: true
tags: |
registry.cn-hangzhou.aliyuncs.com/goodrain/rainbond-docs:latest
- name: Deploy
run: |
curl -d '{"secret_key":"${{ secrets.RAINBOND_SECRET }}"}' -H "Content-type: application/json" -X POST ${{ secrets.RAINBOND_API }}
2 changes: 2 additions & 0 deletions blog/2024/2024-10-18-industryecology.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ slug: industryecology

在移动互联网时代,手机应用市场(App Store)为大众带来了极大的便利:通过简单的点击,用户便能轻松安装、升级并管理各种应用。然而,企业级软件的安装和管理却远没有那么轻松。复杂的架构、高度的定制化需求以及多种环境的兼容性问题,意味着企业在软件安装和维护上投入了大量的人力和资源。为了解决这些问题,一个基于云原生技术的企业级应用市场应运而生,旨在为行业集成商和大型企业提供一个像手机App Store一样高效便捷的平台,用以建设行业应用生态。

<!--truncate-->

## 企业应用现状与挑战

对于企业级软件而言,传统的交付与管理方式存在诸多挑战:
Expand Down
2 changes: 1 addition & 1 deletion changelog/5.15.1.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ date: 2023-08-26

用户通过主机安装的时候,可能免密登陆没有配置好或者免密登陆出现问题,导致k8s集群装不起来,苦苦寻找问题并没有找到解决方案,最后定位在无法免密登陆,实属浪费时间!

该版本通过主机安装的时候,如果所有节点公网ip检测全部通过,则会直接去安装k8s集群,如果有节点连接失败,可以再去失败的节点[配置免密登陆](/docs/troubleshooting/installation/ui)。或者移除连接失败的节点。
该版本通过主机安装的时候,如果所有节点公网ip检测全部通过,则会直接去安装k8s集群,如果有节点连接失败,可以再去失败的节点配置免密登陆。或者移除连接失败的节点。

### 2. helm命令一键安装

Expand Down
2 changes: 1 addition & 1 deletion community/contribution/compile/region.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ git clone https://github.com/goodrain/rainbond.git
### 前提条件

1. 已经安装好 Rainbond 的测试环境
2. Kubectl 命令,可参考[该文档](/docs/ops-guide/tools/#kubectl)安装
2. Kubectl 命令

### 运行镜像

Expand Down
2 changes: 1 addition & 1 deletion docs/delivery/continuous/multi-env.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ import Bvideo from '/src/components/Bvideo';

### 部署开发测试环境

1. 首先可以在`测试-内网`团队内,参考[基于源代码创建组件](/docs/use-manual/component-create/language-support),根据你的代码语言部署你的各个业务模块。
1. 首先可以在`测试-内网`团队内,参考[基于源代码创建组件](/docs/devops/app-deploy/),根据你的代码语言部署你的各个业务模块。

2. 各个业务部署完成后,参考[微服务架构指南](/docs/micro-service/overview)进行服务编排,此时你就得到了一个在 Rainbond 上完整运行的应用。

Expand Down
2 changes: 1 addition & 1 deletion docs/delivery/continuous/ram.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ import Bvideo from '/src/components/Bvideo';

### 部署开发环境

1. 参考[基于源代码创建组件](/docs/use-manual/component-create/language-support),根据你的代码语言部署你的各个业务模块。
1. 参考[基于源代码创建组件](/docs/devops/app-deploy/),根据你的代码语言部署你的各个业务模块。

2. 各个业务部署完成后,参考[微服务架构指南](/docs/micro-service/overview)进行服务编排,此时你就得到了一个在 Rainbond 上完整运行的应用。

Expand Down
2 changes: 1 addition & 1 deletion docs/delivery/continuous/source-code.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ import Bvideo from '/src/components/Bvideo';

### 部署开发环境

1. 参考[基于源代码创建组件](/docs/use-manual/component-create/language-support),根据你的代码语言使用 dev 分支部署你的各个业务模块。
1. 参考[基于源代码创建组件](/docs/devops/app-deploy/),根据你的代码语言使用 dev 分支部署你的各个业务模块。

2. 各个业务部署完成后,参考[微服务架构指南](/docs/micro-service/overview)进行服务编排,此时你就得到了一个在 Rainbond 上完整运行的应用。

Expand Down
154 changes: 154 additions & 0 deletions docs/delivery/upgrade-app.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,154 @@
---
title: 应用升级属性变更规则
description: 应用市场应用进行时, 属性变更的规则
---

应用市场的应用可以进行升级, 升级时每个属性都会按一定的规则进行变更. 本文将会介绍应用升级时, 各属性的变更规则.

## 属性变更规则概览

| 属性 | 级别 | 规则 |
|---------------|------|------------------|
| 组件 | 应用 | 新增, 更新 |
| 插件 | 应用 | 新增 |
| 配置组 | 应用 | 新增 |
| K8s 资源 | 应用 | 新增 |
| 镜像 | 组件 | 更新 |
| 启动命令 | 组件 | 更新 |
| 环境变量 | 组件 | 新增 |
| 组件连接信息 | 组件 | 新增 |
| 端口 | 组件 | 新增, 更新 |
| 存储 | 组件 | 新增 |
| 配置文件 | 组件 | 新增, 更新 |
| 健康检测探针 | 组件 | 新增, 更新, 删除 |
| 监控图表 | 组件 | 新增, 更新 |
| 监控点 | 组件 | 新增, 更新 |
| HTTP 访问策略 | 组件 | 新增 |
| 标签 | 组件 | 新增 |
| 插件 | 组件 | 新增 |
| 组件依赖关系 | 组件 | 新增, 删除 |
| 存储依赖关系 | 组件 | 新增, 删除 |
| Kubernetes 属性 | 组件 | 新增, 更新 |

上表为整个应用升级属性变更的概览, 每个属性的详细说明, 请看下文:

## 应用级属性

### 组件

`组件`的变更规则是: `增加, 更新`.

源应用新增了组件, 升级时也会创建新的组件. 源应用修改了组件属性, 升级时会更新对应的属性. 但是, 源应用`删除`了组件, 升级时不会删除对应的组件.

### 插件

`插件`的变更规则是: `新增`. 当源应用新增了一个插件, 而当前应用所在团队无对应类型的插件时, 升级过程会在团队中新增该插件. 不会更新或删除插件.

### 配置组

`配置组``配置组`, `配置项``生效组件`组成. 它们的规则是`新增`.

源应用新增了配置组, 升级时也会`新增`对应配置组. 但是, 源应用`更新``删除`了配置组, 那么升级时配置组不会发生变化, 即不会更新或删除已有配置组.

### K8s 资源

`K8s 资源`为用户自行通过 Yaml 文件创建的集群资源. 它们的规则是`新增`.

源应用新增了 K8s 资源, 升级时也会`新增`对应K8s 资源. 但是, 源应用`更新``删除`了 K8s 资源, 那么升级时 K8s 资源不会发生变化, 即不会更新或删除已有K8s 资源.

## 组件级属性

### 镜像

`镜像`的变更规则是: `更新`. 每次升级时, 如果源组件镜像有变化, 升级时会`更新`当前组件的镜像.

### 启动命令

`启动命令`的变更规则是: `更新`. 每次升级时, 如果源组件启动命令有变化, 升级时会`更新当前组件的启动命令.

### 环境变量

`环境变量`的变更规则是: `新增`. 源组件新增了环境变量, 升级时会新增对应的环境变量. 但是, 源组件`更新``删除`了组件的环境变量, 升级时不会更新或删除对应的环境变量.

### 组件连接信息

`组件连接信息`的变更规则是: `新增`. 源组件新增了组件连接信息, 升级时会新增对应的组件连接信息. 但是, 源组件`更新``删除`了组件连接信息, 升级时不会更新或删除对应的组件连接信息.

特别地, 如果组件连接信息是根据组件端口生成, 即 `XXX_HOST``XXX_PORT`, 那么该连接信息会根据应用的治理模式, 端口别名和内部域名重新生成.

如果端口别名是 `mysql`, 生会生成连接信息为 `MYSQL_HOST``MYSQL_PORT`

如果治理模式是`内置 ServiceMesh 模式`, 则 `XXX_HOST` 的值为 `127.0.0.1`. 如果治理模式是`Kubernetes 原生 Service 模式`, 则 `XXX_HOST` 的值为 `内部域名`.

### 端口

`端口`的变更规则是: `新增, 更新`. 源组件新增了端口, 升级时也会为组件新增对应端口. 源组件更新了端口, 升级时也会更新组件对应的端口; 但是, 只会更新端口的 `协议`, `端口别名`, `打开端口`. 也就是说, 不会更新端口的`内部域名`, `端口号`, 也不会关闭已打开的端口. 另外, 如果源组件删除了端口, 升级时不会删除组件对应的端口.

### 存储

`端口`的变更规则是: `新增`. 源组件新增了存储, 升级时也会为组件新增对应存储. 不会更新或删除存储.

如果存储所需的存储驱动不存在于当前集群, 那么会用默认的共享存储去替换源存储驱动.

### 配置文件

`配置文件`的变更规则是: `新增, 更新`. 源组件新增了配置文件, 升级时也会为组件新增对应配置文件. 源组件更新了某个配置文件的内容, 升级时会更新组件对应的配置文件内容; 但是不会更新配置文件的`名称``路径`, 只更新内容. 也不会删除配置文件.

### 健康检测探针

`健康检测探针`的变更规则是: `新增, 更新, 删除`. 源组件新增健康检测探针, 升级时会为组件新增对应探针. 源组件更新健康检测探针, 升级时会为组件更新对应探针. 源组件删除健康检测探针, 升级时会为组件删除对应探针.

### 监控图表

`监控图表`的变更规则是: `新增, 更新`. 源组件新增监控图表, 升级时会为组件新增对应监控图表. 源组件更新监控图表, 升级时会为组件更新对应监控图表的查询语句. 不会删除监控图表.

### 监控点

`监控点`的变更规则是: `新增, 更新`. 源组件新增监控点, 升级时会为组件新增对应监控点. 源组件更新监控点, 升级时会为组件更新对应监控点. 不会删除监控点.

### HTTP 访问策略

`HTTP 访问策略`的变更规则是: `新增`. 源组件新增 HTTP 访问策略, 升级时会为组件新增对应 HTTP 访问策略. 不会更新或删除 HTTP 访问策略.

### 标签

`标签`的变更规则是: `新增`. 源组件新增标签, 升级时会为组件新增对应标签. 不会更新或删除标签.

### 插件

`插件`的变更规则是: `新增`. 源组件新增插件, 升级时会为组件新增对应插件. 不会更新或删除插件.

### 组件依赖关系

`组件依赖关系`的变更规则是: `新增, 删除`. 组件依赖关系只有新增和删除, 没有更新, 所以不需要考虑升级时更新问题.
源组件新增依赖关系, 升级时会为组件新增对应依赖关系. 源组件删除依赖关系, 升级时会为组件删除对应依赖关系.

新增组件依赖关系时, 组件依赖关系需要`依赖组件``被依赖组件`同时存在, 考虑以下几种情况:

- A 组件依赖 B 组件, B 组件是新增组件; 升级应用时, 如果没有选择 B 组件, 相当于被依赖组件 B 不存在, 那么不会建立 A 到 B 的依赖关系.
- A 组件依赖 B 组件, B 组件是已存在组件; 升级应用时, 无论是否选择升级 B 组件, 都会建立 A 到 B 的依赖关系, 因为被依赖组件 B 是存在的.
- 源应用中, 新增了 A 到 B 的依赖, 但是发布时只发布了 A 组件, 没有发布 B 组件; 那么它们的依赖关系不会被发布出去, 在进行升级时, 不会建立 A 到 B 的依赖关系.

删除组件依赖关系时, 只会删除来源于同一个应用市场应用的组件之间的组件依赖关系, 不会删除组件对非同源组件的组件依赖关系. 也不会删除对未选择组件的依赖. 考虑一下几种情况:

- A, B 组件来源于同一个应用市场应用, A 依赖于 B. C 是通过镜像创建的组件, 与 A, B 非同源, A 依赖于 C. 源应用删除了 A 到 B 的组件依赖关系, 升级时, 会删除 A 到 B 的依赖关系, 不会删除 A 到 C 依赖关系.
- 源应用新增了 A 到 B 的组件依赖关系, 升级时, 只选择升级 A, 没有选择 B 组件, 那么不会删除 A 到 B 的依赖.

### 存储依赖关系

`存储依赖关系`的变更规则是: `新增, 删除`.

新增存储依赖关系时, 存储依赖关系需要`依赖存储``被依赖存储`同时存在, 考虑以下几种情况:

- A 存储依赖 B 存储, B 存储所在组件是 B, B 是新增存储组件; 升级应用时, 如果没有选择 B 组件, 相当于被依赖存储 B 不存在, 那么不会建立 A 到 B 的依赖关系.
- A 存储依赖 B 存储, B 存储所在组件是 B, B 是已存在的组件; 升级应用时, 无论是否选择升级 B 组件, 都会建立 A 到 B 的依赖, 因为被依赖存储 B 是存在的.
- 源应用中, 新增了存储 A 到 B 的依赖, 但是发布时只发布了 A 组件, 没有发布 B 组件; 那么它们的 A 到 B 的依赖关系不会被发布出去, 在进行升级时, 不会建立 A 到 B 的依赖关系.

删除存储依赖关系时, 只会删除来源于同一个应用市场应用的组件之间的存储依赖关系, 不会删除组件对非同源组件的存储依赖关系. 也不会删除对未选择组件的存储依赖关系. 考虑一下几种情况:

- A, B 存储来源于同一个应用市场应用, A 依赖于 B. C 是通过镜像创建的组件 C 的存储, 与 A, B 非同源, A 依赖于 C. 源应用删除了 A 到 B 的存储依赖关系, 升级时, 会删除 A 到 B 的依赖关系, 不会删除 A 到 C 的存储依赖关系.
- 源应用新增了 A 到 B 的存储依赖关系, 升级时, 只选择升级 A 组件, 没有选择 B 组件, 那么不会删除 A 到 B 的存储依赖关系.

### Kubernetes 属性

`Kubernetes 属性`的变更规则是: `新增, 更新`. 源组件新增 Kubernetes 属性, 升级时会为组件新增对应 Kubernetes 属性. 源组件更新 Kubernetes 属性, 升级时会为组件更新对应 Kubernetes 属性. 不会删除 Kubernetes 属性.
42 changes: 42 additions & 0 deletions docs/devops/app-deploy/dockefile.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
---
title: Dockerfile
description: 在 Rainbond 上通过 Dockerfile 部署应用
---

## 概述

代码主目录下有 `Dockerfile` 文件,Rainbond 会识别代码语言类型为 **Dockerfile**

### 编译原理

识别为 Dockerfile 类型的源码将使用类似于 `docker build -t xxx .` 的命令进行镜像构建,构建过程支持 docker multi-stage(多阶段构建)和 ARG 参数指定。

### Dockerfile 规范

**Dockerfile** 是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。

Rainbond 在源码检测阶段会读取 [Dockerfile](https://docs.docker.com/engine/reference/builder/) 定义的如下参数:

| 参数类型 | 名称 | 说明 |
| -------- | ---------- | ------------------------------ |
| ENV | 环境变量 | 识别为服务可设置的环境变量配置 |
| ARG | 构建参数 | 识别为构建可设置的参数配置 |
| EXPOSE | 暴露端口 | 识别为服务的端口配置 |
| VOLUME | 持久化存储 | 识别为服务的共享持久化存储配置 |

### 私有仓库

如果 Dockerfile 中使用私有镜像,在`团队管理 -> 镜像仓库授权信息`,填写私有镜像仓库的域名、用户名和密码,保存后再次构建,即可构建成功。

## 部署示例

1. 基于源码创建组件,填写以下信息:

| | 内容 |
| ------------ | ------------------------------------ |
| 组件名称 | 自定义 |
| 组件英文名称 | 自定义 |
| 仓库地址 | `https://gitee.com/rainbond/dockerfile-demo.git` |
| 代码版本 | master |

2. 识别为 Dockerfile 项目,点击构建启动。
44 changes: 44 additions & 0 deletions docs/devops/app-deploy/golang.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
---
title: Golang 项目部署
description: 在 Rainbond 上通过源代码部署 Golang 项目
---

## 概述

当源代码根目录下存在 `go.mod` 文件,Rainbond 会将源代码识别为 `Golang` 项目。

### 编译指定模块

环境变量中添加 `BUILD_GO_INSTALL_PACKAGE_SPEC` 变量定义组件编译包入口路径,例如:

```bash
BUILD_GO_INSTALL_PACKAGE_SPEC=goodrain.com/app-store/cmd/manage-server
```

其中 `goodrain.com/app-store` 是项目主名称,与 go.mod 中的 `module` 一致。

`/cmd/manage-server ` 是相对于代码主目录的当前组件 main 入口代码所在包路径。

### Procfile 规范

必须通过代码根目录下上传 `Procfile` 文件,或者声明环境变量 `BUILD_PROCFILE` 的方式定义启动命令,格式如下:

```bash
web: hello
```

1. `web:``hello` 之间有一个空格
2. 文件结尾不能包含特殊字符
3. `hello` 为编译后的二进制

对于指定模块进行编译的项目而言,应做如下定义:

```bash
web: bin/manage-server
```

其中 `manage-server` 就是默认的 cmd 目录下服务子目录路径。二进制文件统一存放于 bin 目录下。

## 部署示例

进入到团队下,新建应用选择基于源码示例进行构建,选中 Golang Demo 并默认全部下一步即可。
24 changes: 24 additions & 0 deletions docs/devops/app-deploy/html.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
---
title: 静态HTML
description: 在 Rainbond 上通过源代码部署静态HTML项目
---

## 概述

平台默认会根据源码根目录是否有`index.html`文件来识别为静态语言项目.

如需自定义请在源码根目录定义 `web.conf` 配置文件,默认配置文件如下:

```conf
server {
listen 80;
location / {
root /app/www;
index index.html index.htm;
}
}
```

## 部署示例

进入到团队下,新建应用选择**基于源码示例**进行构建,选中 `2048 Demo` 并默认全部下一步即可。
Loading

0 comments on commit a8608ba

Please sign in to comment.