记录一次自己使用jenkins搭建自动部署

栏目: Java · 发布时间: 5年前

内容简介:针对使用appassembler-maven-plugin打包插件对项目进行打包的项目,实现使用jenkins进行自动化部署注意:

针对使用appassembler-maven-plugin打包插件对项目进行打包的项目,实现使用jenkins进行自动化部署

二 、基本环境准备

  • 搭建一个可用的jenkins

    搭建过程.......省略

    在jenkins中设置你要部署的服务器

    从主页面中进入到配置ssh服务器地址

  • 流程图

记录一次自己使用jenkins搭建自动部署
配置完毕以后,点击Test Configuration测试一下是否可以连接($\color{red}{注意:你要远程部署的服务器必须给当前jenkins所在的服务器开放互相信任}$)
复制代码
  • 在项目中配置使用打包插件appassembler-maven-plugin

<build>
        <plugins>
            <!-- 目前采用wrapper打包部署 -->
            <plugin>
                <!-- http://www.mojohaus.org/appassembler/appassembler-maven-plugin/usage-daemon-generatorconfig.html -->
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>appassembler-maven-plugin</artifactId>
                <version>2.0.0</version>
                <executions>
                    <execution>
                        <id>generate-jsw-scripts</id>
                        <phase>package</phase>
                        <goals>
                            <goal>generate-daemons</goal>
                        </goals>
                        <configuration>
                            <repositoryLayout>flat</repositoryLayout>
                            <encoding>${project.build.sourceEncoding}</encoding>
                            <!--<includeConfigurationDirectoryInClasspath>true</includeConfigurationDirectoryInClasspath>-->
                            <!-- copy the src/main/resources directory to /src -->
                            <!--为系统配置文件指定一个目录-->
                            <configurationDirectory>conf</configurationDirectory>
                            <!--源代码中对应的系统配置文件的位置-->
                            <configurationSourceDirectory>src/main/resources</configurationSourceDirectory>
                            <copyConfigurationDirectory>true</copyConfigurationDirectory>
                            <logsDirectory>logs</logsDirectory>
                            <daemons>
                                <daemon>
                                    <id>${daemon-name}</id>
                                    <mainClass>${daemon-mainClass}</mainClass>
                                    <jvmSettings>
                                        <initialMemorySize>${daemon-JAVA_Xmx}</initialMemorySize>
                                        <maxMemorySize>${daemon-JAVA_Xmx}</maxMemorySize>
                                        <extraArguments>
                                            <!-- Note : if the value is empty the plugin will throw NullPointerException-->
                                            <extraArgument>-Djava.wrapper=1 ${daemon-JAVA_OPS}</extraArgument>
                                            <extraArgument>-verbose:gc</extraArgument>
                                            <extraArgument>-XX:+PrintHeapAtGC</extraArgument>
                                            <extraArgument>-XX:+PrintGCDetails</extraArgument>
                                            <extraArgument>-XX:+PrintGCDateStamps</extraArgument>
                                            <extraArgument>-XX:+PrintGCTimeStamps</extraArgument>
                                            <extraArgument>-XX:+PrintTenuringDistribution</extraArgument>
                                            <extraArgument>-XX:+PrintGCApplicationStoppedTime</extraArgument>
                                            <extraArgument>-Xloggc:logs/gc.log</extraArgument>
                                            <extraArgument>-XX:+HeapDumpOnOutOfMemoryError</extraArgument>
                                            <extraArgument>-XX:HeapDumpPath=logs/gc.hprof</extraArgument>
                                            <extraArgument>-XX:ErrorFile=logs/java_error_%p.log</extraArgument>
                                            <!--<extraArgument>-Xbootclasspath/p:lib/alpn-boot-${alpn.boot.version}.jar</extraArgument>-->
                                        </extraArguments>
                                    </jvmSettings>
                                    <platforms>
                                        <platform>jsw</platform>
                                    </platforms>
                                    <generatorConfigurations>
                                        <generatorConfiguration>
                                            <generator>jsw</generator>
                                            <includes>
                                                <include>linux-x86-32</include>
                                                <include>linux-x86-64</include>
                                                <include>macosx-universal-64</include>
                                                <include>macosx-universal-32</include>
                                                <include>windows-x86-32</include>
                                                <include>windows-x86-64</include>
                                            </includes>
                                            <configuration>
                                                <property>
                                                    <name>configuration.directory.in.classpath.first</name>
                                                    <value>conf</value>
                                                </property>
                                                <property>
                                                    <name>set.default.REPO_DIR</name>
                                                    <value>lib</value>
                                                </property>
                                                <property>
                                                    <name>wrapper.java.command</name>
                                                    <value>%JAVA_HOME%/bin/java</value>
                                                </property>
                                                <property>
                                                    <name>wrapper.logfile</name>
                                                    <value>logs/wrapper.log</value>
                                                </property>
                                                <property>
                                                    <name>wrapper.startup.timeout</name>
                                                    <value>7200</value><!-- 2小时 -->
                                                </property>
                                                <property>
                                                    <name>wrapper.ping.timeout</name>
                                                    <value>3600</value><!-- 1小时 -->
                                                </property>
                                                <property>
                                                    <name>wrapper.ntservice.name</name>
                                                    <value>${wrapper.ntservice.name}</value>
                                                </property>
                                                <property>
                                                    <name>wrapper.ntservice.displayname</name>
                                                    <value>${wrapper.ntservice.displayname}</value>
                                                </property>
                                                <property>
                                                    <name>wrapper.ntservice.description</name>
                                                    <value>${wrapper.ntservice.description}</value>
                                                </property>
                                                <property>
                                                    <name>wrapper.console.title</name>
                                                    <value>${wrapper.ntservice.name}</value>
                                                </property>
                                                <property>
                                                    <!-- 如果pid文件已经存在则不启动程序 -->
                                                    <name>wrapper.pidfile.strict</name>
                                                    <value>TRUE</value>
                                                </property>
                                            </configuration>
                                        </generatorConfiguration>
                                    </generatorConfigurations>
                                </daemon>
                            </daemons>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build> 
   
复制代码

注意: 如果手动打包的时候,不要使用idea内置的插件(install指令),有时候会有坑

三、书写执行脚本

  • 环境准备完毕以后书写相关执行脚本

    创建一个test.sh 脚本文件,写入下面内容( 根据自己项目进行一定的修改 )
#!/bin/sh

#######变量设置
#输出间隔标识
DASH_LINE_TAG="------------"
#目标机器
TARGET_SERVER="192.168.6.225"
#目标用户
TARGET_USER=root

#jenkins的workspace目录 
JENKINS_WORKSPACE="/${TARGET_USER}/.jenkins/workspace"
#打包出来的目录地址  详细的修改根据自己项目的最终打包出来的结构做一定调整  其中data-server-test表示的你在jenkins中构建项目的名称,后面才是项目打包的路径
JENKINS_SOURCE_TARGET_HOME="${JENKINS_WORKSPACE}/data-server-test/data-server/target/generated-resources/appassembler/jsw/data-server"

#修改workspace对应项目conf下的wrapper.conf jdk路径
sed -i "s\\%JAVA_HOME%/bin/java\\/soft/dorcst/environment/jdk8/bin/java\\g" ${JENKINS_SOURCE_TARGET_HOME}/conf/wrapper.conf

#app所在路径
APP_HOME="/soft/data-server"
#备份app的目录
APP_BACKUP="/soft/Backup/"
#备份文件所在目录
CONF_BAKUP_HOME="/soft/perioperative-jenkins/data-server/conf_bak"
#执行文件服务名
SERVICE_NAME=data-server


########远程执行流程

#停止服务
echo "${DASH_LINE_TAG}停止服务: ${APP_HOME}/bin/${SERVICE_NAME} stop"
ssh ${TARGET_USER}@${TARGET_SERVER} "${APP_HOME}/bin/${SERVICE_NAME} stop"

#备份文件
echo "${DASH_LINE_TAG}备份文件到: ${APP_BACKUP}"
ssh ${TARGET_USER}@${TARGET_SERVER} "rm -rf ${APP_BACKUP}data-server"
ssh ${TARGET_USER}@${TARGET_SERVER} "cp -rf ${APP_HOME}/ ${APP_BACKUP}"

#删除原文件
echo "${DASH_LINE_TAG}删除原文件:${APP_HOME}"
ssh ${TARGET_USER}@${TARGET_SERVER} "rm -rf ${APP_HOME}/*"

#复制新文件到目录
echo "${DASH_LINE_TAG}复制新文件到目录:${JENKINS_SOURCE_TARGET_HOME} ---> ${TARGET_USER}@${TARGET_SERVER}:${APP_HOME}"
scp -r ${JENKINS_SOURCE_TARGET_HOME}/* ${TARGET_USER}@${TARGET_SERVER}:${APP_HOME}

#复制备份的配置文件到目录  这是你设置的配置文件地址,配置文件会根据部署不同机器使用不同的配置文件,一开始设置好,自动打包的时候自动替换,就不用每次部署都手动修改了 
echo "${DASH_LINE_TAG}复制备份的配置文件到目录: ${CONF_BAKUP_HOME}/conf"
ssh ${TARGET_USER}@${TARGET_SERVER} "cp -rf ${CONF_BAKUP_HOME}/*  ${APP_HOME}/conf/"

#更改执行文件权限
echo "${DASH_LINE_TAG}更改执行文件权限:${APP_HOME}/bin/"
ssh ${TARGET_USER}@${TARGET_SERVER} "chmod +x ${APP_HOME}/bin/*"

#启动服务
echo "${DASH_LINE_TAG}启动服务: ${APP_HOME}/bin/${SERVICE_NAME} start"
ssh ${TARGET_USER}@${TARGET_SERVER} "${APP_HOME}/bin/${SERVICE_NAME} start"

复制代码

以上所述就是小编给大家介绍的《记录一次自己使用jenkins搭建自动部署》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

重新定义团队:谷歌如何工作

重新定义团队:谷歌如何工作

拉兹洛·博克 / 宋伟 / 中信出版集团 / 2015-12-1 / CNY 56.00

谷歌首席人才官拉斯洛•博克权威力作,谷歌公开认可的谷歌高层作品,首度揭秘谷歌颠覆工业时代模式的人才和团队管理的核心法则,《纽约时报》畅销榜第一名,Business Insider 2015最佳商业书籍,谷歌的创造力就在于此! 编辑推荐! 1、 谷歌人才官首次公开谷歌人才和团队管理的核心秘籍 在谷歌执掌人事多年的拉斯洛•博克是人才和团队管理的顶级专家。他加入谷歌后,谷歌的员工数从六......一起来看看 《重新定义团队:谷歌如何工作》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具