涉及到的基本工具

icode: 代码仓库,代码版本管理工具

jenkins:链接:https://www.jianshu.com/p/5f671aca2b5a

Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上,不做解释)。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。通常与版本管理工具(SCM)、构建工具结合使用。常用的版本控制工具有SVN、GIT,构建工具有Maven、Ant、Gradle。

 

Sonar: Sonar是一个用于代码质量管理的开源平台,用于管理源代码的质量,可以从七个维度检测代码质量(例如复杂度分布,代码中重复代码块,单元测试等),通过插件形式,可以支持包括java,C#,C/C++,PL/SQL,Cobol,JavaScrip,Groovy等等二十几种编程语言的代码质量管理与检测。

SonarQube是一种自动代码审查工具,用于检测代码中的错误,漏洞和代码味道。它可以与您现有的工作流程集成,以实现跨项目分支和提取请求的连续代码检查。其目的是对代码库的质量进行360°透视。 为此,它会定期分析项目的所有源代码行。

SonarLint是一个Sonarl IDE插件,可以接收和连接SonrarQube对代码库扫描的结果从而通知Developer, SonarLint本身也可以基于一些规则对代码IDE中的代码进行即时的检测。它的目的是在您键入代码时提供即时反馈。 为此,它着重于要添加或更新的代码。

原文链接:https://blog.csdn.net/liucoding/article/details/109629100

 

CI/CD的基本概念

CI(Continuous integration,中文意思是持续集成)是一种软件开发时间。持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起。借用网络图片对CI加以理解。

img

 

CD(Continuous Delivery, 中文意思持续交付)是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境,在网联是开发测试环境)中。比如,我们完成单元测试后,可以把代码部署到连接数据库的Staging环境中更多的测试。如果代码没有问题,可以继续手动部署到生产环境。下图反应的是CI/CD 的大概工作模式。

img

CI/CD流水线的生命周期

参考链接:https://www.pianshen.com/article/1356952233/

 

CI 代表持续集成(Continuous Integration),CD 代表持续交付(Continuous Delivery)和持续部署(Continuous Deployment)。也可以将它们看作是类似于软件开发生命周期的过程。

现在我们来看一下它是如何工作的。

如何从零开始搭建 CI/CD 流水线

 

如上图所示,该流水线展示了一个软件在其最终交付给客户或者投入上线之前,它在其生命周期内各个阶段中的移动过程。

接下来我们具体看一下该 CI/CD 流水线。假如我们要构建一款 Web 应用程序,并将它部署在一个现场 Web 服务器上。同时我们有一组开发人员,他们主要负责编写代码,并将代码构建为 Web 应用程序。假设现在开发团队已经将代码提交到版本控制系统(如:Git,SVN)中了。

构建阶段

接下来,代码将会经历构建阶段,这也是 CI/CD 流水线的第一阶段。在此之前,开发者已经将他们的代码加上合适的标签,并提交到版本控制系统中了。

如何从零开始搭建 CI/CD 流水线

假如我们采用的是 Java 语言,那么还需要先进行代码编译。因此,代码在通过版本控制阶段之后,会先在构建阶段予以编译。该阶段会从代码库的各个分支中获取到所有的功能代码,合并后最终通过一个编译器来编译它们。这整个过程都被称为「构建阶段」。

 

测试阶段

img

构建阶段结束后,将会继续进入到代码的「测试阶段」。在这个阶段中,我们会进行各种各样的测试,单元测试就是其中之一。在该阶段中,我们会测试代码中多个组件间的关系或者单个组件的功能,同时也会进行软件的可用性测试。

部署阶段

 

测试阶段完成后,就要进入「部署阶段」了。在该阶段,代码将会被部署到准生产环境服务器(staging server)或者测试环境服务器(test server)中。同时在该阶段中,我们既可以查看程序代码,也可以在模拟器中运行该应用程序。

自动测试阶段

只要我们的代码部署成功,我们就可以运行另一组可用性测试了。该阶段结束后,如果所有的测试都通过了,那么就可以将其部署到生产环境中了。

 

部署到生产环境 

另外值得一提的是我们可能在每一个阶段的执行过程中遇到一些错误。在这种情况下,我们可以将错误邮件发回到开发团队中,以便他们能够及时修复这些错误。当开发团队修复完成后,就可以将代码重新提交到版本控制系统中,然后再次从头开始执行该流水线。

如果在执行测试的过程中遇到了任何错误,那么这些错误也将反馈给开发团队,等他们修复完成后,同样会再次触发该流水线,进行新一轮的持续迭代。

 

度量和验证阶段

 因此,整个生命周期将会继续迭代下去,直到我们得到可以直接部署到生产环境中的代码或者产品。除此之外,在生产环境中我们还需要对代码进行度量和验证,以实时监控应用的线上运行状态。

到目前为止,我们已经了解了 CI/CD 流水线及其工作原理,接下来我们将继续介绍什么是 Jenkins ,以及如何使用 Jenkins 部署示例代码,并自动化整个过程。

 

CI/CD的价值:

