Docker+Python+Linux+Jenkins+Allure+钉钉群自动化测试

文章目录

  • 一、环境准备
  • 二、创建jenkins容器
  • 三、配置jenkins容器
  • 四、jenkins安装插件
  • 五、创建jenkins任务
  • 六、配置jenkins任务
  • 七、构建有项目执行环境的Python镜像
  • 八、钉钉机器人配置
  • 九、推送钉钉Python代码
  • 十、构建


一、环境准备

  1. Linux服务器一台(我的是阿里CentOS)

  2. 服务器上正确安装docker
    2.1 拉取Jenkins镜像
    docker pull jenkins/jenkins:alpine
    Docker+Python+Linux+Jenkins+Allure+钉钉群自动化测试_第1张图片

    2.2 拉取Python3镜像
    docker pull python:3-alpine
    Docker+Python+Linux+Jenkins+Allure+钉钉群自动化测试_第2张图片

二、创建jenkins容器

1.运行命令
docker run -dit --name=jenkins_lianxi -p 9999:8080 -u=root -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker jenkins/jenkins:alpine

2.参数说明

-i:表示运行容器
-t:表示容器启动后会进入其命令行,与-it一起使用
-d:守护式方式创建容器在后台运行
--name:容器名称
-p 9999:8080:端口映射,宿主机端口:jenkins容器端口
-u=root:指定容器用户为root用户
-v /var/run/docker.sock:/var/run/docker.sock:将docker.sock映射到jenkins容器中
docker.sock文件是docker client与docker daemon通讯的文件
-v /usr/bin/docker:/usr/bin/docker:将宿主机docker客户端映射到jenkins容器中(这样宿主机目录和容器内的目录就互通.可以互相传输文件)

三、配置jenkins容器

  1. 浏览器访问 http://Linux服务器IP:宿主机映射端口(我这里是9999)
    Docker+Python+Linux+Jenkins+Allure+钉钉群自动化测试_第3张图片

  2. 在Linux服务器执行命令docker logs jenkins_lianxi获取管理员密码
    Docker+Python+Linux+Jenkins+Allure+钉钉群自动化测试_第4张图片

  3. 复制密码输入到密码框,点下一步,来到如下页面(中间需要等待一段时间,大概1分钟左右,耐心等待)
    Docker+Python+Linux+Jenkins+Allure+钉钉群自动化测试_第5张图片

  4. 取消默认插件勾选,进入下一步
    Docker+Python+Linux+Jenkins+Allure+钉钉群自动化测试_第6张图片

  5. 设置管理员用户名和密码(以后就用这个账号密码登陆你的jenkins)
    Docker+Python+Linux+Jenkins+Allure+钉钉群自动化测试_第7张图片

  6. 配置实例
    Docker+Python+Linux+Jenkins+Allure+钉钉群自动化测试_第8张图片

  7. jenkins初始化完成看到如下界面
    Docker+Python+Linux+Jenkins+Allure+钉钉群自动化测试_第9张图片

四、jenkins安装插件

1.点击系统管理-插件管理
Docker+Python+Linux+Jenkins+Allure+钉钉群自动化测试_第10张图片

2.安装所需要的插件

  • Git
  • Docker
  • Allure
  • Dingl Talk
  • Email Extension Plugin

Docker+Python+Linux+Jenkins+Allure+钉钉群自动化测试_第11张图片
3.安装完成后重启jenkins容器
docker restart jenkins_lianxi

五、创建jenkins任务

1.点击新建任务
Docker+Python+Linux+Jenkins+Allure+钉钉群自动化测试_第12张图片
2.创建自由风格的项目
Docker+Python+Linux+Jenkins+Allure+钉钉群自动化测试_第13张图片

六、配置jenkins任务

1.配置构建记录保留规则
Docker+Python+Linux+Jenkins+Allure+钉钉群自动化测试_第14张图片
2.钉钉机器人配置
Docker+Python+Linux+Jenkins+Allure+钉钉群自动化测试_第15张图片

