写点什么

基于建木 CI 部署 maven 项目

作者:Jianmu
  • 2021 年 12 月 12 日
  • 本文字数:3637 字

    阅读完需:约 12 分钟

基于建木CI部署maven项目

1. 前置准备工作

使用环境:

  • 测试环境:

    操作系统:Centos7

    cpu:四核

    内存:4G

    docker 版本:20.10.8

  • 建木 CI 版本:v2.0.0

2. 如何安装建木 CI

使用 docker-compose 的方式来进行部署,关于 docker-compose 的详细使用方式说明可以参考 docker 官方文档:https://docs.docker.com/compose/

  • 下载建木 CI 的 docker-compose 文件

wget https://gitee.com/jianmu-dev/jianmu-deploy/raw/master/docker-compose.yml



  • 启动建木 CI

执行docker-compose up -d

经过漫长的等待已经将建木 CI 所需的镜像拉取下来并且启动起来了

  • 看一眼启动的容器

可知建木 CI 由 jianmu-ci-ui,jianmu-ci-server 以及一个 mysql8 组成

jianmu-ci-ui 由 vue3 开发而成,jianmu-ci-server 是一个 java 项目,由 springboot 开发。使用标准的前后端分离开发方式

  • 访问一下我们刚刚启动的建木 CI,输入我们的 ip,端口为默认的 80 端口,发现项目已经启动起来了,大功告成



  • 想要知道安装建木 CI 的其他方式以及详细信息,可以参考建木 CI 官方文档:https://docs.jianmu.dev

3. 开始使用建木 CI 快速构建 maven 项目

步骤如下:

  1. 挑选适合的节点:节点就是建木 CI 灵魂,建木 CI 通过操作这些节点来完成业务操作,每一个节点都有自己特定的职责,每个节点只完成一件事情,建木 CI 通过编排节点来完成一系列流程操作

  2. 创建建木 CI 流程的配置文件:在建木 CI 中,当我们想要完成一个业务操作时,我们首先将它的流程定义出来,这个流程其实就是我们对节点的一个编排,通过这种编排加上我们自己特定的业务参数在编排好的节点之间流通,以此完成我们的业务操作

  3. 基于建木 CI 平台,运行上述流程配置文件

3.1 创建建木 CI 流程的配置文件

下面对建木 CI 的流程配置文件进行一个详细的说明

  • 什么是流程配置文件:流程配置文件是一种 DSL(领域特定语言),当我们想完成一系列的操作(可能是项目的 ci/cd 流程,可能是省去我们重复操作的流程)时,我们程序员用我们能明白的方式去定义这个流程,建木 CI 使用 yaml 去定义这一流程

    建木 CI 的 DSL 提供了两种语法

  1. 流程定义(workflow DSL):流程定义规定了我们的流程如何走,有选择分支,有条件判断,这些逻辑共同来完成我们的一个流程定义,如下图



  1. 管道定义(pipeline DSL):管道定义就像是“不分叉”的流程定义,没有选择分支,没有条件判断,一个节点扣着一个节点走,像一根管道一样,因为真实的业务场景有很多管道式的流程,所以建木 CI 推出这一类型流程 DSL,如下图



  • 在定义这个流程时,我们要想明白我们的目的是什么:我们要部署我们的 maven 项目,然后来挑选适合的节点

  1. 首先我们要将此项目从我们的仓库中 git 下来,使用 git clone 节点从 git 仓库中将项目 clone 下来

  2. 将项目 git 下来之后,我们要构建我们的项目,使用 maven 构建节点将项目打成 docker 镜像,并且将其 push 到自己的 docker hub 仓库

  3. push 到自己的仓库之后,我们要想办法去把项目启动起来,我们会使用 docker pull,docker run 命令把项目启动起来,所以我们使用 ssh 执行命令节点将镜像拉取下来并且运行它

  4. 项目部署完成了之后,总得有人来告诉我们项目部署完成了吧,所以我们使用企业微信通知节点通知项目部署完成

  5. 上述步骤,是不是一环扣着一环,故我们使用管道定义来完成这一 maven 项目的部署

  • 下面开始流程 DSL 的配置

  1. 根 DSL 的配置

# 流程DSL的名字name: hello 建木CI# 流程DSL的描述description: 建木CI快速部署maven项目# 全局定义的环境变量global:param:   # 环境变量名和值  image_name: my-docker-hub-username/jianmu-build-maven-project# 表示使用管道DSL, 下面的所有节点都在pipeline下进行配置pipeline:
复制代码
  1. git clone 节点

# git clonegit_clone:   # 使用git clone的版本  type: git_clone:1.2.0   # 使用git clone参数时的输入参数  param:     # 配置远程的git源,即从哪个url上clone项目    remote_url: https://gitee.com/canon_xi/hello-jianmu.git
复制代码
  1. maven 构建节点

