walle项目部署错误记录

问题一:选取分支和版本都显示“无数据”
先说说我在遇到选取分支和版本选取都显示为“无数据”并且刷新不出来的情况后的寻找解决办法的路线。
一开始我没有发现导致这一现象的具体原因,到walle的github项目上寻找解决方案(问题(2)的解决方案),尝试无果后,重新寻找原因和解决办法,所以发现了问题(1),再使用问题(1)的解决办法后,选取分支和选取版本都有数据了(如果显示没有点击旁边的刷新,刷新下就可以)。但是由于问题(2)中的解决方案更改了deployer.py中的两个函数,我忘了改回来(恢复原来的样子),然后出现问题(3)的情况,但是将函数改回原来的样子就解决了。因此,如果你的问题与本文的问题(1)相同,并使用问题(1)的方法解决分支版本无数据的问题且成功上线发布后,无需再看问题(2)和问题(3)。
问题(1):"The client is using an unsupported version of the Socket.IO or Engine.IO protocols"
问题描述:
owner角色 下,部署管理页面,点击新建上线单(请求代码200),然后点击测试环境中的项目后,进入到提交上线单的页面, 选取分支显示“无数据”,选取版本也是显示“无数据”,并且点击旁边的刷新一直刷不出来。
从浏览器控制台(F12)可以看到,此时请求不成功,请求代码400(选择测试环境中的代码后就这样)。
从运行日志以及浏览器控制台(F12)来看,好像是客户端的 Socket.IO or Engine.IO版本不匹配,也查了网上的一些方法, 尝试了(Flask-SocketIO (3.0.2),python-engineio (4.0.0),python-socketio (5.0.4))和(Flask-SocketIO (5.0.0),python-engineio (4.0.0),python-socketio (5.0.4))这两组版本,但是依然没有成功。我这里的版本是从walle-web中创建的虚拟环境中看到的(venv)。
logs/running.log日志:
Server initialized for gevent.
The client is using an unsupported version of the Socket.IO or Engine.IO protocols (further occurrences of this error will be logged with level INFO)
The client is using an unsupported version of the Socket.IO or Engine.IO protocols
The client is using an unsupported version of the Socket.IO or Engine.IO protocols
The client is using an unsupported version of the Socket.IO or Engine.IO protocols
The client is using an unsupported version of the Socket.IO or Engine.IO protocols
The client is using an unsupported version of the Socket.IO or Engine.IO protocols
The client is using an unsupported version of the Socket.IO or Engine.IO protocols
The client is using an unsupported version of the Socket.IO or Engine.IO protocols
The client is using an unsupported version of the Socket.IO or Engine.IO protocols

 

截图:
解决方法:
在虚拟环境中(参考walle安装记录,里面提到使用python3创建虚拟环境),使用pip3,将相关python包升级到指定版本 Flask-SocketIO==3.0.2, python-engineio==3.13.2, python-socketio==4.2.0。主要是参考下面这张图进行升级:
注意:之前有试过黄色框框的方法(5,4,5),但是正如上面说的那样,没有成功,暂时没有找到原因。
 
如果你的情况与问题(1)相同,并且解决了分支选取无数据的情况后上线发布成功,那么下面的文章不需要再看。
 
问题(2):github上解决方法
这个主要是记录github上针对选择分支和版本显示“无数据的情况”(之前我的上线单也是这样,一直没找到原因,后来发现是由于问题1导致的),因此,如果你的情况跟我相同,在选取分支和版本显示无数据的情况下,并且尝试了下面的方法无果,可以考虑检查下是不是running.log日志和浏览器控制台(F12),有没有问题1的情况出现。
注意:由于问题(1)和问题(2)都会导致上线单选择项目后,选取分支和版本显示“无数据”,并且点击旁边的刷新一直刷不出来。因此,一开始我是尝试参考问题(2)的解决方法解决的,无果后,发现了这一现象是由问题(1)导致的,使用问题(1)的解决办法最终解决选取分支和版本无数据的问题。
问题描述:
owner角色 下,部署管理页面,点击新建上线单(请求代码200),然后点击测试环境中的项目后,进入到提交上线单的页面, 选取分支显示“无数据”,选取版本也是显示“无数据”,并且点击旁边的刷新一直刷不出来。
解决办法:
针对选取分支显示无数据的情况,将walle/service/deployer.py中的list_commit函数增加下面红色的两行代码,记得重启服务(sh admin.sh restart)。
def list_commit(self, branch):
    repo = Repo(self.dir_codebase_project)
    repo.init(url=self.project_info['repo_url'])
    repo.checkout_2_branch(branch)
    repo.pull()
    return repo.commits(branch)

 

