开源 DevOps 工具《建木》实践
新钛云服已累计为您分享724篇技术干货
第一次听说”建木“是建木的一个发起人谈到,这名字听着感觉有新意,但当时不甚了解,后来查了相关资料,才有所认识。摘录官网一条介绍:
“建木”是上古先民崇拜的一种圣树,传说建木是沟通天地人神的桥梁。伏羲、黄帝等众帝都是通过这一神圣的梯子上下往来于人间天庭。《淮南子·墬形训》亦曰 :“建木在都广,众帝所自上下。日中无景,呼而无响,盖天地之中也。”
DevOps 是从需求到研发、到落地的一种自动化和平台设计的一种理念,是沟通过程中各个阶段的桥梁,作为 DevOps 落地工具的”建木“,取之其名甚妙也。
知道建木这个 DevOps 工具后,决定在实际项目中试一试,翻了一遍建木的文档,把建木给安装上了,开始使用。
虽然没有在项目落地建木,但也对建木持续关注着,看着出品方一个个版本的发布,感觉功能越来越强大了、也更加有吸引力了,总想着什么时候再来一探究竟。
建木的安装极其方便,官方提供 Docker 镜像,支持 docker-compose 和 kubernetes 部署,一键完成。
建木的界面非常简洁,运行的插件采用了 Docker 化的底层支持,省掉了一堆麻烦的插件安装和配置的过程。
非常简洁的主界面。
配置流程前,可以将一些常用的变量、密钥配置到”密钥管理“中,建木除了默认的密钥存储方式外,也支持对接 vault 进行存储,安全性有了进一步的保障。
点击主界面的”图形项目“图标,进入流程配置界面。
页面左边为执行节点,官方提供了比较丰富的节点库,社区也有大量有心人士提供的节点。
再增加一个 "maven构建" 节点,在两个节点间建立连接,选择节点相关的 JDK 版本后,再配置相关参数,保存后返回。
name: workflow测试
description: ""
global:
concurrent: false
pipeline:
node_0:
alias: git clone
type: _/git_clone:1.2.5
param:
username: ((tisvc_key.git_username))
password: ((tisvc_key.git_password))
remote_url: http://gitlab.tyun.cn/tyun/tiops-agent.git
ref: refs/heads/master
commit_id: ""
depth: 1
node_1:
alias: maven构建
type: _/maven_build:1.3.1-jdk11
param:
workspace: ${node_0.git_path}/src
mvn_action: package
extra_arge: ""
nexus_username: admin
nexus_password: "123456"
maven_public_id: public
maven_public_url: https://maven.aliyun.com/repository/public
maven_release_id: release
maven_release_url: ""
maven_snapshot_id: snapshot
maven_snapshot_url: ""
docker_username: jianmudev
docker_password: "123456"
image_name: imagename
image_tag: latest
vc_pom_dir: .
在主界面点击流程的”触发“按钮,触发流程执行,进入流程执行信息界面后,可以查看每个节点执行的输出日志。
在当前项目实际使用中,因目前处于开发阶段,对于 DevOps 流程来说,模块的拆分及更新,希望流程也能拆分来实施。
“git clone” 节点本地存储采用的是 Docker 临时创建的目录,该目录在同一条流水线中可以共享,但流程结束后该目录也会被清理,在多模块拆分流程的情况下,每一次执行都需要全部重新 clone;
“maven构建” 节点每一次构建后的中间文件和结果文件,随着流程的结束消失了,这样每次构建都需要从头构建;
“maven构建” 本地缓存目录设置在 Docker 中,节点运行结束后容器也就结束,每一次构建都需要从 maven 远程仓库重新拉取依赖包。
在使用的过程中,发现如果要实现持久化共享目录的话,有一个方法是采用 “SSH执行命令” 节点,但这样所有的流程都转化为 shell 脚本问题,显然不是好的解决方案,也无法体现建木在流程方面的优势了。
// 挂载 /workspace 目录,以存放希望在流程中持久化的文件
config.Mounts = append(config.Mounts, mount.Mount{
Type: mount.TypeBind,
Target: "/workspace",
Source: "/workspace",
})
这样每一个 runner 节点都能有一个本地主机的目录映射,达到了目录共享持久化的目的,至于具体 runner节点 的使用,则由 runner 节点自行支持了。
通过在项目中对建木的使用,感觉建木在设计上是非常符合 DevOps 理念的,并且通过简单的配置或者简洁的 DSL 语法,就可以满足工作中的流程需求,相较于 Jenkins 的使用,非常便利,适合上手、适合上头。
推荐阅读
推荐视频
微信扫码关注该文公众号作者