持续集成和持续部署CICD
  Pq37jUF4UeqZ 2023年11月02日 50 0

@Author: Basil Guo @Date: Dec. 13, 2020 @Description: 持续集成和持续部署 @Keyword: test @Type: tutorial


1. CI(持续集成)

持续集成:continuous integration。编码时,完成一个功能之后,立即提交代码到git仓库中,将项目重新的构建并且测试。

持续集成服务器会持续监视源码库,每当检测到有变化时,将会触发一系列操作。第一个操作是构建代码,在构建代码时运行所有可用的测试(通常是单元测试),然后创建一个可部署的工件。接着,该工件通常将部署到作为实时环境副本的服务器上。一旦代码部署到服务器,就会在服务器上执行剩余的测试,以确保一切正常。如果它没有按照预期工作,构建就会失败,开发团队将收到通知,接着便要修复问题。需要注意的是,我们只构建了一次工件。如果需要多次重新进行构建,则每次测试的工件可能是不同的(比如,可能是用不同版本的Java构建的,也可能是它应用了不同的属性,也可能是其他状况)。

CI主要功能有两个:一是快速发现错误,二是防止代码偏离。通过CI我们寻求的工作流程是 image.png

2. CD(持续部署、持续交付)

持续部署、持续交付:continuous deployment

3. 工具

两种较为流行的持续集成服务器——TeamCity和Jenkins。由于TeamCity在许多企业环境中较受欢迎,因此对它有一个基本的了解是很有用的。Jenkins则功能丰富,即便你现在还未使用Jenkins,在其后职业生涯的某个阶段可能仍会安装Jenkins。

3.1 TeamCity

TeamCity是一个企业级持续集成服务器。它支持许多开箱即用的技术,非常可靠和强大。功能之一是能够启动Amazon Web Service(AWS)云构建代理。你需要创建构建代理Amazon Machines Image(AMI),一旦完成此操作,TeamCity服务器就可以启动任意数量的构建代理,然后在构建结束后关闭它们。

现在TeamCity的云版本是开放的,可以注册试用,后续不知道。如果云版本不能使用,需要在本地计算机上完成TeamCity的基本安装,才能进行本节的操作。可以下载WAR文件,并在Tomcat等应用服务器上运行它。如果你的计算机上安装了Docker,也可以运行以下命令(需要在本地计算机上创建~/teamcity/data~/teamcity/logs目录)。

$ docker run -it --name teamcity-server-instance \
	-v ~/teamcity/data:/data/teamcity_server/datadir \
	--v ~/teamcity/logs:/opt/teamcity/logs \
	--p 8111:8111 \
	-jetbrains/teamcity-server

本地访问http://localhost:8111。首次启动TeamCity时,将有标准的设置过程。只需要单击Proceed,进入创建管理员账户的界面。生成一个管理员账户(例如,临时将用户名设为admin,密码设为123456),然后单击左上角的Projects按钮,会看到以下界面。由于本地机器实在是受限,所以我将使用在线云版本,其实和本地版本没什么太大差别。我使用的是老UI。新版本UI切换点击左上角那个蓝色的小量瓶图标。

image.png

  1. 单击Create Projects按钮;
  2. 选择Manually手工方式命名项目;填写所需Name和Project ID,描述可不写。【进行到第7步,测试死活行不通,我就使用了From GitHub.com导入了,后续步骤类似,不过是已经都写好了,可能需要Edit】

image.png

  1. 单击Create按钮,完成项目的基本创建;

  2. 向下滚动到Build Configurations区域;

image.png

  1. 进入此区域后,单击Create build configuration按钮。这里是创建生成配置的地方。这里将其简单命名为Webdriver,因为它会用来运行WebDriver测试(当然,可以给生成配置起一个更好的名字),参见下面的截图。

image.png

  1. 当设置完配置的名称时,请单击Create按钮。
  2. 配置源码控制系统,使TeamCity可以监视源码控制的变更。如下图所示,这里选择的是Git,并填入了一些参考值,但显然你需要填入与自己的源码控制系统相关的值。

image.png

  1. 一旦填写完详细信息并单击Create按钮后,就要添加构建步骤,如下图所示。单击Add build step按钮开始下一步。

image.png

  1. 弹出进行构建的主界面(见下图)。

image.png

  1. 选择构建类型。在本例中,因为用的是Maven项目,所以这里选Maven。为Maven构建填入详细信息。这里简单填了“clean verify”,由于之前已经确保Selenium配置文件默认运行,因此现在无须查看Advanced options。

image.png

  1. 向下滚动,单击Save按钮,TeamCity构建就已准备就绪。现在只需要确保每次将代码签入源码库时都会触发它。
  2. 左侧导航栏单击Triggers,可能需要先单击Show more。在下图中,可以设置一个操作列表,它们将引发构建的执行。请单击Add new trigger按钮并选择VCS Trigger。

image.png

  1. 如果单击Save按钮,将设置一个触发器。每次将代码推送到中央源码库时都会触发构建。

3.2 Jenkins

