霍格沃兹测试学院 Docker 实战

孙高飞 · March 03, 2019 · Last by 梧桐雨 replied at July 13, 2019 · 2002 hits

docker原理知识

https://testerhome.com/topics/9462
https://testerhome.com/topics/9522
https://testerhome.com/topics/9567
https://testerhome.com/topics/9859

自动化流程图

练习一

使用host模式或者bridge模式启动jenkins服务

需要的插件:

  1. GitHub
  2. SSH Salve
  3. Maven
  4. Allure

练习二

自己使用dockerfile build一个容器并启动。 然后使用jenkins的slave连接到这个容器上。

练习三

自己使用container模式搭建模拟测试环境。

练习四

使用docker selenium 启动一个hub,两个node。 每个node10个浏览器
UI自动化代码地址:https://github.com/ycwdaaaa/techUI

练习五

配置自己的jenkins job 执行UI自动化

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 61 条回复 时间 点赞

已启动jenkins

docker run --name myjenkins -d --network host -v /home/yw/test/images/jenkins_home:/var/jenkins_home --env JAVA_OPTS="-Xmx8192m" jenkins
docker run --name myjenkins -d -p 8080:8080 -v /home/yw/test/images/jenkins_home:/var/jenkins_home --env JAVA_OPTS="-Xmx8192m" jenkins

练习一

docker run --name myjenkins_host -d --net host -v /home/owen/images/jenkins_log:/var/jenkins_home jenkins
docker run --name myjenkins_bridge -d --net bridge -p 8999:8080 -v /home/owen/images/jenkins_log:/var/jenkins_home jenkins

练习二

DokerFIle
FROM centos
ADD entrypoint.sh /root
RUN yum install -y vim
ENTRYPOINT ["/bin/bash","/root/entrypoint.sh"]

docker build myping -f .
docker run --name myping -itd -p 8999:22 myping

###练习三
start.sh

docker run -d --name myconan myconans
docker run -d --name myholmes --net container:myconan holmes

已启动

练习1:
命令:docker run --name myjenkins -d -p 8080:8080 -v d:\temp\jenkins_home:/var/jenkins_home jenkins

练习2:
命令:docker build -t my .

练习3:

练习4:

10Floor has been deleted

练习一:

练习二:

练习二

系统环境

Win10环境:
本地目录 D:\JavaWork\testhome\DockerDemo0303\Dockfile 下存在Dockerfile 、entrypoint.sh文件

Dockerfile

FROM  centos   
ADD entrypoint.sh /root
RUN yum install -y vim
ENTRYPOINT ["/bin/bash","/root/entrypoint.sh"]

entrypoint.sh

ping www.baidu.com

执行 docker build -t myimg .

执行 docker run -it --name mycon myimg

14Floor has been deleted
dreamerMac:docker anker$ mkdir myDoc
dreamerMac:docker anker$ cd myDoc/
dreamerMac:myDoc anker$ vim Dockerfile
dreamerMac:myDoc anker$ cat Dockerfile
FROM centos
MAINTAINER Dreamer
ADD entrypoint.sh /root
RUN yum install -y vim
ENTRYPOINT ["/bin/bash","/root/entrypoint.sh"]

dreamerMac:myDoc anker$
dreamerMac:myDoc anker$
dreamerMac:myDoc anker$ vi entrypoint.sh
dreamerMac:myDoc anker$
dreamerMac:myDoc anker$ chmod 777 entrypoint.sh
dreamerMac:myDoc anker$ ./entrypoint.sh
PING www.a.shifen.com (163.177.151.109): 56 data bytes
64 bytes from 163.177.151.109: icmp_seq=0 ttl=50 time=13.460 ms
64 bytes from 163.177.151.109: icmp_seq=1 ttl=50 time=15.418 ms
^C
--- www.a.shifen.com ping statistics ---
2 packets transmitted, 2 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 13.460/14.439/15.418/0.979 ms
dreamerMac:myDoc anker$
dreamerMac:myDoc anker$
dreamerMac:myDoc anker$ docker build -t myPing
invalid argument "myPing" for "-t, --tag" flag: invalid reference format: repository name must be lowercase
See 'docker build --help'.
dreamerMac:myDoc anker$ clear
dreamerMac:myDoc anker$ docker build -t myping ./
Sending build context to Docker daemon 3.072kB
Step 1/5 : FROM centos
latest: Pulling from library/centos
latest: Pulling from library/centos
a02a4930cb5d: Pull complete
…………
…………
…………

Successfully built 96b19226b50b
Successfully tagged myping:latest


