素材巴巴 > 程序开发 >

Docker搭建Jenkins、mysql、分布式自动化、镜像制作,及遇到的坑

程序开发 2023-09-05 09:30:00

一、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/jenkinsPS:注意挂载权限: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/
在这里插入图片描述
在这里插入图片描述

案例:搭建测试环境常用模式,前端不变,只更换后端服务
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 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.59VNC密码是: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地址 https://www.realvnc.com/de/connect/download/viewer/

6. 持续自动化集成(此版本jenkins不是docker版)

前提:
1、已安装maven环境
2、已安装allure环境
全局工具配置:maven
在这里插入图片描述
全局工具配置:allure
在这里插入图片描述
添加Allure插件
在这里插入图片描述
添加Maven Integration
在这里插入图片描述
添加git或gitee插件
在这里插入图片描述
创建techUI任务
在这里插入图片描述
在这里插入图片描述
下面这步有两种方式实现
方式一:走shell命令
在这里插入图片描述

#! /bin/bashmvn 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/bashping www.baidu.com
 # 或
 #/usr/sbin/sshd -0
 #while true
 #do
 #	sleep 10
 #done

执行命令制作镜像

$ cd dockerfile
 # -f 
 docker build -t 镜像名称 .
 

8.2 conan镜像制作

FROM centos:7ADD entrypoint.sh /rootWORKDIR /root
 USER rootRUN 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/cliENV PATH=/root/node-v16.13.1-linux-x64/bin:$PATH
 ENTRYPOINTr ["/root/entrypoint.sh"]

8.3 holmes镜像制作

requirements.txt文件不确定是什么

FROM centos:7ADD entrypoint.sh /root
 ADD requirements.txt /rootWORKDIR /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

在这里插入图片描述
解决办法:


标签:

上一篇: Docker(二)Docker安装Nginx 下一篇:
素材巴巴 Copyright © 2013-2021 http://www.sucaibaba.com/. Some Rights Reserved. 备案号:备案中。