??斗地主捕鱼电竞提现秒到 广告位招租 - 15元/月全站展示
??支付宝搜索579087183领大额红包 ??伍彩集团官网直营彩票
??好待遇→招代理 ??伍彩集团官网直营彩票
??络茄网 广告位招租 - 15元/月全站展示
Maven、Jenkins实现自动化部署

转载   巧克力黒   2018-10-19   浏览量:32


工程实例代码:https://github.com/chocolateBlack/multi_env_folder_maven

利用Maven、Jenkins实现项目自动化部署,能够按照bin、conf、lib文件进行打包,并能够通过Jenkins按照环境一键发不到服务器上

  1. 首先通过Maven插件实现按照不同环境,生成配置文件
    为了应对环境切换,在配置文件conf.yaml中使用Maven属性,在项目打包过程制定是按照id为dev的profile进行构建,还是以id为test的profile进行构建。其中conf.yaml和profle的配置如下:
    conf.yaml:
    path=${hdfs.path}

profile的配置如下:

<profiles>
<profile>
    <id>dev</id>
    <properties>
            <active.profile>dev</active.profile>
            <!-- 业务配置信息 -->
            <hdfs.path>/dev/wh/source/tp</hdfs.path>
    </properties>
    <activation>
            <activeByDefault>true</activeByDefault>
    </activation>
</profile>
<profile>
    <id>test</id>
    <properties>
            <active.profile>dev</active.profile>
            <!-- 业务配置信息 -->
            <hdfs.path>/test/wh/source/tp</hdfs.path>
    </properties>
</profile>
</profiles>

接下来就需要让maven能够解析conf文件夹中Maven属性,这就是maven-resources-plugin要做的事情。
开启资源过滤,并指定过滤的目录。以下配置指定src/main/conf目录下所有类型的文件开启资源过滤,并将解析后的文件指定输出到target/class/conf目录下

