还在用Jenkins?试试这款面向DevOps的自动化部署工具吧,贼带劲!!

Java面试指南网站:javaguide.cn

你好,我是 Guide。今天给大家推荐一款好用的 CI/CD 工具 建木 。这是一款面向 DevOps 领域的极易扩展的图形化工具,帮助用户轻松编排各种 DevOps 流程并分发到不同平台执行。

项目介绍

“建木”是上古先民崇拜的一种圣树,传说建木是沟通天地人神的桥梁。伏羲、黄帝等众帝都是通过这一神圣的梯子上下往来于人间天庭。《淮南子·墬形训》亦曰:“建木在都广,众帝所自上下。日中无景,呼而无响,盖天地之中也。”

为此项目命名为“建木”,希望项目也可以成为不同业务场景下系统间相互沟通的桥梁。

建木是一个面向 DevOps 领域的极易扩展的开源无代码(图形化)/低代码(GitOps)工具。可以帮助用户轻松编排各种 DevOps 流程并分发到不同平台执行。

相关地址:

  • Gitee:https://gitee.com/jianmu-dev/jianmu
  • 官网:https://jianmu.dev
  • 文档:https://docs.jianmu.dev

项目特点

图形化编排

节点自由拖拽,参数快速配置,高效构建项目。

配置即代码

提供声明式语法将流程代码化,通过代码库进行版本控制,快速实现幂等部署与故障恢复。

流程可视化

流程配置可视化,任务编排与执行状态一目了然。

节点生态丰富

使用官方与社区提供的节点自由组合,灵活满足各类需求。贡献节点,分享自己的成果。

平台中立

无平台倾向性,用户可根据需要自行选择。

在线体验

  • 地址: https://www.gitlink.org.cn/jianmu/demo/devops
  • 账号: jianmu
  • 密码: jianmu.dev

点击登录,输入账号密码即可在线体验

体验说明

建木作为第三方工具与代码库 GitLink 集成,为 GitLink 提供 DevOps 引擎。我们提前为大家准备了 GitLink 体验账号和一些流程示例,无须将建木安装部署在本地,登录账号即可快速体验流程编排。

部署

目前支持两种方式安装部署建木,大家根据需要任选其一即可

资源和系统要求

操作系统

Ubuntu 21.04 (推荐) 或 macOS Monterey

建议配置

  • CPU:2C
  • 内存:8GB
  • 磁盘:100GB

部署方式一:docker-compose 部署

软件版本要求

  • 推荐使用 Ubuntu 21.04 系统安装
  • Docker 19.30 以上
  • Docker-Compose 1.29.2 以上

部署方式

  • 下载docker-compose.yml
wget https://gitee.com/jianmu-dev/jianmu-deploy/raw/master/docker-compose.yml
  • 启动
docker-compose up -d

访问http://localhost,默认用户名密码admin/123456

部署方式二:k8s 部署

软件版本要求

  • Kubernetes 1.18 以上

部署方式

  • 下载kubernetes.yaml
wget https://gitee.com/jianmu-dev/jianmu-deploy/raw/master/kubernetes.yaml
  • 启动
kubectl apply -f kubernetes.yaml

访问node节点ip:30180,默认用户名密码admin/123456,使用详见 hello 项目使用。

入门

前提条件说明

  • 有企业微信账号
  • 新建一个测试群
  • 测试群添加一个机器人,并获取机器人的 webhook,形如:https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=06de918a-fd35-45b7-b2e6-cff28371fd5d

添加流程可参考: https://gitee.com/help/articles/4296#article-header0

设置企业微信空间

1、创建企业微信用户空间,点击密钥管理

图片

2、点击新增命名空间

图片

3、填写命名空间名称

图片

4、进入命名空间,创建密钥,填写名称和值,参考如下

图片

创建并执行第一个项目

1、创建第一个 hello world 项目

2、点击导入项目,URL 输入https://gitee.com/jianmu-dev/jianmu-docs.git

图片

3、填写分支为master

4、关闭下方的认证开关,点击下一步

5、选择hello-world.yml,点击保存

实现效果

  1. 您可以点击项目立即触发执行,届时可以看到测试企业群的 Bot 就会给你第一个问候。
  2. 系统将会根据导入的 yaml 文件生成名为hello_world的流程并在每小时的 0/30 分时触发执行。

········· END ··············

本文转载于网络 如有侵权请联系删除