1、持续集成中任何一个环节都是自动完成的,无需太多的人工干预,有利于减少重复工程以节省时间和工程量。

2、持续集成保障了每个时间点上团队成员提交的代码是能成功集成的。换言之,任何时间点都能第一时间发现软件的集成问题,使得任意时间发布可部署的软件成为了可能。

 

jenkins创建流水线

我们的目标是要将软件开发生命周期的整个过程都自动化,从开发人员向代码库中提交代码开始,到将此代码投入生产环境中使用为止。

为了使整个软件开发流程处于 DevOps 模式或自动化模式,我们就需要对 CI/CD 流水线进行自动化。因此,我们还需要一款自动化工具来做这件事情,它就是 Jenkins。

首先,我们需要拥有一个可以供开发人员提交代码的仓库。同时,Jenkins 也提供了前端展示的页面,我们可以使用该前端页面来定义整个流水线的作业(job)和任务(task)。对于某一个应用程序而言,我们的目标就是通过特定的工具实现其持续集成和持续交付的自动化流程。

Jenkins 会从 Git 代码仓库中拉取各个分支的代码,然后将其移动到 “代码提交阶段”。拉取到各个分支的代码之后,Jenkins 就会将其继续移动到“构建阶段”,该阶段会对代码进行编译工作。如果是像 Java 这类语言的话,我们还可以在 Jenkins 中选用 maven 之类的构建工具,通过 maven 对代码进行编译。之后在部署过程中,还可以将编译好的代码进行一系列的测试,同时这些测试也会由 Jenkins 监督执行。

之后,Jenkins 就会将代码移动到准生产环境,并使用 Docker 进行部署。在准生产环境中会运行一系列单元测试和可用性测试。如果能够通过所有的测试,Jenkins 就会将它继续移动到生产环境中。

构建 CI/CD 流水线

环境配置:Jenkins 2.121.1

项目执行结果

其他项目构建成功后,会触发接口自动化测试项目。接口自动化测试项目分为 3 个阶段:Preparation,Build 和 Result。下图显示项目的执行效果。

img

 

新建项目,选择 “流水线” 项目

新建 Pipeline 项目很简单:Jenkins 选择 “新建” -> "流水线"(Pipeline)

img

 

项目配置

“General” 配置和 “构建触发器” 配置,这里不再介绍,重点介绍 Pipeline“流水线” 配置,需要把构建过程用 Pipeline script 的形式描述 保存 Pipeline script 有 2 种方法:一种是 pipeline script from SCM:需要配置 SCM 代码存储 Git 地址或 SVN 地址,指定 script 文件 Jenkinsfile 所在路径,每次构建 job 会自动去指定的目录执行 script 文件;一种是 pipeline script,直接在 Web UI 的 script 输入框输入 pipeline script 语句;分别的界面如下:

img

 

 

img

 

PIpeline 脚本

node('229') {

    stage('Preparation') {
        git credentialsId: '****', url: 'http://gitlab.***.com/***/testcase_****_APITest.git'
    }

    sleep time: 1, unit: 'MINUTES'

    stage('Build') {
        catchError {
            sh '''#!/bin/bash
            cd ..
            source httpruner_venv/bin/activate
            cd PCCashier_APITest_Dev

            hrun --dot-env-path devlop.env --html-report-name index_dev.html tests/testcases/'''
        }
        echo currentBuild.result

        if (currentBuild.result == 'FAILURE')
        {
            step([$class: 'Mailer', notifyEveryUnstableBuild: true,
            recipients: emailextrecipients([[$class: 'CulpritsRecipientProvider'],
                                          [$class: 'RequesterRecipientProvider']])])

        }
    }

    stage('Results') {
        publishHTML([allowMissing: true, alwaysLinkToLastBuild: true, includes: '**/*.html', keepAll: true, reportDir: '/home/jenkins/work/workspace/PCCashier_APITest_Dev/reports', reportFiles: 'index_dev.html', reportName: 'Html_Report', reportTitles: 'PC收银台接口测试报告'])
    }
}

第一次接触 Pipeline script,肯定比较困难。Jenkins 也提供了脚本生成器。可以选择需要的功能,并输入参数,可点击自动生成脚本。

img

 

接下来,简单描述脚本的注释。 node('229')表示项目运行在 Jenkins 的节点 229 上。

img

stage('Preparation')项目的 Preparation 阶段,主要填写接口测试项目的 git 库地址,用户名和密码(身份认证),这样每次执行构建,都会更新到最新的状态,执行最新的测试用例。

stage('Build')项目的 Build 阶段,主要填写执行接口测试的 shell 脚本,并在测试执行失败时给造成构建失败的代码提交者和触发构建者发送邮件。

stage('Results')项目的 Result 阶段,主要填写接口测试执行完成后,发布生成的测试报告(index_dev.html),可在 Jenkins 里查看,报告名是 Html_Report。

 

参考链接:

https://linux.cn/article-11307-1.html

https://zhuanlan.zhihu.com/p/90612874

https://testerhome.com/topics/14942

 

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