一、简木介绍1.简木简介第一次听说“简木”是简木的推广者。我很了解,也是查了相关资料才知道的。摘自官网介绍:“剑木”是古代先民供奉的神木。据说建木是连接天地人神的桥梁。伏羲、黄帝等帝王就是乘着这架神梯来往于人间和天庭。《淮南子·墬形训》又曰:“建木在京城,帝王自上而下。日中无景,无声无息,覆于天地。”“DevOps是一种自动化和平台设计的概念,是沟通过程各个阶段的桥梁。作为DevOps的落地工具,“建筑木头”的名字就是这么巧妙。2.简木初体验在了解简木这个DevOps工具后,我决定在实际项目中尝试一下。我浏览了建木的文档,安装了建木,并开始使用它。在开始使用时,低代码的配置方式让“Helloworld”非常方便。但是当我想更进一步的时候,又觉得无从下手。和我熟悉的Jenkins相比,紧迫的项目进度还是让我不得不放弃进一步的尝试。所以虽然我一直在建木社区群里,但也只是潜水了很长时间。3.再次尝试建木。虽然建木没有在项目中实施建木,但是我一直在持续关注建木。看着制作者发布的每一个版本,感觉功能越来越强大,越来越吸引人。我总想什么时候回来一探究竟。最近,公司要启动一个新项目。DevOps工具的首选自然是Jenkins。不过想到Jenkins繁琐的配置,心里嘀咕了一句,还是决定试试建木,看看这个传说中的北半球第二好用的DevOps工具对工作有什么帮助。带来什么样的体验。于是,进一步的实践尝试开始了。二、剑木实践1、剑木安装剑木的安装极其方便。提供官方Docker镜像,支持docker-compose和kubernetes部署,一键完成。2、开始使用简目的界面非常简单,运行的插件采用Docker底层支持,省去了很多麻烦的插件安装配置过程。下面我们将使用最新版本的简目v2.6.2进行本地化部署,并以一个简单的maven构建过程作为演示过程,介绍简目的入门使用。(1)主界面是一个非常简洁的主界面。(2)在密钥管理配置过程之前,可以将一些常用的变量和密钥配置到“密钥管理”中。除了默认的密钥存储方式外,剑木还支持对接金库进行存储,安全性得到提升。进一步保障。配置界面如下:(3)流程配置点击主界面上的“图形项”图标,进入流程配置界面。页面左侧是执行节点。官方提供了比较丰富的节点库,社区也有大量感兴趣的人提供的节点。选择“gitclone”节点,拖拽到页面中间的配置区,点击节点图标,页面右侧出现该节点的配置项,根据需要填写节点配置信息.再添加一个“mavenbuild”节点,在两个节点之间建立连接,选择节点相关的JDK版本,配置相关参数,保存返回。这样就创建了一个过程。上面的过程可以用相同的DSL语法配置:0name:workflowtestdescription:""global:concurrent:falsepipeline:node_0:alias:gitclonetype:_/git_clone:1.2.5param:username:((tisvc_key.git_username))密码:((tisvc_key.git_password))remote_url:http://gitlab.tyun.cn/tyun/tiops-agent.gitref:refs/heads/mastercommit_id:""depth:1node_1:alias:mavenBuild类型:_/maven_build:1.3.1-jdk11参数:工作空间:${node_0.git_path}/srcmvn_action:包extra_arge:“”nexus_username:adminnexus_password:“123456”maven_public_id:publicmaven_public_url:https://maven。aliyun.com/repository/publicmaven_release_id:releasemaven_release_url:""maven_snapshot_id:snapshotmaven_snapshot_url:""docker_username:jianmudevdocker_password:"123456"image_name:imagenameimage_tag:latestvc_pom_dir:在"process.latest"进程主界面执行(4)触发”按钮,触发流程执行,进入流程执行信息界面face之后可以查看各个节点执行的输出日志。这样一个简单的过程采用更简单的配置过程,实现起来就是这么简单。在简目中,除了使用图形工程,还可以使用代码工程和DSL描述语法来创建DevOps流程。除了创建方式不同,执行逻辑完全一样。三、深入探索1、在当前项目实际使用中遇到一个问题,因为目前处于开发阶段,对于DevOps流程,模块的拆分和更新,希望流程也可以拆分实施。剑木基于Docker的节点运行方式是它的优势,也有些不适应。从上面演示过程中的“gitclone”和“mavenbuild”节点:(1)“gitclone”节点本地存储使用Docker临时创建的目录。这个目录可以在同一个管道中共享,但是这个目录也会在进程结束后被清理掉。在多模块拆分流程的情况下,每次执行都需要重新克隆一次;(2)“maven构建”节点每次构建后的中间文件和结果文件都随着流程结束而消失,所以每次构建都需要从头开始构建;(3)Docker中设置了“mavenbuild”的本地缓存目录,节点运行后容器结束,每次build需要从maven远程仓库重新拉取依赖包。对于以上问题,当进程被频繁执行时,这种不好的感觉会被放大。于是去社区寻找答案,但是在开源社区看到技术团队明确表示暂时不会考虑类似的问题,所以寻求官方支持比较困难。2、如何解决问题在使用过程中,我发现如果要实现持久共享目录,有一种方法是使用“SSH执行命令”节点,但是所有的过程都转化成了shell脚本,这显然不是一个好的解决方案,也体现不出简牧在工艺上的优势。从gitee上拉取了剑木的源码,分析了剑木的几个模块,确认流程的执行主要由三个模块完成:jianmu-ci-server、jianmu-worker-docker、runnernodes,实现目录共享您可以从这三个模块开始。所以计划在DSL描述语法的spec区域增加对runner节点VolumeMount的支持。我手工修改了jianmu-ci-server和jianmu-worker-docker的代码。发布测试运行器节点时,未能通过DSL语法验证,尝试失败。上面这条路走不通,但路还是要走,最后决定用更直接的方法,修改jianmu-worker-docker模块,为runner节点添加一个/workspace:/workspace目录映射,代码为如下://挂载挂载到/workspace目录,存放进程中要持久化的文件config.Mounts=append(config.Mounts,mount.Mount{Type:mount.TypeBind,Target:"/workspace",Source:"/workspace",})这样每个runner节点都可以有一个本地host的目录映射,达到了目录共享和持久化的目的。至于具体runner节点的使用,是runner节点自己支持的。针对以上遇到的问题,在官方“gitclone”和“mavenbuild”runner节点的基础上,增加了两个自定义节点,增加/workspace目录的使用。4.总结通过在项目中使用简木,感觉简木的设计非常符合DevOps的理念,通过简单的配置或者简洁的DSL语法,能够满足工作中的流程需求。与Jenkins相比,使用起来非常方便,适合手把手。但目前,简牧还处于成长期,部分功能还不完善。希望技术团队继续努力,为DevOps领域带来更强大、更便捷的落地工具。
