
 
            
                
                    事情是这样的,作为一名热爱工作的程序员,定期检查系统服务是我的日常,并且还要将检查结果发送邮件给同事。这事情虽然简单,但是确实有点繁琐,真是脑壳痛

刚好最近正在使用建木CI,里面的任务都是通过一个一个节点来执行的,突然想到🤔,我把检查任务和发送邮件的任务写成两个节点,再加个Trigger定时执行不就行了吗!然后不就可以心安理得的摸个鱼了吗😀

说干就干,开始查看建木CI官方文档
1
   | 建木文档:https://docs.jianmu.dev
   | 
 
找到了自定义节点的文档:
以发送邮件的节点为例,接下来开始自定义节点!
1.创建节点
节点都在建木Hub上管理,我们可以在这里创建自定义节点
1
   | 建木Hub地址:https://hub.jianmu.dev/
   | 
 
- 首先登陆建木Hub
 
- 点击右上角的头像进入个人中心,点击创建节点
 
- 填写节点信息
 

点击创建,节点就创建成功了。但是节点是通过版本来管理的,我们还需要添加节点的版本
2.完成节点代码
看了一下,目前的节点,都是通过Docker容器运行的,因此我们也要定义docker运行的环境和脚本文件
脚本文件是节点任务执行时运行的代码,下图为send_email.py文件示例:

描述自定义镜像信息的文件

DSL是用来描述节点版本的,包括节点ref、节点版本号、输入输出参数、镜像等信息,文件格式为yml,具体参数信息可以查看官方文档

3.添加节点版本
接下来就到了文章的主题了,添加节点版本,有两种方式可以添加版本
3.1 通过建木Hub添加
在建木Hub,节点详情界面,点击新增版本,将仓库中定义的DSL复制进去,点击确定就可以了
如果是只发一次版本的话,该方法比较简单,粘贴复制就完了
注:在添加版本之前,需要将镜像发布到Dockerhub,否则节点任务执行时会找不到镜像

3.2 通过建木CI添加
hub_publish节点需要输入参数hub_api_ak、hub_api_sk,获取步骤:

建木CI可以先通过git_clone节点 拉取节点仓库,再通过hub_publish节点 发布版本,节点文档已经详细描述了每个参数的作用,这里就不多做解释了
保存好项目DSL后,手动点击触发,待运行完毕后就发布成功了
项目DSL如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
   | name: 发布send_email节点 pipeline:   git_clone:     type: git_clone:1.2.0     param:       remote_url: https://gitee.com/WannerBai/send-email.git   # 发布镜像   image_build:     type: docker_image_build:1.0.1     param:       workspace: ${git_clone.git_path}       docker_username: ((dockerhub.username))       docker_password: ((dockerhub.password))       docker_file: dockerfile/Dockerfile       image_name: wannerbai/send_email       image_tag: 1.0.0       docker_build_path: .   # 发布版本   hub_publish:     type: hub_publish:1.1.0     param:       hub_url: https://hub.jianmu.dev       dsl_file_path: ${git_clone.git_path}/dsl/send_email.yml       hub_api_ak: ((jianmuhub.ak))       hub_api_sk: ((jianmuhub.sk))       version: 1.0.0       image: ((dockerhub.username))/send-email:1.0.0
   | 
 
如果需要对节点版本进行管理的话,建议使用该方式发布版本,可以新建标签发布节点新版本,也可以通过标签查看之前的版本
步骤如下:
- 在gitee仓库添加webhook,URL为项目保存后,建木CI自动生成的webhook地址,事件为Tag push,密码可以选择设置
 
查看webhook URL:

在gitee仓库添加webhook:

- 在gitee仓库中,创建新标签
1.0.0,该事件会触发建木CI中的发布send_email节点,然后自动发布版本 
项目DSL如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
   | name: 发布send_email节点 global:   param:     image_name: wannerbai/send_email     version: 1.0.0      trigger:   type: webhook   param:     - name: gitee_token       type: SECRET       exp: $.header.X-Gitee-Token     - name: gitee_event       type: STRING       exp: $.header.X-Gitee-Event     - name: gitee_tag_created       type: BOOL       exp: $.body.json.created     - name: gitee_ref       type: STRING       exp: $.body.json.ref   # auth校验,value和token相同时才会触发项目   auth:     token: ${trigger.gitee_token}     value: ((gitee.webhook_runner_token))   only: (${trigger.gitee_event} === "Tag Push Hook" && ${trigger.gitee_tag_created})    pipeline:   git_clone:     type: git_clone:1.2.0     param:       remote_url: https://gitee.com/WannerBai/send-email.git       ref: ${trigger.gitee_ref}   # 发布镜像   image_build:     type: docker_image_build:1.0.1     param:       workspace: ${git_clone.git_path}       docker_username: ((dockerhub.username))       docker_password: ((dockerhub.password))       docker_file: dockerfile/Dockerfile       image_name: ${global.image_name}       # 镜像版本为gitee标签       image_tag: ${git_clone.git_tag}       docker_build_path: .   # 发布版本到建木Hub   hub_publish:     type: hub_publish:1.1.0     param:       hub_url: https://hub.jianmu.dev       dsl_file_path: ${git_clone.git_path}/dsl/send_email.yml       hub_api_ak: ((jianmuhub.ak))       hub_api_sk: ((jianmuhub.sk))       image: ${global.image_name}:${git_clone.git_tag}       # 节点版本为gitee标签       version: ${git_clone.git_tag}
 
   | 
 
至此,节点版本就发布成功了,以后发布新的版本,只需要新建新的标签就可以了,太方便了!
接下来就可以在建木CI中使用自定义的节点了,漂亮!
