jenkins集成liquibase

利用liquibase自动化数据库变更、持续集成 利用liquibase自动化数据库变更、持续集成目前现状,数据库是与应用程序完全脱离的单独实体实现形式开始使用 LiquiBase需要以下步骤changeSet维护说明样例 目前现状,数据库是与应用程序完全脱离的单独实体 手工变更数据库(环境变多时,易出错) 使用低效的手工比对方法管理数据库版本之间的变更(耗时长、易出错) 不能与团队的其他成员分享数据库变更 代码与DDL或DML不同时提交更新,... 阅读详情

一、前言

        liquibase的功能非常强大,只需要按规则编写sql文件,就可以实现自动化的数据库更新,发布的时候就不用依赖人工去操作更新数据库,而且liquibase还具有数据库版本回滚功能,一旦发现新版本有问题,就可以进行回滚到老版本的操作,下面就将liquibase集成到jenkins的cicd中,实现全自动化的发布

二、部署

在github下载liquibase安装包:https://github.com/liquibase/liquibase/releases

在mysql官网下载连接器:https://dev.mysql.com/downloads/connector/j/

我这里分别下载的是liquibase-4.32.0.tar.gz和mysql-connector-j-8.0.33.tar.gz

放到部署jenkins的主机中解压

mkdir /opt/liquibase && cd /opt/liquibase
tar -zxvf liquibase-4.32.0.tar.gz
tar -zxvf mysql-connector-j-8.0.33.tar.gz
ls /opt/liquibase

配置变量

vi /etc/profile
#在末尾添加以下内容
PATH=$PATH:/opt/liquibase/liquibase

执行命令生效
source /etc/profile

验证是否有效
liquibase --help

编写liquibase配置文件

vi liquibase.properties
#在文件中添加以下内容

#连接器类型
driver=com.mysql.cj.jdbc.Driver
#mysql连接器压缩包解压后路径下的可执行jar包路径
classpath=/opt/liquibase/mysql-connector-j-8.0.33/mysql-connector-j-8.0.33.jar
#数据库用户名
username=xxxx
#数据库密码
password=xxxx

将配置文件上传到jenkins的凭证配置中

Manage Jenkins>Credentials>Global(全局)>Add Credentials

选择secret file类型并上传刚刚编辑的liquibase配置文件

在jenkins pipeline中加入liquibase更新数据库的步骤

