软件测试:Jenkins+docker一些知识点

一、jenkins的workspace spc进去是什么意思?

在 Jenkins 中,“workspace” 是指 Jenkins 为每个任务(Job)或流水线(Pipeline)分配的工作目录,用于存储任务执行过程中的所有文件和数据。“spc” 并不是 Jenkins 中一个标准的、通用的术语或操作,是进入 Jenkins 的 workspace,这通常意味着进入到与特定 Jenkins 任务或项目相关联的工作目录,以便查看、管理和操作其中的文件和数据,其意义和作用主要体现在以下几个方面:

  • 查看构建相关文件:进入 workspace 可以查看源代码、构建脚本、配置文件等与项目构建相关的所有文件。例如,在进行 Java 项目构建时,workspace 中会包含 Java 源文件、Maven 或 Gradle 的配置文件等,开发人员和运维人员可以直接查看这些文件,了解项目的结构和构建逻辑。
  • 检查构建结果:构建过程中生成的中间产物和最终结果也会存储在 workspace 中。比如编译后的.class 文件、生成的可执行文件、打包后的.jar 或.war 文件等。通过进入 workspace,可以方便地检查构建结果是否正确,是否存在错误或异常。
  • 故障排查:当构建过程出现问题时,workspace 中的日志文件和临时文件可以提供重要的线索。例如,构建日志会记录构建过程中的每一步操作和输出信息,通过查看日志文件可以快速定位问题所在,如编译错误、依赖缺失等。
  • 文件管理和操作:可以在 workspace 中对文件进行复制、移动、删除等操作。比如,如果需要将构建结果部署到其他服务器上,可以直接在 workspace 中获取相关文件并进行传输。

通常可以通过 Jenkins 的 Web 界面、命令行工具或 SSH 等方式进入 workspace。在 Jenkins 的 Web 界面中,每个任务的页面通常会提供一个 “Workspace” 链接,点击即可进入对应的工作目录;通过命令行,可以使用与文件系统操作相关的命令(如 cd 命令)进入到 Jenkins 工作目录所在的路径。

二、docker 容器、镜像是什么、jenkins编译?

Docker 容器

定义

Docker 容器是 Docker 技术中的一个重要概念,它是一个轻量级、可移植的独立运行环境,包含了运行应用程序所需的一切:代码、运行时环境、系统工具、系统库等。容器基于镜像创建,就像一个独立的小盒子,将应用程序及其依赖项封装在一起,与宿主机和其他容器隔离开,保证应用在不同环境中都能一致运行。

特点
  • 隔离性:容器内的应用程序与宿主机和其他容器相互隔离,不会相互影响。例如,在一个容器中运行的 Web 服务器不会干扰宿主机上其他服务的正常运行。
  • 轻量级:与传统虚拟机相比,容器不需要模拟完整的操作系统,共享宿主机的内核,因此占用资源少,启动速度快,通常可以在秒级内启动。
  • 可移植性:容器可以在任何支持 Docker 的环境中运行,无论是开发环境、测试环境还是生产环境,确保应用在不同环境中的一致性。

Docker 镜像

定义

Docker 镜像是一个只读的模板,它包含了创建 Docker 容器所需的所有文件系统和配置信息。可以把镜像看作是容器的 “蓝图”,一个镜像可以创建多个容器实例。镜像通常由多个层(Layer)组成,每个层代表一次文件系统的修改,这些层叠加在一起形成最终的镜像。

特点
  • 分层结构:镜像的分层结构使得镜像的构建和传输更加高效。当多个镜像共享某些层时,只需要下载或存储不同的部分,减少了存储空间和传输时间。
  • 可复用性:可以基于已有的镜像进行定制和扩展,创建新的镜像。例如,可以在一个基础的 Ubuntu 镜像上安装特定的软件,创建一个适合自己应用的镜像。

Jenkins 编译

定义

Jenkins 是一个开源的自动化服务器,广泛用于持续集成和持续交付(CI/CD)流程中。Jenkins 编译指的是使用 Jenkins 来自动化执行项目的编译过程。它可以监控代码仓库的变化,当有新的代码提交时,自动触发编译任务,将源代码编译成可执行的程序或软件包。

