在云效平台实现流水线部署遇到的问题及解决

前言:在云效平台上实现流水线部署作为本次大作业中部署工作一项重点,由我在13日和14日两天做了数次尝试并最终得以解决。

 

 

7月13日主要解决了项目在服务器上手动部署的问题:

在13日初步使用Python flask框架搭建了web项目后,在本地运行chat_web.py文件即可开放127.0.0.1:5000端口接入浏览web页面并实现基本的问答功能。

在实现了生成web页面后我便开始考虑如何部署到服务器上。我本人也是第一次接触服务器相关的部署,之前仅接触过一点linux及git相关命令,但在本次训练营中学习了理论和实操相关的知识,我便想试试如何把运行Python脚本后生成的web项目部署到服务器上并实现外部访问。开始我以为这是一件很容易的事情,我直接通过课程中一直使用的demo账户,远程桌面连接连接到沙箱账号的ecs主机,在其中利用图形界面安装了anaconda3环境并利用SSH连接到ecs主机命令行运行了相关Python脚本,然后满怀期待地打开电脑浏览器,输入了ecs主机的公网ip地址和端口:120.27.216.176:5000,却只看到以下结果:

在云效平台实现流水线部署遇到的问题及解决_第1张图片

我开始四处在网上查询为何无法在部署到服务器后从外部访问,大多数回答都先说明了要在安全组设置中添加开启5000端口,我也照所述前往ecs主机的安全组设置中添加了5000端口,但保存设置后重新在服务器上运行Python脚本仍无法从外部访问到web页面,我此时怀疑可能是由于各种防火墙机制导致5000端口无法从外部被访问,遂查询各种linux的防火墙设置,但都过于繁琐,我也尝试了一些发现执行很多命令仍无法访问到5000端口。于是我开始在小组群中询问宋文强老师,同时我也在想既然5000端口无法访问,为什么不直接修改默认端口为80呢?我在Python脚本中修改了部署的端口为80端口,心想就算是防火墙也应该不会拦截80这个为HTTP协议开放的默认端口吧。但我尝试运行修改后的Python脚本,发现会产生如下报错:在云效平台实现流水线部署遇到的问题及解决_第2张图片

在云效平台实现流水线部署遇到的问题及解决_第3张图片

经宋老师提示为权限不足,我使用的是demo账户登录并不具备修改这项设置的权限,当我换用root账户登录运行Python脚本后,终于第一次成功从外部访问到我部署在服务器上的web项目。

在云效平台实现流水线部署遇到的问题及解决_第4张图片

PS:(此处能发现我将anaconda3环境也安装在了demo用户上,可能对之后的云效流水线部署也产生了一些不便。)

7月14日主要解决了在云效平台上实现流水线部署的问题:

在7月13日成功将项目手动部署到服务器上并实现外部访问后我便开始尝试使用流水线自动部署项目,我依照自己的之前的实操经验和对云效平台自己的浅薄理解开始是这样认为的:云效的流水线部署其实就是关联自己的ecs后在部署配置中执行自己输入的脚本即可完成部署。我起初一直以为需要在linux命令行中输入什么便在以下部署脚本栏中输入什么即可实现部署,后发现并不能实现。此时已是13日深夜了,我便和组内汇报今天已无法完成流水线部署了,便结束了13日的工作,略带遗憾。

在云效平台实现流水线部署遇到的问题及解决_第5张图片

在云效平台实现流水线部署遇到的问题及解决_第6张图片

14日我仔细阅读了错误报告后发现竟然提示pip命令和source命令都无法找到(此处执行source一行命令便是因为anaconda3环境装在了demo用户上,每次从root登录都要手动激活……之后我又卸载了anaconda3环境并重新在root用户下安装,每次登录后便会自动激活anaconda3环境了),而我在ecs上无疑是部署过相关环境的,于是我便开始咨询阿里云客服联系相关技术人员获取支持。

在云效平台实现流水线部署遇到的问题及解决_第7张图片

技术人员其实也并不熟悉Python部署,但对Java项目的部署比较了解,支持人员给我讲解了流水线扫描、构建的流程,当构建完成后流水线会自动从代码仓库把项目拉取到本地,然后执行deploy.sh脚本进行运行。我此时还理解为在deploy.sh脚本文件中写入我需要在linux命令行中运行的命令即可,尝试后仍无法流水线部署。之后继续询问阿里云技术支持人员,告诉我可以理解为云效这边有一台打包的机器里面有基本的Python环境,这或许也能解释为何我之前已经在ecs上安装了相关环境却总是提示我缺少相关模块。技术支持人员告诉我说他也并不十分了解Python项目部署,并提出我部署一条全新的流水线,选择自动生成的最简单的模版仓库了解是如何部署的或许能更好理解云效流水线的流程。我便新建了模板Python代码仓库并结合以下链接尝试先部署好最简单的工程。https://help.aliyun.com/document_detail/125769.html

在云效平台实现流水线部署遇到的问题及解决_第8张图片

在过程中我发现deploy.sh脚本文件默认是有封装好的各种函数和功能的,和我预想的希望在ecs的linux命令行输入什么就写进去什么是不一样的,deploy.sh的默认模板如下(太长了见文末):

我发现只单纯的删除了默认模板的结构,加上需要执行的命令并不可行,只有在对应函数功能处(如在start_application()中修改需要执行的Python脚本)并结合整个脚本文件前后关联的结构才能成功用云效流水线部署到主机上。我猜想这还是与前文所述云效中会有一台起连接作用的打包机器来执行一些命令有关,所以直接写linux命令是不可行的。

到此为止,终于完成了困扰我两天的云效平台实现流水线自动部署的问题。目前当我们代码仓库有修改后,可以设置自动运行流水线即可完成新代码的自动部署发布在云效平台实现流水线部署遇到的问题及解决_第9张图片

你可能感兴趣的:(在云效平台实现流水线部署遇到的问题及解决)