Skip to main content

Octopus 开发指南

建立 Octopus 管理流程#

Octopus 借鉴了Maven,并基于make提供了一组项目构建管理工具。 生成管理过程包含多个阶段,一个阶段包含多个操作。 为了方便起见,动作的名称也代表当前阶段。 动作的总体流程关系如下所示:

generate -> mod -> lint -> build -> package -> deploy
\ -> test -> verify -> e2e

每个动作的说明:

动作名称/当前阶段作用
generate, gen, g通过controller-gen生成octopus的部署清单和 deepcopy/runtime.Object 实现;通过protoc生成adaptor接口的 proto 文件
mod, m下载 Octopus 的依赖文件
lint, l通过golangci-lint来验证octopus,如果安装失败,则回滚到go fmtgo vet。使用DIRTY_CHECK=true验证整个项目是否在 dirty tree 中。
build, b根据操作系统的类型和架构编译octopus,生成二进制文件到bin目录。 使用 "CROSS=true "编译支持的平台的二进制文件(在这个 repo 中搜索constant.sh文件)。
test, t运行单元测试
verify, v使用 Kubernetes 集群运行集成测试。 使用CLUSTER_TYPE来指定本地集群的类型,默认为k3d。不需要设置本地集群,也可以使用环境变量USE_EXISTING_CLUSTER=true指出一个现有的集群,然后集成测试将使用当前环境的 kubeconfig 与现有集群进行通信。
package, pkg, p打包 Docker 镜像
e2e, e运行 E2E 测试
deploy, dep, d推送 Docker 镜像并为当前版本创建 manifest 镜像。 使用WITHOUT_MANIFEST=true防止推送 manifest 镜像,或者使用ONLY_MANIFEST=true只推送 manifest 镜像,使用IGNORE_MISSING=true在需要时对平台列表中定义的缺失镜像发出警告。

执行一个阶段可以运行make octopus <stage name>,例如,在执行test阶段时,请运行make octopus test。 要执行一个阶段,将执行先前顺序中的所有动作,如果运行make octopus test,则实际上包括执行generatemodlintbuildtest动作。

要通过添加only命令来运行某个动作,例如,如果仅运行build动作,请使用make octopus build only

要组合多个动作,可以使用逗号列表,例如,如果要按顺序运行buildpackagedeploy动作,请使用make octopus build,package,deploy

通过BY环境变量与dapper集成,例如,如果仅通过dapper运行build动作,请使用BY=dapper make octopus build

使用案例#

假设在 Mac 上尝试以下示例:

  1. 在本地主机上运行,当前环境将安装其他依赖项。 如果任何安装失败,您将收到相应的警告。

    • make octopus build:执行build阶段,然后获取darwin/amd64 的可执行二进制文件。
    • make octopus test only:在darwin/amd64平台上执行test 动作。
    • REPO=somebody OS=linux ARCH=amd64 make octopus package:执行package 动作,完成后可获取linux/amd64 的可执行二进制文件和一个 Repo 名为somebody的 Octopus linux/amd64 的镜像。
    • CLUSTER_TYPE=make octopus verify only:使用kind集群执行verify操作。
  2. 在本地主机中支持多架构镜像。

    • CROSS=true make octopus build only: 执行build 操作,然后获取受支持平台的所有执行二进制文件。
    • CROSS=true make octopus test only目前不支持交叉平台测试
    • CROSS=true REPO=somebody make octopus package only: 执行package 操作,指定镜像的组织名为somebody 并构建所有支持的平台的镜像。
      • make octopus package only当前不支持darwin 平台的镜像.
    • CROSS=true REPO=somebody make octopus deploy only: 执行deploy 操作,然后将所有支持的平台的镜像推送至somebody 仓库,并且创建当前版本的Manifest 文件.
      • make octopus deploy only当前不支持darwin 平台镜像.
  3. dapper模式下构建,当前环境中不需要其他依赖项,这类选项适合于构造 CI/CD,并具有良好的环境可移植性。

    • BY=dapper make octopus build:执行build 阶段,然后获取linux/amd64 可执行二进制文件。
    • BY=dapper make octopus test:在linux/amd64平台上执行test 操作。
    • BY=dapper REPO=somebody make octopus package only:执行package 操作并获得linux/amd64架构和组织名为sombody的镜像。

注意事项#

dapper模式下:

  • 不允许使用 USE_EXISTING_CLUSTER=true

适配器的生成管理#

适配器的构建管理与 Octopus 相似,但执行方式不同。 执行任何适配器的阶段都可以运行make adapter <适配器名称> <阶段名称>。 请查看开发适配器了解更多详细信息。

所有组件的构建管理#

随着组件的增加,一个接一个地构建它们的操作变得更加麻烦。 因此,通过指定阶段或动作,构建管理对所有组件执行相同的阶段或动作。 例如,运行make all test将执行 Octopus 和所有适配器的test阶段。 要执行一个动作,只需输入一个only后缀命令即可。

贡献者工作流程#

欢迎进行贡献,请查看CONTRIBUTING以获取更多详细信息。

Last updated on by JimMoen