介绍

当ADF应用程序建立在共享库之上时,有一种非常流行的架构模式。 因此,主应用程序被部署为EAR,并且所有子系统都在共享库中实现,这些共享库可以在“热”模式下独立构建并作为JAR部署到WebLogic,而无需停机。 这种方法的优点似乎很明显:

  • 它分解了实现模块化和重用概念的应用程序
  • CI / CD流程可能会更快,因为将只重建/重新部署一个库
  • 重新部署共享库没有停机时间

看起来太酷了,人们可以在新项目中选择这种架构模式,并且对实现应用程序时所做出的决定感到非常满意。 当他们投入生产时,他们会变得更加高兴,因为他们可以轻松地修复大多数错误并实施新的要求,从而避免完全重新部署且没有任何停机时间。

毫无疑问,在投入生产之前,任何更改(以及相应的共享库)都应在以前的环境(例如QA,UAT等)中进行部署和测试。

一段时间内,没有人确切知道每种环境中部署了什么版本的共享库。 支持这种应用程序并在这种情况下实现新的更改有些棘手,因为即使它在这种环境下也可以工作,但由于共享库的组合可能有所不同,因此无法保证它将在下一个环境中正常工作。 如果它是一个大型应用程序,并且有许多共享库,那么这可能会成为一场噩梦,而且很多时候人们只是放弃重新部署所有内容,最终回到整体EAR。 并不是很酷,但是至少他们现在可以再次入睡了。

在这篇文章中,我将展示如何整理事物,并建立一个使用FlexDeploy在共享库之上构建的ADF应用程序的连续交付过程。 FlexDeploy是一个快速增长的自动化和DevOps解决方案,如果您想了解所有内容,请随时访问该网站 。 在这里,我将专注于FlexDeploy如何通过引入快照管线的概念,共享库帮助。

快照是代表整个系统的一组可部署工件。 如果要重建其中任何一个工件,那么将创建一个新快照,其中包含该工件的新版本以及其余工件的先前版本。 在我们的情况下,快照将包含用于主ADF应用程序的EAR和用于共享库的JAR。

为了为我们的应用程序创建快照,FlexDeploy应该知道它的全部内容和组成的项目。 FlexDeploy中有一个“ 发布”概念,它是一堆项目,应将其内置到快照中,并在整个环境中作为一个单元一起部署。

在我们的示例中,有3个项目-一个作为主应用程序,两个针对部门和员工任务流,部署为共享库。 每个项目都在FlexDeploy中单独配置,每个项目“知道”如何获取其源代码,如何构建和部署(FlexDeploy使用工作流进行构建和部署,但这是另一个重要的故事,远远超出了本文)。

完成所有定义后,只要开发人员为版本中包含的任何项目推动代码更改,FlexDeploy都会构建一个新快照。 它仅重建那些已更改的项目(生产耳朵和罐子),其余工件原样包含在新快照中。

好的,现在我们可以构建快照并将其部署到整个环境中。 版本定义是指管道。

管道是一种确保严格按照预定顺序在整个环境中部署整个快照的方法。 这意味着只能以Dev-> QA-> Prod的顺序(如果以此方式定义了管道)来部署此快照(换句话说,ear / jar版本的这种组合)。 如果在Dev和QA上不成功,那就无法进入Prod。 管道由涉及环境的各个阶段组成,每个阶段均由多个门(批准,测试结果等)组成,这意味着快照在此环境下进行处理之前应先通过所有门)和步骤(部署,运行自动测试,通知,手动步骤) ,…)。

因此,基本上,部署只是管道阶段(环境)中的一个管道步骤。 此步骤足够聪明,可以仅重新部署已更改的工件(除非将该步骤配置为执行“强制”部署)。 FlexDeploy跟踪在每个环境中已部署了哪些工件版本。

总结一下,我想说的是,当将FlexDeploy用作具有共享库的ADF应用程序的DevOps解决方案时,我们一方面获得了该架构模式的所有好处,另一方面我们可以使事情井井有条,确切知道已部署了哪种组合跨环境,什么已经过测试,可以投入使用,什么失败了。

而已!

翻译自: https://www.javacodegeeks.com/2017/12/continuous-delivery-adf-applications-weblogic-shared-libraries.html

