重启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:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

飘凛枫叶

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

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

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

打赏作者

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

抵扣说明:

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

余额充值