基于 Git 源码部署

在开始着手源码部署之前,首先需要准备好 项目和应用。项目创建只有企业管理员才能完成,企业管理员添加并设置好项目所有者之后,项目其他成员可以由项目所有者添加指定。应用创建可以由应用所有者、应用主管和项目经理进行创建,并添加指定应用所有者。具体角色权限可以参考角色和权限

注意

假设新建项目名为:erda-test,新建应用名为:java-demo。下文中的 git 仓库地址将会涉及到这两个名字。

准备示范代码

示范代码是一个基于 spring boot web service 的简单 web 服务,代码直接托管在了 Github基于 Git 源码部署 - 图1 (opens new window) 上。

注意

Erda 平台可以部署运行任意语言、任意框架开发的代码,并不局限于 Java、SprintBoot 等。

下载示范代码到本地

  1. git clone https://github.com/bzdgn/docker-spring-boot-java-web-service-example.git

推送示范代码到平台

平台基于标准的 Git 协议内置实现了一个 git 代码仓库,用户不需要依赖外部仓库(比如:gitlab 等)就可以完成从源码开发到部署全流程。

平台远程仓库服务器地址查看入口位于:

DevOps 平台 -> 项目 -> 应用 -> 代码仓库 -> 代码浏览 -> 仓库地址

  1. git remote add erda http://dice.dev.terminus.io/wb/erda-test/java-demo
  2. git push -u erda --all
  3. git push -u erda --tags

完成代码推送后,即可在代码仓库中查看代码信息。

基于 Git 源码部署 - 图2

定义流水线

给该示范代码工程添加平台配置文件 pipeline.yml 和 dice.yml。

pipeline.yml

pipeline.yml 描述一个从代码编译构建到应用部署的流水线的配置文件;简单的完成基于 Git 源码部署,一般可以设置 4 个 stage 来组成 pipeline.yml,4 个 stage 按照书写顺序依次执行,分别是:

  1. 拉取 Git 源码
  2. 基于源码编译、构建,制作 Docker 镜像
  3. 生成版本产物
  4. 基于版本产物完成部署

4 个 stage 分别可用如下 Action 来执行:

  1. git-checkout基于 Git 源码部署 - 图3 (opens new window)
  2. java基于 Git 源码部署 - 图4 (opens new window)
  3. release基于 Git 源码部署 - 图5 (opens new window)
  4. dice基于 Git 源码部署 - 图6 (opens new window)

TIP

此处介绍的 4 个 stage 只能算是最基本的,可以按照自己的需求设置更多的 stage,比如:单元测试等。另外,stage 和 Action 并不是一对一的关系,一个 stage 中可以设置多个 Action 同时并行执行。

该示例工程的完整 pipeline.yml,更多功能可以参考 pipeline.yml 规范

  1. version: 1.1
  2. stages:
  3. - stage:
  4. - git-checkout:
  5. - stage:
  6. - java:
  7. alias: java-demo
  8. # 缓存对应目录,下次构建就可以加速
  9. caches:
  10. - path: /root/.m2/repository
  11. params:
  12. build_type: maven
  13. #打包时的工作目录,此路径一般为根 pom.xml 的路径。
  14. # ${git-checkout} 表示引用上一个 stage 流程里的输出结果,如有别名则使用别名表示
  15. workdir: ${git-checkout}
  16. # 打包产物,一般为 jar,填写相较于 workdir 的相对路径。文件必须存在,否则将会出错。
  17. target: ./target/docker-java-app-example.jar
  18. # 运行 target(如 jar)所需的容器类型,比如这里我们打包的结果是 spring-boot 的 fat jar,故使用 spring-boot container
  19. container_type: spring-boot
  20. - stage:
  21. - release:
  22. params:
  23. dice_yml: ${git-checkout}/dice.yml
  24. image:
  25. java-demo: ${java-demo:OUTPUT:image}
  26. - stage:
  27. - dice:
  28. params:
  29. release_id: ${release:OUTPUT:releaseID}

dice.yml

dice.yml 是描述一个应用的服务架构,对 CPU、内存等资源的配置,服务插件的依赖关系以及发布形式的 yml 配置文件;以下是该示例工程的 dice.yml,更多功能可以参考 dice.yml规范

  1. version: "2.0"
  2. services:
  3. java-demo:
  4. ports:
  5. - port: 8080
  6. expose: true
  7. resources:
  8. cpu: 0.2
  9. mem: 512
  10. deployments:
  11. replicas: 1

提交文件

将新增的两个 yaml 文件提交至平台的代码仓

  1. git add .
  2. git commit -m "add pipeline.yml and dice.yml"
  3. git push erda feature/demo

注意

这里提交的远程仓库分支的前缀是 feature/*,分支名会直接决定应用部署的环境。

执行流水线

  1. 进入流水线,右上角点击添加流水线,选择 feature/demo 分支创建新的流水线任务。
  2. 流水线任务分析完成后,处于待执行状态,右上角点击 立即执行,开始执行构建。
  3. 流水线任务执行过程中,可以实时查看流水线各步骤的执行状态,并点击日志查看对应节点执行状况的日志信息。

基于 Git 源码部署 - 图7

查看应用部署结果

通过流水线构建源码,并成功完成部署动作后,可在部署中心看到已经成功部署的应用实例 Runtime,进入 Runtime 中可以进一步进行 应用管理 相关的操作,比如:配置域名、服务实例扩缩容等。

基于 Git 源码部署 - 图8

仔细观察可以注意到刚才部署的 Runtime 属于开发环境中,这是由平台默认的 分支规范 所决定的,当然可以通过应用设置来自定义分支规范。

下一步推荐学习