dreamerMac:myDoc anker$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
myping latest 96b19226b50b 23 seconds ago 335MB
jenkins/jenkins latest e2f14001cdf9 5 days ago 704MB
centos latest 1e1148e4cc2c 2 months ago 202MB
jenkins latest cd14cecfdb3a 7 months ago 696MB


dreamerMac:myDoc anker$ docker run --name mydocker -itd myping
233b49545a5b661f7804c7c1b5bd168982a3608e64014aefc79f738edd0ebb75
dreamerMac:myDoc anker$
dreamerMac:myDoc anker$
dreamerMac:myDoc anker$
dreamerMac:myDoc anker$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
233b49545a5b myping "/bin/bash /root/ent…" 4 seconds ago Up 3 seconds mydocker
7614bcf93f1a jenkins/jenkins "/sbin/tini -- /usr/…" 42 minutes ago Up 5 minutes 0.0.0.0:8080->8080/tcp, 50000/tcp myjenkins
dreamerMac:myDoc anker$

练习三

docker run --name=conan -d -p 5000:4200 conan
docker run --name=holmes -d --net=container:conan holmes

docker stop conan holmes
docker rm conan holmes

docker run -d --name conan -p 8099:4200 conan
docker run -d --name holmes --net=container:conan holmes

docker build -t conan .
docker build -t holmes .
docker run -d --name conan -p 8999:4200 conan
docker run -d --name holmes --net=container:conan holmes

  • 练习3
# conan-start.sh
docker rm -f conan
docker run --name conan -p 4200:4200 -d conand

# holmes-start.sh
docker rm -f holmes
docker run --name holmes -d --net container:conan holmes

docker build -t conan -f Dockerfile .
docker build -t holmes -f Dockerfile .
docker run --name conan -d -p 9000:4200 conan
docker run --name=holmes -d --net=container:conan holmes

docker run -d --name=conan -p 8999:4200 conan
docker run -d --name=holmes --net=container:conan holmes

练习4:

作业四:


2个node,每个node是5个Chrome浏览器

练习4

老师,用win7安装的docker实际是启动了一个VirtualBox上的系统吧?
那么启动了docker run -d --name myjenkins -p 8080:8080 jenkins那么也是启动的VirtualBox的jenkins吧?
这时候win7的浏览器怎么访问这个jenkins?


老师 ,这个地址 http://172.17.0.4:5555 是谁的?

  • 练习5

http://jenkins.testing-studio.com:8080/
这个服务关了么 我想去眇眇jenkins的构建的那些~

孙高飞 #37 · March 03, 2019 作者
梦梦GO 回复

因为是教学服务器,很多老师都用的 。 为了不影响其他老师,可能助教老师已经给删除了

练习5
docker 容器运行太多卡,就没运行conan、Holmes

mvn clean test -Dtest=SeleniumGridTest

SeleniumGridTest

class SeleniumGridTest {
@Test
void test() {

ChromeOptions chrome_options = new ChromeOptions();
// chrome_options.addArguments("--headless");
chrome_options.addArguments("--no-sandbox");
chrome_options.addArguments("--disable-gpu");
chrome_options.addArguments("--disable-dev-shm-usage");

WebDriverContainer webdriverContainer = new WebDriverThreadLocalContainer();
Configuration.screenshots = false;
webdriverContainer.clearBrowserCache();

DesiredCapabilities capabilities = DesiredCapabilities.chrome();
capabilities.setCapability(ChromeOptions.CAPABILITY, chrome_options);


Configuration.browser = "chrome";
Configuration.browserCapabilities = capabilities;
// 本机IP :192.168.2.104
Configuration.remote = "http://192.168.2.104:5001/wd/hub";

// String baseUrl = "http://192.168.2.104:8099/";
String baseUrl = "https://testerhome.com/";
com.codeborne.selenide.Selenide.open(baseUrl);
String result=$(By.cssSelector(".navbar-brand")).getText();
assertThat(result, equalTo("TesterHome"));

// $(byText("Welcome Gaofei!")).should(Condition.visible);


System.out.print("");
}
}


基于高飞老师的示例搭建本地demo环境,java项目改了点代码,Jenkins加了几个插件,配置job的执行效果图如下



孙高飞 #40 · March 04, 2019 作者
higs 回复

Goooood

孙高飞 #41 · March 04, 2019 作者
wuuuuu 回复

还改了一下代码, 挺好的

作业五:

测试前端

gird

Jenkins结果

测试报告

编译运行结果

主从节点

VNC远程查看测试过程

练习一

docker pull jenkins/jenkins     # 这个才有最新版本的jenkins
mkdir /home/deng/jenkins_home
sudo chown -R 1000 /home/deng/jenkins_home
sudo chmod -R 700 /home/deng/jenkins_home
docker run --name myjenkins -d -p 8080:8080 -v /home/deng/jenkins_home:/var/jenkins_home -e JAV_OPTS="-Xmx1024m" jenkins/jenkins