过程
  1. 配置项目:在 Jenkins 中创建一个新的任务(Job)或流水线(Pipeline),配置代码仓库的地址、认证信息等,让 Jenkins 能够访问项目的源代码。
  2. 设置编译环境:安装和配置编译所需的工具和依赖项,如编译器、构建工具(如 Maven、Gradle)等。可以通过在 Jenkins 节点上安装相应的软件,或者使用 Docker 容器来提供隔离的编译环境。
  3. 编写构建脚本:在 Jenkins 任务中配置构建步骤,编写编译脚本。脚本可以是简单的命令行指令,也可以是复杂的自动化脚本,用于执行编译、测试、打包等操作。
  4. 触发编译:可以设置 Jenkins 定时触发编译任务,或者当代码仓库有新的提交时自动触发。Jenkins 会从代码仓库拉取最新的代码,执行编译脚本,并记录编译过程中的日志和结果。
  5. 处理结果:编译完成后,Jenkins 可以根据编译结果进行相应的处理,如发送通知(邮件、即时通讯消息等)、部署到测试环境或生产环境等。

通过使用 Jenkins 进行编译,可以提高软件开发的效率和质量,减少人为错误,实现代码的快速迭代和部署。

三、在实际应用中,Jenkins 里引入 Docker 和在 Docker 里搭建 Jenkins 这两种方式都较为常见,下面为你分别介绍两种方式的操作、适用场景以及优缺点。

Jenkins 里引入 Docker

操作方式

在这种模式下,Jenkins 本身运行在常规的服务器环境(物理机或虚拟机)中,只是在 Jenkins 的构建任务里使用 Docker 相关命令来创建、运行容器等。你需要在 Jenkins 所在的服务器上安装 Docker,并且配置 Jenkins 的构建步骤,让其可以调用 Docker 命令,例如在构建脚本里使用docker build来构建镜像,使用docker run来运行容器。

适用场景
  • 当你已经有一个稳定运行的 Jenkins 环境,只是想借助 Docker 的容器化特性来完成一些特定构建任务时,例如对不同版本依赖环境的隔离构建,就可以采用这种方式。
  • 企业内部已经有成熟的服务器管理体系,不想对现有的 Jenkins 部署架构做大的调整,但希望引入容器技术来优化构建流程。
优缺点
  • 优点:对现有 Jenkins 环境改动小,实施相对简单;可以灵活地在不同构建任务中选择是否使用 Docker,兼容性好。
  • 缺点:增加了 Jenkins 服务器的管理复杂度,需要同时维护 Jenkins 和 Docker 的运行环境;如果多个构建任务同时使用 Docker,可能会对服务器资源造成较大压力。

在 Docker 里搭建 Jenkins

操作方式

使用 Docker 创建一个 Jenkins 容器,将 Jenkins 运行在容器内部。你可以从 Docker Hub 上拉取官方的 Jenkins 镜像,然后使用docker run命令来启动 Jenkins 容器。同时,为了持久化存储 Jenkins 的数据,通常需要将容器内的数据目录挂载到宿主机的某个目录上。

适用场景
  • 适用于快速搭建测试环境或开发环境,能够快速部署 Jenkins,并且方便进行版本升级和迁移。
  • 当你希望利用容器的隔离性和可移植性,将 Jenkins 与其他服务隔离开,避免相互影响时,可以选择这种方式。
优缺点
  • 优点:部署速度快,利用 Docker 的特性可以快速创建和销毁 Jenkins 实例;容器的隔离性保证了 Jenkins 运行环境的独立性,不会影响宿主机和其他容器。
  • 缺点:对 Docker 技术的掌握要求较高,需要熟悉 Docker 的网络、存储等相关配置;容器的资源管理相对复杂,如果配置不当,可能会出现资源不足或浪费的情况。

四、在Docker里搭建Jenkins的详细步骤

在 Docker 里搭建 Jenkins 可以按照以下详细步骤进行:

1. 安装 Docker 和 Docker Compose

在开始搭建 Jenkins 之前,你需要确保 Docker 和 Docker Compose 已经安装在你的系统上。不同操作系统的安装方法有所不同,以下是常见操作系统的安装方式:

