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 '
}
}
}
}
保存流水線并構建

測驗一下

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/287343.html
標籤:其他
