JENKINS进阶之DOCKER运行PYTEST并且出ALLURE报告

这里为什么要在容器里运行pytest呢?因为如果在Dockerfile里运行pytest,一旦产生测试失败,是会导致jenkins退出shell执行的

Python代码中Dockerfile


FROM python:3.7

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" >> /etc/timezone

WORKDIR .

ADD . .

RUN pip install -r requirements.txt

CMD ["pytest", "-q","testsuites/test_test.py","--alluredir","allure-results"]


Jenkins Job构建


name="apitest"

sudo docker build -t $name .

sudo docker run -d --name $name -v $PWD/allure-results:/allure-results $name


遇到问题

1.解决Jenkins执行sudo命令时出现“sudo: no tty present and no askpass program specified”的错误

这是因为Jenkins服务器在执行sudo命令时的上下文有误,导致这个命令执行的异常。

解决方案:

在Jenkins宿主服务器上运行如下命令

$ sudo visudo

在文件的末尾加上一行

jenkins ALL=(ALL) NOPASSWD: ALL

因为是只读文件强制保存并退出

$ :wq!

重启Jenkins服务

$ /etc/init.d/jenkins restart

最后,重新执行构建任务,不会出现先前的错误。

2.使用docker时报错“net/http: TLS handshake timeout”的解决方案

docker默认镜像拉取地址为国外仓库下载速度较慢,则会报错“net/http: TLS handshake timeout”。

此时,只需要将拉取地址改为国内镜像仓库即可。

为了永久性保留更改,您可以修改 /etc/docker/daemon.json 文件并添加上 registry-mirrors 键值。

{

  "registry-mirrors": ["https://registry.docker-cn.com"]

}

修改保存后重启 Docker 以使配置生效。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。