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 以使配置生效。

你可能感兴趣的:(JENKINS进阶之DOCKER运行PYTEST并且出ALLURE报告)