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

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. 流水线脚本生成
  • 10
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力码代码的小赵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值