Ubuntu
# 更新系统包列表
sudo apt update
# 安装必要的依赖包
sudo apt install apt-transport-https ca-certificates curl software-properties-common
# 添加 Docker 的官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 添加 Docker 软件源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 更新系统包列表以包含 Docker 软件源
sudo apt update
# 安装 Docker Engine
sudo apt install docker-ce docker-ce-cli containerd.io
# 安装 Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
CentOS
# 安装必要的依赖包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# 添加 Docker 软件源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装 Docker Engine
sudo yum install docker-ce docker-ce-cli containerd.io
# 启动 Docker 服务并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker
# 安装 Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

2. 创建 Docker Compose 文件

创建一个名为 docker-compose.yml 的文件,用于定义 Jenkins 容器的配置。以下是一个示例配置:

version: '3'
services:
  jenkins:
    image: jenkins/jenkins:lts
    user: root
    ports:
      - "8080:8080"
      - "50000:50000"
    volumes:
      - jenkins_home:/var/jenkins_home
      - /var/run/docker.sock:/var/run/docker.sock
      - /usr/bin/docker:/usr/bin/docker
    environment:
      - JAVA_OPTS=-Djenkins.install.runSetupWizard=false

volumes:
  jenkins_home:
  • image: jenkins/jenkins:lts:指定使用 Jenkins 的长期支持版本镜像。
  • ports:将容器内的 8080 端口映射到宿主机的 8080 端口,用于访问 Jenkins Web 界面;将 50000 端口映射到宿主机,用于 Jenkins 与代理节点通信。
  • volumes
    • jenkins_home:/var/jenkins_home:将容器内的 /var/jenkins_home 目录挂载到宿主机的 Docker 卷 jenkins_home 上,用于持久化存储 Jenkins 的数据。
    • /var/run/docker.sock:/var/run/docker.sock:将宿主机的 Docker 套接字文件挂载到容器内,使 Jenkins 容器可以与宿主机的 Docker 守护进程进行通信。
    • /usr/bin/docker:/usr/bin/docker:将宿主机的 Docker 客户端二进制文件挂载到容器内,使 Jenkins 容器可以直接使用 Docker 命令。
  • environment:设置 JAVA_OPTS 环境变量,跳过 Jenkins 的初始设置向导。

3. 启动 Jenkins 容器

docker-compose.yml 文件所在的目录下,执行以下命令启动 Jenkins 容器:

docker-compose up -d

-d 参数表示在后台运行容器。

4. 访问 Jenkins Web 界面

打开浏览器,访问 http://<your-server-ip>:8080,其中 <your-server-ip> 是运行 Jenkins 容器的服务器的 IP 地址。如果一切正常,你将看到 Jenkins 的初始解锁界面。

5. 获取初始管理员密码

执行以下命令获取 Jenkins 的初始管理员密码:

docker exec -it <jenkins-container-id> cat /var/jenkins_home/secrets/initialAdminPassword

<jenkins-container-id> 替换为实际的 Jenkins 容器 ID。你可以使用 docker ps 命令查看容器 ID。

6. 解锁 Jenkins

将上一步获取的初始管理员密码复制到 Jenkins Web 界面的输入框中,点击 “继续”。

7. 安装插件

选择 “安装推荐的插件”,Jenkins 将自动下载并安装一系列常用的插件。

8. 创建管理员用户

插件安装完成后,创建一个管理员用户,填写用户名、密码、邮箱等信息,点击 “保存并完成”。

9. 完成设置

点击 “开始使用 Jenkins”,完成 Jenkins 的设置。

至此,你已经在 Docker 里成功搭建了 Jenkins。你可以开始创建和配置 Jenkins 任务,实现持续集成和持续交付。

四、想利用jenkins和docker搭建自动化测试系统,包括编译代码、拉取代码、改进门禁等

利用 Jenkins 和 Docker 搭建自动化测试系统,涵盖编译代码、拉取代码以及改进门禁等功能,可以按照以下步骤进行:

1. 环境准备

  • 安装 Docker:确保服务器上已经安装 Docker,并且 Docker 服务正常运行。可以参考上一个回答中的安装步骤。
  • 安装 Jenkins:可以选择在 Docker 中运行 Jenkins,按照前面提到的在 Docker 里搭建 Jenkins 的步骤完成安装。

