Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >grails:编写脚本(尤其是调用现有数据库迁移脚本的指南)。

grails:编写脚本(尤其是调用现有数据库迁移脚本的指南)。
EN

Stack Overflow用户
提问于 2013-01-10 08:18:12
回答 1查看 1.4K关注 0票数 0

我的要求是从Jenkins构建服务器调用一些处理,以确定域模型自上次构建以来是否发生了更改。我得出的结论是,前进的方向是编写一个脚本,该脚本将从db迁移插件中调用一系列现有脚本。然后,我可以在调用test-app和war的步骤中调用它。

我查看了Grails文档,查看了一些db--迁移脚本,我发现我陷入了困境--不知道从哪里开始尝试。如果有人能告诉我任何合适的消息来源,我会非常感激的。顺便说一句,我在Grails有点生疏了。两年前通过“概念证明”项目开始自学,历时6个月。然后返回到Eclipse富客户端工作。这可能是我的问题的一部分,虽然我从来不参与脚本。

在Jenkins evt中,我需要的一件事是获取当前用于构建的SVN修订号。欢迎提出建议。

你好,约翰

EN

回答 1

Stack Overflow用户

发布于 2013-01-10 12:43:45

通过运行grails create-script scriptname创建一个新脚本。数据库迁移插件脚本被配置为易于重用。_DatabaseMigrationCommon.groovy中有很多共享代码,每个脚本都定义了一个具有唯一名称的目标。因此,您可以导入共享脚本或任何独立脚本(或多个脚本),并像调用方法一样调用目标。

默认情况下,create-script生成的脚本通过includeTargets << grailsScript("_GrailsInit")“导入”_GrailsInit脚本,您也可以使用指向已安装插件目录的神奇变量进行相同的操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
includeTargets << new File("$databaseMigrationPluginDir/scripts/DbmGenerateChangelog.groovy")

如果这样做,您可以删除_GrailsInit的包含,因为它已经包含了,但是如果没有,那就好了,因为Grails只包含了一次文件。

然后你可以定义你的目标,并调用任何插件的目标。目标不能接受参数,但是可以将数据添加到argsMap (这是Grails从解析的命令行参数中创建的映射)来模拟用户指定的args。请注意,传递给您的脚本的任何arg都会被数据库迁移插件的脚本看到,因为它们使用相同的argsMap

下面是一个示例脚本,它只执行与dbm-generate-changelog相同的操作,但是添加了一个前后消息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
includeTargets << new File("$databaseMigrationPluginDir/scripts/DbmGenerateChangelog.groovy")

target(foo: "Just calls dbmGenerateChangelog") {
   println 'before'
   dbmGenerateChangelog()
   println 'after'
}

setDefaultTarget foo

请注意,我将目标从main重命名为foo,因此它是唯一的,以防您想要从另一个脚本调用它。

作为使用args的一个示例,下面是一个修改后的版本,如果没有提供,则指定默认的changelog名称:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
println 'before'
if (!argsMap.params) {
   argsMap.params = ['foo2.groovy']
}
dbmGenerateChangelog()
println 'after'

编辑:下面是一个更完整的示例,它将diff的输出捕获为字符串:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
includeTargets << new File("$databaseMigrationPluginDir/scripts/_DatabaseMigrationCommon.groovy")

target(foo: "foo") {
   depends dbmInit

   def configuredSchema = config.grails.plugin.databasemigration.schema
   String argSchema = argsMap.schema
   String effectiveSchema = argSchema ?: configuredSchema ?: defaultSchema

   def realDatabase
   boolean add = false // booleanArg('add')
   String filename = null // argsList[0]

   try {
      printMessage "Starting $hyphenatedScriptName"

      ByteArrayOutputStream baos = new ByteArrayOutputStream()
      def baosOut = new PrintStream(baos)

      ScriptUtils.executeAndWrite filename, add, dsName, { PrintStream out ->
         MigrationUtils.executeInSession(dsName) {
            realDatabase = MigrationUtils.getDatabase(effectiveSchema, dsName)
            def gormDatabase = ScriptUtils.createGormDatabase(dataSourceSuffix, config, appCtx, realDatabase, effectiveSchema)
            ScriptUtils.createAndPrintFixedDiff(gormDatabase, realDatabase, realDatabase, appCtx, diffTypes, baosOut)
         }
      }

      String xml = new String(baos.toString('UTF-8'))
      def ChangelogXml2Groovy = classLoader.loadClass('grails.plugin.databasemigration.ChangelogXml2Groovy')
      String groovy = ChangelogXml2Groovy.convert(xml)

      // do something with the groovy or xml here

      printMessage "Finished $hyphenatedScriptName"
   }
   catch (e) {
      ScriptUtils.printStackTrace e
      exit 1
   }
   finally {
      ScriptUtils.closeConnection realDatabase
   }
}

