1. 前置准备工作
使用环境:
测试环境:
操作系统:Centos7
cpu:四核
内存:4G
docker 版本:20.10.8
建木 CI 版本:v2.0.0
2. 如何安装建木 CI
使用 docker-compose 的方式来进行部署,关于 docker-compose 的详细使用方式说明可以参考 docker 官方文档:https://docs.docker.com/compose/
wget https://gitee.com/jianmu-dev/jianmu-deploy/raw/master/docker-compose.yml
执行docker-compose up -d
经过漫长的等待已经将建木 CI 所需的镜像拉取下来并且启动起来了
可知建木 CI 由 jianmu-ci-ui,jianmu-ci-server 以及一个 mysql8 组成
jianmu-ci-ui 由 vue3 开发而成,jianmu-ci-server 是一个 java 项目,由 springboot 开发。使用标准的前后端分离开发方式
3. 开始使用建木 CI 快速构建 maven 项目
步骤如下:
挑选适合的节点:节点就是建木 CI 灵魂,建木 CI 通过操作这些节点来完成业务操作,每一个节点都有自己特定的职责,每个节点只完成一件事情,建木 CI 通过编排节点来完成一系列流程操作
创建建木 CI 流程的配置文件:在建木 CI 中,当我们想要完成一个业务操作时,我们首先将它的流程定义出来,这个流程其实就是我们对节点的一个编排,通过这种编排加上我们自己特定的业务参数在编排好的节点之间流通,以此完成我们的业务操作
基于建木 CI 平台,运行上述流程配置文件
3.1 创建建木 CI 流程的配置文件
下面对建木 CI 的流程配置文件进行一个详细的说明
流程定义(workflow DSL):流程定义规定了我们的流程如何走,有选择分支,有条件判断,这些逻辑共同来完成我们的一个流程定义,如下图
管道定义(pipeline DSL):管道定义就像是“不分叉”的流程定义,没有选择分支,没有条件判断,一个节点扣着一个节点走,像一根管道一样,因为真实的业务场景有很多管道式的流程,所以建木 CI 推出这一类型流程 DSL,如下图
首先我们要将此项目从我们的仓库中 git 下来,使用 git clone 节点从 git 仓库中将项目 clone 下来
将项目 git 下来之后,我们要构建我们的项目,使用 maven 构建节点将项目打成 docker 镜像,并且将其 push 到自己的 docker hub 仓库
push 到自己的仓库之后,我们要想办法去把项目启动起来,我们会使用 docker pull,docker run 命令把项目启动起来,所以我们使用 ssh 执行命令节点将镜像拉取下来并且运行它
项目部署完成了之后,总得有人来告诉我们项目部署完成了吧,所以我们使用企业微信通知节点通知项目部署完成
上述步骤,是不是一环扣着一环,故我们使用管道定义来完成这一 maven 项目的部署
根 DSL 的配置
# 流程DSL的名字
name: hello 建木CI
# 流程DSL的描述
description: 建木CI快速部署maven项目
# 全局定义的环境变量
global:
param:
# 环境变量名和值
image_name: my-docker-hub-username/jianmu-build-maven-project
# 表示使用管道DSL, 下面的所有节点都在pipeline下进行配置
pipeline:
复制代码
git clone 节点
# git clone
git_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
复制代码
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
复制代码
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
复制代码
企业微信发送信息
# 企业微信发送信息
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
name: hello 建木CI
description: 建木CI快速部署maven项目
# 全局定义的环节变量
global:
param:
image_name: my-docker-hub-username/jianmu-build-maven-project
# 使用管道DSL
pipeline:
# git clone
git_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 快速部署 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 的问候
评论