dockerfile定制jenkins+python+pytest+allure镜像步骤

一、 创建dockerfile文件

# 创建目录
mkdir jenkinsci_dockerfile

# 进入目录
cd jenkinsci_dockerfile

# 创建dockerfile文件
touch dockerfile

二、 将依赖的文件或目录和安装包放在当前目录

# 将容器里python3编译文件拷贝到宿主机dockerfile同级目录下
docker cp 容器名:python3编译文件 ./

# 在当前目录下创建allure数据文件目录,用于存放allure文件夹
mkdir allure_data

# 将容器里allure文件拷贝到宿主机allure_data目录下(这里有坑,见第七点,这里的操作已修正)
docker cp allure:./allure_data目录下

# 创建环境配置文件
touch env_path

最终目录结构:

dockerfile定制jenkins+python+pytest+allure镜像步骤_第1张图片

三、 编写dockerfile文件

vim dockerfile

# 基础镜像
FROM jenkins/jenkins:lts

# 拷贝python3安装编译包到镜像,编译步骤见前面搭建容器的文章
COPY ./python3 /var/jenkins_home/

# 切换到root用户,保证接下来的操作有权限
USER root

# 添加软连接
RUN ln -s /var/jenkins_home/python3/bin/python3.7 /usr/bin/python3\
&&ln -s /var/jenkins_home/python3/bin/pip3 /usr/bin/pip3\
&&ln -s /var/jenkins_home/python3/bin/pytest /usr/bin/pytest

# 复制allure到镜像
COPY ./allure_data /home/data/

# 配置allure环境变量
COPY ./env_path /var/jenkins_home
RUN  cat /var/jenkins_home/env_path  >> /root/.bashrc && /bin/bash -c "source /root/.bashrc"

四、 构建镜像

docker build -f dockerfile -t jenkinsci:1 .

最后的点不要忘记,这里的上下文路径是当前目录

五、 创建运行容器,验证镜像功能

# 创建运行容器
docker run -id --name=jenkinsci1 -p 8080:8080 -v /var/jenkins_node:/var/jenkins_home jenkinsci:1

# 进入容器
docker exec -it -uroot jenkinsci1 /bin/bash

验证jenkins功能:

在浏览器访问ip地址:8080端口,如果能进入jenkins页面,说明没问题

验证python3环境:

dockerfile定制jenkins+python+pytest+allure镜像步骤_第2张图片

验证pytest:

dockerfile定制jenkins+python+pytest+allure镜像步骤_第3张图片

验证allure:

六、上传镜像到dockerhub

以上验证无误说明定制镜像没问题,可以上传到远程镜像仓库

1、首先注册dockerhub账号,地址:dockerhub官网地址

2、本地登录远程仓库:docker login ,根据提示输入用户名密码

3、为本地镜像打标签:docker tag 本地镜像名:tag dockerhub用户名/远程镜像名:tag

dockerfile定制jenkins+python+pytest+allure镜像步骤_第4张图片

可以看到本地多一个拷贝出来的镜像,名字就是远程镜像名,将这个镜像push到远程镜像仓库

4、本地docker push dockerhub用户名/远程镜像名:tag

push完成可以在dockerhub上看到镜像名

dockerfile定制jenkins+python+pytest+allure镜像步骤_第5张图片

七、出现的问题和解决过程

1、问题:

根据定制的镜像创建运行容器,进入容器验证环境时,发现python3、pytest都验证通过,但是allure --version提示找不到allure

2、解决过程:

1、查找allure环境变量是否通过dockerfile命令生效,cat /root/.bashrc,发现有allure环境变量

2、看allure文件夹是否通过COPY命令拷贝到环境变量对应的路径下。发现/home/data目录下没有allure文件夹,只有四个文件夹(后面发现是allure目录下的四个文件夹)

3、然后去查看COPY命令,发现写法似乎没什么问题,但是没拷贝成功,问题肯定是出在COPY命令上,于是去搜索COPY命令具体用法,找到答案如果源路径是目录,那么会将源路径目录下的内容拷贝到镜像里,所以需要修改jenkinsci_dockerfile下allure的位置,创建一个目录allure_data,将allure放在子目录allure_data下,dockerfile COPY alure_data,拷贝到镜像的是allure,经过验证,allure --version正常

3、总结:

COPY命令:
    格式:COPY 宿主机文件或目录 镜像目录/    
    如果源路径是个文件,则把文件拷贝到镜像目录下
    如果源路径是个目录,则把目录下的内容拷贝到镜像目录下
    注意:目录路径最好在结尾加上/,代表是目录

dockerfile依赖文件或目录存放位置:
    一般放在dockerfile文件同级目录下即可
    如果要做COPY命令,依赖的文件放在同级目录下,依赖的文件夹放在同级目录
    的子目录下

你可能感兴趣的:(docker,持续集成jenkins,docker,容器,运维)