可持续集成(devops)工具盘古入门指南

一、盘古介绍

盘古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盘古插件仓库

请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,如果我们审核通过后,就可以被其他人安装使用啦。

请先扫码并关注公共账号,可以自动加入盘古交流群:

易族智汇(javashop)原创文章 

原文地址:https://www.cnblogs.com/javashop-docs/p/14605542.html