使用WebLogic共享库连续交付ADF应用程序相关推荐

  1. 程序员的自我修养--链接、装载与库笔记:Linux共享库的组织

    共享库(Shared Library)概念:其实从文件结构上来讲,共享库和共享对象没什么区别,Linux下的共享库就是普通的ELF共享对象.由于共享对象可以被各个程序之间共享,所以它也就成为了库的很好 ...

  2. 静态库和共享库之间的区别?

    静态库和共享库有什么区别? 我使用Eclipse,并且有几种项目类型,包括"静态库"和"共享库"? 一个人比另一个人有优势吗? #1楼 对于静态库,链接器从库中 ...

  3. gcc创建静态库和共享库

    静态库和动态(共享)库 静态库:编译程序在编译使用库提供的功能代码的程序时将代码复制到该程序然后编译成可执行程序,这种库成为静态库 共享库:共享库比静态库的处理方式更加灵活,因而其产生的可执行文件更小 ...

  4. 共享库中的位置无关代码(PIC)

    原作者:Eli Bendersky http://eli.thegreenplace.net/2011/11/03/position-independent-code-pic-in-shared-li ...

  5. 【转】Linux 静态库与共享库的使用

    原文网址:http://blog.csdn.net/heyabo/article/details/11688517 申明: 正如题如示,本篇讲的是Linux下是静态库与共享库,而Window下的动态链 ...

  6. 【读书笔记】【程序员的自我修养 -- 链接、装载与库(二)】进程虚拟地址空间、装载与动态链接、GOT、全局符号表、共享库的组织、DLL、C++与动态链接

    文章目录 前言 介绍 可执行文件的装载与进程 进程虚拟地址空间 装载方式 操作系统对可执行文件的装载 进程虚存空间分布 ELF文件的链接视图和执行视图 堆和栈 Linux 内核装载ELF & ...

  7. Linux--共享文件夹、库文件、库分类(静态库、共享库)

    目录 1.库文件: 2.库的分类: 3.操作代码: 4.静态库的生成及使用 (1)先将需要生成库文件的所有.c文件编译成.o文件; (2)创建静态库(使用ar命令) (3)静态库的使用 5.静态库的缺 ...

  8. 静态库,共享库,动态库 elf格式的

    3.2 使用     3.3 环境变量    3.4 创建共享库    3.5 安装与使用    3.6 兼容性  4.动态加载    4.1 dlopen()    4.2 dlerror()    ...

  9. Linux 共享库简介(怎样创建共享库)

    前言 0x1 什么是共享库 0x2 共享库在文件系统中的位置 0x3 使用 ldconfig 命令 0x4 使用非标准库位置 0x5 示例(如何创建一个共享库) 前言 一个库文件由多个不同的目标文件填 ...

最新文章

  1. 学习LINUX第三天:最简单的LAMP组合(适合初学者)
  2. 解决set /p yn= 接受键盘输入导致ECHO 处于关闭状态的问题
  3. 自动化部署之gitlab备份和恢复
  4. Leetcode 40组合总数(回溯)Ⅱ41缺失的第一个正数42接雨水
  5. validate验证长度 vue_vue input 输入校验字母数字组合且长度小于30的实现代码
  6. 这届产品经理也太太太太难了吧!
  7. [渝粤教育] 中国地质大学 自动控制原理 复习题 (2)
  8. Oracle:时间字段模糊查询
  9. react-router的使用(二)——NavLink的使用、Switch的作用、Redirect
  10. golang flag.Parse包
  11. python的常用语句_python常用语句
  12. 《Unity3D脚本编程——使用C#语言开发跨平台游戏》通读笔记
  13. 数学科普书籍介绍(一)
  14. 【亲测】超级外链SEO工具源码,可发9600条优质外链
  15. AT89S52单片机思维导图
  16. 阿里云 root ssh远程登录 及 普通非root用户 ssh远程登录 Ubuntu1604
  17. 第二人生的源码分析(2)第二人生的基本功能
  18. 单片机驱动为什么要设置为低电平有效?
  19. 放大电路中的反馈-反馈的基本概念及判断方法
  20. Gartner年度趋势预测汇总整理(2006年-2023年)

热门文章

  1. JavaFX图表(六)之条形图
  2. Oracle入门(十五)之数据库锁
  3. 精选30道Java多线程面试题
  4. 阿里巴巴对Java编程【集合处理】的规约
  5. 阿里巴巴对Java编程【OOP规约】的规约
  6. java.sql.SQLException: The server time zone value '�й���׼ʱ��' is unrecognized
  7. hibernate正向生成数据库表以及配置——hibernate.cfg.xml
  8. 对象拷贝的工具类DeepBeanUtils
  9. 2019蓝桥杯省赛---java---A---4(迷宫)
  10. python调用webservice接口实例_python调用webservice接口的实现