微服务之持续交付

作者: 老瓦在霸都 | 来源:发表于2017-08-03 18:02 被阅读103次

    微服务因为船小好调头, 可以很方便快速地更新升级, 所以它才会大行其道

    理论篇

    从持续集成到持续交付, 工程师一直在下面这个循环里周而复始, 目的无非一个 -- 尽可能快速地交付有价值的产品给用户.

    反模式

    • 不到最后一刻, 没人知道软件产品最终长成什么样, 功能是否满足要求, 性能是否理想
    • 软件开发过程中是不能交付的, 正在开发的的功能存在于代码库的一个单独的分支中, 直到经过很多测试才能合并到主分支中, 并发布产品包, 由运维人员最终部署到产品线上

    正模式

    • 每次提交都在主分支上, 都会触发系统构建并运行一系列全自动化测试, 一旦通过即部署到 alpha/beta 站点上, 由产品负责人负责验收, 决定是否部署到产品环境中
    • 由 Feature toggle 来控制是否正式开放给全部或部分客户使用, 在正式发布产品之前, 会开放给一部分内部用户体验, 根据用户反馈, 功能和性能测试结果决定是否开放给外部客户

    从持续集成到持续交付

    持续集成(CI)是一种开发实践,是指开发人员每天多次将代码整合到共享的代码库中, 然后通过自动化构建验证每次提交,使团队能够及早发现问题。

    My CI Flow

    Martin Fowler 总结了持续集成的几条最佳实践

    • 维护单一代码库
    • 自动化构建
    • 使构建能够自我测试
    • 每个人都可每天多次提交到主线
    • 每一个提交都应该在集成机器上构建主分支
    • 立即修复破碎的构建
    • 保持构建速度
    • 在生产环境相同的产品环境中测试
    • 任何人都要以轻松获得最新的可执行文件
    • 每个人都可以看到发生了什么
    • 自动部署

    而持续续交付(CD)是指通过自动化在比较短的一个个迭代中快速发布软件的做法,允许团队更频繁地交付可以工作的软件产品。 其重点--持续整合,内置测试,持续监控和分析反馈都指向软件行业的整体趋势:提高应变能力。持续交付是持续集成的扩展和目标

    如果你的测试持续在运行,并且你充分信任您的测试可以提供足够的质量保证,这样你就可以在任何时候发布软件产品。 持续交付并不总是意味着交付,它代表了一种哲学和承诺,确保您的代码始终处于发布就绪状态。

    我在两年前做的一个项目中画的持续交付的流程图:

    CD

    来自微软的序列图


    CD from Microsoft

    每次构建,分析,测试和部署都必须有详细的记录和报告,有利于追溯,分析和改进持续交付的流程

    工具篇

    Jenkins

    现在的持续集成工具中, jenkins 是事实上的标准, 尤其它的 pipeline 插件已经定义了这些标准过程

    https://hub.docker.com/_/jenkins/

    让我们利用 Docker 先来构建一个 Jenkins

    1. Dockerfile
    FROM jenkins:2.46.3
    
    MAINTAINER Walter Fan
    
    USER root
    
    RUN mkdir /var/log/jenkins
    RUN mkdir /var/cache/jenkins
    RUN chown -R jenkins:jenkins /var/log/jenkins
    RUN chown -R jenkins:jenkins /var/cache/jenkins
    USER jenkins
    
    ENV JAVA_OPTS="-Xmx1596m"
    
    1. 构建 jenkins docker image
    docker build -t jenkins-image .
    
    1. 启动 jenkins 容器
    docker run --restart always -v /workspace/jenkins:/var/jenkins_home -p 8080:8080 -p 50000:50000 --name=jenkins-container -d jenkins-image
    
    

    Jenkins 非常强大, 使用方法也很庞杂,这里不做赘述, 另外再做详述. 重点谈谈它的 Pipeline 插件.

    我们说的部署流水线, 主要就是通过它来完成的, 步骤如下

    1. 配置代码仓库

    Branch Sources 无非就是 git 或 svn 的代码仓库地址, 用户名和密码, 分支名

    1. 定义配置文件

    Build Configuration : Jenkinsfile

    image.png

    Jenkinsfile是重点, 它包含了大多数流水线的设置. 其他的没有什么之处
    流水线提供一系列可扩展的工具, 以 流水线领域专用语言(Pipeline DSL) 代码描述了从简单到复杂的交付流程

    pipeline {
        agent any 
    
        stages {
            stage('Build') { 
                steps { 
                    sh 'make' 
                }
            }
            stage('Test'){
                steps {
                    sh 'make check'
                    junit 'reports/**/*.xml' 
                }
            }
            stage('Deploy') {
                steps {
                    sh 'make publish'
                }
            }
        }
    

    其他利器

    docker

    应用程序发布 docker image ,直接部署 docker image,可以省去大量环境配置

    sonar

    代码静态检查之利器,还有非java语言的 cppcheck,lint, pylint 等等

    EKL

    Elastic Search, Kibana, Logstash 服务器Log 收集和分析三件宝

    参考资料

    相关文章

      网友评论

        本文标题:微服务之持续交付

        本文链接:https://www.haomeiwen.com/subject/tzkjqxtx.html