企业级源码持续集成

总览

我们的持续集成都是通过调用 make 命令完成的,镜像构建使用 docker, 单元测试使用到了 docker-compose。代码仓库目前使用的持续集成方案为 GitHub Actions,如需适配其他的持续集成系统,需要您对其进行一定的定制化,总体思路可以延用。


镜像构建 make 举例

下面给几个服务镜像构建的 make 命令,具体细节请参考底部的 workflow

# backend-server
make _enterprise-copy
make buildpush-backendserver

# room-server
make _enterprise-copy
make buildpush-roomserver

# web-server
make _enterprise-copy
make buildpush-webserver-op

# init-settings
make _enterprise-copy
export EDITION=vika-ee
export DEFUALT_SEMVER_EDITION=vika-ee
make buildpush-init-settings

# init-db
make buildpush-init-db
make buildpush-init-db-enterprise

# databus-server (1.2.0 后版本支持)
cd databus
make buildpush








Makefile 路径

  • Makefile: 企业级代码专用的 Makefile

  • apitable/Makefile:和开源仓库中的 Makefile 相同


Dockerfile 路径

下面给出的是服务所对应的 Dockerfile 路径,具体的编译步骤和执行目录请参考 workflow 入口和Makefile

  • backend-server: apitable/packaging/Dockerfile.backend-server

  • room-server: apitable/packaging/Dockerfile.room-server

  • web-server: apitable/packaging/Dockerfile.web-server

  • init-db/init-db-enterprise: apitable/init-db/Dockerfile

  • init-settings: init-settings/Dockerfile


GitHub Actions 介绍

  1. 官方文档:

  2. GitHub 托管 Runner:

  3. 自建 Runner:


持续集成 Workflow 入口

目前通过workflows关联自建 Runner, 示例代码: runs-on: [self-hosted]

workflow 均位于代码仓库中的 .github/workflows目录下,下面是服务和 workflow 的对应关系:

  • backend-server: backend-server.yml

  • room-server: room-server.yaml

  • web-server: web-server.yaml

  • init-db/init-db-enterprise: init-db.yml

  • init-settings: init-settings.yaml


持续集成环境变量

对于 workflow 中引用的环境变量,分别使用了 actions variablesactions secrets,您可以视变量的类别进行添加。

变量名

描述

CR_PAT

github PAT, 用于将镜像推送到 ghcr.io

REGISTRY_SERVER

第三方容器镜像仓库地址

REGISTRY_USERNAME

第三方容器镜像仓库用户名

REGISTRY_PASSWORD

第三方容器镜像仓库密码

REGISTRY_NAMESPACE

第三方容器镜像仓库命名空间

DEFUALT_SEMVER_EDITION

默认semver版本标识



构建优化(可选)

vikadata 项目拉取官方源站的组件和资源包,大陆内用户会面临时访问不到github、npm 问题

web-server 构建加速

更新 apitable/.yarnrc.yml:

# 下面二选1
npmRegistryServer: "http://mirrors.cloud.tencent.com/npm/"
npmRegistryServer: "https://registry.npmmirror.com"


backend-server 构建加速

更新 apitable/backend-server/build.gradle:

allprojects {
  group = "com.apitable"
  
  repositories {
    maven { url 'https://mirrors.cloud.tencent.com/gradle/'}
    maven { url 'https://mirrors.cloud.tencent.com/nexus/repository/maven-public/' }
    maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
    maven { url 'http://maven.aliyun.com/nexus/content/groups/public' }
    maven { url 'http://maven.aliyun.com/nexus/content/repositories/jcenter' }
    maven { url 'https://maven.aliyun.com/repository/jcenter' }
    maven { url 'https://maven.aliyun.com/repository/google' }
    maven { url 'https://maven.aliyun.com/repository/public' }
    maven { url 'https://maven.aliyun.com/repository/central' }
    mavenCentral()
    // for ping++ sdk
    maven { url = uri("https://jcenter.bintray.com") }
  }
}


room-server 构建加速

  1. 创建rust 加配置文件 apitable/.cargo

    [source.crates-io]
    replace-with = 'rsproxy'
    
    [source.rsproxy]
    registry = "https://rsproxy.cn/crates.io-index"
    [source.rsproxy-sparse]
    registry = "sparse+https://rsproxy.cn/index/"
    
    [registries.rsproxy]
    index = "https://rsproxy.cn/crates.io-index"
    
    [net]
    git-fetch-with-cli = true
  2. 修改 apitable/packaging/Dockerfile.room-server,

    stage builder加入代理配COPY ./.cargo $HOME/.cargo/config

    FROM apitable/room-server-builder:v16.15.0 AS builder
    WORKDIR /app
    COPY --from=deps /app/node_modules ./node_modules
    COPY --from=deps /app/packages/room-server/node_modules ./packages/room-server/node_modules
    COPY .yarn ./.yarn
    COPY ./.yarnrc.yml ./package.json ./yarn.lock ./common-tsconfig.json ./
    #加入代配置
    COPY ./.cargo $HOME/.cargo/config                  
    COPY packages/i18n-lang ./packages/i18n-lang