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. Lesson6——Pandas Pandas描述性统计

    1 简介 描述统计学(descriptive statistics)是一门统计学领域的学科,主要研究如何取得反映客观现象的数据,并以图表形式对所搜集的数据进行处理和显示,最终对数据的规律.特征做出综合 ...

  2. C#运算符重载---逐步地分析与理解

    1.什么是运算符重载 定义:(百科定义)就是把已经定义的.有一定功能的操作符进行重新定义,来完成更为细致具体的运算等功能.操作符重载可以将概括性的抽象操作符具体化,便于外部调用而无需知晓内部具体运算过 ...

  3. git clone 命令

    感谢原文作者:寻芝彬 原文链接:https://www.jianshu.com/p/c992c799f2dd 描述 拷贝一个 Git 仓库到本地 实例 拷贝一个 Git 仓库到本地,本地目录名称与Gi ...

  4. Git忽略文件.gitignore的使用

    本博客旨在自我学习使用,如有任何疑问请及时联系博主 1.WHY? 当你使用git add .的时候有没有遇到把你不想提交的文件也添加到了缓存中去?比如项目的本地配置信息,如果你上传到Git中去其他人p ...

  5. AppiumForMac安装2

    安装了两天的Python和Appium,各种不成功,到现在还不知道要怎么才能使用,两者之间的关联性还是没找到. 虽然很乱,还是把这期间用到的知识汇总下: 1.爬墙很重要,下载东西慢的很. 2.最新的M ...

  6. python中生成器的两段代码

    生产者-消费者经典单线程问题 import time def consumer(name):     print("%s 准备吃包子啦!" %name)     while Tru ...

  7. Python基础—装饰器(Day11)

    装饰器 1.装饰器是在不改变原函数的执行的情况下为原函数增额外的功能. 简单版装饰器import time def func1(): print('执行速度') def timmer(f): star ...

  8. Spring 配置概述

    理解了IoC的概念,那Spring框架是如何具体操作的呢?Spring IoC容器(ApplicaitonContext)负责创建Bean,并通过容器将功能类Bean注入到其他需要的Bean中.Spr ...

  9. SpringBoot 自定义参数类型转换convert

    创建一个配置类.使用 @bean注入到容器中 @Bean public WebMvcConfigurer webMvcConfigurer(){ /** * 实现自定义的addConverter */ ...

  10. jenkins持续集成go应用

    上文讲到使用supervisor管理我们的终端应用,这次讲一下使用jenkins持续集成 下面分别讲一下pipeline里每一个段落的含义 agent any 使用任意节点构建 parameters ...