我需要确保项目的干净 Maven 部署。我的意思不是“mvn clean deploy”,而是在部署(覆盖)之前从 OSB 中删除现有项目。如果您在 OSB 上覆盖项目,则无法确定其所有资源都会被更新。我见过很多情况,项目中的某些资源被覆盖而有些则没有。这是非常不可预测的行为。所以问题是:在部署之前强制更新项目是否是一些 maven(maven 服务总线插件或其他一些像 maven weblogic 之类的)任务或参数?
1 回答
好吧,我找到了解决方案。这并不简单。其实我不喜欢它,但它的工作原理。
我发现的唯一解决方案是使用 WLST 从 OSB 控制台中删除服务(OSB 术语中的项目)。我在 Martien van den Akker 的博客中找到的工作脚本:http ://blog.darwin-it.nl/2014/03/osb-remove-artefacts-with-wlst.html
它已准备好使用脚本。但这仅适用于 OSB 11,不适用于 OSB 12。因此您可以使用此解决方法:http ://soamagic.blogspot.com/2016/05/osb-12c-java.html
在我的 CI 服务器(基于 Hudson)中,我添加了 Maven 构建步骤来启动 sh-script,它以 py-script 作为参数执行 wlst.sh(实际上有 4 个以上的参数 - weblogic 管理员用户名、密码、url 等 -要删除的项目名称)。此构建步骤在每个服务部署之前执行。这保证了最新版本的服务将部署到 OSB 服务器。
编辑:不确定是否值得发布,但我希望有人能在我的代码中找到有用的东西。所以这里是:
Maven构建:
<profile> <id>undeployService</id> <build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.5.0</version> <executions> <execution> <id>wlst-undeploy-service</id> <phase>process-resources</phase> <goals> <goal>exec</goal> </goals> <configuration> <executable> ${project.basedir}/../conf/WLST/undeployProject.sh </executable> <arguments> <argument> ${weblogic.username} </argument> <argument> ${weblogic.password} </argument> <argument> ${weblogic.url} </argument> <argument> ${project.artifactId} </argument> </arguments> </configuration> </execution> </executions> </plugin> </plugins> </build> </profile>
undeployProject.sh 脚本:
. ${MW_HOME}/osb/tools/configjar/setenv.sh
${MW_HOME}/osb/tools/configjar/wlst.sh ../conf/WLST/undeployProject.py $*