Jenkins是持续集成(Continue Integration,CI)领域最受欢迎的公司之一,也是一些云服务的基础(如cloudbees)。它的应用非常广泛,有关持续集成的内容几乎都会提及它。需在本地计算机上完成Jenkins的基本安装,才能进行本节的操作。请按照以下或者官网文档进行。

  1. 如果你已经安装了Tomcat等应用服务器,那么接下来只需要下载WAR文件,并将其放到应用服务器的webapps目录下即可。如果你决定使用Docker路由,则可以运行以下命令(需要在本地计算机上创建~/jenkins目录)。【这里因为我不想下载Windows的安装版,折腾了半天,最后在Linux上使用docker来运行了,修改Windows上的C:\Windows\System32\drivers\etc\hosts文件做了一个地址映射到http://basilguo:8080/,是校园网内使用,外界访问不到的。】

    $ docker run \
      -u root \
      --rm \
      -d \
      -p 8080:8080 \
      -p 50000:50000 \
      -v /home/basil/code/jenkins/jenkins-data:/var/jenkins_home \
      -v /var/run/docker.sock:/var/run/docker.sock \
      -v "$HOME":/home
      jenkinsci/blueocean
    
  2. 要访问Jenkins 实例,请在浏览器地址栏中输入http://localhost:8080/jenkins/。不过在此之前需要先修改源配置,毕竟Jenkins服务器在国外,实在是太慢了,受不了。可以更换清华的源。需要修改,C:\Users\<USER_NAME>\.jenkins\updates\default.json,强烈建议先备份本文件。把www.google.com替换为www.baidu.com,不过这个我看只有一处,就是测试网络连接的,其它的google不要动,其它和这个没有关系。接下来换成清华的源。但这里我看有两种改法^1,具体情况未知。一个是https://updates.jenkins.io/download,另一个是https://updates.jenkins-ci.org/download,不过都是换成http://mirrors.tuna.tsinghua.edu.cn/jenkins。它会生成源在C:\Users\<USER_NAME>\.jenkins\hudson.model.UpdateCenter.xml

  3. 首先将看到一个界面(见下图),它要求你解锁Jenkins。

image.png

  1. 从终端或者所说的文件C:\Users\basil\.jenkins\secrets\initialAdminPassword中复制密码,并将其输入解锁界面,然后单击Continue按钮。之后,它将询问你打算安装哪些插件,暂时先使用Jenkins的默认建议,比较慢,需要等待较长时间。Jenkins将下载所需的插件,并为首次使用做好准备。

image.png

  1. 最后一个设置步骤是创建一个管理员账号(可以再次临时将用户名设为admin,密码设为123456)。

image.png

  1. 现在Jenkins已经准备就绪,你将看到Welcome toJenkins界面。

image.png

接下来,我们看看如何创建Jenkins构建,以便能运行测试。

  1. 单击上一个界面中的create a job链接,弹出以下界面。填入构建名称,然后选择Freestyle project选项。

image.png

  1. 单击OK按钮进入构建配置界面,再单击Source Code Management选项卡,选择Git并填入详细信息(见下图)。当然,你可以使用自己喜欢的源码管理系统。Git非常流行,但是Jenkins也支持许多其他工具。

image.png

  1. 在以下界面中设置构建触发器和构建环境。最好设置Git钩子,以便每次向源码控制提交更改时都触发构建。

image.png

  1. 设置Maven job。单击Add build step按钮,然后选择Invoke top-level Maven targets(见下图)。

image.png

  1. 只需要填入默认的Maven目标,即可完成设置(参见下图)。【不过这里可能写错了,不应该写mvn clean verify,应该写clean verify,不然build的时候就报错找不到mvn这个goal。】

image.png

  1. 单击上一个界面中的Save按钮,会返回刚创建的项目。现在总算大功告成了,截图如下。

image.png

现在应该可以运行Jenkins构建(左侧Build Now)了,它将下载所有的依赖项,并运行所有相关内容,第一次会很慢。至于结果可以查看左下的Build History。

到目前为止,我们已经了解了如何创建一个非常简单的持续集成服务,但这仅是冰山的一角。我们已经使用持续集成来提供快速反馈循环,这样便可在问题出现时,迅速收到通知,并及时做出响应。如果扩展该服务,使它不仅能告知我们是否存在问题,还能告知我们是否准备将某些内容部署到生产环境,将会怎样?这是持续交付的目标(参见下图)。

image.png

我们目前已经有一个基本的CI设置,以便在CI上运行测试,但是这仍然有很大的差距。到目前为止,这项基本的CI设置还只运行在一个操作系统上,无法在所有浏览器/操作系统的组合上运行测试。可以通过设置各种构建代理来处理这个问题,这些构建代理连接到CI服务器并运行不同版本的操作系统/浏览器。然而,这需要更多时间来进行配置,而且还相当复杂。可以通过设置Selenium-Grid来扩展CI服务器的功能,CI服务器可以连接到Selenium-Grid并运行各种Selenium测试。其功能非常强大,但也有设置成本。在这里可以使用第三方服务,如SauceLabs。大多数第三方Grid服务都有免费版,但这在刚入门或在刚接触其功能时非常有用。请记住,使用第三方服务并不会将你绑定在这些服务中。由于每款Selenium-Grid几乎都一样,因此即便开始使用第三方服务,也无法阻碍你构建自己的网格,也可以配置自己的构建代理,准备以后脱离第三方服务。

参考文献

  1. 精通Selenium WebDriver 3.0 (第2版) — 马克·柯林
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
Pq37jUF4UeqZ
最新推荐 更多