自动化测试使用jenkins做CICD持续集成(docker)

news2024/9/24 18:38:38

1.什么是(CI/CD)

1.1持续集成

定义:频繁地(一天多次)将代码集成到主干。将软件个人研发的部分向软件整体部分 交付,频繁进行集成以便更快地发现其中的错误。
每完成一点更新,就集成到主干, 可以快速发现错误,定位错误也比较容易,防止分支大幅偏离主干。如果不是经常集成,主干又在不 断更新,会导致以后集成的难度变大,甚至难以集成。
**作用:**持续集成的目的,就是让产品可以快速迭代, 同时还能保持高质量。它的核心措施是,代码集成到主干之前,必须通过自动化测试。只要有一个测试用例失败,就不能集成

1.2 持续交付(Continuous delivery)

**定义:**频繁地将软件的新版本,交付给质量团队或者用户,以供 评审。如果评审通过,代码就进入生产阶段。
持续交付在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的「类生产环境」(production-like environments)中。持续交付优先于整个产品生命周期的软件部署,建立在高水平自动化持续集成之上。

1.3 持续部署(continuous deployment)

**定义:**是持续交付的下一步,指的是代码通过评审以后,自动部署到生产环境。
持续部署的目标是,代码在任何时刻都是可部署的,可以进入生产阶段。持续部署的前提是能自动化完成测试、构建、部署等步骤

2.Jenkins介绍及docker部署

2.1 Jenkins介绍:

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成

2.2 docker部署

Docker是一个开源的容器化平台,可帮助开发者轻松地创建、部署和运行应用程序。Docker使开发人员能够在一个独立的容器中打包应用程序及其依赖项,这样他们就可以轻松地将应用程序移植到任何其他环境中。
部署环境:centos7云服务器

2.2.1 卸载系统之前安装的 docker(防止版本不一致,发生冲突)

sudo yum remove docker docker-client    docker-client-latest     docker-common     docker-latest docker-latest-logrotate    docker-logrotate    docker-engine

2.2.2 安装 Docker-CE 基本环境

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

2.2.3 更新本地镜像源

# 设置docker镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo

yum makecache fast

2.2.4 安装 docker,以及 docker-cli

sudo yum install docker-ce docker-ce-cli containerd.io

这样就安装好docker和基本环境了,接下来就可以启动docker了
Docker应用需要用到各种端口,逐一去修改防火墙设置。非常麻烦,因此建议大家直接关闭防火墙,但是公司生产环境不能这样做哦!

# 关闭
systemctl stop firewalld
# 禁止开机启动防火墙
systemctl disable firewalld

2.3 启动docker

#启动docker
sudo systemctl start docker
#查看docker服务状态 running 就是启动成功
sudo systemctl status docker

2.4 设置 docker 开机自启

sudo systemctl enable docker

2.5配置镜像加速

参考阿里云的镜像加速文档:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
在这里插入图片描述

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://g4ar166x.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

目前国内镜像源都停止服务了,所以我用的是https://docker.m.daocloud.io
在这里插入图片描述
最后重启下docker

sudo systemctl daemon-reload
sudo systemctl restart docker

3.创建jenkins的网络

docker network create jenkins
docker network ls #查看网络

在这里插入图片描述

4.下载并运行镜像

由于DockerHUB上面有很多版本的镜像,需要根据镜像的更新时间选择合适的版本,避免下载版本太旧的镜像:hub.docker.com/
在这里插入图片描述
在根目录创建目录dockerxxxx,在dockerxxxx内创建Dockerfile文件,编辑内容

FROM jenkins/jenkins:2.461-jdk11
USER root
RUN apt-get update && apt-get install -y lsb-release
RUN echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.asc] https://download.docker.com/linux/debian $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list

再根据刚刚编辑的Dockerfile拉取并创建自己的镜像

docker build -t jenkins-master:latest .

在这里插入图片描述
启动自己的jenkins镜像

docker run --name jenkins-master --restart=on-failure --detach
--network jenkins --env DOCKER_HOST=tcp://docker:2376
--env DOCKER_CERT_PATH=/certs/client --env DOCKER_TLS_VERIFY=1
--volume jenkins-data:/var/jenkins_home
--volume jenkins-docker-certs:/certs/client:ro
--publish 8080:8080 --publish 50000:50000 jenkins-master:latest

