`
bookong
  • 浏览: 95412 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

通过Maven和Jenkins插件解决Java项目的配置管理

阅读更多
项目中的配置管理一直是一件麻烦的事情,就比如数据库来说:开发时要连接开发库,测试人员需要连接测试库,可能集成测试的时候又是另外的库,上公网可能还分alpha版、beta版等等。

之前的配置管理方式无外乎两种:
1、在不同的环境上维护一套不同的配置文件,部署到上面后做个替换。
2、在同一个地方集中维护配置文件,然后做个工具在不同的环境对配置文件做替换。

方式1遇到的问题是:要替换的文件一旦做修改,要在各个环境中同样修改这个文件,容易漏掉。
方式2遇到的问题是:虽然在一个统一的地方维护文件,但公网和内网可能有物理的隔离,要做到通用的方式很麻烦。
通过摸索,我找到一种通过maven插件与jenkins插件结合的方式来解决这个问题。

首先我们先做个Maven插件玩玩

这个插件的源代码在 https://github.com/bookong/cooly

下面我就这个插件的几个关键点解释一下:

类 net.bookong.maven.plugin.ConfigReplace 是 replace 这个目前唯一的 goal 的实现 (这个插件项目以后我可能加上更多实用功能),它默认的阶段我设置为 process-test-classes 因为这个阶段是在执行单元测试之前,如果执行跳过单元测试的构建(mvn install -Dmaven.test.skip=true)也可以触发我这个插件。

想知道神秘的内部变量project.build.directory 是怎么来的,你可以参考http://docs.codehaus.org/display/MAVENUSER/MavenPropertiesGuide

这个插件的工作原理是,在当前项目下查找指定的配置文件(默认是 ci_props.xml ),这个配置文件中以 key 和 value 的形式保存一组配置(和项目在一起提交到代码库中的就是开发环境的配置);然后对指定目录下递归查找指定特征的文件(默认是后缀为 . ci_tmpl 的文件);如果找到这样的文件,就对文件内容中用指定前后缀拼出的内容进行替换(例如对所有 ${XX} 替换为 ci_props.xml 中 XX 变量对应的内容);最后将替换的内容保存成去掉扩展名 ci_tmpl 的文件(例如 app.ini.ci_tmpl 在替换后会变成 app.ini)。

安装插件到本地只需要签出代码后本地执行mvn install 。如果你搭建过 nexus ,首选在 settings.xml 文件中添加有部署权限用户的用户名和密码

<servers>
  <server>
    <id>snapshots</id>
    <username>deployment</username>
    <password>deploymentPassword</password>
  </server>
  <server>
    <id>releases</id>
    <username>deployment</username>
    <password>deploymentPassword</password>
  </server>
</servers>


然后修改插件的 pom.xml 中下面内容,指向你自己的 nexus
  <distributionManagement>
    <repository>
      <id>releases</id>
      <url>http://172.16.12.12:8081/nexus/content/repositories/releases</url>
    </repository>
    <snapshotRepository>
      <id>snapshots</id>
      <url>http://172.16.12.12:8081/nexus/content/repositories/snapshots</url>
    </snapshotRepository>
  </distributionManagement>



然后在项目中使用这个Maven插件

插件部署好之后我们就可以在项目中使用了。使用的例子可以参考项目下自带的测试例子 test-replace 。



用Jenkins插件实现多个环境中配置文件的替换

根据上面说的步骤,你在执行使用这个插件的项目时已经可以将配置替换成代码中 ci_props.xml 中的内容,我们可以将这个环境看成是开发环境。
当你部署测试环境或者公网时,我们可以在Jenkins中安装一个插件
https://wiki.jenkins-ci.org/display/JENKINS/Config+File+Provider+Plugin


通过这个插件,我们创建各个环境不同的 ci_props.xml 文件。例如:


在Jenkins的Job中的 Pre Step 中添加下图所示内容,这样就将 ci_props.xml 替换成不同的环境了。



如何解决多套配置可能产生的不同步

这个问题我只能部分的解决,我在插件中增加了一个功能,假如替换后的文件还发现了疑似未替换的配置,就会抛出异常导致构建失败。

例如 ci_prop.xml 中没有定义 abc 这个变量。要替换的文件app.properties.ci_tmpl 中有这样的内容 you.set=${abc} 插件执行后会报下面错误,并导致构建失败。

[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 6.126s
[INFO] Finished at: Tue Mar 25 20:33:39 CST 2014
[INFO] Final Memory: 10M/123M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal net.bookong.maven.plugin:cooly-plugin:0.1:replace (default) on project test-replace: Fail to execute cooly:replace, Message: Missing property "${abc}"  in ./ci_props.xml, when handle D:\CodeRepository\git\cooly\test-projects\test-replace\target\classes\app.properties -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException


  • 大小: 13 KB
  • 大小: 2.9 KB
  • 大小: 7.6 KB
  • 大小: 6.5 KB
分享到:
评论

相关推荐

    maven jenkins的jar

    maven2 用于hudson插件开发的jar

    Jenkins持续集成maven+jmeter+git接口自动化测试框架.pdf

    maven负责项目管理,jenkins服务器就不需要安 装jmeter运行环境(错误的,maven项目配置pom文件),只需要注册脚本所需要的jar包 到本地仓库即可;git源码管理,maven构建; 1、软件安装步骤略;jenkins需要安装框架...

    jenkins备份插件文件

    Jenkins是一个开源软件项目,是基于java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。Jenkins是用java语言编写,可以在Tomcat等流行的servlet容器...

    Jenkins(2.350版本)常用插件

    由于Jenkins版本和插件更替较快,当我们下载插件时,提示我们需要升级Jenkins版本,而又不想对Jenkins版本进行升级,所以就导致部分插件无法安装,当然我们也可以去官网下载对应版本,但是插件之间的项目依赖关系又...

    无网、内网服务器 jenkins搭建 (2.414版本)全部插件 离线下载

    maven、Java、vue、git等插件全部都有 下载后解压复制到 jenkins安装根目录下的plugins文件夹,重启jenkins即可使用

    Jenkins 备份插件thinBackup

    Jenkins 备份插件thinBackup,可以备份jenkins的配置数据和插件,并恢复。 参考地址:https://blog.csdn.net/tcy1429920627/article/details/108850273 Jenkins是一个开源软件项目,是基于java开发的一种持续集成...

    Jenkinsfile调用jdk命令和maven或grandle编译命令工具配置

    Jenkinsfile调用jdk命令和maven或grandle编译命令工具配置

    jenkins常用插件包

    Maven Integration OkHttp Plugin Oracle Java SE Development Kit Installer Plugin OWASP Markup Formatter Plugin PAM Authentication plugin Parameterized Trigger plugin Pipeline Pipeline Graph Analysis ...

    Windows下配置好的apache-maven-3.9.2

    Maven是一个项目管理工具,它可以帮助开发人员自动化构建、依赖管理和项目报告生成等任务。 Maven使用一种被称为"项目...总之,Maven是一个强大而灵活的项目管理工具,可以帮助开发人员更高效地构建和管理Java项目。

    jenkins-pipeline-gitflow-maven:带有Jenkinsfile的示例Maven项目正在执行基于git-flow的发布管理

    这是一个带有Jenkinsfile的示例Maven项目,用于执行基于的发布管理。 Jenkins使用构建具有所描述步骤的管道。 实际的gitflow版本管理由 maven插件执行。 詹金斯(Jenkins)工作 为了对项目完全使用gitflow,最好...

    无网、内网服务器 jenkins搭建 (2.328版本)全部插件 离线下载

    maven、Java、vue、git等插件全部都有 下载后解压复制到 jenkins安装根目录下的plugins文件夹,重启jenkins即可使用

    java8看不到源码-docker-java8-jenkins-maven-git-nano:设置一个容器,以便与安装在8080端口上的Jen

    看不到源码docker-java8-jenkins-maven-git-nano 该存储库提供了 Dockerfile,该文件从 Ubuntu 14.04 LTS 以及 Oracle Java 8、Jenkins 1.574、Maven 3、Git 和 Nano 构建持续集成容器。 设置一个装有 jenkins 的...

    Jenkins自动化部署.docx

    Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放...本文主要将一个Springboot项目通过Gitlab、Maven、Jenkins、Docker等技术,实现项目的自动化提交部署功能

    plot-plugin:Jenkins绘图插件

    每次构建完成后,都会通过工作区下方某处的XPath(应在构建期间生成的)从Java属性文件,CSV文件或XML文件中获取地块的数据系列的最新值。 。 每个图的数据都存储在作业的根项目目录中的CSV文件中。 它可以生成...

    Jenkins 支持jdk1.7+jdk1.8打包.zip

    Jenkins 支持jdk1.7+jdk1.8打包,包括兼容组件、maven包,JDK建议用:jdk-8u11-linux-x64...安装前将plugins放到/root/.jenkins/路径下,再启动Jenkins,首次启动跳过安装插件步骤,直接进入配置页面开始配置使用即可。

    chucknorris-plugin:Chuck Norris Jenkins插件

    Chuck Norris Jenkins插件 这个插件为Jenkins增添了一个绝对令人愉快的功能:根据您的构建成功,失败还是不稳定,它将显示Chuck Norris自动适应构建结果的图片(是的,这是计算机科学!)! 看到这一点,已经有...

    mvn-build-sorter:Jenkins 插件在构建队列中(重新)排序 Maven 作业

    mvn-build-sorter Jenkins 插件在构建队列中(重新)排序 Maven 作业 工作正在进行中

    jenkins-pnc-build-requester:用于项目Newcastle构建请求的Jenkins插件

    用于项目纽卡斯尔移交的Jenkins插件该插件有助于从社区到产品化的过渡。 它可以用于触发Newcastle项目中的相应构建。 如果与该构建相关联的构建配置不存在,它将创建一个新的构建配置。如何配置插件有全局配置和本地...

    Jenkins持续集成引擎的前身是Hudson是一个可扩展的持续集成引擎.rar

    易于安装部署配置:可通过yum安装,或下载war包以及通过docker容器等快速实现安装部署,可方便web界面配置管理; 消息通知及测试报告:集成RSS/E-mail通过RSS发布构建结果或当构建完成时通过e-mail通知,生成JUnit/...

    jenkins-2.222.4.zip

    Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上,不做解释)。Jenkins用Java...

Global site tag (gtag.js) - Google Analytics