月度归档: 2015 年 8 月

  • 使用Docker构造Jenkins集群

    使用Docker构造Jenkins集群

    Jenkins作为常用的CI功能自然是不用说了,如果运行在上面的项目有很多,而且对于环境的要求各不相同就稍微有点复杂了。

    比如一个Java项目,使用maven构建,Java语言等级为8,但是有部分代码又希望保有java7的语言等级,那么环境上的配置就稍微复杂了一点。

    如果还有其他比如Python,NodeJs项目,那么这个机器的环境就极为复杂了。

     

    Jenkins本身是支持主从节点的,也就是说具体的构建是可以指定由某个节点完成的。

    也就意味着我们只需要提供一个由所需环境的从机即可。当然,由一个独立的主机来提供是最好的,但是很多时候并没有那么多资源,而且环境需求也多变。

    这种情况下Docker就是一个很好的选择了,我们来尝试用Docker提供一个Java8带maven的环境。

    Jenkins主从模式可以有四种方式实现,我们选择最简单的,从ssh登录。

    整体配置如下

    FROM maven:3-jdk-8
    RUN apt-getupdate && apt-get install -y openssh-server
    RUN mkdir /var/run/sshd
    RUN mkdir /var/jenkins
    
    RUN echo'root:jenkins' | chpasswd
    RUN sed -i's/PermitRootLogin without-password/PermitRootLogin yes/' /etc/ssh/sshd_config
    
    RUN sed's@sessions*requireds*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
    
    …
  • 云应用与Lattice

    快,是现在一个很喜欢提的概念。快速发现用户需求,快速的产品原因,快速的提供服务,快速的迭代,快速的部署,快速的试错。

    为了满足这些,软件架构和基础服务也在发生改变。

    从独立机房到云主机,再到所谓的容器,快速的部署一个具有极大扩展性的应用变得越来越容易,当然费用也是越来越低。

    为了适应这些变化,软件架构也在向云应用转变。

    Cloud Native Application

    Cloud Native Application,说实话,我不知道中文名字叫什么,先称为云应用(我相信应该有一个更正式的说法)。

    从中衍生的还有所谓的 Cloud Native Application Architectures,即云应用体系结构。

    简单说来无非是一下几个问题:

    • 以一个或多个无状态进程运行应用
    • 通过端口绑定提供服务
    • 快速启动和优雅终止可最大化健壮性
    • 把日志当作事件流
    • 其他。。。

    应用由小的模块组成,每个模块尽可能无状态,模块能够快速的终止和启动。

    更多的相关概念和理论可以参考文木末的免费电子书。

    Spring-Boot和Spring-Cloud

    以Web应用说明,如果构建成war包然后发布到容器中,那么就很难做到以端口绑定提供服务,多个无状态进程等等。

    Spring-Boot提供了一个很简单的思路,如果发布到容器不行,那么就把容器包含在自身,使用内置的jetty或者tomcat来作为服务的承载。

    当然Spring-Boot还提供了快速的开发的若干便利,从配置到依赖管理,进而到调试和发布。

    Spring-Cloud提供了功能更进一步的“云特性”。

    • 配置管理
    • 路由
    • 负载均衡
    • 服务注册和发现
    • 集群决策和状态管理

    可以说在Spring的大旗之下有超过10个项目或者子项目再为云应用这个理念服务。

    Lattice

    有了理念,有了工具和框架,自然需要一个平台。

    Lattice就是一个为云应用而生的管理平台,主要的功能包括:

    • Http负载均衡
    • 日志
    …