一、盘古介绍
盘古是javashop团队内部总结多年的部署经验推出的一款开源的devops工具, 致力于在提供简单、使用、高效的可持续集成服务。在目前流行的devops工具中缺少对机器、仓库、步骤、环境变量的明确定义、操作,盘古提供了上述的资源的管理,内置常见java,、PHP、nodejs、mysql、nginx等常见环境的执行器(直接编排为步骤),并提供了导出导入功能、一键复制流水线,极大方便了部署过程。通过环境变量和配置文件可以实现复杂的大型项目统一配置。未来计划支持k8s的流水线编排,感谢您的star,您的支持是我们不断完善的最大动力! 欢迎加入盘古交流群:最下方扫码进群。
二、特色功能与亮点
对比流行的devops工具(如jenkins、瓦力等),盘古汲取了他们的众多优点,并结合我们在实际使用中碰到的问题,尝试给大家提供一款更加简便易用的devops工具。
1、简易安装
基于Java+h2,一个jar包即可运行
开箱即用是盘古追求的第一目标,再使用jenkins、瓦力等等工具的过程,希望可以提供最简便的安装过程。
2、编排更容易
(1、盘古明确定义出步骤、依赖、检查等概念,希望提供极低的编排门槛
(2、内置git clone、安装jdk、安装maven、mysql、nginx、nodejs等等常见执行器,简化编排过程
(3、步骤可以暂停跳过、拖拽排序编排步骤,方便部署异常情况调试
(4、内置检查器,可检测编排步骤是否确认成功
(5、导出导入编排文件,一键复制编排
3、环境变量、配置文件支持
在大型的项目devops过程中,需要统一定义数据账号密码、秘钥、域名等等的配置文件,盘古抽象出环境变量、配置文件的概念来解决这类问题。统一定义如mysql密码、spring boot配置文件等
4、机器管理
提供机器管理、标签设置,按机器按标签,批量部署
5、仓库管理
提供仓库管理、方便部署编排
6、项目管理
按项目汇总配置文件、环境变量,简化编排过程
7、插件
插件式扩展、希望借助开源社区的力量, 提供无限可能
三、快速上手
1、安装盘古
请根据您的情况选择
基于docker安装
前置条件:安装docker,可参考这里:
https://pangu.javamall.com.cn/docs/#/docker
运行盘古
通过如下命令来运行盘古:
docker volume create pangudata
docker run --rm -d -p 8080:8080 --name pangu -v pangudata:/opt/pangu/database registry.cn-beijing.aliyuncs.com/javashop-enation/pangu:1.0.0
访问 http://ip:8080是否启动成功
基于jar包安装
前置条件安装Java 请参考https://www.runoob.com/java/java-environment-setup.html
通过如下命令来运行盘古:
wget -P /home/ https://mirrors.javamall.com.cn/pangu/1.0.0/pangu.tar.gz tar -xzvf /home/pangu.tar.gz cd /home/pangu java -jar ./pangu-1.0.0.jar
上述命令会独占当前窗口,您可以使用nohup来运行盘古:
cd /home/pangu
nohup java -jar ./pangu-1.0.0.jar > /home/pangu/pangu.log 2>&1 &
注意:必须在当前目录执行启动命令否则无法登陆
基于源码安装
基于源码安装盘古命令如下
git clone https://gitee.com/javashop/pangu.git cd pangu mvn clean install -DskipTests
2、完成您的第一个部署
完成安装后,访问:ip:8080,默认账号/密码是admin/admin
机器配置
您需要准备一台linux机器来体验盘古并在盘古中将机器配置好(我们将此机器命名为“测试机”)
部署的编排
我以安装docker,并部署一个mysql实例为例,体验部署的编排及执行。
首先需要您新增一个部署:
1、部署名字随意(比如mysql部署)
2、部署服务器:选择刚刚我们建立的“测试机”
3、环境变量:暂时可以先不选择
我们来编排这个部署,在盘古中内置了很多执行器,这些执行器是我们组织编排的核心
新增步骤
在这个步骤管理中,我们新增两个步骤:
第一个步骤:安装docker
如上图所示,执行器选择安装docker,步骤的名字命名为"安装docker"
第二个步骤:安装mysql
执行部署
点击“执行部署”跳转到执行界面,来体验基于盘古的第一次部署。
四、概念&功能
1、机器、标签
要执行部署操作的目标机器,部署时可以选择部署一台或多台机器,也可以将机器按标签来分类,然后按标签来部署。
2、部署与步骤
部署的编排核心是步骤,一次部署包含多个步骤,比如:
步骤1:克隆源码
步骤2:编译源码
步骤3:运行Jar
步骤是顺序执行的,只有上一个步骤执行成功后下一个才会被执行,否则整个部署将被终止。
盘古将步骤分为执行器和检查器两个部分(检查器是可选的),执行器执行具体的部署动作(比如安装mysql),检查器负责检查这个部署动作是否执行成功。
3、执行器和检查器
盘古内置了一些常用的执行器和检查器,如:“SSH命令执行”、“git clone”、“安装maven”、“端口检查器”等,详解下面的列表。
执行器名称 |
ssh命令执行 |
git clone |
安装maven |
安装mysql |
安装redis |
安装node |
您可以通过安装插件来使用别人开发的执行器或检查器。您也可以通过开发插件来扩展执行器或检查器。
4、仓库
这里的仓库是指的git源码仓库,在"git clone"执行器中可以选择要clone的仓库
5、环境变量和配置文件
在部署的编排过程中,我们有这样的场景:
1、安装mysql时指定mysql的密码
2、将密码配置在程序相应的配置文件中
盘古是通过”环境变量“和”配置文件“实现上述过程的自动化的。通过定义一组环境变量,比如:那么在配置文件中就可以通过${mysql.username}这种语法来引用这个变量(遵循freemaker语法)
您需要编辑部署,使某个环境变量项目和部署关联才能使环境变量生效
配置文件需要使用”写入配置文件“这个执行器来将配置文件写入到具体的服务器某个位置
五、插件开发
盘古中的执行器和检查器是以插件的形式提供的,您可以开发自己的插件来拓展执行器和检查器。
插件开发插件包括一下几种:
插件类型 |
kind标识 |
说明 |
执行器 |
executor |
在部署时被执行 |
检查器 |
checker |
完成某个步骤时,对结果检测 |
1、插件开发
盘古的插件是用yml格式定义的:
#插件版本 version: 1.0 metadata: #类型,必须 #可选值: #1.executor:执行器 #2.checker:检查器 #3.deployment:部署 kind: executor #定义插件名称,必须 name: "git clone" #定义id,必须,不能有空格 id: git_clone #定义插件描述,可以为空 desc: git clone 插件 #定义作者名字,必须 author: javashop #定义作者的链接,可以为空 author_url: "https://www.javamall.com.cn" #定义要传输到服务器中的文件 #source是本地文件路径,以classpath为根目录的相对路径 #target是远程目标路径,可以使用${worksapce}变量 copy: - source: executor/git_clone/git_clone.sh target: ${workspace}/git_clone.sh #定义要执行的命令 command: #定义命令的类型,目前支持ssh 命令,必须 type : ssh exec : - "sh ${workspace}/git_clone.sh" #插件的配置项,可以是多个配置项,可以为空 #每个配置项,会在配置界面展示 #客户输入的值在解析命令的时候会通过$ {变量名}解析出来 #type支持: #1、input :单行文本 #2、textarea:多行文本 config : item: title: 源码目标路径 name: dir type: input htmlcss: "100px"
2、插件的存放
插件可以存放在两个位置:
1、源码的resources目录
2、打包后的jar同级plugins目录
子目录
目录 |
说明 |
executor |
存放执行器yml文件 |
checker |
存放检查器yml文件 |
插件可以是单独直接在相应的文件夹中,也可以自己独立一个文件夹存放,比如:
如上图所示,"plugin-one"直接存放在executor目录中,"plugin-two"单独在一个文件夹中,一般地是这个插件还存在除了yml文件以外的文件所以单独存在一个文件夹比较方便。
3、插件的书写与测试
首先您需要熟悉git fork
可以参考下面的文档:https://gitee.com/help/articles/4128#article-header0
请fork下面的仓库:https://gitee.com/javashop/pangu-plugin
建立插件文件
在您fork的仓库中:在resources目录中建立你的插件文件,如:/resources/executor/test.yml
编写插件
根据需求按规则编写yml文件,您可以参考这个示例插件
测试插件
使用如下代码测试插件:
1 @RunWith(SpringRunner.class) 2 @SpringBootTest() 3 @ComponentScan("com.enation.pangu") 4 public class PluginTest { 5 6 /** 7 * 插件业务类 8 */ 9 @Autowired 10 ExecutorManager executorManager; 11 12 /** 13 * ssh客户端 14 */ 15 SshClient sshClient; 16 17 18 /** 19 * 环境变量 20 */ 21 Map env = new HashMap(); 22 23 //环境变量 24 String workspace = "/opt/workspace/"; 25 26 /** 27 * 测试前构建ssh client及 workspace 28 * @throws IOException 29 */ 30 @Before 31 public void init() throws IOException { 32 env.put("workspace",workspace); 33 34 //在这里定义测试机的信息 35 sshClient = SshClientFactory.createSsh("root", "123456", "192.168.2.55", 22); 36 37 //先创建workspace 38 sshClient.exec("mkdir -p "+ workspace,text->{ 39 out.println(text); 40 }); 41 42 } 43 44 /** 45 * 测试结束后断开ssh连接 46 * @throws IOException 47 */ 48 @After 49 public void clean() throws IOException { 50 sshClient.disconnect(); 51 } 52 53 54 55 /** 56 * 执行器测试 57 * @throws ScriptException 58 */ 59 @Test 60 public void gitClone() throws IOException { 61 //环境变量 62 63 env.put("username", "2323"); 64 env.put("password", "2323"); 65 env.put("git_url", "https://gitee.com/javashop/pangu.git"); 66 //执行插件,第一个参数时插件id,第二个参数是插件类型,第三个参数是环境变量,第四个参数是ssh客户端 67 boolean result = executorManager.runExecutor("git_clone",PluginType.executor, env, sshClient); 68 out.println(result); 69 } 70 71 /** 72 * 检查器测试 73 * @throws IOException 74 */ 75 @Test 76 public void checkerTest() throws IOException { 77 //执行插件,第一个参数时插件id,第二个参数是插件类型,第三个参数是环境变量,第四个参数是ssh客户端 78 boolean result = executorManager.runExecutor("install_one", PluginType.checker, env, sshClient); 79 out.println(result); 80 } 81 }
注意:开发好的插件,需要在插件页面点击同步才会出现在相应的列表中
六、贡献你的插件
欢迎您将插件贡献给盘古,共享方式为需要您从自己的fork的仓库建立一个PR到如下仓库 https://gitee.com/javashop/pangu-plugin
操作方式参考如下文档:https://gitee.com/help/articles/4128#article-header0
创建pull request时需要您备注好插件的作用以及您的联系方式,或扫描计入盘古微信交流群,发送一个消息给我们,以便我们及时审核您的PR,如果我们审核通过后,就可以被其他人安装使用啦。
请先扫码并关注公共账号,可以自动加入盘古交流群: