重启ks容器自动化

一、背景:

容器部署的selenium,如果出现以下场景:

  1. selenium脚本执行完没调用driver.quit()
  2. selenium执行过程中报错终止了代码
  3. 手动ctr+c终止中断运行

上面的场景都会导致容器里面的driver进程没有被释放,下次再跑selenium脚本,就会报错:502超时,链接不到remote driver。

解决方法,每次跑脚本前,手动重启一下容器,但是,如果在集成工具去执行脚本,不可能每次跑脚本前都去手动重启容器。

所以,需要通过代码自动化实现这一手动操作。

二、实现方案:

  1. 把ks的登录密码存储到redis,方便修改,因为经常几个月就需要改一次密码
  2. 在ks控制台查看login接口是返回302的,没有response.body,而是把cookie返回给response.headers的Set-Cookie。
  3. 在ks控制台查看重启容器的接口,需要传哪些信息。
import requests
import json
from helpers._redis import operate_redis
from datetime import datetime, timezone
import time
opr = operate_redis()
 
def redeploy_docker():
    # ks登录跳转到302后,获取set-cookie
    url = "http://ks.orgapp.com/login"
    username = opr.find_redis_str("ks:username")
    password = opr.find_redis_str("ks:password")
    payload = json.dumps({"username":username,"encrypt": password})
    headers = {
        'content-type': "application/json"
        }
    # allow_redirects=False 参数表示不允许自动重定向,便会返回302,否则返回200,获取不到 set-cookie
    # password = "***=@^fSn`ugM_oSgIxIW\\=G]",反斜杠被转义 \\\\,需要处理
    response = requests.request("POST", url, headers=headers, data=payload.replace("\\\\","\\"), allow_redirects=False)
    cookie = response.headers["Set-Cookie"]
 
    # 重新部署docker-selenium容器
    url = "http://ks.orgapp.com/apis/clusters/dev-iot4-oam/apps/v1/namespaces/devops/deployments/docker-selenium"
    headers = {
        'cookie': cookie,
        # 这里需要看前端的传值,有些不一样
        'content-type': "application/merge-patch+json"
        }
    # 获取当前时间
    current_time = datetime.now(timezone.utc).strftime('%Y-%m-%dT%H:%M:%S.%fZ')
    payload = {"spec":{"template":{"metadata":{"annotations":{"kubesphere.io/restartedAt": str(current_time)}}}}}
    response = requests.request("PATCH", url, json=payload, headers=headers)
    # 等待容器重启
    time.sleep(10)
 
if __name__ == "__main__":
    redeploy_docker()

三、运行顺序

试过在scrapy框架里面调用 重启ks容器自动化的脚本,可还是经常出现连接remote-selenium超时的情况,猜测还是因为重启ks容器自动化的顺序不能在scrapy创建driver对象之前。

所以,简单粗暴些,在Jenkins的shell命令行里面,先直接执行ks的文件,再运行scrapy:

相关推荐

  1. docker容器故障

    2024-01-24 06:10:02       40 阅读
  2. 设置docker开机自启动,并设置容器自动

    2024-01-24 06:10:02       44 阅读
  3. Windows自动化python脚本

    2024-01-24 06:10:02       32 阅读
  4. 内存溢出如何实现自动化

    2024-01-24 06:10:02       36 阅读
  5. Linux登录/自动执行

    2024-01-24 06:10:02       64 阅读
  6. Linux监听某个进程,自动

    2024-01-24 06:10:02       29 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-24 06:10:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-24 06:10:02       101 阅读
  3. 在Django里面运行非项目文件

    2024-01-24 06:10:02       82 阅读
  4. Python语言-面向对象

    2024-01-24 06:10:02       91 阅读

热门阅读

  1. 和GPT讨论知识蒸馏的基本概念

    2024-01-24 06:10:02       55 阅读
  2. 【Sentinel 控制台无应用显示-如何排查】

    2024-01-24 06:10:02       55 阅读
  3. 网络请求 mvp mvvm get post delete put 请求

    2024-01-24 06:10:02       58 阅读
  4. Spring Security 6.x 系列【72】授权篇之角色分层

    2024-01-24 06:10:02       61 阅读
  5. Linux内核--文件系统(一)磁盘IO及优化

    2024-01-24 06:10:02       48 阅读