pipeline {
  agent any
  environment {
    database_name= "demeter_foundation"
    prd_mysql_url= "10.1.60.8:6033"
    test_mysql_url= "10.1.60.5:6033"
  }
  stages {
    stage('change mysql') {
      parallel {
        stage('change test mysql') {
          when {
            expression {params.status == 'deploy' && env.gitlabBranch != null }
          }
          steps {   #使用withCredentials调用凭证中的liquibase配置
            withCredentials([file(credentialsId: 'liquibase_conf', variable: 'LIQUIBASE_CONF')]) {
                sh '''   #以下liquibase命令指定了配置文件,数据库连接,还有变更的sql文件路径
                  /opt/liquibase/liquibase --defaultsFile=${LIQUIBASE_CONF} --url=jdbc:mysql://${test_mysql_url}/${database_name} --changeLogFile=db/${database_name}/update/change_mysql.sql update
                '''
            }
          }
        }
        stage('change prd mysql') {
          when {
            expression {params.status == 'deploy' && env.gitlabBranch == null }
          }
          steps {
            withCredentials([file(credentialsId: 'liquibase_conf', variable: 'LIQUIBASE_CONF')]) {
                sh '''
                  /opt/liquibase/liquibase --defaultsFile=${LIQUIBASE_CONF} --url=jdbc:mysql://${prd_mysql_url}/${database_name} --changeLogFile=db/${database_name}/update/change_mysql.sql update
                '''
            }
          }
        }
      }
    }
  }

有一个注意点是使用了proxysql+mysql mgr集群会导致出现报错,报错的原因是找不到主键,需要在liquibase创建的两张表中设置主键即可解决

以上的sql文件包含在代码仓库中由开发提交,只需在执行liquibase命令时使用--changeLogFile指定sql文件路径即可

以上配置没有包含回滚命令,回滚需要开发特殊配置sql文件,并且搭配回滚命令rollback命令

更多命令参考:Rollback Commands

别再手动改表了!用Liquibase管理数据库版本,5分钟搞定Spring Boot项目集成 本文详细介绍了如何在Spring Boot项目中集成Liquibase进行数据库版本管理,解决团队协作中的SQL脚本混乱问题。通过声明式变更集和工程化配置,实现数据库变更的原子性、版本控制和环境适配,大幅提升开发效率和系统稳定性。 阅读详情

相关推荐

Jenkins基础教程(190)Jenkins自动化部署和持续交付之数据库更新:Jenkins数据库部署秘籍:再也不怕迁移脚本搞崩生产环境!

本文深入探讨如何利用Jenkins实现数据库自动化更新,解决CI/CD中最棘手的环节。通过真实示例和最佳实践,您将学会设计可靠的数据库部署流水线,涵盖版本控制、回滚策略、错误处理等关键主题,让数据库部署从痛苦变为信心十足的自动化过程。

jxf_jxfcsdn的博客 452

Liquibase的基本使用说明

介绍 Liquibase是一个用于数据库重构和迁移的开源工具,通过日志文件的形式记录数据库的变更,然后执行日志文件中的修改,将数据库更新或回滚到一致的状态。它的目标是提供一种数据库类型无关的解决方案,通过执行schema类型的文件来达到迁移。其优点主要有以下: 支持几乎所有主流的数据库,如MySQL, PostgreSQL, Oracle, Sql Server, DB2等; 支持多开发者的协作维护; 日志文件支持多种格式,如XML, YAML, JSON, SQL等; 支持多种运行方式,如命令行

清茶的博客 1万+

Liquibase实战:如何利用数据库版本控制优化团队协作开发

本文详细介绍了Liquibase在数据库版本控制中的应用,帮助团队优化协作开发流程。通过ChangeLog文件记录变更、规范文件组织结构、编写原子性变更集等最佳实践,确保数据库变更可追踪、可回滚。文章还涵盖了高级技巧如上下文控制、回滚策略及CI/CD集成,助力团队高效管理数据库变更。

weixin_29279047的博客 395

Liquibase集成到Jenkins,解决手动执行数据库脚本带来的风险和不一致性的问题

将 Liquibase 集成到 Jenkins CI/CD 流程中可以带来多方面的好处,特别是在数据库变更管理和应用程序部署的自动化方面。不仅能够简化数据库变更管理,还能显著提高软件开发的整体效率和质量,使团队能够更专注于业务逻辑的实现而非基础设施的维护。优点1.自动化数据库变更管理一致性:通过在 Jenkins Pipeline 中集成 Liquibase,可以在每次构建时自动应用数据库变更,...

qq_18244417的博客 906

别再手动改表了!用Liquibase + Spring Boot 3.x搞定数据库版本化(附Git协作流程)

本文详细介绍了如何利用Liquibase与Spring Boot 3.x实现数据库版本化管理,解决团队协作中的数据库变更难题。通过变更集管理、Git协作流程和CI/CD集成,提升开发效率并确保环境一致性。文章包含实战配置示例和高级技巧,帮助团队构建可靠的数据库变更工作流。

asdfghjkl978564的博客 400

别再手动建表了!用 Liquibase 管理达梦数据库上的 Flowable 工作流表结构(附完整SQL脚本)

本文介绍了如何使用Liquibase在达梦数据库上自动化管理Flowable工作流表结构,解决手动执行SQL脚本的低效问题。通过Spring Boot集成和达梦方言适配,实现版本控制、环境一致性和回滚机制,大幅提升部署效率和可靠性。

xjwolaile的博客 378

Liquibase 使用(全)

聊一个数据库脚本的版本工具 Liquibase,官网在这里 ,初次看到,挺神奇的,数据库脚本也可以有版本管理,同类型的工具还有 flyway 。 开发过程经常会有表结构和变更,让运维来维护的话,通常会有很大的沟通成本,有时在开发方案有问题的时候,提测失败整个项目需要回滚,代码回滚起来是很容易的,通常有备份,但数据库的话就要人工来逐行分析并写出回滚语句,Liquibase 这时候就有用了。...

终极冥帝 4387

Jenkins+Postman自动化回归测试流水线实战:从CI/CD集成到效能优化

在软件工程实践中,持续集成与持续交付(CI/CD)是提升开发效率与软件质量的核心方法论。其原理在于通过自动化流程,将代码集成、构建、测试和部署等环节串联,实现快速、可靠的软件交付。API测试作为验证服务间契约与业务逻辑的关键技术,其自动化集成至CI/CD流水线具有重要价值,能确保每次变更后接口功能的稳定性,快速发现回归缺陷。本文聚焦于如何利用Jenkins这一广泛使用的自动化服务器,与Postman/Newman这一流行的API测试工具链深度结合,构建一套高效的自动化回归测试流水线。该流水线覆盖了从代码提交

weixin_34356555的博客 425

jenkins

在介绍jenkins之前需要先了解一个概念CI(Continuous Integration)持续集成,不了解的先看下这篇文章:持续集成,这个概念来自很流行的敏捷开发,讲究的是快速的发现问题,快速发现问题需要的是快速的迭代开发,不同于很传统的瀑布式开发。 了解了CI的概念,那么jenkins是什么,其实就是我们实现CI的一种工具,jenkins是开源的,当然业界还有其他的CI工具,但是jenki

tangyongzhe的专栏 3558

数据库CI/CD工具深度对比:Flyway、Liquibase、Atlas、Bytebase怎么选?

在DevOps与持续交付的工程实践中,数据库变更管理往往比应用代码发布更具挑战,因为数据库本身是有状态的,任何Schema变动都可能引发环境漂移甚至线上事故。团队需要从数据库版本化迁移、Schema漂移治理、自动化发布审批等基础概念入手,理解不同工具背后的技术原理。Flyway与Liquibase代表经典的版本化迁移路线,Atlas采用声明式Schema管理,Bytebase则走向平台化工作流。从技术价值看,它们分别适用于快速建立版本纪律、复杂多应用编排、环境漂移收敛以及流程审计治理等典型场景。本文围绕数据

weixin_34319111的博客 307

使用VLC库实现视频播放器(WPF版)

使用wpf制作一个视频播放器 一、 LibVLCSharp介绍 LibVLCSharp是基于VideoLAN的LibVLC库的.NET平台的跨平台音频和视频API。它提供了一个全面的多媒体API,可以跨移动、服务器和桌面使用,以呈现视频和输出音频。支持Mono、.NET Framework和.NET核心运行时。在vs工具中,只需要安装截图中得两个nuget包。 二、视频播放器的实现 视频播放器的实现需要用到两个比较nuget包中提供的类,MediaPlayer类。MediaPlayer类型用于控

cangqiongxiaoye的博客 1万+

Liquibase与Jenkins集成:10个步骤实现持续集成中的自动化数据库部署

在现代DevOps流程中,数据库变更管理往往是持续集成/持续部署(CI/CD)链条中最容易被忽视的环节。Liquibase作为一款强大的数据库版本控制工具,能够帮助团队实现数据库变更的自动化、可审计和可回滚。本文将详细介绍如何通过10个简单步骤,将Liquibase与Jenkins无缝集成,构建完整的数据库自动化部署流水线,彻底告别手动执行SQL脚本的时代! [![Liquibase Logo]

gitblog_00826的博客 986

2026软件测试面试题全解析:从用例设计到接口自动化与性能实战

在软件测试岗位的招聘考察中,面试官越来越看重候选人解决实际问题的工程能力,而不仅仅是背诵概念。从最基础的测试用例设计出发,覆盖功能测试、接口测试、自动化测试、性能测试、数据库与Redis一致性等核心知识体系,是应对中高级岗位面试的关键路径。理解Postman抓包、Python脚本、Pytest框架、JMeter压测指标背后的原理,能帮助测试人员构建完整的质量保障思维。当AI辅助测试成为行业新趋势时,掌握数据校验链路与风险识别意识,更能体现资深测试工程师的竞争力。本文围绕2026年高频软件测试面试题,梳理了从

weixin_28676289的博客 245

jenkins+maven+tomcat持续集成配置

1.首先要在服务器上安装好以下服务:tomcat+maven+jdk+jenkins 2.maven项目中要集成的插件tomcat和maven,配置pom: org.codehaus.mojo tomcat-maven-plugin 1.1 ${tomcat.manager.url} tomcat jjyy /jjyy

Before_Morning的专栏 1635

LTC3783 LED驱动控制器设计与效率优化详解

开关电源控制器是现代LED照明的核心器件,通过电流模式控制实现高效能量转换。其核心原理是通过采样电阻检测负载电流,配合误差放大器形成闭环调节,在汽车电子、显示背光等场景中确保±3%的电流精度。LTC3783作为典型代表,集成升压/降压-升压多拓扑支持,配合PWM调光技术可实现3000:1的无色偏调光范围。在工程实践中,需重点考量功率电感选型、MOSFET开关损耗与热管理设计,例如在38W功率方案中采用10μH/5A电感和4.5mΩ MOSFET可达成95%效率。该方案特别适用于需要应对9-36V宽输入电压波

weixin_36231030的博客 400

复信号的调制与解调(基带)

Digital modulation methods can be considered as digital-to-analog conversion and the corresponding demodulation or detection as analog-to-digital conversion. 数字调制可以看成是数字到模拟的变换,同样,数字解调也可以看作是模拟向数字的转换。

JonTargaryen的博客 1万+

告别手动改表:用Liquibase + Spring Boot实现数据库变更自动化(实战配置)

本文详细介绍了如何利用Liquibase与Spring Boot实现数据库变更自动化,告别手动修改表的繁琐流程。通过实战配置,涵盖多环境策略、团队协作规范和CI/CD集成,帮助开发者高效管理数据库变更,确保变更历史可追踪且有序执行。

weixin_33483304的博客 265

Qt入门教程【环境搭建篇】Qt6+Mingw+QMake+QtCreator

Qt Windows平台安装

小鱼酱的博客 2万+

2026 数据库 CI/CD 工具大盘点:4 款热门工具怎么选?

应用发布早已进入 CI/CD,但数据库变更这一步,很多团队依然离不开人工。开发提交 SQL 后,要检查风险、走审批,到了发布时间还要切换环境、逐库执行。应用已经可以自动构建、测试和发布,数据库却常常还卡在流程之外。因此,越来越多团队开始把数据库变更也纳入 CI/CD,让 SQL 从提交开始,就按照固定流程完成检查、审批、执行和追踪。真正围绕数据库发布流程提供完整 CI/CD 能力的工具并不算多。本文挑了 4 款比较有代表性的产品,看看它们分别适合什么场景。

Kami‘s home 225

第186篇 前馈控制——提升跟踪精度的补充手段

文章摘要: 本文介绍了前馈控制的原理及其在工程中的应用。与反馈控制不同,前馈控制通过提前预测目标值或扰动信息来生成控制量,避免误差出现后再纠正的延迟问题,适用于机器人、机械臂等高速运动场景。前馈控制通常与PID反馈配合使用,前者提供粗调,后者进行微调。文章详细讲解了前馈增益的调节方法(模型法、实验法、自适应法)及两种前馈类型(指令前馈和扰动前馈),并提供了代码示例和面试实战建议,强调前馈与反馈的协同设计是提升控制精度的关键。最后预告了下一篇将讨论串级PID控制架构。

郑伟强dev的专栏 398

数据库系统工程师软考备战:第三篇 - SQL语言深入解析与应用

​​创建表​​​修改表​​​删除表​。

Programming Talk 122

Jenkins与Visual Studio的自动编译和发布

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34261415的博客 979

Allegro格式PCB转换成Pads操作指导

变量:AEX_BIN_ROOT 值:D: MentorGraphics>PADSVX1.2>SDD_HOME>translators>win32bin (值:软件按装的位置,可以是9.5版本,也可以是VX1.0等不同的版本)。变量:HOME 值:C:Users>win7>AppData>Roaming>SPB_Data (这个值是allegro快捷键存放位置器,也可以随意放置在那个盘,我们可以采用默认的路径)。第4步:打开 PADSLayout软件,然后选择导入文件,选择刚刚处理的 allegro文件。

weixin_54787054的博客 3717

数据库变更的持续集成与持续交付:从手动SQL到自动化流水线

数据库变更常是软件交付链条中最易失控的一环——代码可以轻松重建,但表结构一旦被改坏,数据往往难以恢复。持续集成与持续交付的理念同样适用于数据库,通过将变更脚本纳入版本控制、借助Flyway或Liquibase等迁移工具实现自动执行,再结合Jenkins流水线进行SQL静态扫描与破坏性变更检测,就能让数据库变更像应用代码一样可复现、可追踪、可回退。这套实践不仅解决了测试环境与生产环境结构漂移的顽疾,也大幅降低了DBA在发布窗口期的手工操作风险,尤其适合后端开发、DevOps工程师和需要搭建规范化发布流程的团队

weixin_31714129的博客 210

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

DevOps 解决的痛点与全景工具链

上述痛点每一个都能在对应的工具阶段找到解法,但工具本身只是载体——真正的价值来自打通不同阶段的数据流和反馈回路,让每次代码提交都成为一次可部署、可观测、可回滚的发布单元。:Jenkins(插件生态最丰富), GitLab CI(一体集成), GitHub Actions, CircleCI, Drone, Tekton(K8s 原生)基础设施即代码(IaC)+ 容器化(Docker),环境声明式定义、版本控制、完全一致。下面(概念)展示了从“代码提交”到“生产监控”的完整工具生态。以下按阶段列出主流选择。

weixin_39354867的博客 374

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【DEVOPS】借助Docker+Liquibase实现数据库的沙盒化

借助Docker + Liquibase 实现数据库分钟级别的重建,做到开发/测试环境的沙盒化。

夫礼者的专栏 976

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

上一篇: PPOCRLabel部署
下一篇: k8s部署pgsql集群
Apex   Predator
博客等级 码龄6年 9371粉丝 289原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值