2. 配置 Jenkins

  • 系统配置:登录 Jenkins 管理界面,进入 “系统管理” -> “系统设置”,配置全局工具,如 Git、Maven 等。如果使用 Docker 构建,还需要配置 Docker 相关的环境变量。
  • 添加凭据:进入 “系统管理” -> “管理凭据”,添加访问代码仓库所需的凭据,如用户名和密码、SSH 密钥等。

3. 创建 Jenkins 任务

3.1 新建任务
  • 登录 Jenkins 控制台,点击 “新建任务”,输入任务名称,选择 “自由风格的软件项目”,点击 “确定”。
3.2 配置源代码管理
  • 在 “源码管理” 部分,选择使用的版本控制系统,如 Git。填写代码仓库的 URL 和之前添加的凭据,指定要拉取的分支。
3.3 配置构建触发器
  • 在 “构建触发器” 部分,可以选择定时触发、代码变更触发等方式。例如,选择 “Poll SCM”,设置定时检查代码仓库的时间间隔。
3.4 配置构建环境
  • 在 “构建环境” 部分,可以选择使用 Docker 容器来执行构建任务。例如,选择 “Use Docker container”,指定要使用的 Docker 镜像。
3.5 配置构建步骤
  • 拉取代码:在 “构建” 部分,添加一个 “执行 shell” 步骤,使用 Git 命令拉取代码:
git clone <repository-url>
cd <project-directory>
  • 编译代码:如果是 Java 项目,可以使用 Maven 进行编译。添加一个 “执行 shell” 步骤,执行以下命令:
mvn clean install
  • 构建 Docker 镜像:如果需要将编译后的应用打包成 Docker 镜像,可以添加一个 “执行 shell” 步骤,执行以下命令:
docker build -t <image-name>:<tag> .
  • 运行自动化测试:根据项目的测试框架,添加相应的测试命令。例如,如果使用 JUnit 进行单元测试,可以执行以下命令:
mvn test
3.6 配置构建后操作
  • 门禁改进:可以在 “构建后操作” 部分添加条件判断,根据测试结果决定是否允许代码合并或部署。例如,如果测试失败,发送邮件通知相关人员:
if [ $? -ne 0 ]; then
    # 发送邮件通知
    echo "Build failed. Please check the logs." | mail -s "Build Failed" <recipient-email>
fi

4. 配置 Docker 网络和存储

  • 网络配置:确保 Jenkins 容器和其他相关容器(如数据库容器)可以相互通信。可以创建一个 Docker 网络,将所有容器连接到该网络。
docker network create <network-name>
  • 存储配置:为了持久化存储 Jenkins 和测试数据,可以使用 Docker 卷。在 Docker Compose 文件中或容器启动命令中指定卷挂载。

5. 测试和优化

  • 运行任务:保存 Jenkins 任务配置后,手动触发一次构建任务,检查代码拉取、编译、测试等步骤是否正常执行。
  • 优化配置:根据测试结果,对 Jenkins 任务配置、Docker 镜像和容器配置进行优化,确保自动化测试系统的稳定性和可靠性。

6. 持续集成和持续交付(CI/CD)扩展

  • 集成部署:在自动化测试通过后,可以将 Docker 镜像推送到镜像仓库,并部署到测试环境或生产环境。可以使用 Jenkins 的插件(如 Docker Pipeline、Publish Over SSH 等)实现自动化部署。
  • 监控和日志:配置监控工具(如 Prometheus、Grafana)和日志管理工具(如 ELK Stack),对自动化测试系统的运行状态和测试结果进行监控和分析。

通过以上步骤,你可以利用 Jenkins 和 Docker 搭建一个完整的自动化测试系统,实现代码的拉取、编译、测试和门禁控制等功能。

五、除了编译代码、拉取代码和改进门禁,Jenkins 和 Docker 还能用于哪些自动化测试场景?

除了编译代码、拉取代码和改进门禁外,Jenkins 和 Docker 还能在众多自动化测试场景中发挥重要作用,以下为你详细介绍:

