首页 文章 精选 留言 我的

精选列表

搜索[批量导入手机通讯录],共10000篇文章
优秀的个人博客,低调大师

Rust 任务调度软件 jiascheduler 更新 v1.1.3,支持批量删除

jiascheduler 发布了 v1.1.3 版本,这次版本主要新增了,作业,定时器,调度和执行记录的删除功能,之前有同学反馈执行记录太多了无法删除,现在终于可以删除了。 当然使用过程中发现的一些 bug 也一并修复了 下一个版本开始,重点是作业编排功能。作业编排就是可以把多个任务编排成一个流程(有向无环图),进而实现更复杂的功能。 项目是个人开发,长期更新(有点慢),完全免费,可以任意使用,有感兴趣的可以 star 一下,一起贡献代码哈 jiascheduler 是一款 rust 编写的任务调度软件,支持自定义执行器,定时任务,常驻任务,可以一次把作业推送到数以万计的实例执行。同时 jiascheduler 还自带 webssh 管理,内网穿透,用户和权限管理,团队管理等功能。 大家试用过程中发现 bug 可以直接 github 上提 issue 项目地址:https://github.com/jiawesoft/jiascheduler

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

Jenkins:批量自动将 Maven 类型 Job 迁移到自由风格类型

为什么要迁移? 近期进行 Jenkins 从1.X到2.X的升级演练 Jenkins2 最新版本只能在 JDK8 或 JDK11 版本下运行,我所使用的 JDK 版本为 JDK8 在构建 Maven Job,Job 配置的 JDK 版本为 JDK7时,构建报错 $ /usr/local/java/bin/java -cp /data/jenkins/maven31-agent.jar:/usr/local/maven/boot/plexus-classworlds-2.5.2.jar:/usr/local/maven/conf/logging jenkins.maven3.agent.Maven31Main /usr/local/maven /data/jenkins/slave.jar /data/jenkins/maven31-interceptor.jar /data/jenkins/maven3-interceptor-commons.jar 45631 Exception in thread "main" java.lang.UnsupportedClassVersionError: hudson/remoting/Launcher : Unsupported major.minor version 52.0 at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:800) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at java.net.URLClassLoader.defineClass(URLClassLoader.java:449) at java.net.URLClassLoader.access$100(URLClassLoader.java:71) at java.net.URLClassLoader$1.run(URLClassLoader.java:361) at java.net.URLClassLoader$1.run(URLClassLoader.java:355) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:354) at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClassFromSelf(ClassRealm.java:401) at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:42) at org.codehaus.plexus.classworlds.realm.ClassRealm.unsynchronizedLoadClass(ClassRealm.java:271) at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:247) at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:239) at jenkins.maven3.agent.Maven31Main.main(Maven31Main.java:138) at jenkins.maven3.agent.Maven31Main.main(Maven31Main.java:67) 经定位,原来 Maven 类型 Job 与 JDK 版本有一定兼容性,部分说明如下: Maven jobs and Java versions compatibility: Because java serialized classes are exchanged between Jenkins master and Maven Jobs it is required that the JVM used to launch Maven is superior or equal to the version of Java for which Jenkins Master is built for. Jenkins >= 1.520 requires Java 6 thus Maven jobs must be launched with Java >= 6. Jenkins >= 1.612 requires Java 7 thus Maven jobs must be launched with Java >= 7. Jenkins >= 2.54 requires Java 8 thus Maven jobs must be launched with Java >= 8. 详见:https://wiki.jenkins.io/display/JENKINS/Maven+Project+Plugin 而我们的这些Job 必须使用指定 JDK 版本构建,不能随意修改 JDK 版本 而自由风格类型的 Job,不会出现这个问题 所以,计划将 Maven 类型 Job 迁移到自由风格类型 如何迁移? 那么如何迁移呢? 统计了下 Maven 类型的 Job,有数百个,手动迁移不现实的 通过 google 发现有前人写的 grovvy 脚本:https://github.com/akomakom/jenkins-scripts/blob/master/maven-to-freestyle.groovy 尝试运行该脚本,可能与环境有关,它会报错 由于对 groovy 不太熟悉,解决起来比较麻烦 所以参考它的逻辑,使用 python 脚本实现了迁移的功能 python 脚本如下所示,有需要的可以自行修改: # -*- coding:utf-8 -*- import xml.etree.ElementTree as ET import sys from jenkinsapi.jenkins import Jenkins reload(sys) sys.setdefaultencoding('utf8') def get_jenkins_server(): JENKINS_URL = "http://127.0.0.1:8080/" JENKINS_USERNAME = "jenkins" JENKINS_PASSWORD = "jenkins" return Jenkins(JENKINS_URL, username=JENKINS_USERNAME, password=JENKINS_PASSWORD, timeout=30) def get_modified_xml(job_config_xml_tree): # create builders node builders_element = ET.Element("builders") job_config_xml_tree.append(builders_element) # Move prebuilders to builders prebuilders_node = job_config_xml_tree.find("prebuilders") if prebuilders_node is not None and prebuilders_node.getchildren() is not None: for pre_builder in prebuilders_node.getchildren(): builders_element.append(pre_builder) job_config_xml_tree.remove(prebuilders_node) # Create a maven block maven_node = ET.Element("hudson.tasks.Maven") builders_element.append(maven_node) move(job_config_xml_tree.find("goals"), job_config_xml_tree, maven_node, "targets") maven_name_node = job_config_xml_tree.find("mavenName") if maven_name_node: move(maven_name_node, job_config_xml_tree, maven_node) else: maven_name_node = ET.Element("mavenName") maven_name_node.text = "Maven" maven_node.append(maven_name_node) move(job_config_xml_tree.find("rootPOM"), job_config_xml_tree, maven_node) move(job_config_xml_tree.find("mavenOpts"), job_config_xml_tree, maven_node) move(job_config_xml_tree.find("settings"), job_config_xml_tree, maven_node) move(job_config_xml_tree.find("globalSettings"), job_config_xml_tree, maven_node) # items that don't exist in maven step: remove(job_config_xml_tree, [ 'resolveDependencies', 'processPlugins', 'siteArchivingDisabled', 'archivingDisabled', 'mavenValidationLevel', 'disableTriggerDownstreamProjects', 'blockTriggerWhenBuilding', 'fingerprintingDisabled', 'incrementalBuild', 'processPlugins', 'siteArchivingDisabled', 'ignoreUpstremChanges', 'rootModule' ]) # Move postbuilders to builders postbuilders_node = job_config_xml_tree.find("postbuilders") if postbuilders_node is not None and postbuilders_node.getchildren() is not None: for post_builder in postbuilders_node.getchildren(): builders_element.append(post_builder) job_config_xml_tree.remove(postbuilders_node) # rename top-level element # new parent node new_job_config_xml_tree = ET.Element("project") for child_node in job_config_xml_tree.getchildren(): new_job_config_xml_tree.append(child_node) return new_job_config_xml_tree def move(from_node, from_parent_node, to_node, to_name=None): if from_node is not None: if to_name: tmp_element_node = ET.Element(to_name) tmp_element_node.text = from_node.text tmp_element_node.attrib = from_node.attrib to_node.append(tmp_element_node) from_parent_node.remove(from_node) else: to_node.append(from_node) from_parent_node.remove(from_node) def remove(from_node, name_list): for name in name_list: tmp_node = from_node.find(name) if tmp_node is not None: from_node.remove(tmp_node) def main(): jenkins_server = get_jenkins_server() job_list = jenkins_server.get_jobs_list() for job_name in job_list: if not job_name.endswith("-DEPRECATED"): job_obj = jenkins_server.get_job(job_name) config_text = job_obj.get_config() config_xml_tree = ET.fromstring(config_text) if config_xml_tree.tag == "maven2-moduleset": new_config_xml_tree = get_modified_xml(config_xml_tree) new_config_xml = ET.tostring(new_config_xml_tree) jenkins_server.rename_job(job_name, job_name + "-DEPRECATED") jenkins_server.create_job(job_name, new_config_xml) print("migrate job from Maven Type to FreeStyle Type: " + job_name) if __name__ == "__main__": main() 参考 https://github.com/akomakom/jenkins-scripts/blob/master/maven-to-freestyle.groovy

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