练习二

用的还是老师的脚本,下载jdk到所在目录
docker build -t testautomation .
chmod +x run.sh
./run.sh

Jenkins新建节点上线

Evacuated stdout
Agent successfully connected and online

练习三

 docker run --name=conan -d -p 81:4200 conan
docker run -d --name holmes --net=container:conan holmes
# 要执行的.sh文件要注意给可执行权限

练习5:

子节点

job

构建

工程页

Allure报告

今天在部署slave节点的时候想问一个问题。
在jenkins配置slave节点的登陆的时候,账号和密码是用的宿主机的吗?

孙高飞 #46 · March 05, 2019 作者
Red_herring 回复

不是的,你看一下salve的dockerfile。 里面有一行命令是设置密码的。 现在的密码是1qaz9ol.

孙高飞 回复

搞了一天发现还是没法连接到slave node。docker run启动之后自动的就exit了。
下面是几个文件截图。麻烦有空帮我看看呢。或者我打个tar包。

DockerFile

文件路径

entrypoint.sh

孙高飞 #48 · March 06, 2019 作者
Red_herring 回复

能让我看看容器的日志么。 看不到日志不太好说

孙高飞 回复

额。最神奇的就是这。。没有日志。。-d后台启动用logs看和直接docker run都是。要把docker build的过程发给你吗?或者能打包一下exec这个folder我下下来用diff比较一下
[root@centos72_base exec]# docker run --name automation -p 8999:22 -d testautomation
b16c7ef9b883ba8ba71c50d6bbe8436be9cb7b2b64d7ddd0a56c3b71527e5998
[root@centos72_base exec]# docker logs automation
[root@centos72_base exec]# docker rm automation
automation
[root@centos72_base exec]# docker run --name automation -p 8999:22 testautomation
[root@centos72_base exec]#

Build过程 省略了中间的安装,看了下没发现有什么其他错误.

[root@centos72_base exec]# docker build -t testautomation .
Sending build context to Docker daemon 398.4MB
[WARNING]: Empty continuation line found in:
RUN yum install -y wget openssh-server vim git openssh-clients && /usr/bin/ssh-keygen -A && wget https://mirror.olnevhost.net/pub/apache/maven/maven-3/3.0.5/binaries/apache-maven-3.0.5-bin.tar.gz && tar xvf apache-maven-3.0.5-bin.tar.gz && mv apache-maven-3.0.5 /usr/local/maven && ssh-keygen -t rsa -f /root/.ssh/id_rsa -N '' && cat /root/.ssh/id_rsa.pub > /root/.ssh/authorized_keys && chmod 600 /root/.ssh/authorized_keys && echo "StrictHostKeyChecking no" > /root/.ssh/config && echo "UserKnownHostsFile /dev/null" >> /root/.ssh/config && echo changeme|passwd --stdin root && echo "export M2_HOME=/usr/local/maven" >> /root/.bashrc && echo "export M2=$M2_HOME/bin" >> /root/.bashrc && echo "export JAVA_HOME=/opt/java-1.8" >> /root/.bashrc && echo "export PATH=$JAVA_HOME;$M2;$PATH" >> /root/.bashrc ENTRYPOINT ["/bin/sh","/root/entrypoint.sh"]
[WARNING]: Empty continuation lines will become errors in a future release.
Step 1/8 : FROM centos
---> 1e1148e4cc2c
Step 2/8 : ADD entrypoint.sh /root
---> f9216775c1c5
Step 3/8 : ADD jdk /opt/java-1.8
---> 0131c5a114e6
Step 4/8 : ENV M2_HOME=/usr/local/maven
---> Running in 54424554a864
Removing intermediate container 54424554a864
---> 1480bc9b7b5e
Step 5/8 : ENV M2=$M2_HOME/bin
---> Running in 4bca776572c5
Removing intermediate container 4bca776572c5
---> 3fcc35fb68d2
Step 6/8 : ENV JAVA_HOME=/opt/java-1.8
---> Running in 79fba94f6764
Removing intermediate container 79fba94f6764
---> 038fa5bc6926
Step 7/8 : ENV PATH=$JAVA_HOME;$M2;$PATH
---> Running in d3182635627d
Removing intermediate container d3182635627d
---> a05a5394459d
Step 8/8 : RUN yum install -y wget openssh-server vim git openssh-clients && /usr/bin/ssh-keygen -A && wget https://mirror.olnevhost.net/pub/apache/maven/maven-3/3.0.5/binaries/apache-maven-3.0.5-bin.tar.gz && tar xvf apache-maven-3.0.5-bin.tar.gz && mv apache-maven-3.0.5 /usr/local/maven && ssh-keygen -t rsa -f /root/.ssh/id_rsa -N '' && cat /root/.ssh/id_rsa.pub > /root/.ssh/authorized_keys && chmod 600 /root/.ssh/authorized_keys && echo "StrictHostKeyChecking no" > /root/.ssh/config && echo "UserKnownHostsFile /dev/null" >> /root/.ssh/config && echo changeme|passwd --stdin root && echo "export M2_HOME=/usr/local/maven" >> /root/.bashrc && echo "export M2=$M2_HOME/bin" >> /root/.bashrc && echo "export JAVA_HOME=/opt/java-1.8" >> /root/.bashrc && echo "export PATH=$JAVA_HOME;$M2;$PATH" >> /root/.bashrc ENTRYPOINT ["/bin/sh","/root/entrypoint.sh"]
---> Running in 093e22e63db3
Loaded plugins: fastestmirror, ovl
Determining fastest mirrors
* base: mirror.datto.com
* extras: yum.tamu.edu
* updates: mirrors.tummy.com
......

