企业级源码持续集成
总览
我们的持续集成都是通过调用 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 介绍
官方文档:
GitHub 托管 Runner:
自建 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 variables 和 actions 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 构建加速
创建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修改
apitable/packaging/Dockerfile.room-server,在
stage builder加入代理配COPY ./.cargo $HOME/.cargo/configFROM 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