<resources>
        <resource>
                <directory>src/main/conf/</directory>
                <filtering>true</filtering>
                <includes>
                        <include>**/*.*</include>
                </includes>
                <targetPath>conf</targetPath><!-- 最终打包的目录是target/class/conf,用户assembly插件从这个目录中读取编译好的配置文件 -->
        </resource>
</resources>

2.其次,利用maven-assembly-plugin插件,将编译好的项目分成bin、conf、lib目录。

  • maven-assembly-plugin的配置中,指定一个主类这样可以使用java -jar方式或者java -cp的方式运行该项目jar包;
  • 以jar-with-dependencies的方式,将项目依赖的jar包一并打包到一个jar中
  • 指定assembly.xml文件,主要用于编译好的文件分发到bin、conf、lib目录中
    maven-assembly-plugin插件的配置:
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.6</version>
        <executions><execution><!-- 配置执行器 -->
                <id>make-assembly</id>
                <phase>package</phase><!-- 绑定到package生命周期阶段上 -->
                <goals>
                        <goal>single</goal><!-- 只运行一次 -->
                </goals>
                <configuration>
                        <archive>
                                <manifest>
                                        <!-- 此处指定main方法入口的class -->
                                        <mainClass>com.test.HelloMaven</mainClass>
                                </manifest>
                        </archive>
                        <descriptorRefs>
                                <descriptorRef>jar-with-dependencies</descriptorRef>
                        </descriptorRefs>
                        <finalName>${project.name}</finalName>
                        <descriptor>src/main/assembly/assembly.xml</descriptor><!--配置描述文件路径-->
                </configuration>
        </execution>
        </executions>
    </plugin>

关于文件分发的assembly.xml配置:

<fileSets>
        <!-- 将src/main/bin下的文件,打包到目标目录的bin文件夹下 -->
        <fileSet>
                <directory>src/main/bin</directory>
                <outputDirectory>bin</outputDirectory>
                <fileMode>755</fileMode>
        </fileSet>
        <!-- 经过maven-resources-plugin插件生成的配置文件位于target/classes/conf/中 -->
        <fileSet>
                <directory>target/classes/conf/</directory>
                <outputDirectory>conf</outputDirectory>
                <fileMode>755</fileMode>
                <lineEnding>unix</lineEnding>
                <excludes>
                        <exclude>*.formatted</exclude>
                </excludes>
        </fileSet>
</fileSets>
<dependencySets>
        <!-- 工程单独的jar,分发到lib目录中 -->
        <dependencySet>
                <fileMode>755</fileMode>
                <outputFileNameMapping>${project.artifactId}-${project.version}.jar</outputFileNameMapping>
                <outputDirectory>/lib/</outputDirectory>
                <scope>runtime</scope>
                <includes>
                        <include>${project.groupId}:${project.artifactId}</include>
                </includes>
        </dependencySet>
        <!-- jar-with-dependencies方式,包含依赖jar的大包,放到lib目录下 -->
        <dependencySet>
                <fileMode>755</fileMode>
                <outputFileNameMapping>${project.name}-jar-with-dependencies.jar</outputFileNameMapping>
                <outputDirectory>/lib/</outputDirectory>
                <scope>runtime</scope>
        </dependencySet>
</dependencySets>

项目结构图:
Maven、Jenkins实现自动化部署

通过mvn package -Pdev命令打包后conf中的配置文件是按照dev环境生成的结果
解析后的conf.yaml
path=/dev/wh/source/tp
target目录下的结构图,红框标记的就是期待的结构目录
Maven、Jenkins实现自动化部署

3.项目按bin、conf、lib生成部署结构,剩下的事情就交给Jenkins,通过Jenkins以及其插件,将打包结果上传目标服务器
如下主要描述Jenkins配置的主要几个位置

  • Build标签下,要在package命令中指令 -P参数
    Maven、Jenkins实现自动化部署
  • 构建后的操作中,要将编译后的bin、conf、lib目录,通过插件Send build artifact over SSH插件上传到服务器目标目录中
    Maven、Jenkins实现自动化部署

转载自://blog.51cto.com/10120275/2306669

招聘 不方便扫码就复制添加关注:程序员招聘谷,微信号:jobs1024


下一篇:

AIX 7.1 jar unzip解压报错问题解决
刚开始使用jar-xvf进行解压也报错,怀疑jar解压命令有问题。便安装了zip相关包再进行解压还是报错。jar解压报错jar-xvfaix.ppc64_11gR2_database_1of2.zipinflated:database/stage/Components/oracle.sysman.console.db/11.2.0.1.0/1/DataFiles/filegroup4.jarjav
FreeBSD下zfs: failed with error 6错误如何解决?
最近一些朋友问小编 FreeBSD下zfs: failed with error 6错误如何解决?今天小编要为大家带来的是 FreeBSD下zfs: failed with error 6错误的解决方法,有需要的朋友一起去看看吧
让FreeBSD更安全(FreeBSD安全设置)
这篇文章主要介绍了让FreeBSD更安全(FreeBSD安全设置),需要的朋友可以参考下
portupgrade 中文手册(翻译)
这个portupgrade手册页是根据 FreeBSD 6.2 release 的手册页进行翻译,不当之处,恳请指正 :-) PORTUPGRADE Section: User Commands (1) FreeBSD 软件名称: portupgrade portinstall - 通过ports或package升级安装包或者安装新软件的工具软件。 命令摘要: portupgrad
Unix、Minix和Linux
Unix介绍UNIX操作系统(尤&23612;斯),是一个强大的多用户、多任务操作系统,支持多种处理器架构,按照操作系统的分类,属于分时操作系统,最早由KenThompson、DennisRitchie和DouglasMcIlroy于1969年在AT&T
Linux/Unix shell脚本监控磁盘可用空间
Linux/Unixshell脚本监控磁盘可用空间Linux下监控磁盘的空闲空间的shell脚本,对于系统管理员或DBA来说,必不可少。下面是给出的一个监控磁盘空间空间shell脚本的样本,供大家参考。1、监控磁盘的空闲空间shel...
hp-unix11.31系统下扩展文件系统(在线和不在线)
hp-unix11.31系统下扩展文件系统(在线和不在线)扩展前,首先查看目前文件系统的容量:dev/vg01/lvapp143360000135477278739017295%/oradata扩展前的容量:140000M查看对应的vg是否有空闲的...
Linux/Unix shell脚本清除归档日志文件
Linux/Unixshell脚本清除归档日志文件对于DEV以及UAT环境,有些时候,数据库需要处于归档模式,但并不需要备份数据库。因此,archive归档日志不停的增长导致磁盘空间被大量耗用。对于这种情形,可以使用一个...
Linux/Unix中如何在复制一个目录时排除其中的某个文件
Linux/Unix中如何在复制一个目录时排除其中的某个文件[[email protected]~]$mkdirtest1[[email protected]~]$mkdirtest2[[email protected]~]$cdtest1[[email protected]]$touch1234maomicp`ls...
unix对组、用户操作
unix对组、用户操作简介:本文主要介绍linux的用户、组的概念,如何创建组、用户;如何更改相应内容等涉及的文件:/etc/group、/etc/gshadow/、/etc/passwd、/etc/shadow一、组www.2cto.com1.创建...