针对版本选取显示无数据的情况,将walle/service/deployer.py中的cleanup_loca函数,改为下面这样即可,记得重启服务。
def cleanup_local(self):
    # clean local package
    # command = 'rm -rf {project_id}_{task_id}_*'.format(project_id=self.project_info['id'], task_id=self.task_id)
    # with self.localhost.cd(self.local_codebase):
         # result = self.localhost.local(command, wenv=self.config())
    # clean local package
      command = 'ls -td {project_id}_* | tail -n +4 | xargs rm -rf'.format(project_id=self.project_info['id'])
      command_git = 'cd {project_id} && git checkout master && git remote prune origin && git branch|grep -v master |xargs git branch -D'.format(project_id=self.project_info['id'])
      with self.localhost.cd(self.local_codebase):
           result = self.localhost.local(command, wenv=self.config())
           result_git = self.localhost.local(command_git, wenv=self.config())

 

问题(3):使用问题(2)的解决方案导致上线不成功
问题描述:
点击开始后,显示上线不成功,错误如下:
解决方案:
将walle/service/deployer.py恢复原来的样子即可。
问题二:类如先执行cd在执行该目录下的某个文件出错,cd不成功
问题描述:在项目管理的任务配置中,比如deploy后置任务中,我们要进入某个模块下执行某个文件(比如:cd tartget后执行target下面的admin.sh文件),于是换行写了两个命令,但是发现sh admin.sh报错,错误为没有这个文件。
deploy后置任务的错误配置:
cd target
sh admin.sh

 

原因分析:walle中cd target后确实进入到了target目录下,但是在执行sh admin.sh文件时又恢复了原本的目录(target的上一级),因此执行admin.sh文件报错。
解决办法:不换行使用&&执行,即:
cd target && sh admin.sh

 

 
问题三:上线单开始发布后,针对需要一直运行的应用,上线页面一直卡在release或者release后置任务
问题描述:在项目配置中高级任务release后置任务通过运行jar包启动应用,由于应用需要一直运行,因此使用命令`nohup java -jar bookStar/target/bookStar-1.0-SNAPSHOT-exec.jar --server.port=8081  >> runtime.log  2>&1 &`让应用在后台一直运行,但是这样导致的结果就是walle中上线单发布界面release会一直转圈圈,不会显示发布成功。然而实际应用已经成功启动,部署成功。
任务配置:
原因分析:
  1. 首先因为walle判断发布成功的条件是指令执行成功,所以如果是一个一直在运行的服务,则不能依赖 walle 自己 去判断成功或失败,他只会一直等待,我们需要自行通知 walle 成功或失败。
  2. UI 控制台和r untime.log 只有成功或失败的指令,没有正在执行的指令,所以找问题得找你下一步的自定义的指令。
 
解决方案:自定义指令,告诉walle执行成功。 具体操作如下: 修改那些前置后置任务的 shell 指令。 比如说我要启动一个永恒的服务,则启动这个服务不等待返回,再用一个指令检测服务状态直接返回0或1 。
例如:我在release后置任务中需要执行上述的jar包启动服务,由于该服务需要一直启动,所以我让他在后台一直运行,即:` nohup java -jar bookStar/target/bookStar-1.0-SNAPSHOT-exec.jar --server.port=8081  >> runtime.log  2>&1 &`,无论这个命令是否执行成功还是失败,他都会继续执行后面的命令(如果有的话),那么我们就可以利用这点,在后面添加一个一定执行成功的命令,比如:echo “服务启动成功”,最后的指令结果也是根据echo确定。即在实际中nohup······就是我们实际执行的指令,而echo···就是我们状态检测的指令。
最后,release后置任务中完整的shell指令如下:
(nohup java -jar bookStar/target/bookStar-1.0-SNAPSHOT-exec.jar --server.port=8081  >> runtime.log  2>&1 &) && echo "服务启动完成"

 

 
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值