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 '
}
}
}
}
保存流水线并构建
测试一下
注意:本文归作者所有,未经作者允许,不得转载