首页 文章 精选 留言 我的

精选列表

搜索[自动装配],共10000篇文章
优秀的个人博客,低调大师

Jenkins 教程(一)实现自动化打包及邮件通知

个人不喜欢装腔作势一堆专业术语放上去,让大多数人看不懂来提升逼格(所谓的专家),所以我简单的介绍jenkins是干啥的。本文使用jenkins,就是让它把git仓库里的东西取出来,然后在jenkins容器中编译打包,然后执行脚本,可以是运行jar等,根据自身情况量身定制脚本。 下载 官方下载链接:https://jenkins.io/download/ windows可以直接下载msi安装,linux的话rpm或者直接下载war包。我在这里用的war包。 启动 因为它是个jar包,所以我们用命令java -jar jenkins.war来启动。默认8080端口。 如果你希望它不在8080端口上启动,那使用命令java -jar jenkins.war httpPort=8888 启动后续步骤 启动后浏览器访问8888端口。 他会让你填写一个密匙,并告诉你密匙在哪个文件。 然后让你安装一些工具,直接点击默认按照即可。(可按需求来按照) 创建用户 一路next 配置环境 因为我们需要编译java项目,所以jdk和maven也必须在容器里进行安装。 我们进入 :系统管理->全局工具配置 jdk安装: maven安装: 什么?想在项目编译失败了给你发送邮件提示? 进入: 系统管理->系统设置 首先我们看到的是 主目录是什么呢?你编译的项目就放在这里面。 进入正题,配置邮箱。 至于没有实现过邮箱发送邮件的朋友,可以看我之前的文章了解一下。Java 发送qq邮件基础和封装 开始项目 应用并保存 点这个小红点可以查看构建日志。 成功部署邮件: 部署失败邮件: 建议 后面的一小点建议,尽量在本地上部署jenkins,然后将可运行jar包上传到服务器。因为把jenkins部署在服务器可能会存在maven下载失败的问题,需要搭建maven私服来解决,很麻烦。 至于如何上传到服务器,会在下文介绍。 介绍下我的所有文集: 流行框架 SpringCloudspringbootSpring Securitynginxredis 底层实现原理: Java NIO教程Java reflection 反射详解Java并发学习笔录Java Servlet教程jdbc组件详解Java NIO教程Java语言/版本 研究

优秀的个人博客,低调大师

winscp Window自动上传文件到LINUX批处理脚本

转载:http://www.jb51.net/article/59075.htm 1.下载winscp 大家可以去网上自己找,我把winscp安装在c:下的 2.把要执行的命令保存到文件winscp.bat里,这个winscp.bat可以自己创建,我是放在d:下的. winscp.bat脚本内容: 复制代码代码如下: option confirm off open user:pwd@192.168.10.150:22 cd /root/backup put d:\*.php close exit pause 3.执行命令 复制代码代码如下: C:\winscp>WinSCP.com /script=d:\winscp.bat /log=d:\winscp.log

优秀的个人博客,低调大师

Python自动化开发学习13-堡垒机开发

堡垒机介绍 很多人觉得,堡垒机就是跳板机,这是不全面的。跳板功能只是堡垒机所具备的功能的其中一项。堡垒机还有以下两个至关重要的功能: 权限管理 : 用户使用堡垒机账号登录堡垒机系统。不需要知道别的主机的账号和密码,都是由堡垒机系统管理的。用户可以登录的主机和每台主机上所拥有的权限也是由堡垒机系统管理的。 审计管理 : 用户的所有操作都是在堡垒机上执行的,所以都会被记录保存。其实对于操作的结果(就是屏幕上打印的结果),如果需要也是可以记录保存的。不过一般不那么做,而且数据量也会有点大。 开源堡垒机项目 号称没有好的开源项目,因为底层的SSH还是通过paramiko模块的长链接的ssh实现的。但是这个和原生的ssh比还是不太稳定,不太好用。不适合生产环境。要好用还是得去改原生的ssh,但是我们不会,我们只会改python。总之这章就是实现一个堡垒机的功能,真要做个好用的以后再说吧。比较有名的大概是这个:jumpserver - 开源跳板机 paramiko模块的长连接 虽然上面说了,用这个模块不稳定,但是我们也没办法,毕竟只会这个。paramiko之前已经学习过了,不过当时用的都是短连接。即:连接一次,执行一条命令,返回结果,断开。这里我们要用长连接。长连接的代码在demos文件夹下的demo.py这个文件里,另外还要用到interactive.py这个文件。安装模块的时候不安装这个demos文件夹,所以我们去github上下下来:https://github.com/paramiko/paramiko/tree/master/demos利用demo.py程序,我们可以进行ssh的长连接。下面的开发都是基于这个程序为基础,在这个程序的基础上,修改该程序的源码添加上记录用户输入的代码,并写入数据库。于是审计管理便实现了。 堡垒机构架 任何人只能通过堡垒机登录设备,堡垒机可以链接管理所有的设备: 配置环境变量 还需要确保用户一登录堡垒机就进入你的程序,并且不能退出(一退出就退出整个堡垒机),就是只能在你的做的shell下运行,不能进入原生的shell。可以通过设置环境变量实现:环境变量保存在这里: ~/.bashrc,修改文件在最后加上这句: python3 /etc/myJunpServer.py 直接运行你的程序。首次设置完成后如果要让它立刻生效,可以执行这个命令:source .bashrc 加载最新的配置。 表结构设计 主机表: id 主机名 端口号 注释 自增id IP或域名 数值类型,默认22 注释信息 主机认证表: id 名称 用户名 密码 注释 自增id 唯一约束 用户名 明文的字符串 注释信息 主机认证绑定表(分别和主机表以及主机认证表建立一对一关联): 这张就是主机表和主机认证表的多对多关联的结合表,原本不需要单独建立的。但是这张表多加了一个自增id,id还需要去分别和账号表以及群组表建立多对多关联。总之,这样操作是可以实现的,也没有或者说不会3张表之间建立多对多关联的方法,实际试了一下也确实没实现,暂时只会这么搞。主机id 和 认证id 要做联合唯一 id 主机id 认证id 自增id 关联主机表的id 关联主机认证表的id 主机群组表(和主机认证绑定表多对多关联,和账号表多对多关联): 不同的群组里可能包含相同的机器,但是不同群组中同一台机器对应的权限可能不同。所以这里直接关联主机与认证的一条绑定关系。 id 群组名 备注 自增id 唯一 备注信息 堡垒机账号表(和主机认证绑定表多对多关联,和主机群组表多对多关联): id 用户名 密码 自增id 唯一约束 加密存储 审计日志记录表: 通过绑定表的id,可以查询到关联的主机和关联的认证信息 id 时间 用户id 绑定表id 操作消息 自增id 操作时间 关联账号表的id 关联绑定表的id 操作内容 创建表结构的代码如下: from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, String, Enum, DateTime from sqlalchemy import ForeignKey, Table, UniqueConstraint from sqlalchemy.orm import relationship engine = create_engine("mysql+pymysql://admin:admin123@192.168.3.103/week12", encoding='utf-8', echo=True) Base = declarative_base() group_to_bind = Table('group_to_bind', Base.metadata, Column('group_id', Integer, ForeignKey('host_group.id')), Column('bind_host_id', Integer, ForeignKey('bind_host.id')), ) # 主机群组和绑定表的结合表 user_to_bind = Table('user_to_bind', Base.metadata, Column('user_id', Integer, ForeignKey('user.id')), Column('bind_host_id', Integer, ForeignKey('bind_host.id')), ) # 用户和绑定表的结合表 user_to_group = Table('user_to_group', Base.metadata, Column('user_id', Integer, ForeignKey('user.id')), Column('group_id', Integer, ForeignKey('host_group.id')) ) # 用户和群组的结合表 class Host(Base): """主机表 主机名:联合唯一,IP地址或域名 端口号:联合唯一,默认22 注释: """ __tablename__ = 'host' id = Column(Integer, primary_key=True) hostname = Column(String(32), nullable=False) port = Column(Integer, server_default='22') description = Column(String(32)) __table_args__ = (UniqueConstraint('hostname', 'port', name='hostname_port'),) class Authentication(Base): """认证表 用户名: 密码:明文的设备密码 注释: """ __tablename__ = 'authentication' id = Column(Integer, primary_key=True) authname = Column(String(32), nullable=False, unique=True) username = Column(String(32), nullable=False) password = Column(String(32), nullable=False) description = Column(String(32)) class BindHost(Base): """主机和认证绑定表 分别和主机id 以及 认证id 联立一对一关联 主机id 和 认证id 要做联合唯一 """ __tablename__ = 'bind_host' id = Column(Integer, primary_key=True) host_id = Column(Integer, ForeignKey('host.id')) auth_id = Column(Integer, ForeignKey('authentication.id')) __table_args__ = (UniqueConstraint('host_id', 'auth_id', name='host_auth'),) host = relationship('Host', backref='bind_host') auth = relationship('Authentication', backref='bind_host') class HostGroup(Base): """主机群组表 群组名:唯一 注释: """ __tablename__ = 'host_group' id = Column(Integer, primary_key=True) groupname = Column(String(32), nullable=False, unique=True) description = Column(String(32)) bind_host = relationship('BindHost', secondary=group_to_bind, backref='host_group') class User(Base): """用户账号表 用户名:不唯一 密码:sha256的hexdigest(),需要64位 """ __tablename__ = 'user' id = Column(Integer, primary_key=True) username = Column(String(32), nullable=False, unique=True) password = Column(String(64), nullable=False) host_group = relationship('HostGroup', secondary=user_to_group, backref='user') bind_host = relationship('BindHost', secondary=user_to_bind, backref='user') class Audit(Base): """审计日志表""" __tablename__ = 'audit' id = Column(Integer, primary_key=True) time = Column(DateTime) user_id = Column(Integer, ForeignKey('user.id')) bind_id = Column(Integer, ForeignKey('bind_host.id')) msg = Column(String(255)) user = relationship('User', backref='audit') bind_host = relationship('BindHost', backref='audit') Base.metadata.create_all(engine) # 创建所有表结构 __all__ = ['Host', 'Authentication', 'BindHost', 'HostGroup', 'User', 'Audit' ]