3.Git仓库配置
Docker+Python+Linux+Jenkins+Allure+钉钉群自动化测试_第16张图片
4.配置构建后操作
Linux下选择执行shell,命令里配置运行脚本-拉取代码完成之后需要做的操作

echo "运行容器python执行自动化"  #输出日志
#-w=$WORKSPACE:指定容器的工作目录workspace
#--volumes-from=jenkins_lianxi:将jenkins容器中的workspace映射到python容器中,此时jenkins中git拉下来的代码就会被映射进去(如果想要实现容器间的数据共享,那么需要授权一个容器访问另一个容器的Volume)
docker run --rm -w=$WORKSPACE --volumes-from=jenkins_lianxi python3.9:yy
echo "python执行自动化执行成功"

Docker+Python+Linux+Jenkins+Allure+钉钉群自动化测试_第17张图片
5.配置allure报告
Docker+Python+Linux+Jenkins+Allure+钉钉群自动化测试_第18张图片
Docker+Python+Linux+Jenkins+Allure+钉钉群自动化测试_第19张图片
6.在系统管理-全局工具配置中配置allure报告
Docker+Python+Linux+Jenkins+Allure+钉钉群自动化测试_第20张图片

七、构建有项目执行环境的Python镜像

  1. 将项目依赖包导出来到requirements.txt文件中,txt文件名称可以随意写
    pip freeze > requirements.txt

  2. 在宿主机(安装docker的机子)上新建(mkdir app)一个目录(我的目录在/app),将requirements.txt文件复制进去

  3. 在app目录下创建Dockerfile文件(touch Dockerfile)(文件名必须是Dockerfile,没有后缀)

  4. Dockerfile内容以及解释如下

    FROM python:3-alpine  #基于python:3-alpine这个基础镜像镜像构建镜像
    WORKDIR /app   #切换工作空间目录
    ADD ./requirements.txt /app #将python项目依赖包文件添加到镜像
    RUN pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple #安装依赖包
    CMD ["python3", "main.py"] #设置容器执行后自动执行的命令,这里main.py是我们自动化框架的执行入口文件
    
  5. 在app目录下执行镜像构建命令
    docker build -t python3.9:lianxi .
    -t:镜像名称
    点(.):点表示Dockerfile文件所在的目录,我现在在app目录下,点表示当前目录

  6. 构建成功后会看到一个新的镜像(docker images)

八、钉钉机器人配置

  1. 在钉钉群点击群设置-智能群助手-添加机器人
    Docker+Python+Linux+Jenkins+Allure+钉钉群自动化测试_第21张图片Docker+Python+Linux+Jenkins+Allure+钉钉群自动化测试_第22张图片
    Docker+Python+Linux+Jenkins+Allure+钉钉群自动化测试_第23张图片
    Docker+Python+Linux+Jenkins+Allure+钉钉群自动化测试_第24张图片

九、推送钉钉Python代码

  1. Python代码放在jenkins生成allure报告同级目录下
import os
import jenkins #安装pip install python-jenkins
import json
import time
import hmac
import hashlib
import base64
import urllib.parse
import requests


# jenkins登录地址
jenkins_url = "http://xxxxxxx/job/"
# 获取jenkins对象
server = jenkins.Jenkins(jenkins_url, username='xxx', password='xxx') #Jenkins登录名 ,密码
# job名称
job_name = "xxx" #Jenkins运行任务名称
# job的url地址
job_url = jenkins_url + job_name
# 获取最后一次构建
job_last_build_url = server.get_info(job_name)['lastBuild']['url']
# 报告地址
report_url = job_last_build_url + 'allure' #'allure'为我的Jenkins全局工具配置中allure别名

'''
钉钉推送方法:
读取report文件中"prometheusData.txt",循环遍历获取需要的值。
使用钉钉机器人的接口,拼接后推送text
'''

def DingTalkSend():
    d = {}
    # 获取项目绝对路径
    path = os.path.abspath(os.path.dirname((__file__))) 
    # 打开prometheusData 获取需要发送的信息
    f = open(path + r'/report/export/prometheusData.txt', 'r')
    for lines in f:
        for c in lines:
            launch_name = lines.strip('\n').split(' ')[0]
            num = lines.strip('\n').split(' ')[1]
            d.update({launch_name: num})
    f.close()
    retries_run = d.get('launch_retries_run')  # 运行总数
    print('运行总数:{}'.format(retries_run))
    status_passed = d.get('launch_status_passed')  # 通过数量
    print('通过数量:{}'.format(status_passed))
    status_failed = d.get('launch_status_failed')  # 不通过数量
    print('通过数量:{}'.format(status_failed))

    # 钉钉推送
    headers = {'Content-Type': 'application/json', "Charset": "UTF-8"}
    # 这里替换为复制的完整 webhook 地址
    prefix = 'https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxx'
    # 时间戳
    timestamp = str(round(time.time() * 1000))
    # 这里替换为自己复制过来的加签秘钥
    secret = 'xxxxxxxxxxxx'
	# 编码转换
    secret_enc = secret.encode('utf-8')
    string_to_sign = '{}\n{}'.format(timestamp, secret)
    string_to_sign_enc = string_to_sign.encode('utf-8')
    # 使用HmacSHA256算法计算签名,然后进行Base64 encode
    hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()
    #把签名参数再进行urlEncode,得到最终的签名
    # 将一些特殊的字符串转换为固定的一些符号字母数字组合,比如/转为%2(随便编的,大概这个意思)
    sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))
	#拼接url
    url = f'{prefix}×tamp={timestamp}&sign={sign}'
    #钉钉消息格式,其中 content 就是我们要发送的具体内容
    con = {"msgtype": "text",
           "text": {
               "content": "Pytest_Allure_Demo自动化脚本执行完成。"
                          "\n测试概述:"
                          "\n运行总数:" + retries_run +
                          "\n通过数量:" + status_passed +
                          "\n失败数量:" + status_failed +
                          "\n构建地址:\n" + job_url +
                          "\n报告地址:\n" + report_url
           }
           }


    jd = json.dumps(con)
    requests.request('POST', url, data=jd, headers=headers)


if __name__ == '__main__':
    DingTalkSend()

参考钉钉加签文档

  1. 创建一个新的Python容器,重复上面的操作(可以不选择这种方式,可以直接安装Python包来执行Python文件,待研究)
    在Linux服务器下新建dingtalk文件夹,把requirements.txt放进去,并且创建新的Dockerfile文件
FROM python:3-alpine
WORKDIR /dingtalk
ADD ./requirements.txt /dingtalk
RUN pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
CMD ["python3","ding_talk.py"]
  1. 在dingtalk目录下执行镜像构建命令
    docker build -t python3.9:dingtalk .
    -t:镜像名称
    点(.):点表示Dockerfile文件所在的目录,我现在在dingtalk目录下,点表示当前目录

  2. 在jenkins再新建一个自由风格的任务dingtalk
    配置git
    Docker+Python+Linux+Jenkins+Allure+钉钉群自动化测试_第25张图片
    在需要发钉钉消息的任务构建完成之后自动构建dingtalk任务,将测试报告等信息推送到钉钉群
    Docker+Python+Linux+Jenkins+Allure+钉钉群自动化测试_第26张图片
    配置Python容器启动时运行的文件(ding_talk文件)
    Docker+Python+Linux+Jenkins+Allure+钉钉群自动化测试_第27张图片

十、构建

  1. 选择任务,点击立即构建
    Docker+Python+Linux+Jenkins+Allure+钉钉群自动化测试_第28张图片
  2. 查看控制台输出日志
    Docker+Python+Linux+Jenkins+Allure+钉钉群自动化测试_第29张图片

Docker+Python+Linux+Jenkins+Allure+钉钉群自动化测试_第30张图片
dingtalk任务的控制台输出日志
Docker+Python+Linux+Jenkins+Allure+钉钉群自动化测试_第31张图片
钉钉群收到的消息
Docker+Python+Linux+Jenkins+Allure+钉钉群自动化测试_第32张图片
参考链接:https://www.cnblogs.com/MrqiuS/p/14211637.html
http://testingpai.com/article/1644570535388

你可能感兴趣的:(jenkins,docker,linux,钉钉)