一、Docker搭建Jenkins
查看所有Linux环境变量
$ env
1. Docker搭建Jenkins
# 拉取jenkins镜像
$ docker pull jenkins/jenkins
# 强制删除容器
$ docker rm -f myjenkins
# 新建jenkins_home文件夹
$ mkdir /home/wyt/jenkins_home
# 设置权限
$ sudo chown -R 1000:1000 /home/wyt/jenkins_home/
# 运行容器
$ docker run --name myjenkins -itd --network host -v /home/wyt/jenkins_home:/var/jenkins_home --env JAVA_OPTS="-Xmx2048m" jenkins/jenkins
# 后台启动-d,-it当前bash启动
$ docker run --name myjenkins -d -p 8080:8080 -p 50000:50000 -v /home/wyt/jenkins_home:/var/jenkins_home jenkins/jenkins
# 注意实际内存不要超过物理内存的一半
$ docker run --name myjenkins -itd -p 8080:8080 -p 50000:50000 -v /home/wyt/jenkins_home:/var/jenkins_home --env JAVA_OPTS="-Xmx8192m" jenkins/jenkins
PS:注意挂载权限:sudo chown -R 1000:1000 /home/wyt/jenkins_home/
- 需要修改下目录权限,因为当映射本地数据卷时,/home/wyt/jenkins_home目录的拥有者为root用户,而容器中jenkins user的uid为1000
-
sudo chown -R 1000:1000 /home/wyt/jenkins_home/
jenkins启动脚本
#! /bin/bash
docker rm -f myjenkins
# docker run --name myjenkins -p 5003:8080 -p 5004:50000 jenkins
# docker run --mame myjenkins -itd -p 5003:8080 -p 5004:50000 --env JAVA_OPTS="-Xmx8192m" -v /home/wyt/jenkins_home:/var/jenkins_home jenkins:2.60.3
docker run --name myjenkins \
-d -p 8080:8080 \
-p 50000:50000 \
-v /home/wyt/jenkins_home:/var/jenkins_home \
-v /usr/local/apache-maven-3.6.3:/usr/local/apache-maven-3.6.3 \
-v /usr/local/allure-2.17.2:/usr/local/allure-2.17.2 \
--env JAVA_OPTS="-Duser.timezone=GMT+08 -Xms256m -Xmx512m -Xss1024K -XX:PermSize=128m -XX:MaxPermSize=256m" jenkins/jenkins
进入容器交互
docker exec -it myjenkins bash
2. 四种网络模式
官方文档:https://docs.docker.com/network/
-
container
使用–network=container:NAME_or_ID指定。与指定的容器使用同一个network namespace,具有同样的网络配置信息,两个容器除了网络,其他都还是隔离的。 -
briage
默认
使用–network=bridge指定,默认网络。Docker启动后创建一个docker0的网桥,默认创建的容器也是添加到这个网桥中。 -
host
不用启动端口映射
使用–network=host指定。容器不会获得一个独立的network namespace,而是
与宿主机共用一个
。这就意味着容器不会有自己的网卡信息,而是使用宿主机的,容器除了网络,其他都是隔离的。 -
none
使用–network=none指定。获取独立的network namespace,但不为容器进行任何网络配置,需要我们手动配置。 -
自定义网络
与默认的bridge原理一样,但自定义网络具备内部DNS发现,可以通过容器名或者主机名容器之间网络通信。
host模式:不用配置网络环境,直接使用宿主机的网络环境,应用场景:编译容器,git、svn上拉代码进行编译,需要ssh鉴权
案例
:搭建测试环境常用模式,前端不变,只更换后端服务
https://gitee.com/WeiboGe2012/conan
https://gitee.com/WeiboGe2012/holmes
conan镜像文件制作在8.2
holmes镜像文件制作在8.3
#! /bin/hash
docker rm -f holmes conan
# 应用briage模式暴露前端的服务
docker run --name=conan -d -p 8999:4200 conan
# 应用contoiner模式,将后端服务挂在conan上面
docker run --name=holmes -d --network=contoiner:conan holmes
3. Docker搭建Mysql
# 强制删除容器
$ docker rm -f some-mysal
# 搭建并连接MYSQL服务
$ docker run --name some-mysal -v /home/wyt/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=qwer1234 -p 8081:3306 -d mysql
# 下面不知道是什么
$ docker run -d --name test_sleep_infinity --link some-mysql centos sleep infinity
4. 搭建TESTLINK
老版本
两个服务在同一台电脑上
可以使用link
通过testlink容器 访问mariadb容器
# 强制删除
$ docker rm -f mariadb testlink
$ docker volume create --name mariadb_data
$ docker run -d --name mariadb \
-e ALLOW_EMPTY_PASSWORD=yes \
-e MARIADB_USER=bn_testlink \
-e MARIADB_PASSWORD=bitnami \
-e MARIADB_DATABASE=bitnami_testlink \
-v mariadb_data:/bitnami/mariadb \
-p 8081:3306 bitnami/mariadb:latest
# 使用--link的方式将mariadb注入,或者使用-e的方式将mariadb的环境变量注入
$ docker volume create --name testlink_data
$ docker run -d --name testlink \
-p 8082:8080 -p 8083:443 \
-e ALLOW_EMPTY_PASSWORD=yes \
-e TESTLINK_DATABASE_USER=bn_testlink \
-e TESTLINK_DATABASE_PASSWORD=bitnami \
-e TESTLINK_DATABASE_NAME=bitnami_testlink \
-v testlink_data:/bitnami/testlink \
--link mariadb bitnami/testlink:latest
访问http://localhost:8082
新版本
两个服务不在同一台电脑上
不可以使用link
通过testlink容器 访问mariadb容器
官方文档 https://registry.hub.docker.com/r/bitnami/testlink
第 1 步:创建网络
$ docker network create testlink-network
第 2 步:为 MariaDB 持久化创建一个卷并创建一个 MariaDB 容器
$ docker volume create --name mariadb_data
$ docker run -d --name mariadb \
--env ALLOW_EMPTY_PASSWORD=yes \
--env MARIADB_USER=bn_testlink \
--env MARIADB_PASSWORD=bitnami \
--env MARIADB_DATABASE=bitnami_testlink \
--network testlink-network \
--volume mariadb_data:/bitnami/mariadb \
bitnami/mariadb:latest
第 3 步:为 TestLink 持久性创建卷并启动容器
$ docker volume create --name testlink_data
$ docker run -d --name testlink \
-p 8082:8080 -p 8083:8443 \
--env ALLOW_EMPTY_PASSWORD=yes \
--env TESTLINK_DATABASE_USER=bn_testlink \
--env TESTLINK_DATABASE_PASSWORD=bitnami \
--env TESTLINK_DATABASE_NAME=bitnami_testlink \
--network testlink-network \
--volume testlink_data:/bitnami/testlink \
bitnami/testlink:latest
https://localhost:8082
4. 使用SELENIUM DOCKER(拉镜像)
https://registry.hub.docker.com/搜索对应版本的镜像
- docker pull selenium/node-chrome-debug:3.141.59
- docker pull selenium/hub:3.141.59
命令启动
$ docker rm -f hub chrome1 chrome2
$ docker run --name=hub \
-p 8081:4444 \
-e GRID_TIMEOUT=0 \
-e GRID_THROW_ON_CAPABILITY_NOT_PRESENT=true \
-e GRID_NEW_SESSION_WAIT_TIMEOUT=-1 \
-e GRID_BROWSER_TIMEOUT=15000 \
-e GRID_TIMEOUT=30000 \
-e GRID_CLEAN_UP_CYCLE=30000 \
-d selenium/hub:3.141.59
# 图形界面
# NODE_MAX_INSTANCES、NODE_MAX_SESSION,能够启动多少个浏览器
$ docker run --name=chrome1 \
-p 8082:5900 \
-e NODE_MAX_INSTANCES=6 \
-e NODE_MAX_SESSION=6 \
-e NODE_REGISTER_CYCLE=5000 \
-e DBUS_SESSION_BUS_ADDRESS=/dev/null \
-v /dev/shm:/dev/shm \
--link hub \
-d selenium/node-chrome-debug:3.141.59
VNC密码是:secret
访问http://localhost:8081
点击console
再添加10个
# 图形界面
# NODE_MAX_INSTANCES、NODE_MAX_SESSION,能够启动多少个浏览器
$ docker run --name=chrome2 \
-p 8083:5900 \
-e NODE_MAX_INSTANCES=10 \
-e NODE_MAX_SESSION=10 \
-e NODE_REGISTER_CYCLE=5000 \
-e DBUS_SESSION_BUS_ADDRESS=/dev/null \
-v /dev/shm:/dev/shm \
--link hub \
-d selenium/node-chrome-debug:3.141.59
返回在进入console
5. 分布式自动化demo
selenium/hub和selenium/node-chrome-debug在
同一台
电脑部署,可使用selenium.sh脚本
docker rm -f hub chrome1
docker run --name=hub \
-p 8081:4444 \
-e GRID_TIMEOUT=0 \
-e GRID_THROW_ON_CAPABILITY_NOT_PRESENT=true \
-e GRID_NEW_SESSION_WAIT_TIMEOUT=-1 \
-e GRID_BROWSER_TIMEOUT=15000 \
-e GRID_TIMEOUT=30000 \
-e GRID_CLEAN_UP_CYCLE=30000 \
-d selenium/hub:3.141.59
# 图形界面
# NODE_MAX_INSTANCES、NODE_MAX_SESSION,能够启动多少个浏览器
docker run --name=chrome1 \
-p 8082:5900 \
-e NODE_MAX_INSTANCES=6 \
-e NODE_MAX_SESSION=6 \
-e NODE_REGISTER_CYCLE=5000 \
-e DBUS_SESSION_BUS_ADDRESS=/dev/null \
-v /dev/shm:/dev/shm \
--link hub \
-d selenium/node-chrome-debug:3.141.59
selenium/hub和selenium/node-chrome-debug
不在同一台
电脑部署,可使用selenium.sh脚本
解决办法:
进入hub:docker exec -it hub bash
查看信息:env | grep HUB 或 env | grep GRID
把buh信息以-e的形式注入到chrome1启动
源码
https://gitee.com/WeiboGe2012/techUI
下载VNC viewer地址
- 安装VNC-Viewer-6.21.1109-Windows.exe
-
打开VNC-Viewer
-
直接连接chrome端口
-
输入密码:secret
-
这就是连接好的图形界面,如果连接超时,需重启chrome1
-
selenium/hub:3.141.59
、
selenium/node-chrome-debug:3.141.59
;
selenium-support:3.141.59
(pom.xml文件)、
selenide:5.24.2
(pom.xml文件)版本对应,可查看maven中央仓库 -
演示单个浏览器执行过程
-
演示多个浏览器同时运行,以tests为单位,启动三个线程
6. 持续自动化集成(此版本jenkins不是docker版)
前提:
1、已安装maven环境
2、已安装allure环境
全局工具配置:maven
全局工具配置:allure
添加Allure插件
添加Maven Integration
添加git或gitee插件
创建techUI任务
下面这步有两种方式实现
方式一:走shell命令
#! /bin/bash
mvn clean test -DsuiteXmlFile=testng-parallel.xml
方式二:走maven命令
配置allure路径,就是项目target目录
保存,立即执行,查看VNC-Viewer有三个浏览器同时执行
三个浏览器执行时间
7. 持续自动化集成(此版本jenkins是docker版)
前提:
1、已安装maven环境
2、已安装allure环境
全局工具配置:maven
全局工具配置:allure
添加Allure插件
添加Maven Integration
添加git或gitee插件
创建techUI任务
配置allure路径,就是项目target目录
保存,立即执行,遇到问题:不执行测试用例,尚未解决,有解决的请留言
8. docker镜像制作
官方文档:https://docs.docker.com/engine/reference/builder/
8.1 创建dockerfile/Dockerfile文件
目录
$ cd dockerfile
$ ll
Dockerfile
entrypoint.sh
Dockerfile文件
# 继承centos镜像
FROM centos
# 将entrypoint.sh打入到镜像内root目录下面
ADD entrypoint.sh /root
# 只有在容器启动时生效,在容器内env查询不到
ENV JAVA_HOME=/usr/local/jdk1.8.0_231
ENV PATH=$JAVA_HOME:$PATH
# 安装git、vim,注意有多个都写在一个RUN指令里面,写多个RUN指令会有多个镜像层(例如在pull jenkins镜像时下载多少行就有多少层),实在不行才写多个RUN指令;/root/.bashrc环境变量,在容器内env可以查看到
# RUN yum install -y vim
RUN yum install -y git vim \
&& echo "export JAVA_HOME=/usr/local/jdk1.8.0_231" >> /root/.bashrc \
&& echo "export PATH=$JAVA_HOME:$PATH" >> /root/.bashrc
# 指定镜像启动时的脚本
ENTRYPOINT ["/bin/bash","/root/entrypoint.sh"]
entrypoint.sh保证进程不结束
#! /bin/bash
ping www.baidu.com
# 或
#/usr/sbin/sshd -0
#while true
#do
# sleep 10
#done
执行命令制作镜像
$ cd dockerfile
# -f
docker build -t 镜像名称 .
8.2 conan镜像制作
FROM centos:7
ADD entrypoint.sh /root
WORKDIR /root
USER root
RUN yum install -y wget git \
&& wget https://nodejs.org/dist/v16.13.1/node-v16.13.1-linux-x64.tar.xz \
&& tar xvJf node-v16.13.1-linux-x64.tar.xz \
&& cd node-v16.13.1-linux-x64 \
&& ln -s /root/node-v16.13.1-linux-x64/bin/npm /usr/bin/ \
&& ln -s /root/node-v16.13.1-linux-x64/bin/node /usr/bin/ \
&& chmod 777 -R /root/node-v16.13.1-linux-x64 \
# && alias cnpm="npm --registry=https://registry.npm.taobao.org --cache=$HOME/.npm/.cache/cnpm --disturl=https://npm.taobao.org/dist --usrconfig=$HOME/.cnpmrc" \
# && npm --registry=https:.//registry.npm.taobao.org --cache=$HOME/.npm/.cache/cnpm --disturl=https://npm.taobao.org/dist --userconfig=$HOME/.cnpmrc i -g @angular/cli
&& npm install -g cnpm --registry=https://registry.npm.taobao.org \
&& export PATH=$(npm prefix -g)/bin:$PATH \
&& echo "$(npm prefix -g)" \
&& cnpm i -g @angular/cli
ENV PATH=/root/node-v16.13.1-linux-x64/bin:$PATH
ENTRYPOINTr ["/root/entrypoint.sh"]
8.3 holmes镜像制作
requirements.txt文件不确定是什么
FROM centos:7
ADD entrypoint.sh /root
ADD requirements.txt /root
WORKDIR /root
USER root
RUN yum install -y epel-release \
&& yum install -y python34 git python34-setuptools python34-devel.x86_64 \
&& easy_install-3.4 pip \
&& yum install -y gcc \
&& yum install -y soci-mysql-devel.x86_64 \
&& ln -s /usr/local/mysql/bin/mysql /usr/bin \
&& pip3 install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
ENTRYPOINT ["/root/entrypoint.sh"]
遇到问题1
访问http://localhost:8080,报错:An error occurred during installation: No such plugin: cloudbees-folder
解决办法:
https://blog.csdn.net/DDJ_TEST/article/details/122210331
遇到问题2
重新启动连接的服务
遇到问题3
解决办法:
https://blog.csdn.net/DDJ_TEST/article/details/122133095
遇到问题4
解决办法:
https://blog.csdn.net/DDJ_TEST/article/details/122132581
遇到问题5
解决办法:
https://blog.csdn.net/DDJ_TEST/article/details/122164927
遇到问题6
解决办法: