分分钟让你学会Jenkins自动化部署SpringBoot项目

1安装jenkins,在jenkins上安装jdk、git、maven就不说了,这些网上一大把。

    jenkins免密登录到其他服务器可以参考我这一篇:jenkins免密登录到其他服务器

2、看下项目中的配置,按照我的目录结构创建这2个文件和文件夹

assembly.xml文件中的内容,是为了方便打包成zip格式的,而zip中包含了jar、bin、lib,如下:

<assembly xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/assembly-1.0.0.xsd">
	<id>bin</id>
	<formats>
		<format>zip</format>
	</formats>
	<includeBaseDirectory>true</includeBaseDirectory>
	<fileSets>
		<fileSet>
			<directory>${project.basedir}</directory>
			<outputDirectory>./</outputDirectory>
			<includes>
				<include>README*</include>
				<include>LICENSE*</include>
				<include>NOTICE*</include>
			</includes>
		</fileSet>
		<fileSet>
			<directory>target/config</directory>
			<outputDirectory>config</outputDirectory>
			<includes>
				<include>**/*</include>
				<include>*.xml</include>
				<include>*.properties</include>
				<include>*.yml</include>
			</includes>
		</fileSet>
		<fileSet>
			<directory>target/classes</directory>
			<outputDirectory>classes</outputDirectory>
		</fileSet>
		<fileSet>
			<directory>target/lib</directory>
			<outputDirectory>lib</outputDirectory>
		</fileSet>
		<fileSet>
			<directory>bin</directory>
			<outputDirectory>bin</outputDirectory>
			<includes>
				<include>startup.*</include>
			</includes>
			<filtered>true</filtered>
		</fileSet>
		<fileSet>
			<directory>target</directory>
			<outputDirectory>./</outputDirectory>
			<includes>
				<include>*.jar</include>
			</includes>
			<excludes>
				<exclude>*sources.jar</exclude>
			</excludes>
		</fileSet>
	</fileSets>
</assembly>

 startup.sh是一个启动脚本,里面的一些jvm参数可以根据自身项目进行修改,内容如下:

basepath=$(cd `dirname $0`; pwd)
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8888  -Duser.timezone=Asia/Shanghai -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -server -Xmx${jvm.Xmx} -Xms${jvm.Xms} -Xmn${jvm.Xmn} -Xss${jvm.Xss} -XX:MetaspaceSize=128m -XX:+DisableExplicitGC -XX:+UseParNewGC -XX:ParallelGCThreads=4 -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=75 -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -Xloggc:/logs/jvm/gc.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=32 -XX:GCLogFileSize=64m -XX:ErrorFile=/logs/jvm/youxuan-web-error_%p.log -jar ../youxuan-web.jar --spring.profiles.active=${profiles.active}

对于里面一些应用,如${jvm.Xms}等,是根据如下来引用的,把下面的配置放在web中的xml下,至于启用那个环境的,根据jenkins中maven启动命令来

<profiles>
        <profile>
            <id>prod</id>
            <properties>
                <profiles.active>prod</profiles.active>
                <jvm.Xmx>2560m</jvm.Xmx>
                <jvm.Xms>2560m</jvm.Xms>
                <jvm.Xmn>1024m</jvm.Xmn>
                <jvm.Xss>256k</jvm.Xss>
                <jvm.permsize>128m</jvm.permsize>
                <log.home.dir>${user.dir}/logs</log.home.dir>
                <libScope>compile</libScope>
            </properties>
        </profile>
        <profile>
            <id>test</id>
            <properties>
                <profiles.active>test</profiles.active>
                <jvm.Xmx>1024m</jvm.Xmx>
                <jvm.Xms>1024m</jvm.Xms>
                <jvm.Xmn>512m</jvm.Xmn>
                <jvm.Xss>256k</jvm.Xss>
                <jvm.permsize>128m</jvm.permsize>
                <log.home.dir>${user.dir}/logs</log.home.dir>
                <libScope>compile</libScope>
            </properties>
        </profile>
        <profile>
            <id>dev</id>
            <properties>
                <profiles.active>dev</profiles.active>
                <jvm.Xmx>512m</jvm.Xmx>
                <jvm.Xms>512m</jvm.Xms>
                <jvm.Xmn>192m</jvm.Xmn>
                <jvm.Xss>256k</jvm.Xss>
                <jvm.permsize>64m</jvm.permsize>
                <log.home.dir>${user.dir}/logs</log.home.dir>
                <libScope>compile</libScope>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
    </profiles>

下面的配置也必不可少,同样放在web中的xml下,跟上面那个配置放在一个位置

<build>
        <!--参数替换 -->
        <finalName>youxuan-web</finalName>
        <!--打包成jar!-->
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-deploy-plugin</artifactId>
                <version>2.8.2</version>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix>
                            <!--替换自己的启动类 -->
                            <mainClass>com.xxx.WebStarter</mainClass>
                            <useUniqueVersions>false</useUniqueVersions>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.7.0</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>3.0.1</version>
                <executions>
                    <execution>
                        <id>attach-sources</id>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <!--将依赖输出到lib包 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>
                                ${deploy.directory}/lib
                            </outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <!--把指定文件压缩成一个压缩包-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <descriptors>
                        <descriptor>assembly.xml</descriptor>
                    </descriptors>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                        <configuration>
                            <finalName>${project.artifactId}</finalName>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

3、创建一个流水线类型的项目,按照参数化构建的过程添加参数:

 git地址:

maven构建命令 ,其中其他命令就不介绍了,介绍下 -P test

-P test 代表引用刚才pom.xml中<profiles.active>test</profiles.active>

这个配置,相当于指定了环境为test

 shell脚本,真正的打包命令

pid=`ssh ${server} /opt/jdk1.8.0_161/bin/jps | grep ${project} | awk '{print $1}'`
ssh ${server} kill -9 $pid || echo "no java process"

rsync -avz --delete ${WORKSPACE}/${project}-server/target/${project}-server-bin.zip  ${server}:/xxx/service

ssh ${server} << EOF
rm -rf /xxx/service/${project}-server/
unzip /xxx/service/${project}-server-bin.zip  -d /qinwell/service
cd /qinwell/service/${project}-server
chmod 664 *.jar
cd /qinwell/service/${project}-server/bin/
chmod +x startup.sh
nohup ./startup.sh >/dev/null 2>&1 &
EOF

介绍下,上面主要干嘛的,先杀死原来的进程,远程数据同步,删除之前的项目,解压,赋予.jar执行权限,执行项目中的脚本。

最后来个总结:

上面的配置,是我在生产中使用,按照如上配置,绝壁没问题呀,感觉帮助了你,点个赞再走吧,么么哒

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术武器库

一句真诚的谢谢,胜过千言万语

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值