Docker+jenkins+python3环境(超详细)

 

 

前言:

  自动化写好后需要在服务器上每日定时运行,遇到这样的一个问题,Jenkins容器是在docker中安装的 ,然后从git上拉取代码 发现代码在jenkins容器的目录当中,运行的时候提示没有安装python环境的第三方库。

 

解决方法有3种:

  第一种:启动jenkins容器时 将容器的目录挂载到宿主机目录上去执行(方法不能实现 pass)

  第二种:在jenkins上创建本地节点,将代码拉取到本地 然后去运行本地项目(在本机上使用比较方便,但是局限性比较小)

  第三种:重新封装jenkins镜像,在jenkins镜像中安装python3的环境 在容器中执行项目(步骤麻烦,但后续永久使用)

第一种方法和第二种方法都需要在服务器中安装docker和jenkins镜像

 

一、安装docker

  安装docker https://www.runoob.com/docker/docker-tutorial.html 

  

二、安装jenkisn镜像

复制代码
1.查找docker上的镜像
    docker search jenkins
  
2.下载自己所需要的镜像
    docker pull jenkinsci/blueocean
  
3.查看是否下载成功
    docker images
  
4.启动下载的镜像
  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 如果拉取自己创建的镜像后面要加自己的版本号 jenkinsci/blueocean:版本号TAG )
   ⚠️ 容器目录挂载本地目录时 一定要给本地文件夹赋予权限  chmod 777 jenkins_home
复制代码

输入docker images 查看jenkins镜像是否安装成功

1
docker images

 

 

查看容器是否运行

1
docker ps

 可以看出docker中已经有运行的容器jenkins

 

 这样就说明 已经安装好jenkins 现在就可以启动jenkins了

 

三、启动jenkins

浏览器输入 服务器的ip+端口号  http://47.99.98.XXX:10240/ 如果无法访问请关闭系统防火墙

 

查看密码的方式有2种,第一种是在服务器的容器中查看,第二种是在映射本地查看(前提是你映射了本地目录)

1
2
3
容器中查看密码:cat /var/jenkins_home/secrets/initialAdminPassword
映射本地目录:cat /Users/songpeilun/jenkins_home/secrets/initialAdminPassword
#/Users/songpeilun/jenkins_home  本地映射目录地址

好了,到这里就已经安装好jenkins了

复制代码
#说一下 容器操作方法
1.进入容器
    docker exec -itu root 容器id /bin/sh

2.根据容器id停止运行的容器
  docker stop 容器id
  
5.启动停止的容器 
     docker start 容器id

6.删除容器(只能删除停用的容器)
    docker rm 容器id
  
7.根据关键字查找容器
  docker ps -a |grep jenkins
复制代码

 

三、方法2:新建本地节点  

  说一下方法2的具体逻辑,主要是新建jenkins的本地节点 利用新的节点将git上的代码拉取到本地(宿主机)上去执行代码

  该方法主要适用于 本地已经有一套python3的一套环境,可以直接运行自动化  利用本地持续集成实现每日自动化报告(缺点:因为利用的是本地节点 利用宿主机地址当作ip 所以每次都需要开启电脑和jenkins地址 且外网不能访问 局限性小)

 第一步:在jenkins当中安装SSH Agent插件

  安装 ssh Agent插件 系统设置—插件管理—可选插件 然后输入ssh agent 搜索

 

 

 第二步新增节点

 系统设置—节点管理—新建节点(节点名称不能重复)

 

 

 

 

说明:

  节点名称:名称尽量用英文和字符不要用汉字(创建项目的时候选择节点会有警告!)

  节点描述:可填写可不填写

  执行器数量:节点同时运行的数量

  远程工作目录:本机的工作目录(/Users/songpeilun/jenkins)这需要有root权限的用户对此文件所有权限

  标签:可填写可不填写

  用法:尽可能对使用这个节点

  启动方式:Launch agents via SSH

  主机:本机的网络ip地址(网络-网络设置-IP)

  Credentials:选择已添加的本机账号密码

  Host Key Verification Strategy:Non verifying Veriflication Strategy

  可用性:尽量保持代理在线

  节点属性--git:git的安装路径

 

 然后启动节点 下面就表示启动成功,然后查看本地宿主机 目录文件夹夹是否有节点的文件

 

 

 

三、方法3:容器中安装python3环境

  说一下方法3的具体逻辑,主要是在容器中运行代码,git将代码默认拉取到容器当中 不需要映射直接在容器中执行代码(好处:不占用服务器的资源大小,随时启动;不需要本地启动服务 直接利用服务器地址就行 坏处:安装麻烦一点😈 )

  第一步:需要进入jenkins容器当中  

docker exec -itu root 容器id /bin/sh

 下面有2种方法安装 python3

  1.weget 安装(不推荐,基本和现安装的方法差不多,先要安装一些依赖包,如 gcc 等)

  2.apk add 安装(此版本是alpine :apk add,能够快速安装完成)

 最后注意系统版本问题:

  如果是 centos 那即是 yum ; 如果是 ubuntu 那即是 apt-get ; 如果是 alpine 那即是 apk

  

  第二步:apk进行安装python3

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 add 安装python3环境

apk add python3

 

  第四步:更新pip3