# maven构建maven_jib_build:   # maven构建的版本  type: maven_build:1.3.1-jdk11  param:     # maven构建的行为    mvn_action: install     # 在哪个目录下进行构建,这里的${git_clone.git_path}表示从上一个节点git_clone的输入参数git_path中取得,也可以理解为取环境变量,节点的输出参数会变成环境变量    workspace: ${git_clone.git_path}     # 打镜像时取的镜像名称,取的是根DSL配置的全局环境变量    image_name: ${global.image_name}     # 打镜像时指定的tag    image_tag: ${git_clone.git_branch}     # 会将我们的镜像push到docker hub中,需指定docker hub的用户名。     # 很多时候,我们的业务参数中包含了我们一些比较私密的信息,我们并不想将它明文的展示出来,建木CI也提供了密钥管理的功能     # 我们使用((...))的语法从建木CI密钥管理处取得它的值     # 更多关于密钥用法和详细信息请参考:https://docs.jianmu.dev/guide/secrets.html    docker_username: ((docker_hub.username))     # 指定docker hub的密码    docker_password: ((docker_hub.password))     # 从哪里去拉取我们maven项目的依赖,这里使用阿里云的镜像拉取依赖    maven_public_url: https://maven.aliyun.com/repository/public
复制代码
  1. ssh 执行

# ssh执行deploy_server:   # ssh_cmd版本  type: ssh_cmd:1.0.1  param:     # 在哪台机器上执行命令,配置ip    ssh_ip: xxx.xxx.xxx.xxxx     # 目标机器的私钥,这里使用建木CI提供的密钥管理平台    ssh_private_key: ((jianmu_ci.server_private_key))     # 执行的具体命令    ssh_cmd: >-      docker pull my-docker-hub-username/jianmu-build-maven-project:master      &&      docker run -d --name helloJianmu -p8888:8888 my-docker-hub-username/jianmu-build-maven-project:master      &&      echo done
复制代码
  1. 企业微信发送信息

# 企业微信发送信息send_message:   # 企业微信发送信息的版本  type: qywx_notice:1.2.1  param:     # 微信机器人的回调地址,也使用建木CI的密钥管理起来    bot_webhook_url: ((charbot.webhook_url))    mentioned_moblie_list: "[]"     # 发送的具体信息    text_content: "建木CI快速部署maven项目完成"    msgtype: "text"    mentioned_list: "[]"
复制代码

关于如何配置建木 CI 平台的流程 DSL,也可以参考建木 CI 官方文档的流程编排环节: https://docs.jianmu.dev

  • 将上述 DSL 组合起来,形成详细流程 DSL 配置:

name: hello 建木CIdescription: 建木CI快速部署maven项目# 全局定义的环节变量global:param:  image_name: my-docker-hub-username/jianmu-build-maven-project# 使用管道DSLpipeline: # git clonegit_clone:  type: git_clone:1.2.0  param:    remote_url: https://gitee.com/canon_xi/hello-jianmu.git # maven构建maven_jib_build:  type: maven_build:1.3.1-jdk11  param:    mvn_action: install    workspace: ${git_clone.git_path}    image_name: ${global.image_name}    image_tag: ${git_clone.git_branch}    docker_username: ((docker_hub.username))    docker_password: ((docker_hub.password))    maven_public_url: https://maven.aliyun.com/repository/public # ssh执行deploy_server:  type: ssh_cmd:1.0.1  param:    ssh_ip: xxx.xxx.xxx.xxxx    ssh_private_key: ((jianmu_ci.server_private_key))    ssh_cmd: >-      docker pull my-docker-hub-username/jianmu-build-maven-project:master      &&      docker run -d --name helloJianmu -p8888:8888 my-docker-hub-username/jianmu-build-maven-project:master      &&      echo done # 企业微信发送信息send_message:  type: qywx_notice:1.2.1  param:    bot_webhook_url: ((charbot.webhook_url))    mentioned_moblie_list: "[]"    text_content: "建木CI快速部署maven项目完成"    msgtype: "text"    mentioned_list: "[]"
复制代码
  • 在建木 CI 中配置流程 DSL

点击新增项目



  • 添加流程 DSL


  • 添加成功后在建木 CI 的 dashboard 出现hello jianmu



  • 点击进去可以看见



一切整装待发

  • 点击开始按钮



  • 等待一会可以看见



已经运行完成

  • 查看各个节点的流程日志






未发现异常,此时建木 CI 快速部署 maven 项目流程完成

我们的企业微信也收到了部署成功的通知

3.2 访问我们刚刚部署项目

访问ip:8888/jianmu/hello 即可得到 "Hello jianmu"

@RestController@RequestMapping("jianmu")public class HelloJianmuController {   @GetMapping("hello")   public String helloJianmu(){       return "Hello jianmu";  }}--------- application.yml------------server: port: 8888
复制代码



得到来自建木 CI 的问候

发布于: 1 小时前阅读数: 6
用户头像

Jianmu

关注

国产开源CI/CD产品 2020.08.10 加入

建木自动化平台以触发器、流程编排、任务分发等功能为平台核心,可以应用在各类使用场景下,包括但不限于,CI/CD、DevOps、自动化运维、多业务系统集成等场景。

评论

发布
暂无评论
基于建木CI部署maven项目