Jenkins,Docker,代码覆盖率

Jenkins

  1. Jenkins是一款开源的持续集成工具,具有自动化构建,测试,部署等功能
  2. 可以在Jenkins上下载插件以满足编译条件
  3. 将代码提交到git上,设置git的触发条件,满足条件时,Jenkins下载远程code到本地,然后执行构建脚本等,自动构建,测试,部署等。远程的项目下载到Jenkins的workspace文件夹中
  4. git上调用Jenkins暴露的接口,让Jenkins主动下载更新后的代码到本地

Docker

  1. 镜像中包含你要运行的程序以及他依赖的所有库,一个镜像可以创建多个容器,而dockerfile就是生成镜像的自动化脚本,也可以通过命令直接创建容器。通过命令创建容器需要完整的镜像,而dockerfile不用。但dockerfile创建时间更长,稳定性也不佳
  2. docker软件是远程镜像,本地镜像,本地容器的基座,也是运行容器的引擎。用于构建,运行,传送 应用程序的平台
    3.
    4.
  3. docker-compose容器的编排工具,必须在docker-compose.yml文件同目录下执行docker-compose up -d
  4. k8s通过API编排一系列docker-compose(k8s中叫node)的工具。可以将node在服务器中复制,迁移等。通过其自己的策略

Docker-其二

  1. Docker的核心概念是容器。与传统的虚拟化技术相比,容器不需要额外的操作系统,它们共享主机的内核,因此更加高效和灵活。开发人员可以将应用程序及其依赖项打包成一个容器,并在任何支持Docker的环境中运行。

    docker的组成
  2. 每个虚拟机都包含一个完整的Guest OS内核,它运行在Hypervisor虚拟的硬件上。例如:

    • 在Linux宿主机上运行Windows VM,Windows内核会直接控制虚拟硬件。
    • 虚拟机的内核与宿主机的Linux内核完全隔离,二者是并列关系。

    容器共享宿主机内核,内核必须兼容。Linux内核无法运行Windows用户空间程序(反之亦然)

  3. docker的底层实现

    • NameSpace
      我们知道Linux中的PID、IPC、网络等资源是全局的,而NameSpace机制是一种资源隔离方案,各个NameSpace下的资源互不干扰。
    • Control groups
      虽然有了NameSpace技术可以实现资源隔离,但进程还是可以不受控的访问系统资源,比如CPU、内存、磁盘、网络等,为了控制容器中进程对资源的访问,Docker采用control groups技术(也就是cgroup),有了cgroup就可以控制容器中进程对系统资源的消耗了,比如你可以限制某个容器使用内存的上限、可以在哪些CPU上运行等等。
  4. 容器:一次构建,到处运行

    • linux内核的标准化:Linux内核通过系统调用(syscall)为所有应用提供统一的硬件访问接口。
    • 用户空间标准化:一个Python应用的镜像包含Python解释器、依赖库和代码,但无需包含内核。
    • 运行时隔离:通过namespacescgroups屏蔽底层差异。

代码覆盖率

  1. 使用coverage计算代码覆盖率,使用coverage run -m pytest xxx语句运行,用coverage report生成文本报告,用coverage html生成网页报告,其中包含某 类,某方法,某文件的代码覆盖率,点进去可以看到具体是哪些代码行执行了。
  2. 当被测模块和测试脚本不在同一文件夹下,需要先引入sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))),否则不会生效
  3. 也可以直接用coverage run 运行python脚本,例 coverage run -m axon
  4. 每次生成报告前,需要先coverage erase 清除之前存留的报告,以确保不会对本次报告产生影响
  5. 如果程序中存在rpc调用,coverage不会跟踪到调用的rpc方法,哪怕他们在同一个project里
posted @ 2024-11-20 17:06  疯啦吧你  阅读(35)  评论(0)    收藏  举报