1. 多环境兼容性测试

  • 不同操作系统测试:使用 Docker 可以轻松创建各种不同操作系统的容器,如不同版本的 Linux(Ubuntu、CentOS 等)、Windows Server 容器等。Jenkins 可以自动触发在这些不同操作系统容器中运行测试用例,确保软件在多种操作系统环境下都能正常工作。例如,一个跨平台的 Python 应用程序,可以在 Ubuntu、CentOS 和 Windows Server 容器中分别运行单元测试和集成测试。
  • 不同数据库测试:针对依赖数据库的应用程序,利用 Docker 可以快速部署不同类型和版本的数据库容器,如 MySQL、PostgreSQL、Oracle 等。Jenkins 可以自动化地在这些不同数据库环境中执行测试,验证应用程序与各种数据库的兼容性。比如,一个 Web 应用程序需要同时支持 MySQL 和 PostgreSQL,通过 Docker 分别启动这两种数据库的容器,Jenkins 依次在对应的环境中运行测试。

2. 性能测试

  • 模拟高并发场景:使用 Docker 可以快速创建多个相同的应用程序容器,模拟高并发的用户访问场景。Jenkins 可以集成性能测试工具,如 JMeter、Gatling 等,自动启动性能测试任务。例如,对于一个电商网站的性能测试,Jenkins 可以控制 Docker 启动多个容器来模拟大量用户同时访问商品详情页、下单等操作,然后收集和分析性能指标,如响应时间、吞吐量等。
  • 资源占用测试:通过 Docker 的资源限制功能,可以精确控制每个容器的 CPU、内存等资源使用情况。Jenkins 可以在不同资源配置的容器中运行应用程序并进行测试,评估应用程序在不同资源环境下的性能表现。比如,测试一个大数据处理应用程序在不同内存配置下的处理速度和稳定性。

3. 安全测试

  • 漏洞扫描:Jenkins 可以集成各种安全扫描工具,如 Nmap、OWASP ZAP 等,利用 Docker 容器运行这些工具对应用程序进行漏洞扫描。当代码发生变更时,Jenkins 自动触发安全扫描任务,及时发现潜在的安全漏洞。例如,对于一个 Web 应用程序,Jenkins 可以定期启动 OWASP ZAP 容器对其进行全面的安全扫描,检测是否存在 SQL 注入、跨站脚本攻击(XSS)等安全问题。
  • 合规性检查:借助 Docker 容器可以方便地部署合规性检查工具,Jenkins 自动化执行合规性检查任务,确保应用程序符合相关的安全标准和法规要求。比如,检查应用程序是否遵循 GDPR(通用数据保护条例)的规定。

4. UI 自动化测试

  • 跨浏览器测试:使用 Docker 可以创建包含不同浏览器(如 Chrome、Firefox、Safari 等)的容器,Jenkins 可以自动在这些不同浏览器容器中运行 UI 自动化测试脚本,确保应用程序的用户界面在各种浏览器上都能正常显示和交互。例如,对于一个前端 Web 应用,通过 Jenkins 控制 Docker 启动 Chrome 和 Firefox 容器,分别执行 Selenium 编写的 UI 自动化测试用例。
  • 跨设备测试:结合 Docker 和移动设备模拟器(如 Android 模拟器),Jenkins 可以自动化地在不同设备模拟器上运行移动应用的 UI 测试。例如,测试一个 Android 应用在不同屏幕分辨率和尺寸的模拟器上的界面布局和交互效果。

5. 接口自动化测试

  • API 测试:Jenkins 可以集成 API 测试工具,如 Postman、RestAssured 等,利用 Docker 容器提供稳定的测试环境。当 API 代码发生变更时,Jenkins 自动触发 API 测试任务,验证 API 的功能正确性、响应时间、数据格式等。例如,对于一个微服务架构的应用程序,Jenkins 可以定期启动 Postman 容器对各个微服务的 API 进行全面测试。
  • 契约测试:在微服务架构中,使用 Docker 可以轻松部署服务提供者和消费者的容器。Jenkins 可以自动化执行契约测试,确保服务之间的接口契约得到遵守。例如,使用 Pact 工具进行契约测试,Jenkins 控制 Docker 启动服务提供者和消费者的容器,执行契约验证任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值