第2.2章 远程部署scrapyd工程

匿名 (未验证) 提交于 2019-12-03 00:32:02

scrapy自身工程的部署参考
第1.8章 scrapy之完整工程部署

这里要将的的通过jenkins来部署scrapyd,我有10台机器,如果一台台手工敲,费时费力。
jenkins安装参考第1.1章 自动化测试之jenkins安装,这里不赘述

1 安装jenkins插件
按照上图中核心的那几个插件,检查是否有遗漏
2 配置credentials
这个是访问远程ssh的账号,





只需要输入username和password即可

3 配置系统设置
3.1 主目录
jenkins的主目录,生成的文件都这个工作空间中。

3.2 Mask Passwords

3.3 JDKĿ¼
这个是jenkins所需jdk的目录

3.4 SSH remote hosts
远程访问机器的配置,配置credentials中的账号密码,就是在这里用到的

3.5 Publish over SSH
文件上传的时候需要这个。

4 配置任务
第1.3章 自动化测试之jenkins与应用同台,这里已经介绍如何通过参数化构建工程。
爬虫的稍微简单的一些,就是把代码从svn中下载下来,然后上传到远程linux机器上就可以
4.1 文件上传

并不是所有的都是上面的配置,比如如果我自定义的插件,就是下面的风格

4.2 远程执行脚本
kill命令用nohup是因为不这样做,jenkins会抛出异常导致终止部署

sudo nohup kill -9 `ps -ef |grep scrapyd|awk '{print $2}' `  & sleep 5 sudo /etc/init.d/scrapyd start


5 设置日志级别


构建工程后的日志如下

6 构建脚本

# -*- coding: utf-8 -*-  from command import execute import util import os import sys   COMMAMD_SVN_LIST = 'svn list ' COMMAMD_SVN_EXPORT = 'svn export --force ' COMMAMD_SVN_IMPORT = 'svn import -m -F ' COMMAMD_SVN_AUTHORIZATION = ' --username test --password 123456'  COMMAMD_PYTHON_BUILD = 'python setup.py sdist bdist_egg'  EXPORT_CODE_SUCCESS = '已导出版本' UPLOAD_SUCCESS = '提交后的版本为' COMPRESS_SUCCESS = '正在添加'  '''     编译spider ''' class Build:     def __init__(self):         paramList = util.getParamList()          self.project_name = paramList[1]         self.project_list = paramList[2]         self.svn_code_repository = paramList[3]         self.svn_upload_repository = paramList[4]         self.svn_username = paramList[5]         self.svn_password = paramList[6]         self.svn_auth = ' --username ' + self.svn_username + ' --password ' + self.svn_password         self.workspace = os.getcwd()         self.conf_dir = util.getConfDir(self.project_name)         self.spiders = paramList[8]         print(self.spiders)      def getConfList(self):         print('conf dir: ' + self.conf_dir)         return os.listdir(self.conf_dir)       def exportCode2Local(self):         exportResult = False         print('export project')         project = self.project_list         if self.spiders == 'ALL':             # 全部的代码             result = execute(COMMAMD_SVN_EXPORT + util.myUrlJoin(self.svn_code_repository, project) + self.svn_auth)             print(result)             if not util.executeResult(EXPORT_CODE_SUCCESS, result):                 return False             else:                 exportResult = True         else:             spider_list = util.getCommaSepratedList(self.spiders)             for spider in spider_list:                 pass          return exportResult      def getDetsConfFileThroughWar(self, conf):         project_folder = os.path.join(self.project_name,self.project_name) #       print(project_folder)         for fpathe,dirs,fs in os.walk(project_folder):             for f in fs:                 if(conf == f):                     return(os.path.join(fpathe,f))         return ''      def modifyConfig(self):              print(' in modifyConfig')         confList = self.getConfList()         print(confList)         for conf in confList:             dest = self.getDetsConfFileThroughWar(conf)             if(not len(dest) == 0):  #               print('copy ' + os.path.join(self.conf_dir, conf) + ' ' + dest + ' ' +'/Y')                 execute('copy ' + os.path.join(self.conf_dir, conf) + ' ' + dest + ' ' +'/Y')                 print(dest)      def pypiBuild(self):         buildResult = False         for project in self.project_list:             command = COMMAMD_PYTHON_BUILD             print('build ' + project + ' start')             os.chdir(os.path.join(self.workspace, project))             print('plugin path is {}'.format(os.path))             result = execute(command)             for r in result:                 print(r)             print('build ' + project + ' end')         os.chdir(os.path.join(self.workspace, project)+'\\dist')         relativeFileList = os.listdir(os.getcwd())         fileListStr = util.list2Str(relativeFileList)         print(fileListStr)       def startWork(self):         #step1: export code from svn         exportResult = self.exportCode2Local()         if exportResult == False:             print('export fail')             sys.exit(1)         else:             print('export success')          # modify config         self.modifyConfig()          #step2: upload code to svn baseline          #step3: python build         # self.pypiBuild()          #step4: update egg to svn    if __name__ == '__main__':       build = Build()     build.startWork()

注意替换文件放到workspace/conf 目录下,主目录也就是前面说的。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!