Java+Maven+TestNG+GoCD - 部署篇

       GoCD 是一个开源的持续交付/持续部署的系统,可以构建,自动化测试,自动部署等等,和Jenkins类似。但是GoCD的设计理念是持续部署,注重 workflows 的组合,流水线化构建-测试-发布。

       在GoCD系统中,主要由两部分组成,Go-Server和Go-Agent。 服务器(server)来控制一切,它给用户提供系统的界面,为代理提供工作, 它不执行任何用户指定的“工作”。代理(Agent)执行系统用户或管理员配置的所有工作,例如:运行命令、执行部署等。所以首先需要需要安装Server和至少安装一个Agent。

       划重点:本文主要的受众人群是测试人员,上边文章我们讲了如何创建一个Maven+TestNG+Java的测试项目,本文讲解如何将这样一个测试代码在GoCD上持续集成,且展示报告。

安装服务器(Server)和代理(Agent)

注意: Java 需要安装 version11

  1. 选择你的系统 (以 Mac OS X 为例)
  2. 下载最新的稳定的服务(Server)和代理(Agent),放在自定义的一个路径下。本文使用的GoCD版本为19.9.0,下载地址: https://www.gocd.org/download/#osx
  3. 解压服务(Server)安装包,打开终端,进入go-server-${version}文件夹,执行脚本 ./bin/go-server console,将在前台启动GoCD的服务(Server)
    StartServer.png
  4. 解压代理(Agent)安装包,打开另一个终端,进入go-agent-${version}文件夹,执行脚本 ./bin/go-agent console,将在前台启动GoCD的代理(Agent)。我们可以在一个机器上启动多个代理,也可以在不同的系统上启动代理,可以实现不同的环境需求。
    StartAgent.png
    ServerAndAgent.png
  5. 服务器(Server)安装成功后,默认的端口号是 8153/8154 (HTTPS)。 你就可以访问 https://localhost:8154, 如下图所示:
    NewPipeline.png
  6. 代理(Agent)安装完成后,进入导航栏Agents页面,将会有一个代理显示在此页面,如下图所示:
    NewAgent.png
  7. 安装完成后,我们就可以开始创建pipeline了。

此外,除了在前台启动服务和代理的脚本以外,GoCD还有其他的一些脚本,如下:

脚本 描述
./bin/go-server console GoCD 服务在前台启动
./bin/go-server start GoCD服务在后台启动
./bin/go-server stop 停止GoCD服务器
./bin/go-server restart 重启GoCD服务器
./bin/go-agent console GoCD 代理在前台启动
./bin/go-agent start GoCD代理在后台启动
./bin/go-agent stop 停止GoCD代理
./bin/go-agent restart 重启GoCD代理

创建Pipeline

GoCD名词解释:

      在开始创建pipeline之前,我们先了解一些GoCD的名词的概念:

1. Material

      可以选择git作为material, 填写Git仓库或者GitHub地址, 例如: https://github.com/gocd-contrib/getting-started-repo.git,之后点击Test Connection按钮,如果链接OK, 说明设置成功,如下图所示。
       Material 是Pipeline开始执行的条件,一旦git仓库有新的代码提交,服务会持续check,获取到有更新,就会触发pipline运行。而且每一个pipeline可以有多个Material去控制。

SettingMaterial.png

2. Pipeline
  • Pipeline : 是stages 的集合,一个pipeline可以有多个stage,这些 stage 按照顺序运行。如果其中一个 stage 失败了,那这个 pipeline 也随之失败,剩下的 stages 也不再执行。可以把pipeline理解为管道,他由多个小管道组合起来,当其中一个管道不同的时候,那水肯定就不能继续流到下一个管道。

  • Stage :是 job 的集合,一个stage可以有多个job,但是这些 job 之间不存在顺序依赖,所以一个 stage 内的 jobs 可以同时运行。如果其中一个 job 运行失败了,不会影响其他job的运行,但是只要有一个job失败,那么这个 stage 也随之失败。一般在前后端分离的项目,我们可以配置前端build的job可以后端build的job,在执行的时候互相不依赖,但是只要任何一个有问题,我们就不能再继续执行下边的操作。

  • Job: 是tasks 的集合,一个job可以有多个task,task也是按照顺序运行。如果其中一个 task 运行失败了,那这个 job 也随之失败,剩下的 task 也不再执行。所以在配置的时候需要制定好顺序。

  • Task :task是Pipeline中的最小单元,用于执行命。所以一个task就是执行一条或者多条命令。

      下图就是GoCD官网的解释图,形象的展现了pipeline,stage,job,task之间的关系。
pipeline.png
创建pipeline:

      接下来我们开始创建一个pipeline。创建pipeline的名字,一个pipeline至少要有一个stage,stage至少需要一个job,一个job至少需要一个task。所以初始化pipeline的时候我们需要设置pipeline的触发条件,配置项目的的仓库地址,然后给pipeline,stage,job启名字,在写一个task的命令,保存以后一个简单的pipeline的架子就搭建起来了,如下图所示:


1. Pipeline的配置:

      点击上图pipeline的设置按钮,就可以进入pipeline的配置页面,点击pipeline,这个页面有多个Tab,都是对pipeline的配置。在Stages tab页面可以添加新的stage。
      打开material,这里需要配置Destination Directory 为仓库的名字。之后Agent会clone对应的代码在这个路径下。这个路径是一个相对路径 {存放下载的Agent包的地址}/pipelines/{pipeline名字}/{仓库的名字}。 当一个pipeline有多个material时,每个material都有自己对应的仓库名字,填写在Destination Directory。

2. Stage的配置:

      点击对应的stage,也有多个tab对stage进行配置。可以在Jobs页面添加新的Jobs。如果你的这个Stage需要对代码进行操作,就需要勾选Fetch Material,这样就会在执行Stage的时候先Clone代码到Agent上。


3. Job的配置:

      点击对应的Job,也有很多tab对job进行配置。

  • Job Settings:有一个Resource的概念,Resource是给Agent做的一个标签,当有多个Agent时,可能每个Agent有不同的配置,不同的空间大小,根据Agent的不同,可以指定Job在某一类的Agent上执行。在Agent页面可以给不同的Agent添加不同的Source,如:test这个标签代表可以用来跑测试用例,那么在这个Job的resource处可以选择test这个Resource,意味着,这个Job只能使用有test标签的Agent来运行。在GoCD的官网,这个图,解释了Resource的概念,当有一个Job需要在有FireFox的机器上运行,那这个Job就可以指定有FireFox的Resource。

  • Tasks: 可以添加更多的task;

  • Artifacts:Artifacts指的是这个Job的产出物,对于测试来说,产出物就是测试报告,所以我们需要把测试的报告展示在GoCD上。因为我们的测试用例是在Agent上运行的,所以测试的结果也会在Agent上,在Job运行完成后,会将产出物从Agent上传给Server端,这样才能在Server上展示报告结果。创建一个Test artifact:
           Source ->就Agent上报告的地址,也是相对路径:{仓库名称}/{报告的文件路径},如果产出物是一个html,就可以写到html文件,如果产出物是一个文件夹,可以填写到文件夹,后边用*号,代表文件夹中的所有文件。
           Destination -> 要将报告存放在Server的地址,也是一个相对路径: ``{存放下载的server包的地址}/artifacts/pipelines/{pipeline名字}/{第几次执行的stage}/{stage名字}/{第几次执行的job}/{job名字}`,会在这个路径下存放产出物。

  • Custom: 定义一个新的Tab,来展示测试的结果,这个Tab会在job的结果页面显示。

4. Task的配置:

       task就是Command,GoCD支持很多种command,可以先LookUp然后选择对应的命令,就可以展示在左边。这里我们是使用maven打包,所以直接可以用 mvn clean test。很多命令都是基于项目的路径执行,所以这里需要配置Working Directory 为仓库的名称。


       到这里我们测试的配置已经结束,可以Trigger pipeline,运行结束后,你就可以在TestResults Tab看到测试报告。TestNG的报告有点丑,接下来会使用其他的插件来美化报告。

想要学习Jenkins的可以看这里:
Java+Maven+TestNG+Jenkins - 部署篇

你可能感兴趣的:(Java+Maven+TestNG+GoCD - 部署篇)