背景
首先恭喜自动化平台“建木”项目进入木兰开源社区孵化,>>>链接<<<。 我一向对未知的事物比较感兴趣,所以在闲暇时间也研究了一下,特此记录下,欢迎大家在此交流学习。
介绍
什么是建木
“建木”是上古先民崇拜的一种圣树传说建木是沟通天地人神的桥梁。伏羲、黄帝等众帝都是通过这一神圣的梯子上下往来于人间天庭。《淮南子·墬形训》亦曰:“建木在都广,众帝所自上下。日中无景,呼而无响,盖天地之中也。”
我们为此项目取名为“建木”,希望本项目也可以成为不同业务场景下相互沟通的桥梁。建木自动化平台以触发器、流程编排、任务分发等功能为平台核心,可以用在各类使用场景下,包括但不限于,CI/CD、DevOps、自动化运维、多业务系统集成等使用场景。
"建⽊"整体软件分层如下图,主要分任务执⾏层、流转分发层、概念定义层,配合⽀撑的会有⼀个⽀持服务。
在建木项目中,最重要的概念是流程/管道定义,使用Yaml格式文件。流程/管道是由一个或者多个节点组成。
-
流程定义在workflow段落下:workflow: name: 流程名称 ref: 流程唯一标识 description: 流程描述 -
管道定义在pipeline段落下:pipeline: name: 管道名称 ref: 管道唯一标识 description: 管道描述 -
流程与管道的区别是:流程中可定义节点执行顺序
流程从
start类型的节点开始执行,到end类型的节点结束,节点使用sources和targets来分别指定当前节点的上游与下游节点,如下:Start: type: start targets: - Mvn_Deploy Mvn_Deploy: type: maven:3-jdk11 sources: - Start targets: - End End: type: end sources: - Mvn_Deploystart与end可以分别省略sources和targets定义,一个节点可以定义多个上游或下游节点,当存在多个下游节点时,当前节点执行成功后会并行触发下游节点,当存在多个上游节点时,当前节点会等待上游节点全部执行成功后才开始执行。 -
节点定义
不同的节点类型定义了不同的参数,节点类型预先定义了
输入参数和输出参数的名称、类型与默认值在流程中配置节点时,可以覆盖输入参数的默认值,例如:Mvn_Deploy: type: maven:3-jdk11 sources: - Git_Clone targets: - End param: maven_snapshot_id: maven-snapshots maven_public_id: maven-public maven_release_id: maven-releases在每个节点里,都有对应的参数描述,例如
git clone节点:输出参数:可以在当前节点的输入参数中引用上游节点的输出参数的值:Hello_Jianmu: type: hello_jianmu:latest sources: - Start targets: - Show_Message param: hello_language: Chinese Show_Message: type: show_msg:latest sources: - Hello_Jianmu targets: - End param: msg: ${Hello_Jianmu.return_hello}注意:节点定义可能存在不同的版本,不同版本的节点定义所支持的
输入参数与输出参数可能完全不同 -
节点库
存放节点的地方,目前建木节点库中已有11个
节点,你可以任意选择你需要的节点来组成一个CI/CD自动化流程。如果已有节点满足不了你的需求,可以在Gitee上提issue。 -
密钥管理
密钥管理是用来保存一些敏感信息,比如gitee的账号密码,服务上的ssh私钥。
- 密钥可在流程定义中作为节点参数使用,例如:
param: username: ((namespace.username)) password: ((namespace.password))- 导入项目时使用
Demo演示
环境
此次演示环境为Linux,docker版本19.03.13,docker-compose版本1.29.2。
准备
在此之前,需要有个demo项目,并在项目跟目录添加jianmu.yml配置文件,我选择了使用workflow定义流程文件。 >>>demo项目源码<<<
注意:请忽略项目中其他目录和文件,它们不是重点。
jianmu.yml
workflow:
name: 测试节点定义“jianmu-test”
ref: jianmu_test_task
description: 这是一个测试节点定义,将会在目标服务器115.29.202.92上创建一个demo目录
Start:
type: start
targets:
- Clone
Clone:
type: git_clone:1.0.0 # git clone节点类型, 1.0.0 是版本号
sources:
- Start
targets:
- Test
param:
workspace: jianmu-test
remote_url: https://gitee.com/schoolmaster_1_709603816/httprun-demo.git # 项目仓库地址
ref: refs/heads/master # 分支
netrc_password: ((ik.gitee_password)) # 仓库平台密码
netrc_machine: gitee.com # 仓库平台 目前支持 gitee.com,github.com,gitlab.com
netrc_username: ((ik.gitee_username)) # 仓库平台账号
Test:
type: ssh_cmd:1.0.0 # ssh_cmd 节点类型 1.0.0 是版本号
sources:
- Clone
targets:
- End
param:
ssh_port: "22"
ssh_cmd: mkdir -p /root/demo # 要执行的命令
ssh_ip: 115.29.202.92 # 目标服务器ip
ssh_private_key: ((ik.ssh_private_key)) # 目标服务器 ssh 私钥
ssh_user: root # 目标服务器登陆账号
End:
type: end
sources:
- Test
我的需求:使用git clone和ssh_cmd两个节点,在目标服务器上创建一个名为demo目录
搭建见面服务
-
下载
docker-compose.ymlwget https://gitee.com/jianmu-dev/jianmu-deploy/raw/master/docker-compose.yml -
运行
docker-compose up -d注意: 启动前请确保web和mysql服务对应的端口没有被其他端口占用: -
访问服务,可以看到如下页面表示服务搭建成功
-
添加密钥
创建gitee认证密钥和创建服务ssh私钥
1. 创建命令空间:ik 2. 新增密钥:gitee_username:admin 3. 新增密钥:gitee_password:123456 4. 新增密钥:ssh_private_key: your_ssh_key分别对应jianmu.yml中的三个变量:
-
这里我们选择
git导入之前准备好的demo项目 -
输入项目url,选择分支,认证信息后,点击
下一步 -
选择项目下的
jianmu.yml,点击保存即可 -
保存成功之后会在全部项目下新增一个流程。
-
点击运行即可
这里看到的四个节点就是对应jianmu.yml中定义的四个节点。
-
然后在你的目标服务器上,可以看到新建了一个demo目录
总结
以上只是简单使用一个demo来测试建木的流程,其实它远远比我们现在看到的还要灵活和强大。后期我会基于一个SpringBoot应用的自动化部署使用,并在其中加入测试自动化,将一个SpringBoot应用从开发-构建-测试-发布走一个完整的CI/CD流程。
参考资料
建木社区
有兴趣的小伙伴可以加入到建木社区微信群,期待,建木因有你们更精彩!