docker+jenkins+maven assembly 部署springboot项目

说明:通过jenkins一键上传打包启动服务。

项目目录展示:

 bin:项目启动/停止shell脚本

config:项目配置文件

lib:项目打成的jar包存放位置

logs:项目运行日志存放位置,可灵活使用log4j

通过maven assembly打成 name.tar.gz包,解压之后后进入到bin目录下运行项目启动脚本即可启动项目。

配合docker+jenkins一起使用可一键打包。

一、构建springboot+maven项目

二、添加pom.xml依赖

<?xml version="1.0" encoding="UTF-8"?>

<project 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/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.dfssi.zhaocheng</groupId>
  <artifactId>jenkinsAssembly</artifactId>
  <version>1.0-SNAPSHOT</version>

  <name>jenkinsAssembly</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.1.RELEASE</version>
    </parent>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

  <!--springboot基本依赖-->
      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
      </dependency>

      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
      </dependency>

      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-aop</artifactId>
      </dependency>
  </dependencies>
<!--maven assembly打包插件-->
    <build>
        <finalName>jenkinsAssembly</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.1.0</version>
                <configuration>
                    <encoding>UTF-8</encoding>
                    <appendAssemblyId>false</appendAssemblyId>
                    <descriptors>
                        <descriptor>src/main/resources/assembly.xml</descriptor>
                    </descriptors>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <!--<phase>install</phase>-->
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

        </plugins>
    </build>

</project>
View Code

  三、在resources目录下添加assembly.xml插件

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
    <id>bin</id>
    <formats>
        <format>tar.gz</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <!--<dependencySets>-->
        <!--<dependencySet>-->
            <!--<useProjectArtifact>false</useProjectArtifact>-->
            <!--<outputDirectory>/${artifactId}/lib</outputDirectory>-->
            <!--<unpack>false</unpack>-->
        <!--</dependencySet>-->
    <!--</dependencySets>-->
    <fileSets>
        <fileSet>
            <directory>${project.basedir}/bin</directory>
            <outputDirectory>/${artifactId}/bin</outputDirectory>
            <lineEnding>unix</lineEnding>
            <fileMode>744</fileMode>
            <includes>
                <include>*.sh</include>
            </includes>
        </fileSet>

        <fileSet>
            <directory>${project.basedir}/config</directory>
            <outputDirectory>/${artifactId}/config</outputDirectory>
            <lineEnding>unix</lineEnding>
            <fileMode>644</fileMode>
            <includes>
                <include>*.*</include>
            </includes>
        </fileSet>
        <fileSet>
            <directory>${project.basedir}/logs</directory>
            <outputDirectory>/${artifactId}/logs</outputDirectory>
            <lineEnding>unix</lineEnding>
        </fileSet>
        <!-- lib下的jar包不打入tar包里,插件这样打包会报错 -->
       <fileSet>
             <directory>${project.basedir}/target</directory>
             <outputDirectory>/${artifactId}/lib</outputDirectory>
             <includes>
                 <include>*.jar</include>
             </includes>
         </fileSet>
    </fileSets>
</assembly>
View Code

四、添加服务启动shell脚本

#!/bin/bash
#服务名称
SERVER_NAME=jenkinsAssembly
# 源jar路径,mvn打包完成之后,target目录下的jar包名称,也可选择成为war包,war包可移动到Tomcat的webapps目录下运行,这里使用jar包,用java -jar 命令执行  
JAR_NAME=jenkinsAssembly-1.0-SNAPSHOT
# 源jar路径  
#/usr/local/jenkins_home/workspace--->jenkins 工作目录
#demo 项目目录
#target 打包生成jar包的目录
JAR_PATH=/var/jenkins_home/workspace/jenkinsAssembly/target
# 打包完成之后,把jar包移动到运行jar包的目录--->work_daemon,work_daemon这个目录需要自己提前创建
JAR_WORK_PATH=/var/jenkins_home/workspace/jenkinsAssembly/target

echo "查询进程id-->$SERVER_NAME"
PID=`ps -ef | grep "$SERVER_NAME" | awk '{print $2}'`
echo "得到进程ID:$PID"
echo "结束进程"
for id in $PID
do
    kill -9 $id  
    echo "killed $id"  
done
echo "结束进程完成"

cd $JAR_PATH
#解压jenkinsAssembly.tar.gz
echo "开始 解压$SERVER_NAME"
tar zxvf $SERVER_NAME.tar.gz
echo "完成 解压$SERVER_NAME"

echo "进入$SERVER_NAME/bin目录"
cd $SERVER_NAME/bin

BUILD_ID=dontKillMe nohup sh restartup.sh
View Code

五、服务器安装docker、通过docker下载jenkins镜像、运行docker容器在这里省略说明

六、jenkins新建maven工程,添加git路径,BUILD里面添加 pom.xml  clean install即可构建项目到jenkins /var/jenkins_home/workspace/jenkinsAssembly/target目录下面

七、jenkins配置里面添加构建之后运行的脚本

#!/bin/bash
#服务名称
SERVER_NAME=jenkinsAssembly
# 源jar路径,mvn打包完成之后,target目录下的jar包名称,也可选择成为war包,war包可移动到Tomcat的webapps目录下运行,这里使用jar包,用java -jar 命令执行  
JAR_NAME=jenkinsAssembly-1.0-SNAPSHOT
# 源jar路径  
#/usr/local/jenkins_home/workspace--->jenkins 工作目录
#demo 项目目录
#target 打包生成jar包的目录
JAR_PATH=/var/jenkins_home/workspace/jenkinsAssembly/target
# 打包完成之后,把jar包移动到运行jar包的目录--->work_daemon,work_daemon这个目录需要自己提前创建
JAR_WORK_PATH=/var/jenkins_home/workspace/jenkinsAssembly/target

echo "查询进程id-->$SERVER_NAME"
PID=`ps -ef | grep "$SERVER_NAME" | awk '{print $2}'`
echo "得到进程ID:$PID"
echo "结束进程"
for id in $PID
do
    kill -9 $id  
    echo "killed $id"  
done
echo "结束进程完成"

cd $JAR_PATH
#解压jenkinsAssembly.tar.gz
echo "开始 解压$SERVER_NAME"
tar zxvf $SERVER_NAME.tar.gz
echo "完成 解压$SERVER_NAME"

echo "进入$SERVER_NAME/bin目录"
cd $SERVER_NAME/bin

#后台运行
BUILD_ID=dontKillMe nohup sh restartup.sh
View Code

八、jenkins立即构建,即可构建成功。注意项目在jenkins里面运行,端口需要先映射出来,或者通过挂载的方式

docker run -p 8080:8080 -p 50000:50000 -v jenkins_data:/var/jenkins_home jenkinsci/blueocean 
## -p 后面新增需要映射出去的端口
需先删除jenkins容器,修改启动命令后再启动

猜你喜欢

转载自www.cnblogs.com/zhaochengzc/p/12072640.html