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執行權限,執行項目中的腳本。
最後來個總結:
上面的配置,是我在生產中使用,按照如上配置,絕壁沒問題呀,感覺幫助了你,點個贊再走吧,麼麼噠