java.io.File实现批量创建,递归目录查询、删除操作

今天使用java的File类实现了一个简单的创建多层级多维度的文件目录结构结构如下同时使用递归方法实现了文件的遍历查询和全部删除。(核心思想)判断文件是不是目录,如果是目录就进行递归调用,否则直接进行处理。下面看一下代码吧! import java.io.File; import java.io.IOException; /** * * @author jjking * @version v1.0 * * 创建时间: 2019年8月28日 下午3:10:27 * */ public class ClassWork01 { static final int NUM = 10; /** * 创建文件夹 * @param path 要创建的路径 */ public static void createFilesAndDirs(String path) { File file = new File(path); file.mkdir(); for (int i = 0; i < NUM; i++) { File file0 = new File(path +"\\"+ i); File file1 = new File(path + "\\" + i + ".txt"); try { file1.createNewFile(); } catch (IOException e) { e.printStackTrace(); } file0.mkdir(); for (int j = 0; j < NUM; j++) { File f = new File(path + "\\" + i + "\\" + j); File f1 = new File(path +"\\" + i + "\\" + j + ".txt"); f.mkdir(); try { f1.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } } } /** * 递归查看文件和目录 * * @param path */ public static void showAllFilesAndDirs(String path) { File file = new File(path); File[] files = file.listFiles(); for (File file2 : files) { if (file2.isDirectory()) { System.out.println("目录》》》" + file2); showAllFilesAndDirs(file2.toString()); } else { System.out.println("文件》》》" + file2); } } } /** * 递归删除指定位置内部文件 * * @param path */ public static void deleteAllInnerFilesAndDirs(String path) { File file = new File(path); File[] listFiles = file.listFiles(); for (File f : listFiles) { if (f.isFile()) { f.delete(); } else { deleteAllFilesAndDirs(f.toString()); f.delete(); } } System.out.println("删除完成!"); } /** * 删除指定位置的所有文件 * * @param path */ public static void deleteAllFilesAndDirs(String path) { deleteAllInnerFilesAndDirs(path); File file = new File(path); file.delete(); } }

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

批量云资源管理与自动化运维总结

1.什么是ROS? 是一款帮助阿里云用户简化云计算资源管理和自动化运维的服务,其本质是一个UTF8 编码的json格式的文件。 2.应用场景: 3.ROS限制和约束: 每个堆栈允许创建的最大资源数(云服务资源,ECS/RDS…..)为200个 每个用户允许创建的堆栈数最大为50个 每个模版的大小为512kb 4.ROS支持与费用: 目前阿里云支持12种产品和服务 ,分别为:“云服务器ECS/RDS/VPC/SLB/OSS/ESS/EIP/MongoDB/Redis/Memcache/SLS/RAM 费用问题:ROS无需为资源编排(ros)支付额外的费用,只需要支付资源栈内所包含阿里云资源的费用 5.管理方式:控制台/CLI/SDK/API 四种方式进行资源栈的部署和更新。 6.ROS模版结构详解 7.专业术语: ROSTemplateFormatVersion(必填) ROS支持的模版版本号 Description(可选) 创建的模版的描述信息,用于描述创建的模版主要架构,适用场景是怎么样的。 Metadata(可选) 用于存放与模版相关的元数据信息 Parameters(可选) 创建资源栈时,用户自定义的参数,定义要创建产品的参数类型是怎么样的。 Mappings(可选) 定义了一个多层的映射表,可以通过Fn::FindlnMap函数来选择key对应的值。 Conditions(可选) 在创建资源时,先使用Fn:And,Fn::Or, Fn::Equals内部条件函数定义条件,然后再创建资源,创建与true条件相关联的所有资源,忽略与falase条件关联的所有资源。 Resources(可选) 定义所需要的资源,包含资源间的依赖关系及细节配置 Outputs(可选) 用于输出一些资源属性等信息。 8.最佳实战 问题:在创建资源栈,指定参数密码的时候,由于只需输入一次密码,有可能由于手误输入一个错误的密码,导致已创建的ECS实例等产品,无法进行登陆 解决方法: 在编辑资源栈模版时,指定参数属性Confirm为true来解决这个问题。 具体方法如下: 1.在编辑模版时,增加一个“Confirm”:ture。 2.在创建资源栈时,启动栈页面中可以看到我们定义的二次密码。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

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应用均可从中受益。

用户登录
用户注册