需求:在XX公司服务器Docker上搭建接口自动化环境,使用Jenkins每天定时运行 并将报告发生公司 飞书/钉钉群。但是目前遇到这样的一个问题,在服务器上部署了docker环境,然后安装了Jenkins容器 ,最后从git上拉取代码后 发现 代码在jenkins容器的目录当中,jenkins运行代码就必须要进入容器当中运行,这样是不可能的。
目前我想到 3 个方法去实现:
(1)启动jenkins容器时 将容器的目录挂载到宿主机目录上去执行(方法不能实现)pass
(2)在jenkins上创建本地节点,将代码拉取到本地 然后去运行本地项目(可以实现,局限性小)pass
(3)重新封装jenkins镜像,在jenkins镜像中安装自动化所需要的环境 在容器中执行项目(步骤虽麻烦,但一次封装后续永久使用)
- 一 、安装Docker
- 二、Docker上安装Jenkins
- 2.1 启动jenkins
- 三、Jenkins容器安装自动化环境
- 3.1 安装python3环境
- 3.2 安装python3的三方库
- 3.2 Jenkins配置环境
- 四、Docker 镜像封装使用
- 4.1 打包镜像
- 4.2 镜像使用
- 4.3 docker上下载自己上传到镜像
docker容器基本操作:直达
服务器上输入 docker -v 查看是否已安装
没有安装docker的同学 安装Docker
1.查找docker上的镜像
docker search jenkins
2.下载自己所需要的镜像
docker pull jenkinsci/blueocean
3.查看是否下载成功
docker images
4.启动下载的jenkins镜像
docker run -d -p 10240:8080 -p 10241:50000 -v /jenkins_autotest/jenkins_home:/var/jenkins_home -v /etc/localtime:/etc/localtime -e JAVA_OPTS=-Duser.timezone=Asia/Shanghai --name jenkint_test jenkinsci/blueocean
说明:
docker run 运行
-d:后台运行容器
-p:指定容器的端口映射 -p 10240:8080 # 将容器的8080端口映射到宿主机的10240端口上 ,映射多个端口使用 -p 8082:8080 -p 8083:8081
-v:挂载宿主机目录和docker容器中的目录
/Users/songpeilun/jenkins_home # 本地宿主机绝对目录
/var/jenkins_home # 容器目录(将容器目录挂载到本地)
-v:/etc/localtime:/etc/localtime # 本地时间和容器时间同步
-e JAVA_OPTS=-Duser.timezone=Asia/Shanghai # 设置容器时间为上海时间(不然容器时间和本地时间相差8小时)
--name jenkint_test # 设置容器的名称
jenkinsci/blueocean # 选择镜像名称启动容器(默认镜像后面会加latest 如果拉取自己创建的镜像后面要加自己的版本号)
!!容器目录挂载本地目录时 一定要给本地文件夹赋予权限 chmod 777 jenkins_home
2.1 启动jenkins
浏览器访问 http://
密码存放在 cat /var/lib/jenkins/secrets/initialAdminPassword
jenkins容器 使用git拉取代码后 默认是放在容器当中的/var/jenkins_home/workspace/autotest 无法正常运行代码。
在jenkins容器中安装python相关环境 就可以完美解决该问题。当然也可以在jenkins中创建宿主机 把代码映射到本地 然后在本地执行。但是这样做相当于电脑当做服务器 每次运行自动化之前都需要打开电脑。(我之前就是这么干的,局限性太小)
1.首先根据容器id进入容器内部
docker exec -itu root 容器id /bin/sh
weget 安装(不推荐,基本和现安装的方法差不多,先要安装一些依赖包,如 gcc 等)
apk add 安装(此版本是alpine :apk add,能够快速安装完成)
2.最后注意系统版本问题:
3.1 安装python3环境如果是 centos 那即是 yum
如果是 ubuntu 那即是 apt-get
如果是 alpine 那即是 apk
- alpine系统使用apk命令安装
cd /etc/apk/ echo "https://mirrors.ustc.edu.cn/alpine/v3.6/main/" > repositories echo "https://mirrors.ustc.edu.cn/alpine/v3.6/community/" >> repositories
- 更新 apk 源:apk update
apk update
- 输入 apk add python3 安装python环境
apk add python3
- 更新pip3:pip3 install --upgrade pip
pip3 install --upgrade pip # 验证python环境 python -V Pip3 -V3.2 安装python3的三方库
1.创建requirements.txt 文件
pip freeze > requirements.txt pip install -r requirements.txt
2.vi requirements.txt 打开文件进行编辑
base64-test0926 ==1.0.0 PyMySQL==1.0.2 pytest==6.2.3 python-jenkins==1.7.0 PyYAML==5.4.1 redis==3.5.3 requests==2.25.1 SQLAlchemy==1.4.10 urllib3==1.26.4 wheel==0.36.2 xlrd==1.2.0 allure-pytest==2.8.40 allure-python-commons==2.8.40 最后2个需要将 Allure 报告配置完成后在进行安装,不然会报错
输入 pip3 list 查看三方库是否安装成功
拷贝完之后验证一下是否有完整的运行环境 可以将项目拷贝到容器中执行测试
1.新建项目
https://github.com/XXX/zh-cnProject.git ssh://git@xxx/energy/skiffenergy/autotest.git
2.添加gitlab的账户信息
3.构建触发配置
以我的项目为例 每天8点15运行、每次构建之前先清空上次构建的数据缓存
4.构建信息配置
5.构建后操作
这一步比较关键,有很多同学 构建完成后打开报告出现没有数据的情况 都是这一步出现的问题!!!
最后附上一份定时运行的报告数据
到这里就已经完成安装了。后面会介绍将配置好的容器打包上传到自己的
6. 帮忙踩坑
实践的时候难免会碰到各种各样的问题,这里把我遇到的问题总结一下。
(6.1)镜像当中确少greenlet 插件
先查看python3 pip3的安装路径是否有greenlet文件目录
然后进入 /usr/lib/python3.6/site-packages 文件夹,这里面都是python3所需要的环境
将这两个文件放进去(从宿主机拷贝到容器的这个目录当中)下载 greenlet 密码 48n2
拷贝完之后输入pip3 list 查看是不是已经有该插件了,然后在去执行刚刚安装报错的插件 使用pip3 install 库名称
(6.2)提示找不到文件 command not found
使用绝对路径去运行
(6.3)github拉取代码失败
账号和密码正确,ssh密匙没有问题 第一次拉取成功,后面拉取一直失败
连接github的时候选择的是ssh 但是在配置url连接的时候选择的是https所有会导致失败 使用ssh拉取代码显示成功git@github.com:xxx/zh-cnProject.git 格式类型一定要相对应
(6.4)jenkins时间与本地时间不一致
启动jenkins容器的时候添加-e JAVA_OPTS=-Duser.timezone=Asia/Shanghai
上面已经安装好了所有环境并且测试没有问题后,可以打包上传了
4.1 打包镜像docker commit -a "songpeilun" -m "python3.7.9" 7dc75172f62d python3.7.9:spl 说明: -a "songpeilun" # 提交的镜像作者 -m "python3.7.9" # 提交时的说明文字 7dc75172f62d:ConTAINER ID # 容器id python3.7.9:spl:REPOSITORY:TAG 说明: REPOSITORY # 镜像仓库 TAG # 镜像标签 IMAGE ID # 镜像ID CREATED # 镜像创建时间 SIZE # 镜像大小4.2 镜像使用
1)将docker上镜像下载到本地
# 方法一:docker sava 镜像id > 本地地址 docker save baf771f9d0be > /Users/songpeilun/python/python3.7.9.tar # 方法二:docker save -o 指向本地地址 镜像 REPOSITORY docker save -o /Users/songpeilun/python/python.tar python3.7.9
1)将docker上镜像上传到dockerhub上
第一步注册 dockerhub 百度
第二步上传镜像
# 步骤一:登录docker输入账号密码
docker login
# 步骤二:查看本地镜像
docker images
# 步骤三:更改镜像名称(否则会报错)
docker tag REPOSITORY:TAG EPOSITORY:TAG(新的名称和版本号)
docker tag python3.7.9:spl 镜像名称:版本号
# 步骤四:push镜像
docker push 镜像名称:版本号
4.3 docker上下载自己上传到镜像
docker pull 镜像名称:版本号