–publish 8080:8080:
第一个 8080 是主机(宿主机)的端口号。
第二个 8080 是容器内的端口号。
此处作用是将容器内的8080端口映射到宿主机的8080端口。因此,当你在宿主机上访问8080端口时,实际上是访问了容器内的8080端口。这样,你可以通过宿主机的IP地址和8080端口来访问容器内运行的服务。由于我主机8080端口有别的服务,所以我将容器的8080端口映射到主机的9090端口,修改为如下:

docker run --name jenkins-master --restart=on-failure --detach --network jenkins --env DOCKER_HOST=tcp://docker:2376 --env DOCKER_CERT_PATH=/certs/client --env DOCKER_TLS_VERIFY=1 --volume jenkins-data:/var/jenkins_home --volume jenkins-docker-certs:/certs/client:ro --publish 9090:8080 --publish 50000:50000 jenkins-master:latest

在这里插入图片描述
可以看到此时镜像已经起来了
在这里插入图片描述
查看 Jenkins 容器日志

docker logs -f jenkins-master

复制日志中的这一段,保存起来,这个是解锁jenkins的密码
在这里插入图片描述
配置镜像加速
修改宿主机 Jenkins 工作目录下的hudson.model.UpdateCenter.xml文件。

vi /var/jenkins_home/hudson.model.UpdateCenter.xml

原始内容:

<?xml version='1.1' encoding='UTF-8'?>
<sites>
  <site>
    <id>default</id>
    <url>https://updates.jenkins.io/update-center.json</url>
  </site>
</sites>

URL修改为国内清华大学的官方镜像地址,内容如下:

<?xml version='1.1' encoding='UTF-8'?>
<sites>
  <site>
    <id>default</id>
    <url>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url>
  </site>
</sites>

重启容器

docker restart jenkins-master
#或者停止原来容器再启动:
docker stop myjenkins
docker run -d -u root -p 8080:8080 -p 50000:50000 -v /var/jenkins_home:/var/jenkins_home -v /etc/localtime:/etc/localtime --restart=always --name myjenkins jenkins/jenkins:2.440.2-lts-jdk11

在浏览器访问http://ip:9090 ip要替换成你服务器的ip,需要等待大概10分钟的样子,才能进入到初始安装页面
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
点击保存并完成
在这里插入图片描述
在这里插入图片描述

5.安装需要的其他插件

点菜单系统管理–>插件管理,依次搜索下述插件并安装allure、Groovy、dingtalk
以allure为例
在这里插入图片描述

6.全局工具配置

配置git和allure
在这里插入图片描述
allure版本保持域本地使用的一致即可
在使用自动化时,我们都会在本地安装allure工具,安装pytest-allure包,这个其实就是和我们在本地安装的allure工具一样的
在这里插入图片描述
在这里插入图片描述

7.配置邮箱

以QQ邮箱为例,可以根据需要替换成自己公司的企业邮箱

  1. 先开启qq邮箱的smtp服务,打开 QQ 邮箱进入设置
    在这里插入图片描述

  2. 开启 SMTP 服务
    在这里插入图片描述

  3. qq邮箱凭据配置
    进入系统管理–>Manage Credentials
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  4. jenkins邮箱基础配置在这里插入图片描述
    在这里插入图片描述
    如果是虚拟机的话,由于IP可能发生变化,所以上图中Jenkins URL也需要根据IP进行改动

  5. 测试邮件发送
    在这里插入图片描述
    在这里插入图片描述
    测试成功后说明邮件发送正常

  6. 配置扩展邮箱
    该配置将会作为我们jenkins任务执行完成后的邮件模板
    找到系统配置-Extended E-mail Notification区域,做如下配置,注意点高级才能凭据选择
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

8. 配置GIT

进入系统管理–>Manage Credentials,注意这里是你在码云上的用户名和密码
在这里插入图片描述

9.钉钉通知基础配置

10.节点配置