pip3 install --upgrade pip

验证python环境
python -V
Pip3 -V

 

 上面安装成功后 就可以安装第三方库的插件了,已经完成一半了

 插件安装 根据自己项目需要安装 下面就以我的项目为列

  

  第五步:安装python 三方库

  首先创建requirements.txt 文件  

  pip freeze > requirements.txt

  pip install -r requirements.txt

 

  然后使用 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
        xlrd==1.2.0
        urllib3==1.26.4
        wheel==0.36.2
        allure-pytest==2.8.40
        allure-python-commons==2.8.40

最后2个需要将Allure报告配置完成后在进行安装,不然会报错
复制代码

 

复制代码

⚠️ 如果安装出错 不要着急 慢慢找出原因 我之前出错后 找了半天原因 是因为缺少 greenlet 插件 (后面在为大家 提供方法)

 

   如果没有问题 到这里就已经安装成功了,可以将自己的代码cp 到容器当中 测试一下。没有问题后就可以打包镜像了

本地文件拷贝到容器xx目录当中

docker cp /Users/songpeilun/python_data/allure-2.13.0.zip jenkint_test:/xx目录

 

  我这里使用了Allure报告 所以要安装

  第六步:安装allure报告

  allure是一个解压包,这里为大家提供一个,下载后拷贝到容器当中 解压

  链接: https://pan.baidu.com/s/1JbBXOfA0j6saZh7H8RMipw  密码: qfnv

  

复制代码
#容器中解压文件
unzip allure-2.13.0.zip

#配置环境变量
vi /etc/profile
PATH后面添加 :$PATH:/allure-2.13.0/bin(allure的全路径)
source /etc/profile  保存生效
复制代码

  

  第七步:验证allure

allure --version

 

四、打包/上传镜像

  第一步:直接将安装好的镜像进行打包  

复制代码
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          # 镜像大小
复制代码

 

  

  第二步:将docker上镜像下载到本地 

    如果要上传到dockerhub 此步骤可忽略

方法一: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

 

  第三步:注册dockerhub 并上传镜像

    www.baidu.com

 

  第四步:将容器打包发布到dockerhub

  

复制代码
#将docker上的容器提交到dockerhub上
#步骤一:登录docker输入账号密码
docker login

#步骤二:查看本地镜像 
docker images

#步骤三:更改镜像名称(否则会报错)
docker tag REPOSITORY:TAG EPOSITORY:TAG(新的名称和版本号)
docker tag python3.7.9:spl songpeilun/python3.7:xxx
    
#步骤四:push镜像
docker push songpeilun/python3.7:xxx
复制代码

 

 

 

 

 

 

   第五步:下载打包好的镜像 使用

  

docker pull 镜像名称:TAG

 

 

五、配置jenkins环境

  配置python3+allure+jenkins自动化环境

  第一步:创建项目

 

 第二步:拉取git代码

  使用ssh拉取

git@github.com:XXX/zh-cnProject.git

 添加Credentials git的账号密码和 key

 

本地git的key 不带pub的

 

 

 第三步:构建后生成allure报告

 

 

六、踩坑 

 问题一:镜像当中确少greenlet 插件

  先查看python3 pip3的安装路径是否有greenlet文件目录 在命令行输入:pip-V

  

 

   然后进入/usr/lib/python3.6/site-packages 文件夹,这里面都是python3所需要的环境,把这两个文件放进去(从宿主机拷贝到容器的这个目录当中)

  链接: https://pan.baidu.com/share/init?surl=2lhmetAT9OFuMmduR9VSrA 密码:tvrb

  拷贝完之后输入pip3 list 查看是不是已经有该插件了,然后在去执行刚刚安装报错的插件 使用pip3 install 库名称

 

 问题二:提示找不到文件 command not found

  本地节点jenkins运行后提示没有pytest命令,但是本地运行却没有问题?

 

 

 jenkins找不到pytest运行程序 可以将代码里面把pytest运行环境写成本地的环境去运行 也可以在shell里面写如本地环境 使用绝对路径去运行

 

 

 问题三:github拉取代码失败

  账号和密码正确,ssh密匙没有问题 第一次拉取成功,后面拉取一直失败

  连接github的时候选择的是ssh 但是在配置url连接的时候选择的是https所有会导致失败 使用ssh拉取代码显示成功git@github.com:XXX/zh-cnProject.git 格式类型一定要相对应

 

 

 

 问题四:新建节点拷贝路径一直提示失败

  

 

 新建节点拷贝到本地路径 但是当前文件夹没有权限 需要用root权限去拷贝执行 可以先测试创建一个文件去尝试

 

问题五:jenkins时间与本地时间不一致

  如果按照我上面的命令执行 是不会出现时间不一致的问题,因为我已经加上了时间命令 启动docker镜像时

 -e JAVA_OPTS=-Duser.timezone=Asia/Shanghai     设置容器时间为上海时间(不然容器时间和本地时间相差8小时)

jenkins系统设置可以查看修改后的时间格式

 

 

到这里已经完成了,有什么问题可以直接在下面评论 很高兴为大家服务,一个萌新测试小白

posted @ 2021-11-04 21:28  小林子哈哈  阅读(3187)  评论(0编辑  收藏  举报