2.4.2 配置jenkins
首先启动容器。
sudo docker-compose up -d
●将docker宿主机配置为节点
这里我选择将docker宿主机作为jenkins的slave节点。所以首先配置jenkins ssh免密登录docker宿主机,登录用户为宿主机的ivanli用户:
① docker exec进入jenkins容器中,执行:
ssh-keygen -t rsa
一路回车生成jenkins容器的公钥和私钥。
② 将jenkins容器的公钥写进宿主机(192.168.201.130)ivanli用户的~./ssh/authorized_keys中:
ssh-copy-id -i ~/.ssh/id_rsa.pub ivanli@192.168.201.130
③ 在jenkins容器中登录宿主机,以便将宿主机的ip写入jenkins容器的~/.ssh/known_hosts文件中:
ssh ivanli@192.168.201.130
④ jenkins中新增Credentials
页面如下:
a、Username填入免密登录宿主机的用户ivanli;
b、Private Key中填入jenkins容器生成的私钥。
新增Credentials
⑤ jenkins中新增宿主机节点
页面如下:
a、启动方法选SSH;
b、主机填入宿主机ip;
c、Credentials选刚才新建的Credential;
d、Java路径填入宿主机java路径。
新增linux节点
然后在jenkins页面中luncher宿主机节点。
安装Gitlab Plugin 和 Gitlab Hook Plugin 插件
要使用jenkins检测gitlab代码是否有更新(push),需要安装Gitlab和Gitlab Hook插件。
gitlab和gitlab hook插件
●配置jenkins容器的jenkisn用户ssh免密访问gitlab
① 将jenkins容器jenkins用户生成的公钥复制到gitlab用户的settings -> SSH Keys中,过程同2.4.2节一样,不再复述。
② jenkins中新增Credentials,私钥填入jenkins容器jenkins用户生成的私钥。
●配置job
配置一个检测gitlab测试脚本更新及触发构建测试工作的job。
① jenkins中新建job,名为test_git_maven,执行节点选择docker宿主机。
执行节点选择docker宿主机
② 源码管理选择git
页面如下:
a、仓库地址填入项目的ssh地址。注意!填入项目的ssh地址,而不是http地址;
b、Credentials选择之前新增的jenkins容器的jenkins用户的Credential;
c、Branch选择主干master(因为我是将本地代码提交到gitlab的lego2_AdServiceTestSuite项目的主干上)。
源码管理
③ 构建触发器选择Gitlab
页面如下:
复制图中的url。
构建触发器
④ 将上步的url粘贴到gitlab项目中的webhook中。Trigger中勾选Push events。这样,本地代码提交到gitlab上后,jenkins就会通过gitlab hook插件检测到gitlab上代码有更新,触发job构建。
gitlab项目中添加webhook
⑤ 构建
构建中执行测试项目中的dockerrun.sh脚本。
构建
⑥ 构建后操作
构建后发布测试报告,这里就不多说了,具体配置如图:
构建后操作
测试
首先分别启动gitlab和jenkins容器:
ivanli@ubuntu:~$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1f6d63de064d jenkins/jenkins:lts "/bin/tini -- /usr..." 3 minutes ago Up 2 minutes 0.0.0.0:50000->50000/tcp, 0.0.0.0:9001->8080/tcp jenkins_test fa40db7215e5 gitlab/gitlab-ce:latest "/assets/wrapper" 47 hours ago Up 47 hours (healthy) 443/tcp, 0.0.0.0:2222->22/tcp, 0.0.0.0:8929->80/tcp gitlab ivanli@ubuntu:~$ |
在本地测试项目中新增一个hello文件,git push到gitlab中,触发jenkins构建job。
ivanli@ubuntu:~/myown/docker_test/docker_gitlabProject/lego2_AdServiceTestSuite$ touch hello ivanli@ubuntu:~/myown/docker_test/docker_gitlabProject/lego2_AdServiceTestSuite$ git add hello ivanli@ubuntu:~/myown/docker_test/docker_gitlabProject/lego2_AdServiceTestSuite$ git commit -m "add hello" [master ac113c1] add hello 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 hello ivanli@ubuntu:~/myown/docker_test/docker_gitlabProject/lego2_AdServiceTestSuite$ git push -u origin master Counting objects: 3, done. Delta compression using up to 4 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (2/2), 254 bytes | 0 bytes/s, done. Total 2 (delta 1), reused 0 (delta 0) To ssh://git@192.168.201.130:2222/ivanli/lego2_AdServiceTestSuite.git d700f8e..ac113c1 master -> master Branch master set up to track remote branch master from origin. ivanli@ubuntu:~/myown/docker_test/docker_gitlabProject/lego2_AdServiceTestSuite$ |
过一会就可以看到,jenkins检测到gitlab上lego2_AdServiceTestSuite项目有代码更新后,自动触发构建:
Started by Gitlab push by ivanli
jenkins job 输出:
可见gitlab上的代码被down到执行节点,然后开始测试,首先创建并启动mysql容器:
创建mysql容器
接着创建maven容器,执行测试
,测试结束后,删除容器,jenkins收集测试报告:
测试结束,删除容器,收集报告
构建结果:
构建结果
测试报告:
测试报告
测试报告
由此,实现了最初的目标,借助持续集成的思想将接口测试自动化。
总结
如前言所说,借着之前工作中遇到的接口测试,考虑了怎样将手动执行的接口测试给自动化实现,也考虑如何去实践持续集成的思想,故一步步将整个流程给趟了下来。在这个过程中也学到了不少东西,当然,如果想完完全全的将当前测试工作持续集成化,还有不少的限制和工作去做,这也是需要自己一点点去学习和不断的感悟。
自己毕业也已快2年半了,从一个非科班专业出身的懵懂应届生,也算一点点入门了QA这个职业,也曾经对自身未来的职业发展感到迷茫和彷徨,平时也一点点积累和学习软件测试方面的资料,一点点明确了QA未来的发展方向,测试平台服务化,测试平台智能化,DevOpts这3个方向就是未来除了管理方向外,QA的职业发展方向吧,也希望自己要更加努力一些,跟上行业要求,早日在这3个方向中的1个方向上有所发展。
最后,希望这篇文章能帮助一些初级QA。