如果所有任务都在myjenkins这个容器上面执行的话,压力会很大,所以采用jenkins分布式执行的策略,将不同的任务分配到不同的节点上去执行
在这里插入图片描述
上图中master指的是jenkins所在服务器,用来统筹管理各个任务及配置
slave指的是各个自动化任务执行的机器,也叫作节点
master通过管理节点,及任务中的节点配置将不同的任务分配到不同的设备上执行
我们希望在jenkins slave节点上执行,而不是在jenkins所在的master上执行,因此我们需要配置节点相关的内容

但是问题又来了。没有这么多的电脑咋办,我们的解决方法就是使用docker去部署节点环境,与jenkins主节点进行关联

  1. 打开jenkins的系统管理->全局安全配置页面,进行如下设置并保存
    代理端口:默认就是指定端口50000
    我们在前面起容器时映射端口50000就是为了这个
    在这里插入图片描述
  2. 打开jenkins的系统管理->节点管理页面,点击左侧的新建节点
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述

11.docker部署slave节点及连接

在根目录下创建目录docker_auto_interface1,在docker_auto_interface1目录下创建Dockerfile,写入

FROM jenkins/inbound-agent
USER root
WORKDIR /home/jenkins
Run sed -i 's/deb.debian.org/mirrors.tencent.com/' /etc/apt/sources.list
RUN apt-get update && apt-get install -y python3 && apt-get install -y python3-pip

然后在docker_slave1目录下执行下述命令,来创建镜像

docker build -t auto_interface1:latest .

在这里插入图片描述

如果执行报错,删掉Run sed -i ‘s/deb.debian.org/mirrors.tencent.com/’ /etc/apt/sources.list就好
镜像创建成功后,使用下述命令启动节点

docker run -itd --network jenkins --name slave1 auto_interface1 -url http://116.205.183.16:9090 f0d3245b7d9a0fc4a67892b3a8ce319e350489ba2acc949f77cc88b29c9bafea slave1 

命令中–name slave1 auto_interface1,slave1是jenkins上节点名 ,auto_interface1是指我使用的镜像名
http://116.205.183.16:9090 指的是jenkins master的连接地址
f0d3245b7d9a0fc4a67892b3a8ce319e350489ba2acc949f77cc88b29c9bafea这是在节点管理中点击未连接的节点,可以看到这一串,复制过来,后面跟节点名
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
启动后查看日志,日志出现Connected,说明连接成功

docker logs -f slave1

在这里插入图片描述
查看jenkins上节点状态,正常,连接成功
在这里插入图片描述

12. pipeline流水线任务

12.1. 创建流水线任务

1.首页点击新建任务
在这里插入图片描述
2.输入任务名称,选择流水线,最后点确定
在这里插入图片描述
3.在这里填写流水线脚本,不会写可以参考流水线语法
在这里插入图片描述
在这里插入图片描述
以下给出一个流水线脚本示例,此脚本作用是从git上拉取代码到指定的节点

pipeline {
	//指定执行节点
	agent {
  		label 'auto-interface1'
	}
	//步骤
	stages {
	  stage('拉取自动化代码') {
		steps {
		  // One or more steps need to be included within the steps block.
		  git credentialsId: '116f4a45-564d-4f5c-832d-306edd4ec768', url: 'https://gitee.com/zly-zly00/auto_interface.git'
		}
	  }
	}
}

(1)首先指定执行节点,点击流水线语法
在这里插入图片描述
在片段生成器中未找到节点有关的信息,去Declarative Directive Generate找在这里插入图片描述
点击agent:Agent,在Agent处选择根据标签选择节点(根据需要来即可)
在这里插入图片描述
填写节点标签,点击生成,就得到了pipeline的代码了,复制到流水线中即可
在这里插入图片描述
在这里插入图片描述
(2)配置操作步骤
Declarative Directive Generate中选择stages:Stages,步骤名根据需要填写,下一项选择steps,再点击生成代码,复制到流水线
在这里插入图片描述
在这里插入图片描述

(3)配置步骤中的具体操作
我们这里操作主要是拉取代码,片段生成器中找到GIT
在这里插入图片描述
填写仓库url,选择分支、凭据,点击生成流水线脚本,复制到流水线
在这里插入图片描述
在这里插入图片描述
点击保存
3.构建任务
点击立即构建
在这里插入图片描述
在构建历史这里会有任务,我们这里显示构建成功,点击"#1",可以进去详细情况
在这里插入图片描述
进入workspace
在这里插入图片描述
点击这个目录,就能看到拉取的代码文件了
在这里插入图片描述
我们也可以进去容器内部查看代码文件是否真的被拉下来了