优秀的个人博客,低调大师

接口自动化测试PHPUnit-框架代码开发1

经过上一篇的架构设计之后,我们就要开始编写代码了,因为涉及代码较多,所以将分多次进行讲解。 先看一张整体结构图 今天我们先来看看testcase文件里的编写。此处我们以之前的老黄历接口为例。 lhl_test.php内容如下: <?php //代码获取点击链接加入QQ群 522720170:https://jq.qq.com/?_wv=1027&k=5C08ATe //引入一些必要的文件,暂时别管,后面会说到 require_once("../commons/require.php"); use PHPUnitFrameworkTestCase; class LhlTest extends TestCase { //测试用例必须以 test 开头,否则 phpunit 不识别 public function testLhl() { //选择运行环境。此处把host配置到了文件中,直接读取文件内容 $rc=new ReadConfig(); $url=$rc->get_host("online") ; echo $url; //拼接完整的请求串 $get_params="date=2017-11-11&key=填写你申请的key"; $url=$url."?".$get_params; $content=Transfer::get($url); //对返回的json结果进行编码,也就是转换为php可以认识的对象,方便后续使用 $data= json_decode($content,true); print_r($data); if(is_null($data)==false) { //断言,如果返回的error_code为0说明接口成功 $this->assertEquals('0',$data['error_code'],"failed"); print("successed"); } } } ?> 本文转自 小强测试帮 51CTO博客,原文链接:http://blog.51cto.com/xqtesting/1982675,如需转载请自行联系原作者

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册