setDefaultTarget foo
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14262375

复制
相关文章
【操作指南】脚本编写
下载jmeter工具,http://jmeter.apache.org/download_jmeter.cgi
Nanako
2021/01/21
1.8K0
【操作指南】脚本编写
shell 脚本的编写
注:默认root用户下操作,可通过 su root 然后输入密码进行root用户的切换
烤红薯
2021/12/23
9890
shell 脚本的编写
Python 脚本编写
系统可能会显示已安装的 Python 版本是 Python 2.7.9。在这种情况下,表明你已经安装了 Python 2。如果版本号以 3 开头,则表明你已经安装了 Python 3!请勿再次安装 Python!
py3study
2020/01/14
3.3K0
【Groovy】Groovy 脚本调用 ( Linux 中调用 Groovy 脚本 | Windows 中调用 Groovy 脚本 )
在 命令行 , Groovy 脚本 , Groovy 类 , Java 类中 , 可以调用 Groovy 脚本 ;
韩曙亮
2023/03/30
2K0
LoadRunner脚本编写
引言:针对接口进行脚本编写,解决录制脚本的局限。 第一步:打开LR,选择协议Web Services。 第二步:在action里进行脚本编写。 登陆: 1 int HttpRetCode_login,HttpRetCode_add;//定义两个变量,必须放在最前面。 2 3 //*******************用例1******************* 4 5 web_reg_save_param("result_login","LB=","RB=",
全栈测试开发日记
2023/02/02
4850
shell脚本简介+编写
$#:获取所有输入参数个数,常用于循环,判断参数的个数是否正确以及加强脚本的健壮性。
ha_lydms
2023/08/10
3910
shell脚本简介+编写
【Groovy】Groovy 脚本调用 ( Java 类中调用 Groovy 脚本 )
Java 类中调用 Groovy 脚本 , 与 Groovy 类中调用 Groovy 脚本 , 代码基本类似 ;
韩曙亮
2023/03/30
1.9K0
【Groovy】Groovy 脚本调用 ( Java 类中调用 Groovy 脚本 )
sqlmap tamper脚本编写
上次HCTF中Li4n0师傅出了一道Kzone,非预期解可以利用Unicode编码关键字bypass掉WAF,发现如果手动编写sqlmap中的tamper脚本能够省事很多,于是就有了此文。
安恒网络空间安全讲武堂
2018/12/29
4.9K0
sqlmap tamper脚本编写
PhotoShop脚本指南
Photoshop支持三种脚本语言:AppleScript,VBScript,JavaScript。其中AppleScript为苹果系统,VBScript为Windows操作系统,JavaScript兼容苹果和Windows操作系统。
牛老师讲GIS
2018/10/23
3.1K0
PhotoShop脚本指南
nmap脚本指南
(以下行为为原作者进行) 下面我们来实战一下,今日刚发现的运营商漏洞,就出在 Telnet 上。 我家上网是没有分配公网IP的,就是路由那里是一个内网,于是我先用nmap探测了一下这个内网,发现有某些网络设备。
逍遥子大表哥
2021/12/17
5470
实战|抢购脚本编写
故事背景: “jack,听说你大学的专业是计算机科学与技术?” “是的,领导。” “那好,去帮我抢个荣耀v9。” “领导,请你尊重这门专业,计算机科学是……” “请你谈谈NAS设备卷管理模块中失效数据恢复问题的应用。” “领导,脚本写好了”  1.效果图 运行的效果图,就是模拟不断点击换一换的效果 2.图解 怎么做的呢?让我们一步步分解 1、右击打开 2、元素查看 已经获取该元素 模拟点击 定时器每100毫秒点击一次 1.大于某个时间点 2.模拟点击 3.JS组成 1. 核心(基于E
用户1097444
2022/06/29
2.4K0
实战|抢购脚本编写
shell脚本编写思路
交互式(Interactive):解释执行用户的命令,用户输入一条命令,Shell就解释执行一条。
马哥教育小师哥
2019/07/05
1.6K0
Linux 编写Shell脚本
批处理:用户事先编好一个完整的Shell脚本,Shell会一次性执行脚本中的诸多命令
心跳包
2020/08/31
2.7K0
gitlab CI脚本编写
从 GitLab 8.0 开始,GitLab CI 就已经集成在 GitLab 中,我们只要在项目中添加一个 .gitlab-ci.yml 文件,然后添加一个 Runner,即可进行持续集成。 而且随着 GitLab 的升级,GitLab CI 变得越来越强大,本文将介绍如何使用 GitLab CI 进行持续集成。 一些概念 在介绍 GitLab CI 之前,我们先看看一些持续集成相关的概念。 参考链接
py3study
2018/08/02
4.1K0
linux shell脚本编写实例_常用的shell脚本
使用linux已经有10来年了但是一直止于各种服务器的搭建和环境的调优,能力不能得到提升,今天突然下定决心学习Shell脚本编程,因此以网上广为流传的《Shell脚本100例》为基础学习、实验和笔记。
全栈程序员站长
2022/11/10
3.3K0
linux怎么编写shell脚本_简单的shell脚本代码
用spring boot框架做的项目,将第三方包全部打在jar里面,通过shell脚本启动和停止服务,常用的shell脚本模板如下: #!/bin/bashJAVA_OPTIONS_INITIAL=-Xms128MJAVA_OPTIONS_MAX=-Xmx512M_JAR_KEYWORDS=monitor-alarm-task-1.0-SNAPSHOT.jarAPP_NAME=monitor-alarm-taskAPPLICATION_FILE=/opt/scpip_monitor/applicati
全栈程序员站长
2022/11/09
4.1K0
几个简单的python脚本编写
编写固定输出的斐波那契数列 # vim fibs.py #!/usr/bin/python fibs = [0, 1] for i in range(8): fibs.append(fibs[-1] + fibs[-2]) print fibs # ./fibs.py [0, 1, 1, 2, 3, 5, 8, 13, 21, 34] 可执行的交互式斐波那契数列 # vim fibs2.py #!/usr/bin/python fibs = [0, 1] nums = int(raw_input('Inp
吴柯
2018/04/16
5.4K0
JAVA调用Shell脚本
在实际项目中,JAVA有时候需要调用C写出来的东西,除了JNI以外,我认为一种比较好的方法是JAVA调用Shell。先把C写出来的make成可执行文件,然后再写一个shell脚本执行该可执行文件,最后是JAVA调用该shell脚本。 JAVA调用很简单,例子如下: 首先是shell脚本 /users/bmcmsend_linux/server/bin/msend -n @10.26.202.27:1828#mc -a TRKUTIL_EV -v -j /users/bmcmsend_linux/server
Java学习123
2018/05/16
3.1K0
oozie调用shell脚本
job.properties nameNode=hdfs://cdh01:8020 resourceManager=cdh01:8032 queueName=default examplesRoot=examples oozie.wf.application.path=${nameNode}/user/${user.name}/${examplesRoot}/apps/ssh exec=log.sh shellpath=${nameNode}/user/${user.name}/${examplesRoo
静谧星空TEL
2021/04/27
1.4K0
编写 Shell 脚本的最佳实践
由于工作需要,最近重新开始拾掇 shell 脚本。虽然绝大部分命令自己平时也经常使用,但是在写成脚本的时候总觉得写的很难看。而且当我在看其他人写的脚本的时候,总觉得难以阅读。毕竟 shell 脚本这个东西不算是正经的编程语言,他更像是一个工具,用来杂糅不同的程序供我们调用。因此很多人在写的时候也是想到哪里写到哪里,基本上都像是一段超长的 main 函数,不忍直视。同时,由于历史原因,shell 有很多不同的版本,而且也有很多有相同功能的命令需要我们进行取舍,以至于代码的规范很难统一。
用户6543014
2019/10/25
1.1K0
编写 Shell 脚本的最佳实践

相似问题

检查约束Grails数据库迁移脚本

11

Grails - DB迁移变更日志中的调用脚本

12

如何编写cratedb迁移脚本?迁移脚本不工作

41

在grails中使用groovy脚本迁移数据库

10

从现有架构生成初始数据库迁移脚本

16
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文