zoukankan      html  css  js  c++  java
  • 可持续集成(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)原创文章 

  • 相关阅读:
    Java基础面试题总结
    mysql面试题总结
    记7.9面试题
    深入理解Java虚拟机学习笔记(三)-----类文件结构/虚拟机类加载机制
    jvm类加载子系统
    多线程与高并发基础三
    多线程与高并发基础二
    多线程与高并发基础一
    多线程与高并发笔记一
    Unknown initial character set index '255' received from server. Initial client character set can be forced via the 'characterEncoding' property.
  • 原文地址:https://www.cnblogs.com/javashop-docs/p/14605542.html
Copyright © 2011-2022 走看看