支付宝红包
京东盲盒抽奖
幸运转盘
秒杀
自营热卖
支付宝红包

使用Jenkins和dockerfile-maven-plugin部署项目

太冷的回忆 1年前   阅读数 253 0

Jenkins节点:
在这里插入图片描述

博主的项目目录结构
在这里插入图片描述

在springboot子模块的pom文件添加plugin(我这里是在dockerfile-maven-plugin的pom中添加的)

<build>
    <finalName>${project.artifactId}</finalName>
    <plugins>
        <plugin>
            <groupId>com.spotify</groupId>
            <artifactId>dockerfile-maven-plugin</artifactId>
            <version>1.4.13</version>
            <configuration>
                <repository>${project.build.finalName}</repository>
                <tag>${project.version}</tag>
                <buildArgs>
                    <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
                </buildArgs>
            </configuration>
        </plugin>
    </plugins>
</build>

如果父模块中没有引入mvn plugin的话这里还需要引入(我这里父级目录以及包含了这个plugin)

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <version>${frame-version}</version>
    <executions>
        <execution>
            <goals>
                <goal>repackage</goal>
            </goals>
        </execution>
    </executions>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.1</version>
    <configuration>
        <source>1.8</source>
        <target>1.8</target>
    </configuration>
</plugin>

项目子模块根目录下创建dockerfile
在这里插入图片描述

FROM openjdk:8-alpine3.9
MAINTAINER my dockerfile-maven-plugin "chris"
#修改源
RUN echo "http://mirrors.aliyun.com/alpine/latest-stable/main/" > /etc/apk/repositories && \
    echo "http://mirrors.aliyun.com/alpine/latest-stable/community/" >> /etc/apk/repositories
#安装软件
RUN apk --update add curl bash tzdata && \
    rm -rf /var/cache/apk/*
#修改时区
ENV TZ Asia/Shanghai
#spring项目暴露的端口
EXPOSE 8091
#传入一个参数JAR_FILE
ARG JAR_FILE
#把本地文件JAR_FILE复制到docker中改名为app.jar,上面的pom文件已经传入了<JAR_FILE>
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

先在本地mvn package一下看看能不能打包

把项目推送到git
进入Jenkins配置流水线

在这里插入图片描述

pipeline {
     
	//执行脚本的agent服务器名
    agent {
     
        label 'agent-131'
    }
    stages {
     
        stage('环境验证') {
     
            steps {
     
                sh label: '',
                script: '''java -version docker -v git version mvn -v '''
            }
        }
        stage('拉取代码') {
     
            steps {
     
            	//可以参考https://blog.csdn.net/weixin_41029286/article/details/117607238拉取代码
                echo '拉取代码'
            }
        }
        stage('mvn打包') {
     
            steps {
     
                //我这里是多级目录的项目,先cd到子模块
                sh label: '', script: '''cd chris-framework-devops/dockerfile-maven-plugin/ pwd mvn clean package'''
            }
        }
        stage('删除容器') {
     
            steps {
     
				sh label: '', script: '''echo \'检查容器是否存在\' containerid=`docker ps -a | grep -w dockerfile-maven-plugin | awk \'{print $1}\'` if [ "$containerid" != "" ];then echo ‘容器存在,停止容器’ docker stop $containerid echo ‘删除容器’ docker rm $containerid fi'''
            }
        }
        stage('删除镜像') {
     
            steps {
     
                sh label: '', script: '''echo \'检查镜像是否存在\' imageid=`docker images | grep dockerfile-maven-plugin | awk \'{print $3}\'` if [ "$imageid" != "" ];then echo \'删除镜像\' docker rmi -f $imageid fi'''
            }
        }
        stage('构建镜像') {
     
            steps {
     
            	//cd到子模块,子模块中要引入dockerfile-maven-plugin不然会报错No plugin found for prefix 'dockerfile' in the current project
                sh label: '', script: '''cd chris-framework-devops/dockerfile-maven-plugin/ pwd mvn dockerfile:build'''
            }
        }
       	stage('启动容器') {
     
            steps {
     
                sh label: '', script: 'docker run -itd --name=dockerfile-maven-plugin -p 8091:8091 dockerfile-maven-plugin:1.0-SNAPSHOT '
            }
        }
    }
}

保存流水线并构建

在这里插入图片描述
测试一下
在这里插入图片描述


注意:本文归作者所有,未经作者允许,不得转载

全部评论: 0

    我有话说: