持续集成,持续交付和持续部署之持续集成篇

2020-06-06  本文已影响0人  乱七八糟谈技术

持续集成,持续交付和持续部署这几个概念已经不是什么新鲜的名词了,它们属于DevOps的一部分,相信无论互联网公司还是传统的IT企业应该都引入了这些技术来保证产品的快读迭代和产品的高质量发布,当然可能有很多小作坊式的软件公司可能不会引入这些技术,因为项目初期会投入很多开发成本和维护成本。下面我将花两篇文章来介绍我的项目中是如何实现持续集成,持续交付。因为我们的产品没法直接部署到生成环境,只能部署到测试环境,因此严格的持续部署应该没在我们的产品中实现。在介绍实现之前,先了解一下它们的概念。

持续集成

1)概念

持续集成是指软件个人研发的部分向软件整体部分交付,频繁进行集成以便更快地发现其中的错误。“持续集成”源自于极限编程(XP),是 XP 最初的 12 种实践之一。持续集成的目的,就是让产品可以快速迭代,同时还能保持高质量。它的核心措施是,代码集成到主干之前,必须通过自动化测试。只要有一个测试用例失败,就不能集成。

2)必备要素
3)持续集成的优点

如何实现持续集成

开始持续集成之前,最重要的一步是需要建立合适的持续集成文化比如代码质量管控、测试文化等。这一步非常关键,如果团队成员或者项目管理者不重视持续集成,没有认识持续集成带来的好处就很难有效的在项目中推广持续集成,因为在项目初期需要花大量时间和精力来搭建持续集成系统,而且后期也需要不断的投入来维护持续集成系统。在团队中统一思想后,就可以开始选择合适的持续集成系统,当前持续集成系统分为两种,一种是搭建私有的部署,另一种是托管的持续集成系统。这两种系统的选择关键在于团队运行的基础设施,以及团队对持续集成系统的资源投入力度。

私有部署指的是将软件部署在公司的机房或内网中,需要提供多台服务器来完成 CI 系统的运转,同时需要对不同机器之间进行环境配置。比如Maven 或 Gradle 或 Jenkins ,他们的特点是自由开源,且文档支持广泛。优点在于对构建环境有完全的控制权,能够实现完全定制。但需要搭建环境和配置、维护成本高,需要买专门的机器,花费较多人力物力且更新迁移风险高;Hosted CI 指的是由 SaaS 型的 CI 服务,全程在线进行构建配置,不需要考虑装机器,装软件,环境搭建等成本。常见的有 CircleCI,Codeship 和TravisCI 等,还有国内最新的持续集成服务——flow.ci 。SaaS 型的 CI 的特点在于无需额外机器,几分钟就可以用起来。可以根据你的需要动态调度资源。省时,省心,省力。

我们的项目采用的是私有部署,依赖了公司提供的一些基础工具,比如Git,Bamboo,Artifactory,Sonarqube以及BinaryScan等工具,也使用了一些开源的工具Maven,Gradle,Nexus等来实现持续集成。使用Octopus,Docker,Plink等工具来实现持续交付。

Bamboo介绍

什么是Bamboo

Bamboo是一款持续集成的服务器,可以用来自动化管理软件发布,创建一个持续交付流程。Bamboo中的Bamboo使用了’plan’和’job’还有’tasks’这些概念来配置和组织工作流中的事件。

1)Project:
2)Plan:
3)Stage:
4)Job:
5)Task:

持续集成流程

1)代码提交

流程的第一步,是开发者向代码仓库提交代码。为每个feature建立一个feature branch,为bug建立bugfix branch,发布后的bug修复建立hotfix branch。如果项目使用Jira进行管理,可以在Jira上为每个feature关联创建branch。

2)代码Merge

当代码通过单元测试,可以发起PULL Request,进行代码Review,如果通过了Code Review,可以进行Code merge到Dev branch上,并触发Bamboo build。

3)Unit Test

在Java中使用JUnit或者TestNG编写单元测试用例,主要对function进行测试,具体可以参考我的另一篇关于TestNG开发测试用例的文章。

4)设置版本号

使用Maven提供的设置版本功能来实现自动生成版本号,我的策略是在Bamboo中设置变量来作为大版本号和小版本号,并以bamboo build号结尾,比如大版本设置1.1,小版本号设为1,buildno为100,则最后生成的版本号为1.1.1.100。具体生成版本号的方法命令如下:

mvn -U versions:set -DnewVersion=${arg_version} -f parent/pom.xml

其中,arg_version可以通过bamboo 的命令参数传入,parent/pom.xml文件中定义了版本号,如果你的包中包括了很多的jar包,可以将其他jar包的版本号都统一引用parent/pom.xml,这样就能实现对所有的jar包统一设置版本号。

5)代码混淆和代码签名

同样可以使用Maven提供的代码混淆和代码签名功能,在Bamboo中自动完成代码混淆和签名,具体如何配置代码签名和代码混淆请参考网上的Maven实例,都是通过在pom.XML中进行配置,然后运行如下命令:

  mvn -U install  -Pobfuscate,sign
6)静态代码检查

使用Sonarqube实现静态代码扫描,SonarQube是管理代码质量一个开放平台,可以快速的定位代码中潜在的或者明显的错误,它的功能如下:

1)设置全局的Sonaarqube server

编辑位于MAVEN_HOME/conf or ~/.m2下的settings.xml文件

<settings>
    <pluginGroups>
        <pluginGroup>org.sonarsource.scanner.maven</pluginGroup>
    </pluginGroups>
    <profiles>
        <profile>
            <id>sonar</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
            <!-- Optional URL to server. Default value is http://localhost:9000 -->
                <sonar.host.url>https://sonarqube.XXX.com</sonar.host.url>
           </properties>
       </profile>
    </profiles>
</settings>
2)在pomx.xml中配置分析参数

在Pom.xml中配置Sonarqube 分析参数,分析参数可以参考SonarQube的参数页。简单的参数配置如下:

<properties>
    <sonar.projectKey>myprojectkey</sonar.projectKey>
    <sonar.projectName>myprojectname</sonar.projectName>
    <sonar.login>ec412b089150086562333a6c9c1dd886204122b8</sonar.login>
    <sonar.password></sonar.password>
</properties>

其中projectkey和projectname是在SonarqubeServer创建的项目,把这些信息填入即可,用户名和密码是登陆sonarqube server的登录名和密码。

3)分析Sonar项目

使用Maven的sonar命令来分析Sonar项目

maven command

mvn clean verify sonar:sonar

In some situation you may want to run sonar:sonar goal as a dedicated step. Be sure to use install as first step for multi-module projects
mvn clean install
mvn sonar:sonar

# Specify the version of sonar-maven-plugin instead of using the latest. See also 'How to Fix Version of Maven Plugin' below.
mvn org.sonarsource.scanner.maven:sonar-maven-plugin:3.4.1.1170:sonar
4)查看分析报告

可以访问sonarqube server的网站来查看项目的分析报告,比如https://sonarqube.XXX.com?id=myproject来查看项目的分析报告。

上一篇下一篇

猜你喜欢

热点阅读