# 通过流水线部署

    着手源码部署前,请确认已完成 项目和应用创建

    提示

    假设新建项目名为 erda-test,新建应用名为 java-demo。下文 Git 仓库地址将涉及这两个名称。

    # 准备示范代码

    示范代码是一个基于 Spring Boot Web Service 的简单 Web 服务,代码托管于 GitHub (opens new window)

    提示

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

    # 下载示范代码至本地

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

    # 推送示范代码至平台

    平台基于标准的 Git 协议内置 Git 代码仓库,您无需依赖于外部仓库(例如 GitLab 等)即可完成从源码开发到部署的全流程。

    进入 我的应用 > 选择应用 > 代码 > 仓库地址,查看平台远程仓库服务器地址。

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

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

    # 定义流水线

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

    # pipeline.yml

    pipeline.yml 是描述从代码编译构建到应用部署的流水线配置文件,一般可设为 4 个 Stage,按照书写顺序依次执行:

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

    4 个 Stage 可分别以下列 Action 执行:

    1. Git-Checkout (opens new window)
    2. Java (opens new window)
    3. Release (opens new window)
    4. Erda (opens new window)

    提示

    此处列举的 4 个 Stage 仅为基本配置,您可根据实际需求设置更多的 Stage,例如单元测试等。

    此外,Stage 和 Action 并非一对一关系,一个 Stage 中可设置多个 Action 并行执行。

    该示例工程对应的 pipeline.yml 参考如下,更多信息请参见 pipeline.yml

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

    # dice.yml

    dice.yml 配置文件用于描述一个应用的服务架构、对 CPU 和内存等资源的配置、服务插件的依赖关系以及发布形式。

    该示例工程对应的 dice.yml 参考如下,更多信息请参见 dice.yml

    version: "2.0"
    services:
      java-demo:
        ports:
          - port: 8080
            expose: true
        resources:
          cpu: 0.2
          mem: 512
        deployments:
          replicas: 1
    

    # 提交文件

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

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

    提示

    此处提交的远程仓库分支前缀为 feature/*,分支名称将直接决定应用部署的环境。

    # 执行流水线

    1. 进入 流水线 页面,选择 feature/demo 分支创建新的流水线任务。

    2. 完成流水线任务分析后,流水线处于待执行状态。点击右上角执行图标,开始流水线构建。

    3. 流水线任务执行过程中,可实时查看流水线各步骤的执行状态,点击日志可查看对应节点执行状况的日志信息。

    # 查看部署结果

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

    # 通过流水线部署项目/应用制品

    项目/应用制品可通过流水线触发部署,pipeline.yml 示例参考如下,更多信息请参见 pipeline.yml

    提示

    release_name 为制品版本名称。

    • 项目制品部署

      version: "1.1"
      stages:
      - stage:
        - dice:
            params:
              release_name: 1.0.0
              type: project
      
    • 应用制品部署

      version: "1.1"
      stages:
      - stage:
        - dice:
            params:
              release_name: 1.0+20220221201012
              application_name: java-demo
              type: application
      

    触发流水线后,可前往 应用中心 > 环境部署 查看部署详情。

    # 跨集群部署

    在流水线文件中 Relese Action 部分的 params 添加 cross_cluster: "true",则流水线生成的制品可跨集群部署。