1、jenkins 配置

2、jenkins 脚本

ansible-playbook /opt/test.yaml --extra-vars "loanno=${loanno}" --extra-vars "type=${type}"

中转机器脚本

test.yaml
---
- name: 开始导出合同
hosts: test
tasks:
- name: 执行导出脚本
shell: echo {{ loanno }}
shell: echo {{ type }}
shell: echo loanno
shell: python /app/crontab/python/autocontract/contract_supplement.py {{ loanno }} {{ type }}
register: result
- name: 打印输出结果
debug: msg="{{ result }}"

3、远程机器下载脚本

python /python/autocontract/contract_supplement.py {{ loanno }} {{ type }}

4、python 脚本

# coding:utf8
import sys
import xlwt
import mysql.connector
import datetime
import send_mail
import os
import time
import file_tar nowtime = datetime.datetime.now().strftime('%Y%m%d')
oddir="/app/crontab/python"
#filename = "%s/cma_registerinfo%s.xls"%(oddir,nowtime)
file_count = 0
end_date=time.strftime("%Y-%m-%d", time.localtime()) tmp_dir='/app/crontab/python/autocontract'
tmp_file_list='tmp.txt'
sorce_dir='/data/nfs/yyapp/yylending/usercontract'
ods_dir='/app/crontab/python/autocontract/tmp'
filename=ods_dir+'/test.tar.gz'
#var_loan=''
#var_type='' #sql='select path from test where loadNo in (%s) and cid in(%s);' %(var_loan,var_type) config = {
'user': '******',
'password': ''******',',
'host': ''******',',
'port': ''******',',
'database': ''******',',
'charset': 'utf8'
} mail_list = {
'sender':'xiajq@PH-LOTH-V159.localdomain', #发件人
'receivers':'test@qq.com', #收件人
'title':'*****', #邮件主题
'content':'*****', #邮件内容
'attfilename':'',#附件内容
'server':'localhost' #发送邮件服务器。默认为本机
} def get_conn():
conn = mysql.connector.connect(**config)
return conn def query_all(cur, sql, args):
'''
#参数说明
:param cur:
:param sql: 执行的sql
:param args: sql中的桉树
:return:
'''
print(sql)
print(args)
cur.execute(sql, args)
return cur.fetchall() def export_excle(filename, sql, outputpath):
'''
# 参数说明
:param filename: 文件名称
:param sql: 执行脚本
:param outputpath: 输出路径
:return:
'''
file_count = 0
try:
conn = get_conn()
cur = conn.cursor()
# 查询结果 tar_file
results = query_all(cur=cur, sql=sql, args=None)
print(type(results))
if len(results):
file_tar.copy_file(sorce_dir, ods_dir, *results)
file_tar.tar_file(ods_dir, 'test.tar.gz')
file_count = file_count + 1
else:
print("返回结果为空") finally:
if conn:
conn.close()
return file_count # 结果测试
if __name__ == "__main__":
# sql = input("请输入要查询的sql:")
#filename = input("请输入excle的名字")
var_loan="'"+sys.argv[1].replace(',',"','")+"'" #接受jeknins传递的值
var_type="'"+sys.argv[2].replace(',',"','")+"'" #接受jeknins传递的值
arg=[var_loan,var_type]
print(var_loan+var_type)
sql='select contract_path from contract where loadNo in (%s) and cid in(%s);' %(var_loan,var_type)
print(sql)
file_count = export_excle(filename, sql, oddir) #执行导出结果
if os.path.exists(filename) and os.path.getsize(filename)>0:
if file_count >=1:
print("邮件已经发送 %s"%(mail_list['attfilename']))
mail_list['attfilename'] = filename
print("邮件已经发送 %s"%(mail_list['attfilename']))
send_mail.sendmail(**mail_list)
else :
print("文件大小为空,请检查")
else :
print("文件不存在,请联系管理员检查脚本是否有异常"
#!/user/bin/python
#-*- coding: utf-8 -*-
import sys
import os
import shutil
import tarfile
import zipfile
import io
# coding:utf8
# author: xiajq
# 实现批量输入借据号和uid导出合同并且重名自动打包发送到邮箱需要人的邮箱
#1、在jenkins 界面输入借据号和uid 2.调用Python脚本实现将邮件自动拷贝到临时目录,打包发送到对应收件人的邮箱 reload(sys)
sys.setdefaultencoding('utf-8')#添加该方法声明编码 tmp_dir='/test/autocontract'
tmp_file_list='tmp.txt'
sorce_dir='/test/usercontract'
ods_dir='test/tmp'
def copy_file(sorce_dir,ods_dir,*file_list):
'''
拷贝文件
:param tmp_file_list: 记录文件名字
:param sorce_dir: 源文件
:param ods_dir: 目标文件
:return:
'''
for line in list(file_list):
line = ''.join(line)
print(line)
print(type(line))
new_name = line.replace('/', '_')
print("开始拷贝")
print("拷贝后的名称为 %s" % new_name)
# ods_file="%s/%s"%(ods_dir,new_name)
ods_file = ods_dir + '/' + new_name
print(type(line))
# filename=line.strip().encode('utf-8')
soure_file = "%s/%s" % (sorce_dir, line)
print(soure_file)
print(ods_file)
shutil.copy(soure_file, ods_file)
print("拷贝成功") def tar_file(dir,tarname):
'''
打包某个目录下的所有文件
:param dir: 需要打包的目录
:param tarname: 打包的名字
:return:
'''
os.chdir(ods_dir)
tf = tarfile.open(tarname, "w:gz")
for fname in os.listdir(ods_dir):
print(fname)
if fname.endswith(".pdf"):
tf.add(fname)
print(tf.members)
print(tf.name)
tf.close()

3、发送邮件

#coding=utf-8
import smtplib
from email.header import Header
from email.mime.text import MIMEText
from email.utils import formataddr
from email.utils import parseaddr, formataddr
from email.mime.multipart import MIMEMultipart mail_list = {
'sender':'admin@qq.com', #发件人
'receivers':'test@qq.com', #收件人
'title':'云测推荐失败数据监控', #邮件主题
'content':'云测推荐失败数据见附件。请及时查看原因', #邮件内容
'filename':'',#附件内容
'server':'localhost' #发送邮件服务器。默认为本机
} def _format_addr(s):
name, addr = parseaddr(s)
return formataddr((Header(name, 'utf-8').encode(), addr)) # def sendmail(**kwargs):
#sender,receivers,title,content,filename,server = 'localhost'
'''
:param sender: 发件人 my_sender = 'test1@qq.com,test2@qq.com'
:param receivers: 收件人
:param title: 邮件标题
:param content: 邮件内容
:param attfilename: 附件名称
:param server: 服务器的名字默认为localhost,本机
:return:
'''
message = MIMEMultipart()
message['From'] = _format_addr(kwargs['sender'])
message['Subject'] = Header(kwargs['title'], 'utf-8')
# message['To'] = _format_addr(kwargs['receivers']) #收件人只显示自己
# print(kwargs['receivers'])
message['To'] = kwargs['receivers']# 可以看得见多个收件人 #
message.attach(MIMEText(kwargs['content'], 'plain', 'utf-8'))
att1 = MIMEText(open(kwargs['attfilename'], 'rb').read(), 'base64', 'utf-8')
att1["Content-Type"] = 'application/octet-stream'
att1["Content-Disposition"] = 'attachment; filename=%s'%(kwargs['attfilename'])
message.attach(att1) try:
smtpObj = smtplib.SMTP(kwargs['server'])
smtpObj.sendmail(kwargs['sender'], kwargs['receivers'].split(','), message.as_string())
print(kwargs['receivers'].split(','))
except smtplib.SMTPException:
print("Error: 无法发送邮件")

python实用脚本-通过jenkins界面化导出数据的更多相关文章

  1. Python 实用脚本

    Python 实用脚本 脚本写的好,下班下得早!程序员的日常工作除了编写程序代码,还不可避免地需要处理相关的测试和验证工作. 例如,访问某个网站一直不通,需要确定此地址是否可访问,服务器返回什么,进而 ...

  2. 8 个 Python 实用脚本,赶紧收藏备用!

    脚本写的好,下班下得早!程序员的日常工作除了编写程序代码,还不可避免地需要处理相关的测试和验证工作. 例如,访问某个网站一直不通,需要确定此地址是否可访问,服务器返回什么,进而确定问题在于什么.完成这 ...

  3. python实用脚本-定时导出数据库中的数据并且发送数据到邮箱

    1.发送邮件脚本 #coding=utf-8 import smtplib from email.header import Header from email.mime.text import MI ...

  4. python实用脚本集

    iScript 是Github上 PeterDing 大神写的一个脚本集,由多数的 python 脚本和少数GM脚本组成. 含有以下几个脚本: xiami.py - 下载或播放高品质虾米音乐(xiam ...

  5. 8 个 Python 实用脚本,【速】收藏备用!

    脚本写的好,下班下得早!程序员的日常工作除了编写程序代码,还不可避免地需要处理相关的测试和验证工作. 例如,访问某个网站一直不通,需要确定此地址是否可访问,服务器返回什么,进而确定问题在于什么.完成这 ...

  6. IDEA整合Jenkins界面化管理项目构建

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/WALK_MAN_wubiao/articl ...

  7. Shell脚本 统计店中店导出数据

    有一个数据文件  yue.csv  是这样的   #head yue.csv  日期,商家名称,要求在线数,当天在线数,要求在线时长,在线时长达标数,   ……"2017-12-31&quo ...

  8. Python实用案例,Python脚本,Python实现批量加水印

    往期回顾 Python实现自动监测Github项目并打开网页 Python实现文件自动归类 Python实现帮你选择双色球号码 Python实现每日更换"必应图片"为"桌 ...

  9. Python实用案例,Python脚本,Python实现自动监测Github项目并打开网页

    往期回顾 Python实现文件自动归类 前言: 今天我们就利用Python脚本实现Github项目的更新,提醒方式是邮箱.直接开整~ 项目地址: https://github.com/kenwoodj ...

随机推荐

  1. nginx缓冲区参数配置优化

    目录 一:nginx缓冲区优化 1.proxy_buffering 2.proxy_buffer_size 3.proxy_buffers 4.proxy_busy_buffers_size 5.pr ...

  2. Nginx代理的方式(反向代理)

    目录 一:Nginx 正向代理与反向代理 1.什么是代理服务器? 2.正向代理的概念 3. 反向代理的概念 二:Nginx代理服务支持的协议 三:Nginx代理实践 1.部署web01 2.部署lb0 ...

  3. 计算机电子书 2018 BiliDrive 备份

    下载方式 根据你的操作系统下载不同的 BiliDrive 二进制. 执行: bilidrive download <link> 链接 文档 链接 Webpack 中文指南.epub (40 ...

  4. 为CentOS 6、7升级gcc至4.8、4.9、5.2、6.3、7.3等高版本

    CentOS 7虽然已经出了很多年了,但依然会有很多人选择安装CentOS 6,CentOS 6有些依赖包和软件都比较老旧,如今天的主角gcc编译器,CentOS 6的gcc版本为4.4,CentOS ...

  5. undefined index: php中提示Undefined ...

    我们经常接收表单POST过来的数据时报Undefined index错误,如下:$act=$_POST['action'];用以上代码总是提示Notice: Undefined index: act ...

  6. Vue.use初探

    Vue.use 问题 相信很多人在用Vue使用别人的组件时,会用到 Vue.use(). 例如:Vue.use(VueRouter).Vue.use(MintUI). 但是用 axios时,就不需要用 ...

  7. 基于XC7A100T的PCIe千兆电口以太网收发卡

    一.板卡概述 本板卡采用Xilinx公司的Artix7系列的XC7A100T-2FGG484 芯片作为主处理器.包含双路千兆电口网络,双组DDR,PCIeX1 V1.1接口,板卡设计满足工业级要求. ...

  8. Solution -「LGR-087」「洛谷 P6860」象棋与马

    \(\mathcal{Description}\)   Link.   在一个 \(\mathbb R^2\) 的 \((0,0)\) 处有一颗棋子,对于参数 \(a,b\),若它当前坐标为 \((x ...

  9. 基于containerd二进制部署k8s-v1.23.3

    文章目录 前言 k8s 组件 环境准备 创建目录 关闭防火墙 关闭selinux 关闭swap 开启内核模块 分发到所有节点 启用systemd自动加载模块服务 配置系统参数 分发到所有节点 加载系统 ...

  10. Dubbo源码剖析一之整体架构设计

    Dubbo基础二之架构及处理流程概述 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中进行Dubbo职能上的简单介绍,下面就其内部进行详细探究: 1.Dubbo调用关系 这个图是不是很熟 ...