`
bookong
  • 浏览: 95896 次
  • 性别: 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

    Maven是一个Java项目管理和综合工具,它通过提供一个标准化的项目对象模型(Project Object Model, POM)来管理项目的构建、报告和文档。Maven通过读取POM.xml文件,自动处理项目的构建过程,包括编译、测试、打包、...

    jenkins 必装maven插件

    总结来说,Jenkins Maven插件是实现Java项目持续集成的关键工具,通过手动安装和配置,即使在网络受限的环境下也能确保CI流程的正常运行。结合Maven的强大功能,可以构建出高效、稳定的自动化构建和部署系统。

    jenkins实现maven项目自动部署到tomcat

    Maven 是一个用于构建和管理 Java 项目的工具,它可以帮助自动化项目的构建过程。 #### 二、配置 Jenkins 1. **配置 Jenkins 插件**: - **Deploy to Container Plugin**:此插件用于将 Web 应用程序部署到容器中...

    jenkins+svn+maven+java-配置+安装+部署(windows版)

    - **配置JDK和Maven**: 在“系统管理”-&gt;“全局工具配置”中,分别配置JDK目录和Maven的根目录,以及Maven的设置文件路径。 **4. Jenkins 项目配置** - **创建项目**: 输入项目名称,选择“构建一个Maven项目”。 ...

    CentOS7下svn tomcat9.0 maven3.3 jenkins实现web项目自动构建与远程发布

    11. Jenkins插件管理:Jenkins插件管理是指在Jenkins中安装和管理各种插件,这些插件可以扩展Jenkins的功能,如自动部署插件Deploy to container Plugin。 12. Java环境变量配置:Java环境变量配置是指在操作系统中...

    jenkins+maven-tomcat插件自动部署

    Jenkins的默认配置目录位于`/root/.jenkins`,你可以在这里查看和管理所有的配置和插件。在系统设置中,你可以配置Maven、JDK和Git的路径,确保Jenkins能够正确识别和使用这些工具。 接着,我们关注插件管理。...

    Jenkins打包插件配置

    了解并熟练掌握插件的安装、配置和管理,能极大地提升开发效率,保证软件发布流程的顺畅。在mac环境下,正确管理`/Users/mac/.jenkins/plugins`目录中的插件,对于保持Jenkins的稳定运行至关重要。

    Maven:构建和管理Java项目Maven:构建和管理Java项目

    ### Maven:构建和管理Java项目的利器 #### Maven 的基本概念 **Maven**是一种流行的开源项目管理和理解工具,尤其在Java开发领域具有重要的地位。它不仅简化了项目的构建过程,还提高了开发效率,并有助于实现...

    Java项目包 Jenkins+Maven+Gitlab+Tomcat 自动化构建打包、部署

    2. **Maven**:Maven 是一个项目管理和综合工具,主要用于Java项目。它通过管理项目构建、依赖关系以及文档生成,使得构建过程标准化。在自动化部署中,Maven 负责编译源代码、运行测试、打包应用为可部署的JAR或WAR...

    jenkins+maven编译发部JAVA项目.docx

    "Jenkins+maven编译发部JAVA项目" Jenkins 是一个开源的自动化服务器,主要用于自动化各种任务,例如构建...通过配置 Jenkins 和 Maven,我们可以自动化项目的构建、测试和部署过程,从而提高项目的开发效率和质量。

    maven如何使用 Jenkins 通过 Maven 构建简单 Java 应用程序的入门教程

    **内容概要**:本教程介绍如何使用 Jenkins 通过 ...先按照教程中的步骤完成 Jenkins 和 Maven 的安装配置,然后创建一个简单的 Java 项目,并将其配置为 Maven 项目。在 Jenkins 中配置相应的构建任务,运行并观察

    Jenkins插件开发手册

    Maven是一个项目管理工具,它帮助管理和构建Java项目,包括Jenkins插件。你需要从Apache官方网站下载Maven的最新版本,将其解压缩到你选择的目录,并设置环境变量`M2_HOME`指向解压缩的路径。同时,将`%M2_HOME%\bin...

    maven2 java项目管理 工具 测试 框架

    综上所述,Maven 2 是Java开发者的重要工具,它通过标准化项目结构、自动化构建过程和管理依赖,极大地提升了开发效率和项目维护性。对于初学者,理解Maven 2 的基本概念和用法是成为专业Java开发者的关键一步。通过...

    jenkins 2.346.1 git maven ssh插件

    jenkins 2.346.1,jdk8 适用 git maven ssh插件

    jenkins插件maven+git+html报表展示

    1. **Maven集成**: Maven是Java项目管理工具,用于构建、依赖管理和项目信息管理。在Jenkins中,Maven插件允许用户直接在构建步骤中执行`mvn install`或`mvn clean test`等命令,确保代码编译、测试和打包。通过配置...

    Windows平台搭建Jenkins+maven+git实现自动发布已经越过几道坑

    - **Maven**: Maven用于项目管理和构建工具,路径示例为`D:\apache-maven-3.5.0`。 - **Git**: 版本控制系统,路径示例为`C:\Program Files\Git`。 **重要注意事项**: - 确保所有软件安装正确,并且配置了正确的...

    Jmeter+Jenkins+maven接口自动化集成.rar

    3. **创建Maven项目**:在Maven项目中,添加JMeter和Jenkins插件的依赖,配置pom.xml文件,指定JMeter脚本的位置和执行命令。 4. **配置Jenkins**:在Jenkins服务器上安装必要的插件,如Maven Integration Plugin和...

    sonarqube+maven+jenkins

    文档"sonarqube使用说明.docx"很可能详细阐述了如何配置和使用SonarQube,包括安装步骤、配置Maven插件、设置Jenkins集成以及解读分析报告等内容。它可能会涵盖以下知识点: 1. SonarQube的安装与启动:包括下载、...

    Win10搭建Jenkins部署Java项目(本机和远程Win10部署).doc

    * Maven配置:用于编译和打包Java项目 * JDK配置:用于指定JDK版本 * Git配置:用于指定Git仓库地址和认证信息 五、新建项目并配置 在Jenkins中,需要新建一个项目,并进行以下配置: * Discard old builds:用于...

Global site tag (gtag.js) - Google Analytics