docker exec -it auto-interface1 bash

在这里插入图片描述

  1. 钉钉通知配置
  2. 设置环境参数
  3. 构建触发器配置
  4. 流水线脚本生成

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1981630.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

儿童活动床栏亚马逊temu美国ASTM F2085测试报告16 CFR 1224标准CPC认证办理

亚马逊temu美国站儿童活动床栏ASTM F2085-19测试报告活动床栏16 CFR 1224标准CPC认证 什么是便携式床栏杆&#xff1f; 便携式床栏杆是一种旨在安装在成人床上以防止儿童跌落的装置。便携式床栏适用于在没有帮助的情况下方便儿童&#xff08;通常为 2 至 5 岁&#xff09;上下…

编程深水区之并发①:什么是并发编程

并发编程是一种让程序能够执行多个任务的编程技术&#xff0c;多个任务的执行时间有重合&#xff0c;如交替执行、同时执行等。相对于传统的从上到下依次同步执行代码&#xff0c;我们也称并发编程为异步编程。目前&#xff0c;常见的并发模型主要有两种&#xff0c;一是多线程…

MySQL --- 内置函数介绍

目录 一、日期函数 二、字符串函数 三、数学函数 四、 其他函数 一、日期函数 current_date()当前日期current_time()当前时间current_timestamp()当前时间戳date(datetime)返回datetime的日期部分date_add(date&#xff0c;interval d_value_type) 在date中添加时间/日期…

在没有备份的条件下,如何恢复微信聊天记录?

推荐2款数据恢复工具1个简单实用方法&#xff0c;帮你找回微信误删聊天记录&#xff01; 操作简单&#xff0c;可用于iOS、安卓手机和PC电脑端 1、万兴数据管家 点击直达官网下载>>https://huifu.wondershare.cn 万兴数据管家是一款专业的微信数据恢复软件。 支持苹果…

鲁班上门维修安装系统源码开发之功能模式

鲁班上门维修安装系统在当今的趋势呈现出显著的增长与创新。随着物联网、智能家居的普及&#xff0c;以及消费者对便捷、高效生活方式的追求&#xff0c;鲁班上门维修安装系统凭借其多渠道预约、智能派单、在线支付与费用明细透明等优势&#xff0c;赢得了市场的广泛认可。 …

「面试必看」Vue百题斩~ Vue数据响应式原理的四个核心模块

vue 响应式原理的四个核心模块 Observe Observe 要实现的目标非常简单&#xff0c;就是把一个普通对象转换成响应式对象。 为了实现这一点&#xff0c;Observe 把对象的每个属性通过 Object.defineProperty 转换为带有 setter 和 getter 的属性&#xff0c;这样一来&#xf…

重头开始嵌入式第十二天(预处理和指针)

预处理 在 C 语言中&#xff0c;预处理是指在编译之前由预处理器对源代码进行的一些处理操作。 主要包括以下几个方面&#xff1a; 1. 宏定义&#xff1a;使用 #define 指令定义一个标识符来代表一个常量值、表达式或一段代码。 例如&#xff1a; #define PI 3.14159 2.…

亚马逊澳大利亚站 带绳窗帘认证步骤

带绳窗帘是一种室内用窗帘&#xff0c;可通过一根吊绳控制升降。此类商品包括但不限于蜂窝帘、水平百叶帘、百褶帘、卷式百叶帘、卷帘、透光帘、罗马帘、帘杆&#xff08;包括使用帘杆的商品&#xff0c;如带帘杆的窗帘和布帘&#xff09;、面板轨道和垂直百叶帘。 我们的带绳窗…

vue 开发工具 Hbuilder 简介及应用

一、简介 HBuilderX 是一款流行的前端开发工具&#xff0c;由DCloud公司开发。它支持多种编程语言&#xff0c;如HTML、CSS、JavaScript、Vue、UniApp等&#xff0c;非常适合用来开发Web应用、移动端应用和跨平台应用。 官网地址&#xff1a;https://www.dcloud.io/hbuilderx.…

ShardingSphere 内核工作原理

文章目录 内核工作原理配置管控SQL Parser: SQL解析引擎SQL Router- SQL 路由引擎SQL Rewriter : SQL 优化引擎SQL Executor &#xff1a; SQL执行引擎Result Merger&#xff1a; 结果归并 内核工作原理 ShardingSphere的整体架构图是这样的&#xff1a; 配置管控 在进入Shar…

火车站NTP电子钟,自动授时,保证时间精准

在现代交通体系中&#xff0c;火车站作为重要的交通枢纽&#xff0c;每天承载着大量乘客的出行需求。为了确保列车运行的准时性和乘客信息的准确性&#xff0c;火车站NTP电子钟成为不可或缺的一部分。本文将详细介绍火车站NTP电子钟的特点及其在不同场景中的应用优势。 一、火车…

【STL】String的底层构造

1.String类对象的构造&#xff08;后面有每一个接口的实现&#xff09; #define _CRT_SECURE_NO_WARNINGS 1 #pragma once #include<iostream> #include<assert.h> using namespace std;namespace bit {class string{public:typedef char* iterator;typedef const…

字节实习面试

1.比左边的数都小&#xff0c;比右边的数都大 public class Test3 {/*** 从左往右找当前位置往左最小的* 从右往左遍历找当前位置往右最大的* 比较* param args*/public static void main(String[] args) { // int[] arr new int[]{9,8,7,3,4,2,1};int[] arr new int[…

【第十届泰迪杯数据挖掘挑战赛A题害虫识别】-农田害虫检测识别-高精度完整更新

农田害虫检测识别项目-高精度完整版 一、说明&#xff1a; 该版本为基于泰迪杯完整害虫数据重新制作数据集、优化增强数据集、重新进行模型训练&#xff0c;达到高精度、高召回率的最优模型代码。包含论文、最优模型文件以及相关文件、原始数据集、训练数据集XML版、增强扩充…

五款超好用的报表软件推荐,其中一款竟然完全免费

与以往需要通过繁琐的数据表格和复杂的数字分析不同&#xff0c;可视化报表通过表格、图表和图形&#xff0c;将数据以更加直观的方式呈现出来&#xff0c;使得原本繁杂无序的数据变得清晰易懂。无论是管理层的决策分析&#xff0c;还是一线员工的日常工作&#xff0c;可视化报…

vs+qt一些问题

一直遇到的两个问题&#xff0c;今天解决了 1、 因为前后端分离&#xff0c;前端写完了&#xff0c;后端还在一直修改&#xff0c;但是每次都是单独打开的后端的sln&#xff0c;所以会出现这个&#xff0c;把前端的模块删掉就好了。 2、打开vs项目&#xff0c;很多报错&#…

怎么在视频上加文字?归纳了简单好用的方法

怎么在视频上加文字&#xff1f;在数字媒体制作中&#xff0c;为视频添加文字是一种常见的需求。无论是为了提供字幕、注释、标题还是视觉效果&#xff0c;文字元素都能增强视频的传达力和观赏性。因此&#xff0c;今天本文将介绍四种简单好用的方法&#xff0c;帮助你轻松地在…

硬盘数据恢复:所需时长、全面指南及注意事项

在数字化时代&#xff0c;硬盘作为我们存储重要数据的核心设备&#xff0c;其重要性不言而喻。然而&#xff0c;由于各种原因&#xff0c;如误删除、格式化、硬盘故障等&#xff0c;我们时常面临数据丢失的困境。数据恢复不仅关乎个人隐私和信息安全&#xff0c;更可能影响到我…

Platform Designer各模块(2)

1.On-Chip Memory&#xff08;存储器&#xff09; (RAM or ROM) Intel FPGA IP RAM&#xff1a;主存&#xff0c;与CPU直接交换数据的内部存储器&#xff0c;可读可写&#xff0c;断电不丢失数据&#xff1b; ROM&#xff1a;只能读取数据&#xff0c;断电丢失数据。 2.Syste…

如何利用matlab将现有的地基雷达回波数据调制为机载雷达回波数据???

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…