相关文章

  • CSS 相邻兄弟选择器

    大家好,又见面了,我是全栈君相邻兄弟选择器(Adjacentsiblingselector)可选择紧接在另一元素后的元素,且二者有相同父元素。选择相邻兄弟如果需要选择紧接在另一个元素后的元素,而且二者有相同的父元素,可以使用相邻兄弟选择器(Adjacentsiblingselector)。例如,如果要增加紧接在h1元素后出现的段落的上边距,可以这样写:h1+p{margin-top:50px;}复制这个选择器读作:“选择紧接在h1元素后出现的段落,h1和p元素拥有共同的父元素”。例子:<!DOCTYPEHTML> <html> <head> <styletype="text/css"> h1+p{margin-top:200px;} </style> </head> <body> <h1>Thisisaheading.</h1> <p>Thisisparagraph.</p> <p>Thisisparagraph.http

  • 金额大写转小写SQL

    CreateOrReplaceFunctionMoney2Chinese(MoneyInNumber)ReturnVarchar2Is strYuanVarchar2(150); strYuanFenVarchar2(152); numLenYuanNumber; numLenYuanFenNumber; strRstYuanVarchar2(600); strRstFenVarchar2(200); strRstVarchar2(800); TypetypeTabMappingIsTableOfVarchar2(2)IndexByBinary_Integer; tabNumMappingtypeTabMapping; tabUnitMappingtypeTabMapping; numUnitIndexNumber; iNumber; jNumber; charCurrentNumChar(1); Begin IfMoneyIsNullThen ReturnNull; EndIf; strYuan:=TO_CHAR(FLOOR(Money)); IfstrYuan='0

  • 使用 Linux at 命令安排任务

    Linuxat命令是什么?该at 命令是Linux终端允许您为特定时间和日期安排一次性作业的方法。这是从终端轻松实现的自发自动化。安装在在Linux上,该at 命令可能已经安装。您可以使用该at-V 命令验证它是否已安装。只要返回一个版本,你就at 安装了:$at-V atversionx.y.z复制如果您尝试使用at但找不到命令,大多数现代Linux发行版都会at 为您安装缺少的软件包。您可能还需要启动at守护进程,称为atd.在大多数Linux系统上,您使用systemctl命令启用服务并将它们设置为从现在开始自动启动:$ sudo systemctl enable --now atd复制与at交互安排作业当您将at 命令与您希望任务运行的时间一起使用时,您将打开一个交互式at 提示。您可以输入要在指定时间运行的命令。如果有帮助,您可以将此过程视为日历应用程序,就像您可能在手机上使用的应用程序一样——首先,您在某一天的某个时间创建一个事件,然后指定您想要发生的事情。例如,尝试通过创建一个未来几分钟的任务来为自己安排备忘录。使任务简单以减少失败的可能性。要退出at 提示,请按 键盘上

  • Varnish使用小结

     文章原始出处和作者信息及 本声明http://iyubo.blogbus.com/logs/35085709.html此日志会随时更新,当然,是随着我的应用积累:)实现静态文件压缩Varnishitselfdoesnotcompressordecompressobjects,althoughthathasbeenonourwishlistforquiteawhile.However,itwilloperatecorrectlywithbackendsthatsupportcompression.从官方网站可以得知,Varnish本身并不能提供压缩的功能,但是我们又想要使用压缩,该怎么处理呢?(有关压缩的方面可以参考官方网站http://varnish.projects.linpro.no/wiki/FAQ/Compression)在vcl_recv中加入如下配置,为Varnish指定压缩算法,提高效率。(EventhoughtherearefewpossiblevaluesforAccept-Encoding,Varnishtreatsthemliterallyratherthans

  • 有安全研究者混入了PHP 8.0开发组!

    有安全研究者混入了PHP8.0开发组! 经历了近半年的alpha版本测试后,PHP在2020年11月26号正式发布了8.0版本:https://www.php.net/releases/8.0/en.php今天我们就来浏览一下PHP8.0中出现的主要特性,以及它给我们安全研究人员带来的挑战。命名参数NamedArgumentsPHP8以前,如果我们需要给一个函数的第N个参数传参,那么这个参数前面的所有参数,我们都需要传参。但是实际上有些参数是具有默认值的,这样做显得多此一举。比如,我们要给htmlspecialchars的第4个参数传递false,在PHP8以前需要传入4个参数:htmlspecialchars($string,ENT_COMPAT|ENT_HTML401,'UTF-8',false);复制在8.0以后增加了命名参数,我们只需要传递必需的参数和命名参数即可,方便了很多:htmlspecialchars($string,double_encode:false);复制属性注释Attributes属性注释是我自己取得名字,在英文原文中是单词Attribut

  • What is a Lakehouse?

    解决数据湖限制的新系统开始出现,LakeHouse是一种结合了数据湖和数据仓库优势的新范式。LakeHouse使用新的系统设计:直接在用于数据湖的低成本存储上实现与数据仓库中类似的数据结构和数据管理功能。如果你现在需要重新设计数据仓库,鉴于现在存储(以对象存储的形式)廉价且高可靠,不妨可以使用LakeHouse。事务支持模式执行和治理BI支持:存储与计算分离:开放性:支持从非结构化数据到结构化数据的多种数据类型:支持各种工作负载:端到端流提纲挈领一下,下面是转载2020-1-30砖厂的blog。--------------------------------------------------------------------------------------------------OverthepastfewyearsatDatabricks,we’veseenanewdatamanagementparadigmthatemergedindependentlyacrossmanycustomersandusecases:thelakehouse.Inthispostwedescr

  • Transformer解码器详解

    最近做fairseq的实验,发现之前对transformer的理解还是不够深入,尤其是解码器的部分,所以我又重新深入地了解了一下transformer解码器的构造。比对fairseq后对框架的了解也更加深入了。transformer和self-attention的的介绍我前面的文章已经说过了,这里就不重复提了。这篇文章只说明解码器部分的细节。这个是transformer那边论文中对应的整体的图,可以看到解码器的的block和编码器的是不一样的。解码器的block由maskedmulti-headattention和一个encoder-decoder的attention组成。其中maskedmulti-headattention部分用于将未来的信息mask掉,因为在生成的时候是无法知道未来的信息的。下图就是一个mask的例子,至于attention的计算,还是和之前的方式一致。这一部分可以看成模型在考虑之前的输出信息来计算当前应该输出什么。Decoder的第二个部分是一个encoder和decoder的attention,这一部分可以看成解码器在用编码器的输出信息来计算当前解码应该输出什

  • LeetCode 662. Maximum Width of Binary Tree

    662.MaximumWidthofBinaryTreeGivenabinarytree,writeafunctiontogetthemaximumwidthofthegiventree.Thewidthofatreeisthemaximumwidthamongalllevels.Thebinarytreehasthesamestructureasafullbinarytree,butsomenodesarenull.Thewidthofonelevelisdefinedasthelengthbetweentheend-nodes(theleftmostandrightmostnon-nullnodesinthelevel,wherethenullnodesbetweentheend-nodesarealsocountedintothelengthcalculation.Example1: Input: 1 /\ 32 /\\ 539 Output:4 Explanation:Themaximumwidthexistinginthethirdlevelwiththelength4(

  • 延迟和吞吐的关系是什么?

    原回答: https://www.zhihu.com/question/279164955/answer/405448070所谓的“性能”一般指的是吞吐和延迟这两件事。他们相互关联,但是互相的关系并不是简单的一一对应。我改用一个通俗的例子来讲解这个问题。假设你去一个乐高店去买散装乐高。首先你要排队。等你排到队首,跟店员说,你要小方块红色的10个,浅绿色花花的圆形15个,厚长条白色的3个……。店员就开始按照你说的给你去后边仓库拿。假设很少有两个顾客会有完全一样的要求,所以每次店员每次都拿的不一样。拿一趟的时间要数分钟。(假设店员比较傻,不会把仓库的东西拿一部分到柜台)散装乐高当你提完要求后,店员可以有两个做法:第一种做法是:马上去给你拿。这时对于你来讲是最快的。店员去给你拿东西的时间是无法消除的,所以他马上给你拿,对于你来说等待时间是最小的。但是这仅仅是当你已经排在队首的情况。假如你在队伍中间,你前面每个人向店员买东西,店员都要去花几分钟拿一趟,实际上会让你等的更久。如果队伍很短,或者压根没有人排队,那么这样做还是比较合适的。但如果人比较多——进来排队的人比店员拿东西的速度更快,这样很快

  • 中国台湾芯片实力很强么?

    最近各种事件,不管是老太婆窜访台湾省,A股普跌唯芯片板块猛涨,还是美国即将在8月9日签署芯片法案,这些都让我对芯片两字念念不忘。 芯片到底有多重要,看一个数据就明白:2021年华为手机全球出货量同比2020年下跌81.6%,原因就是2020年9月15日起,在美国压力下,台积电无法再为华为代工生产芯片。芯片是电子产品的大脑,也是技术门槛最高的配件,全球能生产的国家和地区没有几个,一块芯片的诞生,需要多个地区的技术合力。 这也是美国组建Chip4的原因,Chip4的提法源于今年3月,为加强对于全球半导体供应链的掌控,美国提议与韩国、日本和中国台湾地区组建芯片四方联盟,简称Chip4,意图将中国大陆排除在全球半导体供应链之外。 (chip即芯片的意思)那么Chip4里边,各方技术实力如何,中国台湾在供应链中又处于什么位置? 如果以总部位于该地区的半导体企业,在全球半导体行业销售额占比来算的话:美国>韩国>日本>中国台湾>中国大陆美国占比最大达47%,韩国紧随其后19%,日本和欧洲各10%,中国台湾6%,中国大陆5% (2019年数据)如果以技术积累及门槛来看的话: 美

  • 省选模板

    这里是我的省选的各种模板。 1.Dijkstra算法 题目描述 给出一个有向图,请输出从某一点出发到所有点的最短路径长度。 输入格式 第一行包含三个整数N、M、S,分别表示点的个数、有向边的个数、出发点的编号。 接下来M行每行包含三个整数Fi、Gi、Wi,分别表示第i条有向边的出发点、目标点和长度。 输出格式 一行,包含N个用空格分隔的整数,其中第i个整数表示从点S出发到点i的最短路径长度(若S=i则最短路径长度为0,若从点S无法到达点i,则最短路径长度为2147483647) 输入样例 461 122 232 241 135 343 144 输出样例 0243 数据规模 对于20%的数据:N<=5,M<=15 对于40%的数据:N<=100,M<=10000 对于70%的数据:N<=1000,M<=100000 对于100%的数据:N<=10000,M<=500000 代码 #include<cstdio> #include<queue> usin

  • C++原子操作atomic

    原子操作指“不可分割的操作”,一般针对一个变量 互斥量一般针对代码段 #include<iostream> #include<thread> #include<atomic> std::atomic<int>atomic; voidadd() { for(inti=0;i<1000000;i++) { atomic++; } } intmain() { std::threadt1(add); std::threadt2(add); t1.join(); t2.join(); std::cout<<"atomic"<<atomic<<std::endl; return0; } 复制 $./a.out atomic2000000 复制

  • Farseer.net轻量级开源框架 中级篇:执行SQL语句

    导航 目   录:Farseer.net轻量级开源框架目录 上一篇:Farseer.net轻量级开源框架中级篇:事务的使用 下一篇:Farseer.net轻量级开源框架中级篇:DbFactory数据工厂 使用自定义SQL,或者存储过程。仍然使用:DbExecutor,没错,其实框架最终执行,都是到这个类里把生成的SQL传进来的。 因此你也可以使用自己传进来的SQL进行执行你想要的结果。 我们先看下这里面有哪些方法吧。(其实很像你们以前接触过的:DbHelper....) 1///<summary> 2///返回第一行第一列数据 3///</summary> 4///<paramname="cmdType">执行方式</param> 5///<paramname="cmdText">SQL或者存储过程名称</param> 6///<paramname="parameters">参数</param> 7publicobjectExecuteScalar(Com

  • jupyter简单使用

    Jupyternotebook是一个交互式的Pythonshell,也是IPython的封装版,非常适合用来进行数据分析和机器学习。也可以用来编辑python与markdown文档。 1.安装以及简单测试 安装 pipinstall-ihttps://pypi.tuna.tsinghua.edu.cn/simplejupyter 复制 jupyter支持console、noteook等交互方式 E:\pyspace>jupyter usage:jupyter[-h][--version][--config-dir][--data-dir][--runtime-dir][--paths][--json][--debug][subcommand] Jupyter:InteractiveComputing positionalarguments: subcommandthesubcommandtolaunch options: -h,--helpshowthishelpmessageandexit --versionshowtheversionsofcorejupyter

  • PHP引用是什么?

    引用是什么 在PHP中引用意味着用不同的名字访问同一个变量内容。这并不像C的指针,替代的是,引用是符号表别名。注意在PHP中,变量名和变量内容是不一样的,因此同样的内容可以有不同的名字。最接近的比喻是Unix的文件名和文件本身——变量名是目录条目,而变量内容则是文件本身。引用可以被看作是Unix文件系统中的hardlink。     php的引用(就是在变量或者函数、对象等前面加上&符号)在PHP中引用的意思是:不同的名字访问同一个变量内容。与C语言中的指针是有差别的.C语言中的指针里面存储的是变量的内容,在内存中存放的地址。1.变量的引用PHP的引用允许你用两个变量来指向同一个内容 <?     $a="ABC";    $b =&$a;    echo $a;//这里输出:ABC    echo $b;//这里输出:ABC  &nb

  • Fractal propagation and immunity on network

  • pgm11

    这里简要的讨论hybridnetwork与一些时序数据的分析。 hybridnetwork指网络中存在离散随机变量与连续随机变量,这种情况下一般非常麻烦,这主要是因为连续型随机变量需要使用某个参数族来进行刻画,某些情况下对应的margin却不属于给定的参数族。常用的处理手段是离散化,即将某些连续分布离散化成为离散随机变量,这样虽然处理起来容易,但是会丢失非常多的信息,也引入了一个也非常困难的问题,如何离散化才有意义?很显然离散化只是为了计算效率进行近似的折衷。因此关于hybridnetwork的讨论其实主要集中在一些特殊情况。前面讲过的Gaussiannetwork是一种分析性质良好的连续r.v.s.,我们首先讨论一下前面一些技术在它上面的应用,继而讨论上面hybridnetwork的性质、近似与精确inference的策略。 我们首先引入所谓的canonicalform,这其实和exponentialfamily的有一定相似 我们不难获得这些参数与矩参数之间的关系,在这种表示下,相乘相除的factor就可以通过这些系数的相加相减进行计算了。这样sum-product进行VE的时候每

  • Linux系统启动管理 系统启动流程

    概述 linux启动时我们会看到许多启动信息,其过程可以分为5个阶段: BIOS自检 读取MBR 通过BootLoader引导系统加载 加载initramfe虚拟文件系统 加载内核 运行systemd init程序的类型: SysV: init,CentOS5之前,配置文件:/etc/inittab。 Upstart: init,CentOS6,配置文件:/etc/inittab,/etc/init/*.conf。 Systemd: systemd,CentOS7,配置文件:/usr/lib/systemd/system、/etc/systemd/system。 BIOS自检 BIOS(BasicInputOutputSystem,基本输入输出系统)是固化在主板上一个ROM(只读存储器)芯片上的程序,主要保存计算机的基本输入/输出信息、系统设置信息、开机自检程和系统自启动程序,用来为计算机提供最底层和最直接的硬件设置于控制。 BIOS的上电自检POST(Power-onselftest),主要负责检测系统外围关键设备(如:CPU、内存、显卡、I/O

  • CF707B

    题目简化和分析: 这题看着玄胡很水实际。 我们需要做什么? 只需对每个工厂周围的面包店遍历一遍打擂台取最小 注意只对面包店遍历,所以对工厂设标记 如果打完擂台发现\(ans=inf\)则说明全是工厂 Solution: #include<bits/stdc++.h> usingnamespacestd; typedeflonglongll; constintN=1e5+50; intn,m,k; structedge{ intto,dis,next; }e[N<<1]; inthead[N<<1],a[N],cnt; voidadd_edge(intu,intv,intw){ ++cnt; e[cnt].to=v; e[cnt].dis=w; e[cnt].next=head[u]; head[u]=cnt; } boolvis[N]; intmain() { scanf("%d%d%d",&n,&m,&k); for(inti=1;i<=m;++i){ intu,v,w; scan

  • BEM 中文翻译

    BEM 原文请看getBEM Introduction(介绍) Block 独立实体,独立的意义 Examples:header,container,menu,checkbox,input Element block的一部分,没有独立的意义。语意上和block有关系 Examples:menuitem,listitem,checkboxcaption,headertitle Modifier block或element上的flag。使用他来改变外观或行为 Examples:disabled,highlighted,checked,fixed,sizebig,coloryellow 实例 页面上一个特定的元素在BEM中的实现。 一般情况下我们有一个正常的按钮,还有两个不同的状态。因为我们使用了BEM的风格块的类选择器,我们可以使用任何标签来实现(button,a,div)。命名规则告诉我们使用block--modifier-value语法 HTML <buttonclass="button"> Normalbutton </button

  • 【RL系列】SARSA算法的基本结构

    SARSA算法严格上来说,是TD(0)关于状态动作函数估计的on-policy形式,所以其基本架构与TD的$v_{\pi}$估计算法(on-policy)并无太大区别,所以这里就不再单独阐述之。本文主要通过两个简单例子来实际应用SARSA算法,并在过程中熟练并总结SARSA算法的流程与基本结构。 强化学习中的统计方法(包括MonteCarlo,TD)在实现episodetask时,无不例外存在着两层最基本的循环结构。如果我们将每一个episodetask看作是一局游戏,那么这个游戏有开始也有结束,统计方法是就是一局接着一局不停的在玩,然后从中总结出最优策略。MonteCarlo与TD的区别在于,MonteCarlo是玩完一局,总结一次,而TD算法是边玩边总结。所以这两层基本结构的外层是以游戏次数为循环,内层则是以游戏过程为循环。 SARSA作为TD算法下的on-policycontrol算法,只需边进行游戏边更新动作值函数和Policy即可,所以SARSA算法的内层可以由TD算法细化为如下结构:       NumOfGames=500 while(

相关推荐

推荐阅读