Docker Hub镜像构建测试

6 3月

Docker Hub提供了镜像构建服务,特别是和代码仓库关联起来的时候可以自动构建最新的镜像,这个功能可以保证你的镜像时刻是最新的。

但是有时候构件本身可能是成功的,比如你成功生成了相关的jar,并放到了合适的运行容器中,但是可能由于第三方依赖或其他原因导致你的镜像其实并不能正常工作。

人工验证可以发现问题,但是这里使用Docker Hub提供的测试服务更加快捷。

我们以dubbo-admin为例,这是一个非常标准的Spring Boot项目,构建以后生成jar包可以直接运行。而我们的测试目标就是构建出的镜像可以正常对外提供服务,这里我们检测swagger文档地址是否返回200。不同的项目可以使用不同的检测标准。

首先添加一个检测脚本test.sh

LOOP_SIZE=60
i=0

while [[ $i -lt LOOP_SIZE ]]; do
	status_code=$(curl --write-out %{http_code} --silent --output /dev/null http://admin:8080/swagger-resources)

  if [[ "$status_code" -eq 200 ]] ; then
    echo "Tests passed!"
    exit 0
  else
    curl -v http://admin:8080/swagger-resources
    echo "status is incorrect, waiting for next turn"
  fi
	sleep 5
	i=$i+1
done

echo "Tests failed!"
exit 1

这里循环检测相关访问是否成功,重试60次,每次间隔5秒。

然后提供了测试镜像

FROM ubuntu:trusty
RUN apt-get update && apt-get install -yq curl && apt-get clean

WORKDIR /app

ADD test.sh /app/test.sh

CMD ["bash", "test.sh"]

最后新建一个docker-compose.test.yml,这个名字是Docker Hub检测的依据,不要用其他名字

zookeeper:
  image: zookeeper
admin:
  build: .
  dockerfile: Dockerfile
  links:
    - zookeeper
  environment:
    - admin.registry.address=zookeeper://zookeeper:2181
    - admin.config-center=zookeeper://zookeeper:2181
    - admin.metadata-report.address=zookeeper://zookeeper:2181
sut:
  build: .
  dockerfile: Dockerfile.test
  links:
    - admin

这其中可以增加相关依赖,比如zookeeper。

最后在Docker Hub的执行结果如下:

发表评论

电子邮件地址不会被公开。