Generating public/private rsa key pair.
Created directory '/root/.ssh'.
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:Zmkz5SBh8LDzEv+pGMm6azHW6x98VsrJV5XQY91NgQU root@093e22e63db3
The key's randomart image is:
+---[RSA 2048]----+
| o.o .E+==|
| = . o+.+|
| + o . . .o. |
| = . = . |
| .. o S o . |
| +..+ B B . |
| . o+.o X . |
| ...o = . |
| .++o.o |
+----[SHA256]-----+
Changing password for user root.
passwd: all authentication tokens updated successfully.
Removing intermediate container 093e22e63db3
---> 8f609fd13252
Successfully built 8f609fd13252
Successfully tagged testautomation:latest

练习三

我终于搞出来了,哈哈!!!

问题


老师,问一下,是不是我的服务器性能不够,jenkins老是被kill?

孙高飞 #52 · March 07, 2019 作者
Yvan 回复

这种可能性比较大

Author only
孙高飞 #54 · March 08, 2019 作者
haliOrange 回复

赞, 很有动手能力。 关于root用户, 官方镜像是不提供root权限的, 它要你在jenkins用户的权限下做所有的事情。 或者你可以查看一下官方的文档, 看看有没有写root用户的信息

练习二

练习三

练习四

练习4

练习5

作业五

练习三:

Python默认2.7版本

@ycwdaaaa @ycwdaaa @ywcdaaaa 高飞老师麻烦问一下,执行“python3 app.py”时候,报错“ python3: command not found”,容器中怎么转换py.2与py.3版本

孙高飞 #59 · April 18, 2019 作者
Tester-Owen 回复

这个就很奇怪了。。。你是用的我打的镜像么?

孙高飞 回复

使用的您给的镜像。不过问题解决啦,经查询得知文章链接,需要在容器中的~/.bashrc文件中添加alias python='/usr/bin/python3.4'即可。
不过py版本是改过来了但是命令自动运行还是有问题:

我只能通过手动在容器中运行python app.py才成功。

练习五:

@ycwdaaaa 高飞老师,运行UI自动化时,生成Allure报告报错,“java.io.IOException: Can't find allure commandline”

是这块少配置东西了吗。🙏 求解。

62Floor has been deleted
孙高飞 #63 · April 22, 2019 作者

你到系统设置里看看, 是不是已经成功的安装了report 的command line?

64Floor has been deleted
孙高飞 回复

终于好了😁 ,一个是配置command line时不对,另一个是构建后操作路径写错了,谢啦高飞老师

练习五:

练习一
使用host模式或者bridge模式启动jenkins服务
需要的插件:
GitHub
SSH Salve
Maven
Allure

bridge模式:docker run -d --name myjenkins -p 8080:8080 -v /e/Docker/test/jenkins:/var/jenkins_home jenkins/jenkins
host模式: docker run -d --name myjenkins --network host -v /e/Docker/test/jenkins:/var/jenkins_home jenkins/jenkins

练习二
自己使用dockerfile build一个容器并启动。 然后使用jenkins的slave连接到这个容器上。

docker build -t newtech .

练习三
自己使用container模式搭建模拟测试环境。

docker run -d --name conan -p 8999:4200 conan
docker run -d --name halmes --network container:conan halmes

练习四
使用docker selenium 启动一个hub,两个node。 每个node10个浏览器
UI自动化代码地址:https://github.com/ycwdaaaa/techUI

练习五
配置自己的jenkins job 执行UI自动化

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up